1、写在前言
官网地址:Welcome to DDT’s documentation! — DDT 1.4.4 documentation
源码地址:https://github.com/datadriventests/ddt
2、应用场景分析
DDT (Data-Driven Tests) allows you to multiply one test case by running it with different test data, and make it appear as multiple test cases.
我们在unittest单元测试框架中定义一个测试登录功能的方法,登录场景可以有很多种,如果一个场景写一个方法的话,这样代码量比较多、不利于后续的维护工作。这个时候我们就可以引入ddt模块,把我们的不同场景的测试数据写入到一个csv文件或者ymal文件中,然后在我们写的登录方法中去读取测试数据,这样我们就可以实现一个testcase来跑不同的测试数据。
3、用法学习
DDT由一个类装饰器ddt
(用于您的TestCase
子类)和两个方法装饰器(用于要进行乘法的测试)组成:
-
data
:包含的参数数量与要提供给测试的值一样多。 -
file_data
:将从JSON或YAML文件加载测试数据。
(1)使用@data()方法装饰器:
- 这个地方要注意data()方法传入的数据类型
import unittest
from ddt import ddt,data
data1={
"start": 0,
"end": 2,
"value": 1
}
data2= {
"start": -2,
"end": 0,
"value": -1
}
@ddt
class TestDDT(unittest.TestCase):
@data(data1,data2)
def test_get_data(self,values):
#将data()值传给values
print('values==',values)
if __name__ == '__main__':
unittest.main(verbosity=2)
(2)使用@file_data()方法装饰器加载json文件测试数据
import unittest
from ddt import ddt,file_data
@ddt
class DDTTest(unittest.TestCase):
@file_data('./data.json')
def test_get_data(self,start,end,value):
#将从json文件中读到的数据存放到values中
values={
'values_start':start,
'values_end':end,
'vlues_value':value
}
print('values=',values)
if __name__ == '__main__':
unittest.main(verbosity=2)
其中json文件格式:
{
"positive_integer_range": {
"start": 0,
"end": 2,
"value": 1
},
"negative_integer_range": {
"start": -2,
"end": 0,
"value": -1
}
}
(3)使用@file_data()方法装饰器加载yaml文件测试数据
import unittest
from ddt import ddt,file_data
@ddt
class DDTTest(unittest.TestCase):
@file_data('./data.yaml')
def test_get_data(self,start,end,value):
#将从yaml文件中读到的数据存放到values中
values={
'values_start':start,
'values_end':end,
'vlues_value':value
}
print('values=',values)
if __name__ == '__main__':
unittest.main(verbosity=2)
其中yaml文件格式(注意有空格):
positive_integer_range: {start: 0,end: 2,value: 1}
negative_integer_range: {start: -2,end: 0,value: -1}