我使用JMeter作为代理来记录我们的Web服务的测试场景的所有请求,以及JMeter创建的请求和一个HTTP授权管理器,以及每个请求的存储授权。
但是当我启动这个场景时,我会收到所有请求的401响应代码。我在Thread Group中移动HTTP授权管理器,但我仍然得到401代码。
我们WS的所有请求都需要身份验证。
如何为每个请求在一个位置添加身份验证?并且,如何参数化它们?
谢谢,丹尼斯
答案 0 :(得分:0)
答案可能因Web服务安全类型而异,并且有很多选项,例如Web服务可能需要自定义身份验证标头,自定义HTTP标头,自定义Cookie,自定义标记等等。
图表A:未经身份验证的请求
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webserviceX.NET">
<soap:Header/>
<soap:Body>
<web:GetCitiesByCountry>
<!--Optional:-->
<web:CountryName>India</web:CountryName>
</web:GetCitiesByCountry>
</soap:Body>
</soap:Envelope>
图表B:使用用户名/密码验证的请求
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:web="http://www.webserviceX.NET">
<soap:Header>
<wsse:Security soap:mustUnderstand="true"
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-29FBADA106D95AD8E114818886210611">
<wsse:Username>johndoe</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">
secret
</wsse:Password>
<wsse:Nonce
EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">
jnXB+PJ34M7aqfDU88glzg==
</wsse:Nonce>
<wsu:Created>2016-12-16T11:43:40.755Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<web:GetCitiesByCountry>
<!--Optional:-->
<web:CountryName>India</web:CountryName>
</web:GetCitiesByCountry>
</soap:Body>
</soap:Envelope>
参数化请求的最常用方法是使用CSV Data Set Config。
有关在JMeter测试中绕过的某些Web服务身份验证类型的详细说明,请参阅Take the Pain out of Load Testing Secure Web Services文章。