一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并没什么区别。
这个时候就可以利用ddt来管理测试数据,提高代码复用率。
※但要注意:正向和逆向的要分开写※
安装:pip install ddt
四种模式:第一步引入的装饰器@ddt;导入数据的@data;拆分数据的@unpack;导入外部数据的@file_data
# 一定要和单元框架一起使用 import unittest, os from ddt import ddt, data, unpack, file_data """单组元组测试""" @ddt class TestWork(unittest.TestCase): @data(1, 2, 3) def test1(self, value): # value来接收data的数据 print(value) if __name__ == '__main__': unittest.main() """ 结果: 1 2 3 """ """2多组未分解元素""" @ddt class TestWork(unittest.TestCase): @data((1, 2, 3), (4, 5, 6)) def test2(self, value): print(value) if __name__ == '__main__': unittest.main() """ 结果: (1, 2, 3) (4, 5, 6) """ """3多组分解元素""" @ddt class TestWork(unittest.TestCase): @data((1, 2, 3), (4, 5, 6)) @unpack def test3(self, value1, value2, value3): print(value1, value2, value3) if __name__ == '__main__': unittest.main() """ 结果: 1 2 3 4 5 6 """2读取列表的数据
import unittest from ddt import ddt,data,unpack # # """列表的拆分与不拆分""" @ddt class TestWork(unittest.TestCase): @data([{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}]) def test1(self, value): print(value) if __name__ == '__main__': unittest.main() """ 结果: [{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}] """ @ddt class TestWork(unittest.TestCase): @data([{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}]) @unpack ⭐ def test1(self, value1, value2): print(value1,value2) if __name__ == '__main__': unittest.main() """ 结果: {'name': 'lili', 'age': 12} {'sex': 'male', 'job': 'teacher'} """3读取字典数据
import unittest from ddt import ddt,data,unpack # # """⭐字典的读取比较特殊,因为在拆分的时候,形参和实参的key值要一致,否则就会报错⭐""" @ddt class TestWork(unittest.TestCase): # 读取单组数据 @data({'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}) def test1(self, value): print(value) if __name__ == '__main__': unittest.main() """ 结果: [{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}] """ """以上运行的结果数据,就可以作为request的请求参数!""" @ddt class TestWork(unittest.TestCase): # ⭐多数据拆分,重点来了 # ⭐重点来了:首先结果展示的数据是字典里的value,没有打印key的值;其次 @data里的数据key值和def方法里的形参 # 名称一定要一致,否则,打印的时候,就会报莫名的参数错误, @data({'name': 'lili', 'age': '16'}, {'name': 'female', 'age': 'nurser'}) @unpack def test1(self, name, age): print(name, age) if __name__ == '__main__': unittest.main() """ 结果: lili 16 female nurser """4读取文件数据
import unittest,os from ddt import ddt,data,unpack,file_data '''数据格式必须为json,且必须为双引号的键值对形式,如果不是json格式,有列表等其它格式嵌套的话,无论是 否有@unpack,形参和参数数量都要和key值相等''' @ddt class testwork(unittest.TestCase): testdata=[{'a': 'lili', 'b': 12}, {'a': 'sasa', 'b': 66}] @data(*testdata) def test_01(self, value): print(value) @file_data(os.getcwd()+"/json11.txt") def test2(self, value1): print(value1) if __name__ == '__main__': unittest.main()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)