前言:一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并没什么区别。这个时候就可以利用ddt来管理测试数据,提高代码复用率。
直接撸代码:
import unittest
import ddt
import requests
# 接口参数,用列表[]包裹起来,每组数据则是单独的子列表(可迭代对象即可,如字典、列表),入参和断言分别用字典格式,则会形成一个子列表数据中存在一组入参以及对应一组断言数据;
test_data = [
[{
"identity": "18682236985",
"password": "123456",
"pid": "n6kwoCSe"
},
{"code": 200}], # code并不是接口需要的参数,是为了对返回结果进行断言而加在这里单独使用字典存放的预期结果
[{
"identity": "18682236985",
"password": "",
"pid": "n6kwoCSe"
},
{"code": 400}],
[{
"identity": "",
"password": "123456",
"pid": "n6kwoCSe"
},
{"code": 400}]
]
@ddt.ddt
class LoginTest(unittest.TestCase):
"""CodeMao登录接口"""
@classmethod
def setUpClass(cls):
cls.url = "https://api.codemao.cn/tiger/accounts/login"
@ddt.data(*test_data)
def test_login(self, value): # 定义一个变量value来接收ddt.data中的数据
r = requests.post(self.url, json=value[0]) # 每组数据value[0]才是真的入参数据
print("接口响应状态码:%s" % r.status_code, "预期响应状态码:%s" % value[1]["code"])
self.assertEqual(r.status_code, value[1]["code"]) # 每组数据value[1]则是断言字段
if __name__ == '__main__':
unittest.main()
可以看到,虽然只写了一条用例,但是却执行了3次,根据传参不同,得到不同的结果,相当于3条用例;
我这里只是用了ddt.data,ddt还有其他的装饰方法,如:ddt.file_data、ddt.unpack,后面博客进行补充说明!