测试接口的时候,单接口除了要测试正常的业务场景,异常场景也要进行测试。
比如 登录接口。 除了要测试正常的登录,错误数据登录也要进行测试。
使用Postman,JMeter 工具来测试接口的时候,可以使用csv文件,将数据存放在CSV文件中。通过读取文件的方式来进行测试。
pytest 参数化
pytest单元测试框架内部已经集成 参数化的功能,在使用的时候只需要引用语法即可。
基本使用
https://docs.pytest.org/en/6.2.x/parametrize.html#parametrize
test_data.py
"""
使用pytest的参数化功能进行单接口 多场景的测试
测试登录接口
"""
import requests
import pytest
# 准备登录数据
login_data = [("","123456"),
("1321111","123456"),
("13213331333",""),
("",""),
("13213331333","123456")]
@pytest.mark.parametrize("username,passwd",login_data)
def test_login(username,passwd):
url = "http://49.233.108.117:28019/api/v1/user/login"
body = {
"loginName": username,
"passwordMd5": passwd
}
# 发送请求
r = requests.post(url,json=body)
print(r.json())
执行。准备的数据共有5条,执行的时候会自动生成5条测试用例。
pytest test_data.py -s -v
添加断言
每条数据都对应一种测试情况,不同的数据返回的结果也不一样。针对不同的结果添加不同的断言。
将断言部分添加在测试数据中。
"""
使用pytest的参数化功能进行单接口 多场景的测试
测试登录接口
"""
import requests
import pytest
# 准备登录数据
login_data = [("","123456",510,"登录名不能为空"),
("1321111","123456",500,"请输入正确的手机号!"),
("13213331333","",510,"密码不能为空"),
("","",510,"密码不能为空"),
("13213331333","123456",500,"登录失败!")]
@pytest.mark.parametrize("username,passwd,excpet_code,excpet_msg",login_data)
def test_login(username,passwd,excpet_code,excpet_msg):
url = "http://49.233.108.117:28019/api/v1/user/login"
body = {
"loginName": username,
"passwordMd5": passwd
}
# 发送请求
r = requests.post(url,json=body)
print(r.json())
# 添加断言
assert r.json()["resultCode"] == excpet_code
assert r.json()["message"] == excpet_msg
执行
pytest -s -v test_data.py