DDT数据驱动基本应用

DDT数据驱动基本应用

  • 一、DDT介绍
  • 二、DDT基础使用
    • 1.传递基础数据类型
    • 2.传递一个复杂的数据结构
    • 3.多参数的数据驱动

一、DDT介绍

  • Data Driver Test 数据驱动测试;
  • 作用:由外部数据集合来驱动测试用例执行;
  • 数据驱动:它是一种主要设计模式一,数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。说的直白些,就是参数化的应用;
  • 核心思想:数据和测试代码的分离
  • 优点:当测试数据发生大量变化的情况下,测试代码可以保持不变;

什么场景下基于ddt进行设计,这种设计模式的意义?

  • 实现同一脚本对多组数据进行测试,最终实现数据与脚本的分离,便于维护与扩展;

  • 下载DDT库:pip install ddt

二、DDT基础使用

1.传递基础数据类型

import unittest
# 导入ddt库下所有内容
from ddt import *


# 在测试类前必须首先声明使用 ddt
@ddt
class TestCan(unittest.TestCase):

    @data(1, 2, 3, 4)
    def test_int(self, i):
        print("test_int", i)

    @data("a", "b", "c", "d")
    def test_str(self, str):
        print("test_str", str)

执行结果:
DDT数据驱动基本应用_第1张图片

2.传递一个复杂的数据结构

import unittest
from ddt import *


@ddt()
class TestDemo(unittest.TestCase):
    tuples = ((1, 2, 3), (4, 5, 6))
    lists = [[10, 20, 30], [40, 50, 60]]

    # 元组
    @data((1, 2, 3), (4, 5, 6))
    def test_01_tuple(self, n):
        print("test_tuple", n)

    # 元组2
    @data(*tuples)
    def test_02_tuples(self, n):
        print("test_tuples", n)

    # 列表
    @data([10, 20, 30], [40, 50, 60])
    def test_03_list(self, n):
        print("test_list", n)

    # 列表2
    @data([10, 20, 30], [40, 50, 60])
    @unpack
    def test_04_list(self, n1, n2, n3):
        print("test_04_lists", n1, n2, n3)

    # 列表3
    @data(*lists)
    @unpack
    def test_05_list(self, n1, n2, n3):
        print("test_05_lists", n1, n2, n3)

    # 字典
    @data({"value1": 1, "value2": 2}, {"value1": 3, "value2": 4})
    @unpack
    def test_06_dict(self, value1, value2):
        print("test_dict", value1, value2)


if __name__ == '__main__':
    unittest.main(verbosity=2)

执行结果:
DDT数据驱动基本应用_第2张图片

3.多参数的数据驱动

import unittest
from ddt import *

@ddt
class TestCase(unittest.TestCase):

    @data(["admin", "123456"], ["root", "123456"])
    @unpack
    def test_01(self, username, password):
        print("测试用户登录流程", username, password)


if __name__ == '__main__':
    unittest.main(verbosity=2)

执行结果
DDT数据驱动基本应用_第3张图片

  • @unpack :当传递的是复杂的数据结构时使用。比如使用元组或者列表,添加 @unpack 之后, ddt 会自动把元组或者列表对应到多个参数上。字典也可以这样处理;
  • 当没有加unpack时,test_case方法的参数只能填一个;如元组的例子
  • 当你加了unpack时,传递的数据量需要一致;如列表例子中,每个列表我都固定传了三个数据,当你多传或少传时会报错,而test_case方法的参数也要写三个,需要匹配上;

你可能感兴趣的:(#,DDT,python)