美文网首页
数据驱动测试-DDT

数据驱动测试-DDT

作者: 羋学僧 | 来源:发表于2023-01-29 19:13 被阅读0次

    一、DDT介绍

    • 1. 数据驱动思想:数据和用例进行分离,通过外部数据去生成测试用例。

    • 2. 适用场景:进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,没其他什么区别。这个时候就可以利用ddt来管理测试数据,提高代码复用率。

    • 3. DDT: “Data-Driven Tests”的缩写。数据驱动测试,就是说由数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化。也就是测试数据和用例脚本代码分离。

    • 4. DDT作用:

      • 通过使用数据驱动测试,一个测试逻辑可以供多条测试数据复用,代码复用率高,避免编写重复代码;
      • 数据与测试脚本分离,某条用例失败时不会影响其他测试用例,异常排查效率高;
      • 通常来说,多用于单元测试和接口测试。简洁明了的测试框架,利于其他同事阅读,代码的可维护性高。

    二、使用方法

    安装ddt

    pip install ddt
    

    DDT组成:

    • 一个类装饰器ddt;
    • 两个方法装饰器data(直接输入测试数据)、file_data(从json或yaml中加载测试数据)

    方法使用小结:

    @data(a,b):a和b各运行一次用例
    @data(*(a,b)):a和b各运行一次用例,使用*解包,相当于@data(a,b)
    @data([a,d],[c,d]):如果没有unpack,那么[a,b]当成一个参数传入用例运行; 如果有unpack,那么[a,b]被分解开,按照用例中的两个参数传递
    @file_data(filename):对于json的文件,每一个json元素按照一个用例运行
    

    1. ddt.ddt:

    装饰测试类,也就是继承自TestCase的类。告诉ddt这个测试用例类要使用数据驱动。

    2. ddt.data:

    装饰测试方法。data中的数据类型包含单个值,元组,列表和字典。

    data把测试数据作为一个参数传递给测试用例,一个数据对应生成一条测试用例。如果data里面有多个数据那么就对应生成多条测试用例。

    如果data里放的类似是元组、列表等这样的序列类型的数据,data会把他们当成是一个整体,即一个测试数据。

    3. ddt.file_data:

    装饰测试方法。从json或yaml中加载测试数据,参数是文件名。只有以“.yml” 和 “.yaml” 结尾的文件被加载为Yaml文件。所有其他格式文件都作为json文件加载。

    4. ddt.unpack:

    装饰测试方法。作用:分割元素。传递的是复杂的数据结构时使用。

    如:添加unpack之后,ddt会自动把data中的元组或者列表对应到测试用例方法的多个参数上。字典对应到多个关键字参数上,注意字典的key和用例方法定义的参数名需要保持一致。

    使用示例:

    import unittest
    import ddt # 导入ddt
    
    # 测试数据
    data = [
        {"phone": "adfasd132", "key": "edfabc"},
        {"phone": "bdfsd134", "key": "edftest"},
        {"phone": "cdfdfd188", "key": "edfmin"},
        ]
    
    @ddt.ddt # 声明我们要用它
    class Test_ddt(unittest.TestCase):
    
        def setUp(self):
            print("Before every test case!")
    
        def tearDown(self):
            print("用例完成!")
    
        @ddt.data(*data)#现在比较流行的处理方式,使用*.data直接做字典数据的注入
        def test_001(self, data):
            print("phone is:" +data['phone'])
            print("key is:" +data['key'])
    
        @ddt.file_data("..\\testdata\\testdata1.yml") # 括号里写yml文件的相对路径
        def test_002(self, name, age):
            print('name is:' + str(name))
            print('age is:' + str(age))
    
        @ddt.file_data("..\\testdata\\testdata2.json") # 括号里写json文件的相对路径
        def test_003(self, name, age):
            print("name is:" + str(name))
            print("age is:" + str(age))
    
    
    if __name__ == '__main__':
        unittest.main()
    

    相关文章

      网友评论

          本文标题:数据驱动测试-DDT

          本文链接:https://www.haomeiwen.com/subject/tcpphdtx.html