背景
需求:接口自动化:上一个接口的返回值是下一个接口的请求参数
接口关联实现步骤
- 在setup 或setUpClass 当中访问前置依赖接口(可访问一个或多个)
- 在test_测试函数中替换需要的数据
- 在data_case获取请求数据
- 并进行数据的预处理数据替换数据类型转换
- json转成字典,因为request库需要字典格式的发送
- 通过request发送请求
- 进行多值断言
具体例子
充值接口的请求参数前置依赖登录接口获取token和member id
实现
1.excel中准备测试数据,需要替换的token和member id用#xx# 标记
- 代码实现
import requests
import json
import pytest
from jsonpath import jsonpath
...
# 1.获取excel中的数据
data = read_excel(path_config.case_path , 'recharge')
# 测试数据
class TestRecharge(APICase):
@classmethod
def setup_class(cls) -> None:
# 1.1访问登录接口,获取返回值
resp_data = api.login()
# 1.2从返回值当中提取member id:resp["data"]["id"]
cls.member_id = jsonpath(resp_data, '$..id')[0]
# 1.3从返回值当中提取数据:resp["data"]["token_info"]["token"]
cls.token = jsonpath(resp_data, '$..token')[0]
@classmethod
def teardown_class(cls) -> None:
pass
@pytest.mark.parametrize('case_data',data)
def test_recharge(self, case_data):
# 2.1获取 case_data 当中的数据
headers_string = case_data['headers']
json_string = case_data['json']
# 2.2数据的预处理:数据替换,
if "#token#" in headers_string:
headers_string = headers_string.replace("#token#", self.token)
if "#member_id#" in json_string:
json_string = json_string.replace("#member_id#", str(self.member_id))
# 2.3数据转化成字典格式headers, json, expected
headers = json.loads(headers_string)
json_data = json.loads(json_string)
expected = json.loads(case_data['expected'])
# 3.发送充值请求
resp = requests.request(
method=case_data['method'],
url=setting.host + case_data['url'],
json=json_data,
headers=headers
)
# 4.获取充值的返回值,进行断言
json_response = resp.json()
try:
for key, value in expected.items():
# key: code, value: 0
# key: msg, value : ok
self.assertEqual(value, json_response[key])
except AssertionError as e:
log.error(f"测试用例通过:{case_data}")
raise e