【原文链接】UnitTest自动化测试框架结合数据驱动(DDT)应用实践
pip install ddt
首先导入ddt,然后在测试类上使用@ddt.ddt装饰,测试方法使用@ddt.data()装饰,data里面填写参数即可,具体使用如下
代码如下:
import unittest
import ddt
@ddt.ddt
class TestDemo01(unittest.TestCase):
@ddt.data(0, 1, 2, 3, 4, 5, -1, -2, -3, -4, -5)
def test_01(self, x):
print(x)
if __name__ == "__main__":
unittest.main()
执行结果如下:
0
1
2
3
4
5
-1
-2
-3
-4
-5
Ran 11 tests in 0.004s
OK
需要在测试函数上使用一个@ddt.unpack来装饰,参数使用元组形式,代码如下:
import unittest
import ddt
@ddt.ddt
class TestDemo01(unittest.TestCase):
@ddt.data((0, 1), (2, 3), (4, 5), (-1, -2), (-3, -4))
@ddt.unpack
def test_01(self, x, y):
print(x)
print(y)
print("*************************")
if __name__ == "__main__":
unittest.main()
执行结果如下:
0
1
*************************
2
3
*************************
4
5
*************************
-1
-2
*************************
-3
-4
*************************
Ran 5 tests in 0.004s
OK
例如在demo.yml文件中编写如下内容:
-
name: "redrose2100"
age: 33
-
name: "redrose2200"
age: 22
-
name: "redrose2300"
age: 25
在测试用例上使用@ddt.file_data()装饰器装饰,代码如下
import unittest
import ddt
@ddt.ddt
class TestDemo01(unittest.TestCase):
@ddt.file_data("demo.yml")
def test_01(self, **kwargs):
print(kwargs.get("name"))
print(kwargs.get("age"))
print("-------------------")
if __name__ == "__main__":
unittest.main()
执行结果如下:
redrose2100
33
-------------------
redrose2200
22
-------------------
redrose2300
25
-------------------
Ran 3 tests in 0.003s
OK
这里可以看到因为ymal文件中设置了三组数据,所以这里显示执行了3个用例,这就是数据驱动,适合用于测试多组数据合法性的场景,比如接口测试中测试各个参数是否有合法校验的时候就非常适合采用数据驱动测试的方法