Loading

Python 数据驱动工具:DDT

背景

 

python 的unittest 没有自带数据驱动功能。

 

所以如果使用unittest,同时又想使用数据驱动,那么就可以使用DDT来完成。

 

DDT是 “Data-Driven Tests”的缩写。

 

参考资料:http://ddt.readthedocs.io/en/latest/

 

 

使用方法

 

dd.ddt:

 

装饰类,也就是继承自TestCase的类。

 

ddt.data:

 

装饰测试方法。参数是一系列的值。

 

ddt.file_data:

 

装饰测试方法。参数是文件名。文件可以是json 或者 yaml类型。

 

注意,如果文件以”.yml”或者”.yaml”结尾,ddt会作为yaml类型处理,其他所有文件都会作为json文件处理

 

如果文件中是列表,每个列表的值会作为测试用例参数,同时作为测试用例方法名后缀显示。

 

如果文件中是字典,字典的key会作为测试用例方法的后缀显示,字典的值会作为测试用例参数。

 

ddt.unpack:

 

传递的是复杂的数据结构时使用。比如使用元组或者列表,添加unpack之后,ddt会自动把元组或者列表对应到多个参数上。字典也可以这样处理。参见下面的示例2.

 

测试用例方法名生成规则

 

使用ddt后,会产生一个新的测试用例方法名:之前的测试用例方法名_ordinal_data

 

之前的测试用例方法名:即定义的测试用例方法名。比如def test_large(),这里就是test_large

 

ordinal:整数,从1开始递加。

 

data:如果传递过来的数据存在__name__属性,则这里就是该数据的__name__值。如果未定义__name__属性,ddt会尽量将传递过来的数据转化为python标识符,作为data显示。比如(3,2)就转化为3_2。需要注意的是,如果数据是字典,则这里就是字典的key。

 

使用示例

 

1. data直接放入数值

 

需要导入ddt包,然后再TestCase类上采用@ddt进行装饰,测试方法上装饰@data()。

 

data可以是数值,也可以是字符串。

import ddt
import unittest

@ddt.ddt
class TestCase(unittest.TestCase):
    def setUp(self):
        print('开始测试')

  #数值
  @ddt.data(1,2,3,4,5,6)
  def test_case_04(self,value):
        print("value1  is"+str(value))

 #字符串
@ddt.data('login','17342049522')
def test_case_05(self,value):
print('value is'+value)
if __name__=="__main__": unittest.main()

 结果:

开始测试
value1  is1
开始测试
value1  is2
开始测试
value1  is3
开始测试
value1  is4
开始测试
value1  is5
开始测试
value1  is6

 开始测试
 value islogin
 开始测试
 value is17342049522


Ran 8 tests in 0.014s


OK

 

可以看到上面只写了2个测试方法,但是最后run了8个测试用例。

这里测试方法后会被ddt加一个后缀,ddt会尝试吧测试数据转化为后缀附在测试方法后,组成一个新名字。

posted @ 2020-11-25 11:48  西柚不吃五花肉  阅读(191)  评论(0)    收藏  举报