测试接口的时候,单接口除了要测试正常的业务场景,异常场景也要进行测试。
比如 登录接口。 除了要测试正常的登录,错误数据登录也要进行测试。
使用Postman,JMeter 工具来测试接口的时候,可以使用csv文件,将数据存放在CSV文件中。通过读取文件的方式来进行测试。

pytest 参数化

pytest单元测试框架内部已经集成 参数化的功能,在使用的时候只需要引用语法即可。

基本使用

https://docs.pytest.org/en/6.2.x/parametrize.html#parametrize
test_data.py

  1. """
  2. 使用pytest的参数化功能进行单接口 多场景的测试
  3. 测试登录接口
  4. """
  5. import requests
  6. import pytest
  7. # 准备登录数据
  8. login_data = [("","123456"),
  9. ("1321111","123456"),
  10. ("13213331333",""),
  11. ("",""),
  12. ("13213331333","123456")]
  13. @pytest.mark.parametrize("username,passwd",login_data)
  14. def test_login(username,passwd):
  15. url = "http://49.233.108.117:28019/api/v1/user/login"
  16. body = {
  17. "loginName": username,
  18. "passwordMd5": passwd
  19. }
  20. # 发送请求
  21. r = requests.post(url,json=body)
  22. print(r.json())

执行。准备的数据共有5条,执行的时候会自动生成5条测试用例。

  1. pytest test_data.py -s -v

image.png

添加断言

每条数据都对应一种测试情况,不同的数据返回的结果也不一样。针对不同的结果添加不同的断言。

将断言部分添加在测试数据中。

  1. """
  2. 使用pytest的参数化功能进行单接口 多场景的测试
  3. 测试登录接口
  4. """
  5. import requests
  6. import pytest
  7. # 准备登录数据
  8. login_data = [("","123456",510,"登录名不能为空"),
  9. ("1321111","123456",500,"请输入正确的手机号!"),
  10. ("13213331333","",510,"密码不能为空"),
  11. ("","",510,"密码不能为空"),
  12. ("13213331333","123456",500,"登录失败!")]
  13. @pytest.mark.parametrize("username,passwd,excpet_code,excpet_msg",login_data)
  14. def test_login(username,passwd,excpet_code,excpet_msg):
  15. url = "http://49.233.108.117:28019/api/v1/user/login"
  16. body = {
  17. "loginName": username,
  18. "passwordMd5": passwd
  19. }
  20. # 发送请求
  21. r = requests.post(url,json=body)
  22. print(r.json())
  23. # 添加断言
  24. assert r.json()["resultCode"] == excpet_code
  25. assert r.json()["message"] == excpet_msg

执行

  1. pytest -s -v test_data.py