接口测试的soapUI(WebService)

一、WebService介绍

上次己分别测试了近似和结构体(http://www.cnblogs.com/zyl910/archive/2011/09/19/2186623.html)、密封类(http://www.cnblogs.com/zyl910/archive/2011/09/20/2186622.html)的函数调用速度评测。现在开展更进一步分析,解读编译器生成的MSIL(微软中语言)代码。

 

一如既往、前期准备

WebService是平种过编程语言及跨操作系统平台的长途调用技术,XML+XSD,SOAP和WSDL就是成WebService平台的老三可怜技巧。

优先找到“IL 反汇编程序”(开始\程序\Microsoft Visual Studio
2010\Microsoft Windows SDK Tools\)——

 

图片 1

1)XML+XSD

运作“IL
反汇编程序”,打开编译后底exe。展开节点,双击叶子节点查看MSIL代码——

WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中证明调用远程服务对象的谁方法,传递的参数是啊,以及劳动对象的回到结果是呀)。

图片 2

XML是WebService平台中意味着数据的格式。

仲、结果分析

 

下一场我们将测试函数调用的那么行代码复制提取出。如齐图的“IL_004c”行。
于复制提取过程遭到,发现VS2005以及VS2010百般成的函数调用代码是截然等同的。删除啰嗦的号空间,将结果整理也表——

2)SOAP

模式 MSIL 亮点
静态调用 call       uint8*  TryIt_Static_Ptr(uint8*) 静态函数
调用派生类 callvirt   instance uint8*  PointerCall::Ptr(uint8*) 虚方法
调用密封类 callvirt   instance uint8*  SldPointerCallAdd::Ptr(uint8*) 虚方法
调用结构体 call       instance uint8*  SPointerCallAdd::Ptr(uint8*) 方法(非虚)
调用基类 callvirt   instance uint8*  PointerCall::Ptr(uint8*) 虚方法
调用派生类的接口 callvirt   instance uint8*  IPointerCall::Ptr(uint8*) 虚方法
调用密封类的接口 callvirt   instance uint8*  IPointerCall::Ptr(uint8*) 虚方法
调用结构体的接口 callvirt   instance uint8*  IPointerCall::Ptr(uint8*) 虚方法
基类泛型调用派生类 call       uint8*  CallClassPtr<class PointerCallAdd>(!!0, uint8*) class
基类泛型调用基类 call       uint8*  CallClassPtr<class PointerCall>(!!0, uint8*) class
接口泛型调用派生类 call       uint8* CallPtr<class  PointerCallAdd>(!!0, uint8*) class
接口泛型调用密封类 call       uint8* CallPtr<class  SldPointerCallAdd>(!!0, uint8*) class
接口泛型调用结构体 call       uint8*  CallPtr<valuetype SPointerCallAdd>(!!0, uint8*) valuetype
接口泛型调用结构体引用 call       uint8*  CallRefPtr<valuetype SPointerCallAdd>(!!0&, uint8*) valuetype
接口泛型调用基类 call       uint8* CallPtr<class  PointerCall>(!!0, uint8*) class
接口泛型调用派生类的接口 call       uint8* CallPtr<class  IPointerCall>(!!0, uint8*) class
接口泛型调用密封类的接口 call       uint8* CallPtr<class  IPointerCall>(!!0, uint8*) class
接口泛型调用结构体的接口 call       uint8* CallPtr<class  IPointerCall>(!!0, uint8*) class

WebService通过HTTP协议发送
请求和收结果经常,发送的乞求内容与结果内容还用XML格式封装,并多了有一定的HTTP消息头,以证HTTP消息的内容格式,这些特定的
HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了正规的RPC方法来调用Web
Service。

观测地方的表格,我们发现——
1.编翻译的IL代码时,并不曾召开内联(inline。将子函数展开)优化,而据悉语义统统编译为歧之调用(call)。看来优化工作是JIT(即经常编译器)负责之。
2.调用结构体是 方法调用(call
instance)。JIT可根据这个消息安排内联优化。
3.调就此着生类是 虚方法调用(callvirt instance)。因为给编译为
调用基类的虚方法(PointerCall::Ptr),所以JIT认为那是健康的虚方法调用,不优化。
4.调之所以暧昧封类是 虚方法调用(callvirt
instance),与差生类调用一致。但出于那个留了类型信息(SldPointerCallAdd::Ptr),JIT发现她是一个密封类,于是安排内联优化。
5.泛型方法虽然为是因此call指令,但她涵盖泛型参数,所以该行为和日常call调用不同。
6.结构体调用泛型方法时,会利用valuetype关键字。JIT可依据此信息安排优化(VS005的JIT有所优化;而VS2010的JIT将那个进行到底底内联优化)。

  SOAP协议 = HTTP协议 + XML数据格式

 

 
SOAP协议定义了SOAP消息之格式,SOAP协议是根据HTTP协议的,SOAP也是依据XML和XSD的,XML是SOAP的数据编码方式。

附录A、转为接口时之IL代码

 
打个比方:HTTP就是普通公路,XML就是中档的绿色隔离带和个别止的防护栏,SOAP就是通常公路通过加隔离带和防护栏改造过的高速公路。

派生类转为接口——
  IL_001d:  ldloc.0
  IL_001e:  stloc.s    V_4

3)WSDL

机密封类转为接口——
  IL_0020:  ldloc.1
  IL_0021:  stloc.s    V_5

哼于我们失去企业购买东西,首先使理解企业里出什么事物可打,然后再度来选购,商家的做法就是是张贴广告海报。
WebService也同样,WebService客户端要调用一个WebService服务,首先使出明这服务之地方在啊,以及这服务里来啊方
法可以调用,所以,WebService务器端首先要透过一个WSDL文件来说明自己妻子发生何服务可以对外调用,服务是啊(服务遭遇起哪些方法,方法接受
的参数是什么,返回值是啊),服务的网络地址用哪个url地址表示,服务通过什么点子来调用。

结构体转为接口——
  IL_0023:  ldloc.2
  IL_0024:  box        TryPointerCall.SPointerCallAdd
  IL_0029:  stloc.s    V_6

 

看得出结构体转为接口时多矣装箱操作,影响了性能。

其次、SoapUI介绍及动用

附录B、结构体泛型调用的IL代码

soapUI是一个开源测试工具,通过soap/http来检查、调用、实现Web
Service的效果/负载/符合性测试。

接口泛型调用结构体——
  IL_0391:  ldloc.2
  IL_0392:  ldloc.s    V_7
  IL_0394:  call       uint8*
TryPointerCall.PointerCallTool::CallPtr<valuetype
TryPointerCall.SPointerCallAdd>(!!0,uint8*)

欠工具既可看做一个单独的测试软件使用,也只是运插件并及Eclipse,maven2.X,Netbeans
和intellij中利用。

接口泛型调用结构体引用——
  IL_03dd:  ldloca.s   V_2
  IL_03df:  ldloc.s    V_7
  IL_03e1:  call       uint8*
TryPointerCall.PointerCallTool::CallRefPtr<valuetype
TryPointerCall.SPointerCallAdd>(!!0&,uint8*)

soapUI
pro是soapUI的小买卖非开源版本,实现之功能比较开源的soapUI更多。

可见泛型调用的IL代码并无复杂,与常见调用基本相同,也是预先将参数放入堆栈再call。对于引用参数,将“ldloc.*”指令换成“ldloca.s”指令就尽了。

 

(完)

 

 

开辟软件–》file–》new  soapui project
–》输入wsdl地址–》自动导入—》输入参数值/修改参数值–》运行即可

目录——
C#接近以及结构体究竟何许人也快——各种函数调用模式速度评测:http://www.cnblogs.com/zyl910/archive/2011/09/19/2186623.html
再探C#类及结构体究竟哪个快——考虑栈变量、栈分配、64号整数、密封类:http://www.cnblogs.com/zyl910/archive/2011/09/20/2186622.html
三探C#恍如和结构体究竟谁快——MSIL(微软中路语言)解读:http://www.cnblogs.com/zyl910/archive/2011/09/24/2189403.html
四探C#仿佛以及结构体究竟哪个快——跨程序集(assembly)调用:http://www.cnblogs.com/zyl910/archive/2011/10/01/2197844.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图