如何使用JMeter测试WCF Web服务?

时间:2011-04-27 12:19:58

标签: c# web-services soap jmeter

我在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消息到服务。同样,我没有看到它传递参数的位置。因此,我不知道如何创建一个简单的SOAP信封,我可以使用它与JMeter一起测试这项服务。

任何人都可以建议为什么WSDL文档不提供方法参数的任何细节,或者解释我如何创建必要的SOAP信封以用于JMeter?

我使用VS 2010,JMeter 2.4,IIS v6,wsHttpBinding在C#中编码。

2 个答案:

答案 0 :(得分:6)

免责声明:我不是WSDL专家,因此我无法告诉您为何该文档没有提供详细信息。

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

Steps:
1. Import WSDL into soap
2. Create a default request for the method
3. Set the request view to RAW, and copy into JMeter

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

答案 1 :(得分:2)

使用JMeter的“HTTP代理服务器”使用您的普通testclient记录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服务服务器上。

快乐的测试! : - )