接口测试 SoapUI-传递 Respons header 中的值到 Request header

黑水 · 2015年11月04日 · 4252 次阅读

SoapUI 的 Property Transfer 不能在请求头和响应头之前传递参数,查到可以用 Groovy Script 在信息头间传参。

比如登录请求是:

http://10.0.0.1/mobile/login/?username=13740434043&password=123456

响应是:

HTTP/1.1 200 OK
Server: nginx/1.6.2
……
Set-Cookie: frontend=bse0s06ef9sd65k8ho5ah9ecm1; expires=Wed, 04-Nov-2015 09:25:14 GMT; path=/; domain=10.0.0.1; HttpOnly
……

<message>
   <status>success</status>
   <text>登录成功/text>
</message>

需要将登录响应头中的 Set-Cookie 的值传递到 “获取订单列表” 请求头的 cookie 中:

GET http://10.0.0.1/mobile/orderlist/ HTTP/1.1
……
cookie: frontend=bse0s06ef9sd65k8ho5ah9ecm1
……

在两个请求间插入 Groovy Script
插入 Groovy Script

代码如下:

def responseCookie = testRunner.testCase.getTestStepByName("login").httpRequest.response.responseHeaders["Set-Cookie"]
def frontend = (responseCookie =~ "frontend=\\w{26}")[0]   //正则表达式截取需要的部分
def orderHeaders = testRunner.testCase.testSteps["order"].getHttpRequest().getRequestHeaders()
def list = []
list.add(frontend)
orderHeaders["cookie"] = list;
testRunner.testCase.testSteps["order"].getHttpRequest().setRequestHeaders(orderHeaders)
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 16 条回复 时间 点赞

感谢分享,虽然没用过 soapui,但任何工具的原理都是一样的。
lr 中会自动处理这类操作。
如果自己写脚本也是需要按需处理 http header 的。

弱弱地问下,soapUI 的 assert 是不是只有 pro 版才提供?免费版找了半天没找到。。。

#2 楼 @chenhengjie123
免费版有,添加到 Test Steps 里的请求有 Assertions 。

Assersion

soapUI 现在用的挺多的耶,jmeter 怎么不用了呢?

#3 楼 @sanlengjingvv 谢谢,看了下,免费版的 assert 功能太弱了,暂时还是用 jmeter 吧。

#5 楼 @chenhengjie123 免费版只个鱼饵, 入门容易, 但是跳进去用起来只会让人更痛苦. 不推荐用 soapui,
我一个很好的朋友, 用了 soapui 好几年, 后来也是慢慢转了.jmeter 和 gatling 是最适合企业的.

#4 楼 @darker50
谷歌趋势 的话,现在热度差不多。不过我猜 Jmeter 下降是因为它很成熟,这几年没什么大变化,所以讨论的少了。

我这也还没定用啥。

#7 楼 @sanlengjingvv Jmeter 这几天在用,确实已经比较成熟了。
因为现在是初次接触接口测试,很多点还没抓到,所以暂时先用 Jmeter 来写和执行用例。不过现在已经开始感觉写出来的用例 copy paste 有点多了。

#7 楼 @sanlengjingvv jmeter 和 gatling 都很不错.用哪个无所谓, 不过是快点慢点而已. 都能承担性能测试的重任.

黑水 #10 · 2015年11月06日 Author

#8 楼 @chenhengjie123
copy 的地方,举个栗子?

@chenhengjie123 有在弄 https 的么?

#10 楼 @sanlengjingvv 其实是一开始有些基础概念没搞懂。。。现在找到方法了。
我们接口有个通用结构,里面有一个固定的字段 statusCode 。按照要求无论任何时候只要返回 http 200 那就必须有 statusCode 字段。
我一开始用了个笨方法,在每个 http request 里添加这个 assertion ,导致很多 copy paste ,现在搞懂了只要 assertion 和 http request 在同一级或者 http request 的上级,那么这个 assertion 会自动应用到这些 http request 中,不需要 copy paste 到每个 http request 里面。

看来 Jmeter 的使用方法还是很灵活的。

#11 楼 @woniu 暂时没有。有问题?

黑水 #12 · 2015年11月08日 Author

#12 楼 @chenhengjie123
Test Fragment 配合 Include Controller 也是封装好方法。
《移动 App 测试实战》里有讲他们用 Jmeter 时的用例分层结构。

JMeter 用得有点心虚,它的聚合报告里面显示最小响应时间竟然是 0,虽然我在 stackoverflow 里面也看到别人贴出来的图里面显示 min=0,但我实在不知道怎么跟人解释这个 0,毫秒

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册