目录
前言
本次的性能需求,开发给我提了xml格式的报文,请求地址,和方法名,对这个接口进行压力测试。我工作经历中,用jmeter发送的是HTTP请求的压力测试。jmeter是否支持soap协议的压力测试,我心里有数肯定是支持的,但是我的工作经历中并未有过这样的案例。我的知识储备中,jmeter没有专门soap请求的sampler。soap协和HTTP协议,他们有关系么? 在jmeter中怎么区分2种协议的?
一、开发提供的xml信息
接口地址:http://10.1.1.2:7072/resService/api?wsdl
接口方法:searchResource
发送内容:
<?xml version="1.0" encoding="UTF-8"?>
<Data>
<ServiceAttr>
<Params>
<SysParam>
<ActType>110</ActType>
<TeleNo>15777982814</TeleNo>
<BusinessType>01</BusinessType>
<mainBandType></mainBandType>
</SysParam>
</Params>
</ServiceAttr>
</Data>
二、失败的实践以及疑惑
先发请求试试,看具体报什么错误
发送报文如下,所示
返回报文,如下所示
soap:VersionMismatch“Data”元素上没有命名空间。您必须发送SOAP消息。
这个错误提示,SOAP消息格式不正确,没有命名空间,命名空间是概念,在哪里获取?
开发给的接口方法:searchResource 是什么意思,在哪里用?
三、搜索百度
- 知识点1:soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置为: text/xml任何数据都可以xml化。
我的理解:是一种post请求,是一种 Content-type=text/xml的post请求。
- 知识点2:Wsdl提供了一个统一的接口,目前已经成为一个国际上公认的标准,通过wsdl提供的接口可以访问不同类型的资源(如java、c#、C、C、C++等),因为wsdl是基于xml,与语言平台无关的。wsdl提供了binding和service元素,用以绑定接口到具体的服务,实现了接口与实现的分离。
我的理解:SOAP是post协议,WSDL是规范,数据格式的定义。
四、应用思考
根据报错的提示,soap消息的格式不正确,如何获取到正确的,完整的wsdl?????wsdl规范里面有没有 命名空间?wsdl有没有开发给的接口方法????
准备用soapUI工具 ,获取下wsdl文件,尝试调试下报文
五、操作方法-调试soap接口
目的:获取正确的报文参数,wsdl的结构;
- 下载安装soapUI工具,具体安装按照提示往下走就可以,这里不着重说明,下面是我打开soapUI工具的起始窗口
- 在Projects上鼠标右键点击,选择new soap project(新建一个SOAP项目)
-
在弹出框中Project Name中定义名称,可以随便写,Initial WSDL中写需要测试的接口的地址,如图所示。红色部分的地址,填写正确。
- 写完之后点击OK按钮,注意加上"?wsdl"后缀,如果创建失败会有错误信息提示,检查当前环境或者访问地址是否出错,下面是创建成功后的截图。
访问wsdl文件后,overview展示了服务端定义的文件接口,命名空间等信息;
这里找到了上面的问题,图中框出来的 是接口名,命名空间;
- searchResource 是当前接口的方法名称,双击Request打开右侧页面,在<exp:arg0>?</exp:arg0>“?”需要写入当前接口方法需要传递的参数。
- 开发提供的xml格式的字符串,注意语法为<![CDATA[ 这里是xml ]]>,这里需要注意:<exp:arg0>和<![CDATA... 之间不可有任何的其他字符,包括空格以及换行,否则解析xml会抛出异常。正确的报文,看下图。
- 点击执行,右侧返回执行结果信息,如图所示,下面是执行结果。
- 附上完整的报文请求
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:oss="http://oss.iwhalecloud.com">------灰色是wsdl定义的语法结构 <soapenv:Header/> <soapenv:Body> <oss:searchResource>----这是开发提供的接口方法名 <!--Optional:--> <arg0> <![CDATA[ <?xml version="1.0" encoding="UTF-8"?> <Data> <ServiceAttr> <Params> <SysParam> <ActType>110</ActType> <TeleNo>15777982814</TeleNo> <BusinessType>01</BusinessType> <mainBandType></mainBandType> </SysParam> </Params> </ServiceAttr> </Data>]]>----- xml语法的格式 </arg0> </oss:searchResource> </soapenv:Body>
六、操作方法-调试jmeter中的soap接口
- 创建HTTP请求,填写如下
在图中,方法:选择post请求,因为前面说了,soap是一种特殊的post请求;content-type=text/xml,指定了xml结构的报文;HTTP的服务和端口,按实际的填写;消息体数据,是03章节中调试通过的报文。
- 发送请求,查看结果树
总结
以上是本次实践的总结,问题的引出,带着问题实践用jmetet工具实现soap接口的脚本。