python、postman、jmeter将上一个接口返回值作为下一个接口的请求参数实战
原创
©著作权归作者所有:来自51CTO博客作者wx634e5f8a4276e的原创作品,请联系作者获取转载授权,否则将追究法律责任
python进行接口请求,第一个接口返回的数据作为第二个参数的入参
#!/usr/bin/python
# -*- coding:utf-8 -*-
import jsonpath
import requests
# 获取可以预订列表
host = 'http://cn.ejee.site'
queryReserveListPath = '/api/booking/queryReserveList.do'
bookingChannelPath = '/api/booking/channels'
url1 = host + queryReserveListPath
data1 = {
'clientId': 'jie',
'sign': '45b4cd33de5106aa9241108268fbb97a',
'type': 'PreRelease',
'channel': 'GuoYu'
}
r1 = requests.post(url=url1, data=data1)
print(r1.text)
responseDomain = jsonpath.jsonpath(r1.json(), "$..domain")[0]
# 获取预订通道
url2 = host + bookingChannelPath
data2 = {
'clientId': 'jie',
'sign': '5bb7d0e90185fb270b9ef91c1d739f09',
'domain': responseDomain
}
r2 = requests.post(url=url2, data=data2)
print(r2.text)
返回数据结果:
$ pytest -s tests/test_case.py
=========================================================================== test session starts ============================================================================
platform darwin -- Python 3.7.4, pytest-6.0.1, py-1.9.0, pluggy-0.13.1
rootdir: /Users/leiyuxing/pytest, configfile: pytest.ini
collecting ... 获取可预订列表{"pageSize":20,"totalPageNum":1,"totalItemNum":1,"currentPageNum":1,"data":[{"domain":"testdomainadd0002.com","bookEndTime":"2021-01-20 22:50:0e":"PreRelease","deleteTime":"2020-08-11","channels":[{"id":"91","name":"GuoYu","price":1.0,"transferPrice":69.0}],"_map":{}}],"code": "200","msg": "操作成功"}
获取预订通道{"msg":"成功","channelList":[{"price":1,"name":"GuoYu","currency":"RMB","freezePrice":50,"id":"91","partnerType":"PreRelease"}],"code":"200","domain":"testdomai.com"}
collected 0 items
========================================================================== no tests ran in 0.24s ===========================================================================
(python3.7)
postman之上一个接口的返回值作为下一个接口的入参
在使用postman做接口测试的时候,在多个接口的测试中,如果需要上一个接口的返回值作为下一个接口的入参,其基本思路是:
1、获取上一个接口的返回值
2、将返回值设置成环境变量或者全局变量
3、设置下一个接口的参数形式
例子:
场景,需要在获取可预订列表接口的返回值中提取可预订的域名,获取预订通道接口查询该域名的通道结果
1、第一个接口用户获取domain。
2、第二个接口用户设置菜单栏。
在这两个接口中,我们需要将第一个接口返回的domain值作为第一个接口的其中一个参数。
将第一个接口的返回值设置为环境变量
第一个接口发送返回值如下:
在第一个接口的tests中,获取domain,并将其设置为环境变量,代码如下:
// 将数据解析成json格式
var jd = JSON.parse(responseBody);
// 获取domain值
var domain_data = jd.data[0].domain
// 设置成环境变量
pm.environment.set("domain_data",domain_data);
// 第一个接口请求成功之后可以看到,该环境变量生成,可以再环境变量中看到。
// 在第二个接口,用{{domain_data}}就可以获取domain_data值
对于需要获取的值使用{{}}设置及时获取环境变量或者全局变量的值,
设置完成之后,如果两个接口在同一个文件下,那么点击runner,只需要执行一次就可以完成两个接口的请求啦;
注意:
两个接口要在同一个环境下哟,不然第二个接口找不到值啦。
返回结果:
{
"msg": "成功",
"channelList": [
{
"price": 1,
"name": "GuoYu",
"currency": "RMB",
"freezePrice": 50,
"id": "91",
"partnerType": "PreRelease"
}
],
"code": "200",
"domain": "testdomainadd0002.com"
}
jmeter将上一个接口返回值作为下一个接口的请求参数