CN1848774A - 一种远程调用通信组件的***及方法 - Google Patents

一种远程调用通信组件的***及方法 Download PDF

Info

Publication number
CN1848774A
CN1848774A CN 200510063497 CN200510063497A CN1848774A CN 1848774 A CN1848774 A CN 1848774A CN 200510063497 CN200510063497 CN 200510063497 CN 200510063497 A CN200510063497 A CN 200510063497A CN 1848774 A CN1848774 A CN 1848774A
Authority
CN
China
Prior art keywords
api interface
test
parameter
interface name
script
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN 200510063497
Other languages
English (en)
Other versions
CN100389572C (zh
Inventor
李金喜
江火根
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CNB2005100634972A priority Critical patent/CN100389572C/zh
Publication of CN1848774A publication Critical patent/CN1848774A/zh
Application granted granted Critical
Publication of CN100389572C publication Critical patent/CN100389572C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种远程调用通信组件的***,该***的测试端包括客户端测试模块,用于通过脚本语言和编解码规则对所要调用通信组件的API接口名和参数进行描述形成测试脚本,将测试脚本生成测试消息发送给被测端,以及接收从被测端返回的调用结果;被测端进一步包括服务器端测试模块,用于解析测试消息得到API接口名和参数,并通过根据所述API接口名和参数调用对应的API接口函数实现对通信组件的调用,以及向测试端发送调用结果。本发明还公开了一种远程调用通信组件的方法。本发明所提供的***和方法具有简单易实现的优点,能够降低测试***的开发成本,并且在修改测试数据的时候不需要重新编译,具有良好的可重用性。

Description

一种远程调用通信组件的***及方法
技术领域
本发明涉及通信组件的测试领域,特别是一种远程调用通信组件的***及方法。
背景技术
通信组件作为通信网络的平台软件,在开放过程中提供丰富的应用程序接口(API),以方便用户在使用该通信组件时自由地扩展、适配、配置以及进行功能可裁剪等。由于通信组件在通信网络中的应用非常灵活,在测试通信组件的过程中需要模拟真实的网络环境,用户在测试端远程调用被测端的通信组件,使其模拟对应的功能。并且由于在测试过程中,被测试对象通信组件对外唯一可见的就是API接口,所以对通信组件的调用相当于对API接口的调用,即通过调用API接口实现对通信组件的调用。在测试过程中,测试端和被测试对象所在的被测端形成客户端/服务器端(Client/Server)架构,该架构中的客户端(Client)为测试端,服务器端(Server)为被测端。
目前,微软(Microsoft)公司提供了一套标准的远程过程调用(RPC)调用库(library)来实现从客户端远程调用服务器端通信组件的API接口。Microsoft RPC利用接口定义语言(IDL)规则封装API接口,设计桩(Stub)函数,并利用MIDL编译器进行编译产生客户端Stub和服务器端Stub,而且还将客户端Stub与测试代码进行联编、服务器端Stub与被测组件进行联编。该RPC调用架构如图1所示,图中左侧为Client端,右侧为Server端,所述Client端包括客户端应用层(application)、客户端实时桩(Client Stub)、客户端运行库(Client Run-Time Library)、客户端传输部分(Transport),所述Server端包括服务器端应用层(application)、服务器端实时桩(ServerStub)、服务器端运行库(Server Run-Time Library)、服务器端传输部分(Transport)。在上述Microsoft RPC调用架构中,RPC的调用过程及各部分的作用如下:
步骤101至步骤104,客户端应用层直接调用客户端Stub。客户端Stub从客户端地址空间获得过程参数并对远程过程参数进行必要的字节转换,例如将参数从网络序转换成字节序。调用客户端Run-Time Library库函数,并通过底层transport向服务器端发送调用请求和过程参数。
步骤105至步骤107,服务器端的Run-Time Library从底层传输部分接收请求消息,并调用Stub的相应过程,其中过程参数保存在网络缓冲区中。服务器端Stub从网络缓冲区读取、解析参数,并将数据从字节序转换成网络序。
此后,服务器端根据Stub提供的过程参数调用被测的远程过程,调用完成之后,产生返回值和输出参数。
步骤108至步骤110,远程过程将返回值和输出参数传送给服务器端Stub。Stub将返回值和输出参数转换为字节序,并返回给服务器端的Run-Time Library。服务器端的Run-Time Library通过底层传输层将返回值和输出参数传送给客户端。
步骤112至步骤114,客户端的Run-Time Library从底层传输层接收到返回值和输出参数后,将返回值和输出参数传给客户端Stub。客户端Stub对返回值和输出参数转换字节序后,将输出参数写入数据缓冲区,并将返回值传递给应用层,应用层进行数据处理。
在使用Microsoft RPC远程调用API接口时,需要利用IDL规则对通信组件的API接口进行封装,以及利用MIDL编译器编译产生客户端Stub和服务器端Stub,还要将客户端Stub与测试代码进行联编、服务器端Stub与被测组件进行联编,可以看出整个过程非常复杂,构造测试***的工作量很大。另外,当远程过程参数很复杂时,用C语言构造测试数据非常困难,而且修改测试数据需要重新全部编译,可见Microsoft RPC方法可重用性较差。
发明内容
有鉴于此,本发明的目的在于提供一种简单、方便的远程调用通信组件的***和方法。
根据上述目的,本发明提供了一种实现远程调用通信组件的***,该***包括测试端和被测端,所述被测端包括被测对象通信组件,所述测试端包括客户端测试模块,用于通过脚本语言和编解码规则对所要调用通信组件的API接口名和参数进行描述形成测试脚本,根据编解码规则将测试脚本生成测试消息发送给被测端,以及接收从被测端的服务器端测试模块返回的调用结果;所述被测端进一步包括服务器端测试模块,用于解析所述测试消息得到API接口名和参数,并通过根据所述API接口名和参数调用与所述API接口名对应的API接口函数实现对通信组件的调用,以及向测试端的客户端测试模块发送调用结果。
所述脚本语言为树表结合标示语言TTCN、工具命令语言TCL或脚本描述语言Python。
所述测试端的客户端测试模块和被测端的服务器端测试模块之间通过TCP/IP协议建立通信连接。
所述脚本语言为TTCN,所述客户端测试模块进一步包括TTCN模块和TTCN适配器;其中,所述TTCN模块用于通过TTCN和编解码规则对所要调用通信组件的API接口名和参数进行描述形成测试脚本,以及将所述测试脚本传输给TTCN适配器;所述TTCN适配器用于根据编解码规则将所述测试脚本生成测试消息发送给被测端,以及接收从被测端返回的调用结果。
所述编解码规则为抽象符号描述语言ASN.1编解码规则。
所述服务器端测试模块进一步包括消息解释器和API映射模块;其中,所述消息解释器用于从被测端接收的数据中解析出测试消息并传递给API映射模块,以及向测试端的客户端测试模块发送调用结果;所述API映射模块用于解析所述测试消息得到API接口名和参数,以及通过根据所述API接口名和参数调用与所述API接口名对应的API接口函数实现对通信组件的调用。
所述API映射模块进一步包括函数注册表,用于保存API接口名及其对应的API接口函数地址;所述API映射模块进一步用于根据所述函数注册表获取与所述API接口名对应的API接口函数地址,以及通过将所述参数映射到所述API接口函数地址指示的内存空间调用所述API接口函数。
所述API映射模块进一步包括数据缓冲区,用于存放所述参数。
本发明还提供了一种远程调用通信组件的方法,该方法包括以下步骤:
A.测试端通过脚本语言和编解码规则描述所要调用通信组件的API接口名和参数形成测试脚本,并根据编解码规则将测试脚本生成测试消息发送给被测端;
B.被测端解析所述测试消息,得到所述API接口名和参数;
C.被测端通过根据所述API接口名和参数调用与所述API接口名对应的API接口函数实现对通信组件的调用,并向测试端发送调用结果。
步骤A中所述脚本语言为TTCN、TCL或Python;和/或所述编解码规则为ASN.1编解码规则。
预先在被测端保存API接口名与API接口函数地址的对应关系;步骤C中,所述被测端根据所述API接口名和参数调用与所述API接口名对应的API接口函数的步骤包括:根据所保存的对应关系获取与所述API接口名对应的API接口函数地址;通过将所述参数映射到所述API接口函数地址指示的内存空间中调用所述API接口函数。
步骤C中所述向测试端发送调用结果的步骤包括:向测试端发送调用成功或失败的消息;和/或在调用成功且完成后,向测试端发送通信组件的返回值,并在存在输出参数的情况下向测试端发送所述输出参数。
从上述方案中可以看出,由于本发明使用了ASN.1规则之类的编解码规则和TTCN、TCL、Python等脚本语言对待调用通信组件的API接口名和参数进行描述,形成测试脚本,并利用ASN.1编解码规则将测试脚本生成测试消息,然后发送给被测端,在被测端解析测试消息得到API接口名和参数,调用对应的API接口函数,从而实现对通信组件的调用,本发明不需要对API接口设计桩函数,因此本发明所提供的方法和***具有简单易实现的优点,能够降低组建通信组件测试***的开发成本,以及降低修改测试数据时的工作量,大大提高了测试数据的自动化程度和复杂测试数据构造的便利性。并且本发明在修改测试数据的时候不需要重新编译,具有良好的可重用性。
附图说明
图1为现有技术中RPC方案的***以及调用过程示意图;
图2为本发明远程调用通信组件的***示意图;
图3为测试端和被测端交互原语流程示意图;
图4为被测端API映射模块的处理流程示意图;
图5为解析和保存参数的流程示意图;
图6为API接口函数地址检索的流程示意图;
图7为本发明的流程示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,以下举实施例对本发明进一步详细说明。
与Microsoft的RPC方案不同,本发明在测试端通过脚本语言和编解码规则直接根据API接口名和参数构造测试消息,在被测端解析出测试消息中的API接口名和参数,通过将参数映射到对应的API接口函数运行的内存空间中,直接调用对应的API接口函数,从而实现对通信组件的调用,并且不需要对API接口进行封装,降低了测试结构设计的工作量。
本发明采用的编解码规则为抽象符号描述语言(ASN.1,Abstract SyntaxNotation One)编解码规则,所采用的脚本语言如:树表结合的标示语言(TTCN,Tree and Tabular Combined Notation)、工具命令语言(TCL,ToolCommand language)或者脚本描述语言(Python)等,下面以TTCN为例说明本发明的具体实施方法。
如图2所示的是本发明测试***的原理结构图。图中测试端即客户端包括客户端测试模块,被测端即服务器端包括服务器端测试模块和被测实现(IUT),所述IUT即为被测通信组件。
其中客户端测试模块利用TTCN和ASN.1规则对所要调用通信组件的API接口名和参数进行描述,形成测试脚本,然后根据ASN.1编解码规则将测试脚本生成二进制数据流格式的测试消息,并发送给服务器端的CComp模块;客户端测试模块还将被测端CComp模块发送过来的返回值和输出参数转换字节序,然后将转换后的返回值传递给应用层、将转换后的输出参数写入测试端的数据缓冲区。
客户端测试模块进一步可分为TTCN模块和TTCN适配器,其中TTCN模块利用TTCN和ASN.1规则对所要调用通信组件的API接口名和参数进行描述,形成测试脚本,并将测试脚本传送给TTCN适配器;TTCN适配器根据ASN.1编解码规则将测试脚本生成测试消息,并通过TCP/IP协议发送给服务器端的CComp模块,TTCN适配器还能将被测端CComp模块发送过来的返回值和输出参数转换字节序,然后将转换后的返回值传递给应用层、将转换后的输出参数写入测试端的数据缓冲区。
图2中被测端的服务器端测试模块与客户端TTCN适配器建立TCP/IP协议的底层通信连接,并解析从底层通信连接接收到的网络数据,从中解析得到测试消息,然后将测试消息进行消息解码,解析出API接口名和具体参数信息,并通过将参数映射到与API接口名对应的API接口函数运行的内存空间中,调用该API接口函数,从而实现对通信组件的调用。
服务器端测试模块进一步可分为消息解释器(CComponent,简称CComp模块)和API映射模块。其中CComp模块与客户端TTCN适配器建立TCP/IP协议的底层通信连接,并解析从底层通信连接接收到的网络数据,从中解析得到测试消息,并将测试消息传送给API映射模块;API映射模块将接收到的测试消息进行消息解码,解析出API接口名和具体参数信息,并通过将参数映射到与API接口名对应的API接口函数运行的内存空间中,调用对应的API接口函数,从而实现对通信组件的调用。
下面分别说明图2中各模块的实现方法。
图2中的客户端TTCN模块利用ASN.1以及TTCN规则对API接口名和参数进行描述,形成测试脚本。以下给出进行描述所用的各种数据类型的示例,其中主要涉及到ASN.1和TTCN的定义,由于ASN.1和TTCN的定义为现有公知技术,这里只对其作简单说明。
类型名称 编码类型   约束条件 扩展的编解码函数
  B_1   二进制字符串(BITSTRING)   [1]
  O_1   16进制字符串(OCTETSTRING)   [1]
  O_4   16进制字符串(OCTETSTRING)   [4]
  O_N   16进制字符串(OCTETSTRING)
  I_B1   整型(INTEGER)   BITS(1)
  I_1   整型(INTEGER)   BITS(8)
  I_4   整型(INTEGER)   BITS(32)
  I_N   整型(INTEGER)
  IA5Name   可见字符串(IA5String)   TLV(0,0,8,0)
  O_Data   八进制字符串(OCTETSTRING)   TLV(0,0,8,0)
  Load   可见字符串(IA5String)   TLV(1,8,8,0)
  parFunc   自定义类型(SEQUENCE OF OnePar)
  ia5Array   可见字符串类型(SEQUENCE OF IA5String)
  octArray   16进制字符串类型(SEQUENCE OF OCTET STRING)
表1简单数据结构定义
表1给出了TTCN模块中用到的数据类型定义的示例,表1中第一列为各个数据类型的名称;第二列是对应的编码类型;第三列为约束条件,用于限制变量占用的字节数,该项的数字表示变量占用的字节数;第四列是扩展的ASN.1编解码函数,其中BITS(n)用于限制变量占用的长度为n个bit,TLV表示如何来编码或解码该结构,包含4个参数Tag、TagLen、LenLength、offset,分别为该结构的标识符、该标识符占用的长度、该结构长度值所占用的长度、偏移量,例如TLV(0,0,8,0)表示在编解码该结构时没有Tag标识符,且该结构的长度值占用8位,即1个字节。
在确定数据类型之后即可根据表1的各种数据类型构造参数结构,具体的参数结构如表2、表3和表4所示。
表2给出的是自定义OnePar类型参数的说明,该类型包括:用于声明参数长度的ParaSize,为一个字节长度;用于声明参数类型的ParaPtrL,为一个字节长度,所述参数类型是指参数是指针类型还是非指针类型;用于存放实际参数值的ParData,为可变长度。
  类型名称 控制观察点(PCO)   扩展的编解码函数
  OnePar
  Field Name(If has) 域(Field)   属性
  SEQUENCE{
  parSize 0_1   DEFAULT’04’0
  parPtrL 0_1   DEFAULT’00’0
  parData PDU   TLV(0,0,16,0)
  }
                     表2参数OnePar结构说明
  类型名称   控制观察点   扩展的编解码函数
  PtrType
  Field Name(If has)   域   属性
  SEQUENCE{
  ptrLvl   0_1   DEFAULT’01’0
  ptrTag   0_N   DEFAULTGetPtrTag(’01’0)
  ptrDat   PDU
  }
表3指针类型参数说明
表3给出的是指针类型参数的说明,该类型包括:用于声明指针级别的ptrLvl,为一个字节长度,所述指针级别是指该指针是单级指针还是多重指针;用于声明指针标示的ptrTag,为一个字节长度;用于存放实际指针数据的ptrData,为可变长度。
表4给出的是调用API接口的结构定义,该结构包括用于声明底层通信通道标识符的h_Comp,它为4个字节长度,h_Comp取0时表示通过函数注册表调用内置函数;所要调用的API接口名apiName,apiName是可见字符串类型,为可变长度,apiName被用来从函数注册表中搜寻实际调用的API接口函数地址;用于声明返回值类型的retPtrL,它为1个字节长度;用于存放实际函数返回值的retData,它的长度可变;用于存放参数数据的parData,为可变长度。
  类型名称   控制观察点   扩展的编解码函数
  Call TLV(3,8,0,0)
  Field Name(If has)   域   属性
  SEQUENCE{
  h_Comp   0_4
  apiName   IA5Name
  retPtrL   O_1
  retData   O_Data
  parData   parFunc
  }
表4远程调用结构的说明
图2中客户端的TTCN适配器和服务器端的CComp模块之间的交互信息和交互流程如图3所示,用Start、StartAck、Done、Notify等四个原语描述如下:
Start原语:当启动测试过程时,TTCN适配器向CComp模块发送Start原语,携带被调用的API接口名以及参数等信息,启动测试过程;
StartAck原语:当服务器端根据收到的信息对通信组件进行调用后,CComp模块向TTCN适配器发送StarAck原语,告知TTCN适配器调用成功或失败;
Done原语:在通信组件调用结束后,CComp模块向TTCN适配器发送Done原语,携带通信组件的返回值给客户端;
Notify原语:当被测通信组件存在输出参数时,CComp模块向TTCN适配器发送Notify原语,将输出参数传递给测试端。
图2中API映射模块的作用是从消息解释器传送来的测试消息中解析得到所要调用的API接口名及参数,将参数保存到数据缓冲区,根据预先建立的函数注册表寻找对应的API接口函数地址,并通过将数据缓冲区中数据映射到对应的API接口函数地址指示的内存空间中,调用API接口函数,从而实现对通信组件的调用。所述API接口函数指示的内存空间为该API接口函数运行的内存空间,
API映射部分的实现和工作流程如图4所示:
步骤401,构造一个函数注册表,在函数注册表中保存API接口名,以及与API接口名对应的API接口函数地址。构造一个数据缓冲区,用于顺序存放解析测试消息中参数数据后得到的参数。
函数注册表的结构如下:
struct tagProcMap mapProc[]={
    {“Sample_Func1”,Sample_Func1},
    {“Sample_Func2”,Sample_Func2},
    {“Sample_Func3”,Sample_Func3},
    ……
  }
该函数注册表结构中每个单元前面的元素是API接口名,后面的元素是对应的API接口函数地址。
在上述函数注册表中API接口名和API接口函数地址的数据结构为:
Struct TagProcMap{
  VOS_CHAR nameProc[256];
  VOS_UINT32  h_Proc;
}
在测试过程中循环执行步骤402至步骤406。
步骤402,接收消息解释器传来的测试消息,该测试消息为二进制数据流。
步骤403,解析上述二进制数据流得到API接口名以及参数,并将参数保存到数据缓冲区。如果解析成功,则执行步骤404;如果解析失败,则执行步骤402,即继续接收测试消息。本步骤中参数解析和保存的过程将在后面图5所示的流程描述。
步骤404至步骤406,根据解析得到的API接口名在函数注册表中检索到对应的API接口名并获得与该API接口名对应的API接口函数地址,然后通过将数据缓冲区中的数据映射到API接口函数地址指示的内存空间中,调用对应的API接口函数,从而实现调用通信组件。无论在调用成功或失败后,皆通过CComp模块的StartAck原语向测试端发送相应的调用成功或失败的消息。在调用成功并且完成后,利用CComp模块的Done原语向客户端发送返回值,如果存在输出参数,则利用CComp模块的Notify原语将输出参数发送给测试端。
在上述步骤403中参数的解析和保存流程如图5所示,包括以下步骤:
步骤501,获取参数个数,不妨设为N个,下面从n=1开始解析各个参数。
步骤502至步骤503,解码第n个参数的长度与类型,并判断该参数的类型是否为指针类型,如果该参数的类型为指针类型,则执行步骤506及其后续步骤,否则执行步骤504及其后续步骤。
步骤504,将该参数存储到数据缓冲区。
步骤505,判断解码过程是否结束,即n是否等于N,如果n等于N,表明解码结束,则结束解码流程。否则表明解码未结束,将n加1后执行步骤502。
步骤506,获取当前参数的指针级别。
步骤507至步骤508,将指针替换为一级伪指针,并将数据拷贝到实际指针区。该步骤的目的是将指针值替换为数据实际存放在服务器端的内存位置的指针值,以便于调用API接口函数。这是因为来自客户端的参数中包含的指针信息指向的是客户端的内存地址,在服务器端是不可用的,服务器端需要将指针指向该数据在服务器端存储的内存地址后才可以使用。
步骤509,判断当前指针是否结束,如果结束则执行步骤505,否则执行步骤507。
另外,在上述步骤404中根据测试消息中的API接口名检索获得API接口函数地址的过程如图6所示,包括如下步骤:
步骤601,获取解析出来的API接口名。假设函数注册表中一共有N个API接口函数名,下面从n=1开始在函数注册表中检索。
步骤602至步骤603,获取函数注册表中第n个API接口名,将所解析出来的API接口名与函数注册表中第n个API接口名进行字符串比较,判断两者是否符合,如果两者符合,则执行步骤604,否则执行步骤605。
步骤604,获取函数注册表中第n个API接口名对应的API接口函数地址,结束检索流程。
步骤605,判断注册表是否结束,即n是否等于N,如果n等于N,则结束API检索流程。否则将n加1执行步骤602。
下面以一个调用实例来说明本发明的方法。假设参数类型为:
struct te{
  int i1;
  int*i2
}
该参数包括两个数据,其中一个i1为整型数据,另一个i2为指针。假设被测通信组件的定义如下:int AddStructParLvl(struct te,int*i){int Sum;
  Sum=te.i1+*te.i2;
  Return Sum;
}
该通信组件的API接口名为AddStructParLvl,通信组件的作用是将输入的参数Te中的整数i1和指针i2对应的取值相加得到两者之和Sum,并返回Sum。
下面以参数te={10,11}、I=20为例,并通过注册表调用内置函数,即h_Comp=0。参考图5,本实施例的流程如下:
步骤701,TTCN模块利用ASN.1以及TTCN规则对API接口名和参数进行描述,形成测试脚本。
根据前面相关部分的描述,该测试脚本的结构如表5所示。
  SEQUENCE{   其中各段的数据以及含义说明
  h_Comp   0_4   00000000表示通过“函数注册表”调用内置函数
apiName IA5Name   10AddStructPar2Lvl表示被调用的API接口名,其中第一个字节10表示函数名称的长度为16个字节;AddStructPar2Lvl本应是十六进制字节,这里为了方便理解,直接采用了明文。
  retPtrL   O_1   00表示该函数的返回值的指针级别,此处为非指针,即返回值是函数定义的int。
retData O_Data   0400000000表示返回的数据长度及空间值。这里表示返回值占用4字节空间,初始化空间值为全0
  parData   parFunc   函数参数的结构见表6和表7
  }
表5测试脚本的结构
步骤702,TTCN适配器利用ASN.1编解码规则将测试脚本生成二进制数据流,并通过Start原语发给被测端的消息解释器。
根据表5、表6和表7的解释,构成的数据流如下:
00000000 10 AddStructPar2Lvl  00  04  00000000  04  01  0A00000019800724 0B000000 04 01 14000000
SEQUENCE{   OnePar由参数类型大小、指针级别和数据组成。根据假设,第一个参数取值为te={10,11},其码流为04 01 0A000000 19800724 0B000000,含义如下
parSize 0_1   04表示参数类型的大小,此处为一结构,结构名体现为一指针,在本实施例的编译中,指针占用4个字节
  parPtrL   0_1   01表示函数参数te在访问时是一个一级伪指针
parData PDU   0A000000 19800724 0B000000是参数te的编码结果,其中0A000000表示取值10,19800724表示一级伪指针(如果是多级指针,则编码应当生成多个相连的19800724),0B000000表示取值11};
  }
表6第一个参数Te的解释
SEQUENCE{   OnePar由参数类型大小、指针级别和数据组成。根据假设,第二个参数取值为I=20,04 01 14000000,含义如下
parSize   0_1_   04表示参数类型的大小,此处为一整数,占用4个字节
parPtrL   0_1_   01表示函数参数I在访问时是一个一级指针
parData   PDU   14000000是参数I的编码结果,表示取值20
}
表7第二个参数I的解释
步骤703,消息解释器接收到从客户端发送过来的数据后,将其解析,得到测试消息,即步骤702中所示的数据流,然后传送给API映射模块。
步骤704,API映射模块接收到CComp模块的二进制数据流后,进行消息解码,获取所要调用通信组件的API接口名AddStructPar2Lvl和参数,根据API接口名在函数注册表中寻找对应的API接口函数地址。将参数中的指针Te替换后和I存入数据缓冲区,并通过将数据缓冲区中的数据映射到API接口函数地址指示的内存空间中,调用API接口函数,从而实现调用通信组件。调用成功后,通过CComp模块用StartAck原语发送调用成功的消息。
步骤705,调用结束后,由CComp模块用Done原语将返回值Sum发送给客户端,以及用Notify原语携带输出参数给客户端。
步骤706,客户端TTCN适配器将返回值和输出参数转换字节序后,将返回值传递给应用层,以及将输出参数写入客户端的数据缓冲区。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (12)

1、一种实现远程调用通信组件的***,该***包括测试端和被测端,所述被测端包括被测对象通信组件,其特征在于,
所述测试端包括客户端测试模块,用于通过脚本语言和编解码规则对所要调用通信组件的API接口名和参数进行描述形成测试脚本,根据编解码规则将测试脚本生成测试消息发送给被测端,以及接收从被测端的服务器端测试模块返回的调用结果;
所述被测端进一步包括服务器端测试模块,用于解析所述测试消息得到API接口名和参数,并通过根据所述API接口名和参数调用与所述API接口名对应的API接口函数实现对通信组件的调用,以及向测试端的客户端测试模块发送调用结果。
2、根据权利要求1所述的***,其特征在于,所述脚本语言为树表结合标示语言TTCN、工具命令语言TCL或脚本描述语言Python。
3、根据权利要求1所述的***,其特征在于,所述测试端的客户端测试模块和被测端的服务器端测试模块之间通过TCP/IP协议建立通信连接。
4、根据权利要求1所述的***,其特征在于,所述脚本语言为TTCN,所述客户端测试模块进一步包括TTCN模块和TTCN适配器;
其中,所述TTCN模块用于通过TTCN和编解码规则对所要调用通信组件的API接口名和参数进行描述形成测试脚本,以及将所述测试脚本传输给TTCN适配器;
所述TTCN适配器用于根据编解码规则将所述测试脚本生成测试消息发送给被测端,以及接收从被测端返回的调用结果。
5、根据权利要求1至4中任意一项所述的***,其特征在于,所述编解码规则为抽象符号描述语言ASN.1编解码规则。
6、根据权利要求1或4所述的***,其特征在于,所述服务器端测试模块进一步包括消息解释器和API映射模块;
其中,所述消息解释器用于从被测端接收的数据中解析出测试消息并传递给API映射模块,以及向测试端的客户端测试模块发送调用结果;
所述API映射模块用于解析所述测试消息得到API接口名和参数,以及通过根据所述API接口名和参数调用与所述API接口名对应的API接口函数实现对通信组件的调用。
7、根据权利要求6所述的***,其特征在于,所述API映射模块进一步包括函数注册表,用于保存API接口名及其对应的API接口函数地址;
所述API映射模块进一步用于根据所述函数注册表获取与所述API接口名对应的API接口函数地址,以及通过将所述参数映射到所述API接口函数地址指示的内存空间调用所述API接口函数。
8、根据权利要求6所述的***,其特征在于,所述API映射模块进一步包括数据缓冲区,用于存放所述参数。
9、一种远程调用通信组件的方法,其特征在于,该方法包括以下步骤:
A.测试端通过脚本语言和编解码规则描述所要调用通信组件的API接口名和参数形成测试脚本,并根据编解码规则将测试脚本生成测试消息发送给被测端;
B.被测端解析所述测试消息,得到所述API接口名和参数;
C.被测端通过根据所述API接口名和参数调用与所述API接口名对应的API接口函数实现对通信组件的调用,并向测试端发送调用结果。
10、根据权利要求9所述的方法,其特征在于,步骤A中所述脚本语言为TTCN、TCL或Python;
和/或所述编解码规则为ASN.1编解码规则。
11、根据权利要求9所述的方法,其特征在于,预先在被测端保存API接口名与API接口函数地址的对应关系;
步骤C中,所述被测端根据所述API接口名和参数调用与所述API接口名对应的API接口函数的步骤包括:
根据所保存的对应关系获取与所述API接口名对应的API接口函数地址;
通过将所述参数映射到所述API接口函数地址指示的内存空间中调用所述API接口函数。
12、根据权利要求9所述的方法,其特征在于,步骤C中所述向测试端发送调用结果的步骤包括:
向测试端发送调用成功或失败的消息;
和/或在调用成功且完成后,向测试端发送通信组件的返回值,并在存在输出参数的情况下向测试端发送所述输出参数。
CNB2005100634972A 2005-04-11 2005-04-11 一种远程调用通信组件的***及方法 Active CN100389572C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2005100634972A CN100389572C (zh) 2005-04-11 2005-04-11 一种远程调用通信组件的***及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2005100634972A CN100389572C (zh) 2005-04-11 2005-04-11 一种远程调用通信组件的***及方法

Publications (2)

Publication Number Publication Date
CN1848774A true CN1848774A (zh) 2006-10-18
CN100389572C CN100389572C (zh) 2008-05-21

Family

ID=37078147

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2005100634972A Active CN100389572C (zh) 2005-04-11 2005-04-11 一种远程调用通信组件的***及方法

Country Status (1)

Country Link
CN (1) CN100389572C (zh)

Cited By (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100464305C (zh) * 2007-03-13 2009-02-25 华为技术有限公司 调用动态库的方法、装置及动态库服务器
WO2010048746A1 (en) * 2008-10-31 2010-05-06 Ebay Inc. System and method to test executable instructions
CN101719902A (zh) * 2009-12-04 2010-06-02 深圳创维数字技术股份有限公司 一种远程过程调用方法和***
CN101309183B (zh) * 2008-05-04 2011-04-13 北京深思洛克软件技术股份有限公司 一种远程测试和开发软件保护装置的方法
CN102104553A (zh) * 2009-12-16 2011-06-22 浙江省公众信息产业有限公司 一种基于ActiveX控件的即时消息响应***和方法
CN102281152A (zh) * 2011-06-08 2011-12-14 烽火通信科技股份有限公司 分布式通信***、实现方法及远程api的编组和解组方法
CN101170568B (zh) * 2007-11-29 2012-01-11 中兴通讯股份有限公司 一种Telnet命令自动生成及批量执行方法
CN101610498B (zh) * 2008-06-20 2012-05-09 中兴通讯股份有限公司 一种移动终端更新设备管理对象的方法及装置
CN101631033B (zh) * 2008-07-14 2013-02-27 中兴通讯股份有限公司 远程组件的调用方法和***、以及服务器、客户端
CN103780456A (zh) * 2013-06-07 2014-05-07 国家无线电监测中心检测中心 对ttcn-3测试***进行适配性配置的方法和装置
CN103984555A (zh) * 2014-05-29 2014-08-13 四川航天***工程研究所 一种树表结合驱动特定平台通讯协议源代码自动生成方法
CN104320402A (zh) * 2014-10-31 2015-01-28 北京思特奇信息技术股份有限公司 一种基于二进制算法的服务接口访问控制方法及***
CN104598257A (zh) * 2013-10-30 2015-05-06 华为技术有限公司 远程应用程序运行的方法和装置
CN104683308A (zh) * 2013-12-02 2015-06-03 腾讯科技(深圳)有限公司 执行指令的方法和装置
CN104980313A (zh) * 2008-10-31 2015-10-14 电子湾有限公司 测试可执行指令的***和方法
CN105607895A (zh) * 2014-11-21 2016-05-25 阿里巴巴集团控股有限公司 一种基于应用程序编程接口的应用程序的运行方法和装置
CN105912463A (zh) * 2016-05-20 2016-08-31 东信和平科技股份有限公司 基于mp300设备的智能卡协议自动测试***和方法
CN107800595A (zh) * 2016-09-02 2018-03-13 姚伟志 面向服务的智能设备交互方法
CN109213546A (zh) * 2017-06-30 2019-01-15 武汉斗鱼网络科技有限公司 用于windows客户端程序的登录处理方法和装置
CN113360386A (zh) * 2021-06-17 2021-09-07 锐捷网络股份有限公司 交换芯片驱动测试方法、装置、电子设备和存储介质
CN114168226A (zh) * 2021-12-08 2022-03-11 紫光展锐(重庆)科技有限公司 一种解码数据结构方法及相关装置
CN114710541A (zh) * 2022-01-28 2022-07-05 赛纳生物科技(北京)有限公司 一种传输测序数据的方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1265569C (zh) * 2002-07-23 2006-07-19 华为技术有限公司 一种使用脚本补丁的白盒测试***及其测试方法
CN1275428C (zh) * 2003-10-31 2006-09-13 华中科技大学 邮件服务器性能综合测试***
CN100483976C (zh) * 2003-11-03 2009-04-29 中国科学院计算技术研究所 计算机网络协议测试传输方法

Cited By (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100464305C (zh) * 2007-03-13 2009-02-25 华为技术有限公司 调用动态库的方法、装置及动态库服务器
CN101170568B (zh) * 2007-11-29 2012-01-11 中兴通讯股份有限公司 一种Telnet命令自动生成及批量执行方法
CN101309183B (zh) * 2008-05-04 2011-04-13 北京深思洛克软件技术股份有限公司 一种远程测试和开发软件保护装置的方法
CN101610498B (zh) * 2008-06-20 2012-05-09 中兴通讯股份有限公司 一种移动终端更新设备管理对象的方法及装置
CN101631033B (zh) * 2008-07-14 2013-02-27 中兴通讯股份有限公司 远程组件的调用方法和***、以及服务器、客户端
CN102204167A (zh) * 2008-10-31 2011-09-28 电子湾有限公司 测试可执行指令的***和方法
WO2010048746A1 (en) * 2008-10-31 2010-05-06 Ebay Inc. System and method to test executable instructions
US9477584B2 (en) 2008-10-31 2016-10-25 Paypal, Inc. System and method to test executable instructions
CN104980313A (zh) * 2008-10-31 2015-10-14 电子湾有限公司 测试可执行指令的***和方法
CN102204167B (zh) * 2008-10-31 2015-07-01 电子湾有限公司 测试应用编程接口(api)调用的方法、***和响应仿真器
US9015532B2 (en) 2008-10-31 2015-04-21 Ebay Inc. System and method to test executable instructions
CN101719902A (zh) * 2009-12-04 2010-06-02 深圳创维数字技术股份有限公司 一种远程过程调用方法和***
CN101719902B (zh) * 2009-12-04 2014-07-30 深圳创维数字技术股份有限公司 一种远程过程调用方法和***
CN102104553A (zh) * 2009-12-16 2011-06-22 浙江省公众信息产业有限公司 一种基于ActiveX控件的即时消息响应***和方法
CN102281152A (zh) * 2011-06-08 2011-12-14 烽火通信科技股份有限公司 分布式通信***、实现方法及远程api的编组和解组方法
CN103780456A (zh) * 2013-06-07 2014-05-07 国家无线电监测中心检测中心 对ttcn-3测试***进行适配性配置的方法和装置
CN103780456B (zh) * 2013-06-07 2017-05-03 国家无线电监测中心检测中心 对ttcn‑3测试***进行适配性配置的方法和装置
CN104598257A (zh) * 2013-10-30 2015-05-06 华为技术有限公司 远程应用程序运行的方法和装置
US10057364B2 (en) 2013-10-30 2018-08-21 Huawei Technologies Co., Ltd. Method and apparatus for remotely running application program
CN104598257B (zh) * 2013-10-30 2019-01-18 华为技术有限公司 远程应用程序运行的方法和装置
CN104683308A (zh) * 2013-12-02 2015-06-03 腾讯科技(深圳)有限公司 执行指令的方法和装置
CN103984555B (zh) * 2014-05-29 2017-03-15 四川航天***工程研究所 一种树表结合驱动Windows/Linux平台通讯协议源代码自动生成方法
CN103984555A (zh) * 2014-05-29 2014-08-13 四川航天***工程研究所 一种树表结合驱动特定平台通讯协议源代码自动生成方法
CN104320402B (zh) * 2014-10-31 2017-11-10 北京思特奇信息技术股份有限公司 一种基于二进制算法的服务接口访问控制方法及***
CN104320402A (zh) * 2014-10-31 2015-01-28 北京思特奇信息技术股份有限公司 一种基于二进制算法的服务接口访问控制方法及***
CN105607895A (zh) * 2014-11-21 2016-05-25 阿里巴巴集团控股有限公司 一种基于应用程序编程接口的应用程序的运行方法和装置
CN105912463A (zh) * 2016-05-20 2016-08-31 东信和平科技股份有限公司 基于mp300设备的智能卡协议自动测试***和方法
CN105912463B (zh) * 2016-05-20 2019-03-26 东信和平科技股份有限公司 基于mp300设备的智能卡协议自动测试***和方法
CN107800595A (zh) * 2016-09-02 2018-03-13 姚伟志 面向服务的智能设备交互方法
CN109213546A (zh) * 2017-06-30 2019-01-15 武汉斗鱼网络科技有限公司 用于windows客户端程序的登录处理方法和装置
CN113360386A (zh) * 2021-06-17 2021-09-07 锐捷网络股份有限公司 交换芯片驱动测试方法、装置、电子设备和存储介质
CN114168226A (zh) * 2021-12-08 2022-03-11 紫光展锐(重庆)科技有限公司 一种解码数据结构方法及相关装置
CN114710541A (zh) * 2022-01-28 2022-07-05 赛纳生物科技(北京)有限公司 一种传输测序数据的方法

Also Published As

Publication number Publication date
CN100389572C (zh) 2008-05-21

Similar Documents

Publication Publication Date Title
CN1848774A (zh) 一种远程调用通信组件的***及方法
CN1278231C (zh) 将抽象句法表示法1数据模型化成对象模型的方法及***
CN1320454C (zh) 用于处理xml对象的程序设计语言扩展及相关应用
US8121976B2 (en) Method and apparatus for converting legacy programming language data structures to schema definitions
CN1229944A (zh) 用于减少预装类的脚印的***和方法
CN1313953C (zh) 在软件对象与以结构化语言要素为基础的文件之间映射的***及方法
CN1783090A (zh) 用于对象模型与xml间转换的可共享双向方法和***
CN100337235C (zh) 访问数据库的方法及装置
CN1534456A (zh) 类型桥
CN1809068A (zh) Web应用程序架构
CN1841362A (zh) 用于处理电子表格的方法和***
CN1682183A (zh) 在客户机-服务器通信中处理增量数据的方法和计算机***
CN1577322A (zh) 管理数据处理***中的应用文件的方法和装置
CN1794230A (zh) 以透明方式公开计算机生成文档中嵌套数据的方法和***
CN1564129A (zh) 一种构件的封装和一致性访问的方法
CN1700665A (zh) 分布式数据模型
CN1469247A (zh) 语法分析扩展标记语言文件的装置和方法
CN1808377A (zh) 由非专属语言驱动的通用序列图生成器
CN101036123A (zh) 自动翻译程序和程序翻译服务器
CN1525359A (zh) 声明序列化报告参数表示法
CN1766876A (zh) 用于管理结构化文件的***和方法
CN1805345A (zh) Web服务工作流处理器
CN1313926C (zh) 模板编译方法
CN1913442A (zh) 给用户提供业务服务的方法和***
CN1728710A (zh) 检索网络文件的方法和网络服务器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
EE01 Entry into force of recordation of patent licensing contract

Assignee: Guangzhou Huahong Network Technology Co., Ltd.

Assignor: Huawei Technologies Co., Ltd.

Contract fulfillment period: 2008.9.16 to 2013.9.15 contract change

Contract record no.: 2009440001259

Denomination of invention: System and method for long-distance calling communication assembly

Granted publication date: 20080521

License type: Exclusive license

Record date: 2009.8.14

LIC Patent licence contract for exploitation submitted for record

Free format text: EXCLUSIVE LICENSE; TIME LIMIT OF IMPLEMENTING CONTACT: 2008.9.16 TO 2013.9.15; CHANGE OF CONTRACT

Name of requester: GUANGZHOU HUAHONG NETWORK TECHNOLOGY CO., LTD.

Effective date: 20090814