【问题标题】:How to test a WCF Webservice with JMeter?如何使用 JMeter 测试 WCF Web 服务?
【发布时间】:2011-08-13 19:44:35
【问题描述】:

我有一个托管在 IIS 上的 WCF Web 服务,它公开了一个采用三个整数参数的方法。我有一个简单的基于控制台的客户端,可以调用此方法。

int InsertNewOrder(short quantity, int custID, int productID);

如果我的理解是正确的,我需要给 JMeter 提供一个 SOAP 信封,其中包含要调用的方法和要传递的参数的详细信息。我见过很多类似下面的例子:

<soapenv:Envelope xmlns:soapenv="schemas.xmlsoap.org/soap/envelope/">; 
<soapenv:Body>
<ns2:InsertNewOrder xmlns:ns2="?????"> 
<ns2:Param1>${1}</ns2:Param1> 
<ns2:Param1>${1}</ns2:Param1> 
<ns2:Param1>${1}</ns2:Param1> 
</ns2:InsertNewOrder>  
</soapenv:Body>
</soapenv:Envelope>

但是,通过查看我的 WSDL 文档,我看不到它在哪里引用了传递给该方法所需的任何参数。我还使用 Fiddler 来检查客户端发送给服务的肥皂消息。同样,我看不到它在哪里传递参数。因此,我不知道如何创建一个简单的 SOAP 信封,以便与 JMeter 一起使用来测试此服务。

谁能告诉我为什么 WSDL 文档没有提供方法参数的任何细节,或者解释我如何创建必要的 SOAP 信封以与 JMeter 一起使用?

我正在使用 VS 2010、JMeter 2.4、IIS v6、wsHttpBinding 在 C# 中进行编码。

【问题讨论】:

    标签: c# web-services soap jmeter


    【解决方案1】:

    免责声明:我不是 WSDL 专家,所以我不能告诉你为什么文档没有提供详细信息。

    为了为 JMeter 生成 SOAP 信封,我使用了免费版的 soapUI。

    步骤

    1. 将 WSDL 导入到 soap 中
    2. 为方法创建默认请求
    3. 将请求视图设置为 RAW,并复制到 JMeter

    这为我提供了 jmeter 所需的所有信息,包括参数、用户代理、端点等。

    【讨论】:

    • 谢谢一百万。这正是我所需要的。它还以与查看原始 XML 时不同的方式显示 WSDL。我现在可以看到参数等了。
    • 很高兴我能帮上忙。我发现它可以节省大量时间。
    • 其实。通过使用 SoapUI,我看到它还执行负载测试(这基本上是我想要做的)。在这方面,您是否发现一种工具比另一种更好?我本来打算使用 JMeter,但之前没有听说过 SoapUI。
    • 我不是 SoapUI 负载测试工具的忠实拥护者(它们在 SoapUI 中既有 loadUI 又有性能测试器)。我发现它们比 JMeter 更难定制。
    • @BlackGaff:我在 RAW 请求视图中看到的不是soap:envelope 标签,而是GET http: ...。我能做些什么?请帮忙。
    【解决方案2】:

    使用 JMeter 的“HTTP 代理服务器”通过您的普通测试客户端记录 WCF 调用,然后在稍后测试时播放它们。这是我所经历的最快的,并给出了最好的测试用例(因为你用你的普通客户端记录它们,或者选择测试客户端)。

    将 JMeters HTTP 代理服务器设置为 per instructions。然后,确保 WCF(或任何 SOAP)客户端使用该代理。 WCF 客户端配置的重要部分是(将我的 ... 替换为普通配置):

    <system.serviceModel>
        <bindings>
        ...
        <wsHttpBinding>
        <binding ...  proxyAddress="http://proxyServerName:8080" useDefaultWebProxy="false" ...>
        ...
            <security mode="None">
                <message establishSecurityContext="false"/>
                <transport clientCredentialType="None"/>
            </security>
    

    proxyServerName 是 localhost,如果 WCF 客户端与 JMeter 在同一台机器上运行(创建测试用例时正常)。

    此外,如果我没有如上所示关闭安全性,我使用 HTTP 代理会收到错误消息。 WCF 服务服务器上也必须有相同的安全设置。

    测试愉快! :-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多