在编写接口测试时,如果有多个接口需要串联在一起调用,并且这些接口共同构成了一个业务场景,通常可以使用以下几种方法来组织代码,使其更具可读性和维护性。以下是一些规范的建议:
1. 使用 pytest
的 fixture
来管理接口依赖
pytest
的 fixture
非常适合管理测试中的依赖关系。你可以为每个接口调用创建一个 fixture,然后将这些 fixture 串联起来。
2. 使用函数或类来组织接口调用
为了使代码更具可读性和可维护性,可以将每个接口的调用封装到函数中,并在测试用例中按顺序调用这些函数。
#!/usr/bin/env python
import pytest
from src.utils.request_util import post
from logs.test import api_log
# 假设有10个接口,我们分别为每个接口定义一个调用函数
def login():
url = 'login'
data = {
'username': '139ccc990002',
'password': '123cc6'
}
res = post(url=url, data=data, info=False)
api_log(info=res, level="INFO")
assert res.status_code == 200, f"Login failed with status code {res.status_code}"
return res.json()
def get_user_info(token):
url = 'getUserInfo'
headers = {
'Authorization': f'Bearer {token}'
}
res = post(url=url, headers=headers, info=False)
api_log(info=res, level="INFO")
assert res.status_code == 200, f"Get user info failed with status code {res.status_code}"
return res.json()
def update_user_info(token, new_data):
url = 'updateUserInfo'
headers = {
'Authorization': f'Bearer {token}'
}
res = post(url=url, headers=headers, data=new_data, info=False)
api_log(info=res, level="INFO")
assert res.status_code == 200, f"Update user info failed with status code {res.status_code}"
return res.json()
# 其他接口函数...
# 场景测试:假设场景是登录 -> 获取用户信息 -> 更新用户信息
def test_scenario():
# Step 1: 登录获取 token
token_info = login()
token = token_info.get('token')
# Step 2: 使用 token 获取用户信息
user_info = get_user_info(token)
user_id = user_info.get('user_id')
# Step 3: 更新用户信息
new_data = {
'user_id': user_id,
'new_field': 'new_value'
}
update_result = update_user_info(token, new_data)
# 断言更新成功
assert update_result.get('success'), "Update user info failed"
# 如果需要在多个场景中共享某些数据,可以使用 pytest fixture
@pytest.fixture
def token():
# 登录获取 token
return login().get('token')
def test_get_user_info(token):
# 使用 fixture 提供的 token 获取用户信息
user_info = get_user_info(token)
assert user_info.get('user_id'), "User ID not found"
# 其他测试用例...
if __name__ == '__main__':
pytest.main(['test_login.py'])