如何利用jmeter调试soap协议的报文?

目录

前言

本次的性能需求,开发给我提了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的结构;

  1. 下载安装soapUI工具,具体安装按照提示往下走就可以,这里不着重说明,下面是我打开soapUI工具的起始窗口
  2. 在Projects上鼠标右键点击,选择new soap project(新建一个SOAP项目)
  3. 在弹出框中Project Name中定义名称,可以随便写,Initial WSDL中写需要测试的接口的地址,如图所示。红色部分的地址,填写正确。

  4.  写完之后点击OK按钮,注意加上"?wsdl"后缀,如果创建失败会有错误信息提示,检查当前环境或者访问地址是否出错,下面是创建成功后的截图

    访问wsdl文件后,overview展示了服务端定义的文件接口,命名空间等信息;

    这里找到了上面的问题,图中框出来的 是接口名,命名空间;

  5.    searchResource 是当前接口的方法名称,双击Request打开右侧页面,在<exp:arg0>?</exp:arg0>“?”需要写入当前接口方法需要传递的参数。 
  6.    开发提供的xml格式的字符串,注意语法为<![CDATA[ 这里是xml ]]>,这里需要注意:<exp:arg0>和<![CDATA... 之间不可有任何的其他字符,包括空格以及换行,否则解析xml会抛出异常。正确的报文,看下图。
  7.      点击执行,右侧返回执行结果信息,如图所示,下面是执行结果
  8.  附上完整的报文请求
    <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接口的脚本。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值