python--ddt数据驱动测试模块

1. 简介

ddt(Data-Driven Tests) 即数据驱动测试,可以实现不同数据运行同一个测试用例(通过数据的不同来驱动测试结果的不同)。
利用ddt模块可以实现测试数据与逻辑代码的分离。

2. API

ddt模块常用的 api 不多,大致为 ddt, data, file_data, unpack,四个api都为装饰器类型,下面逐个介绍

ddt

ddt.ddt用来装饰继承unittest.TestCase的测试类,声明该测试类使用数据驱动

import unittest
from ddt import ddt, data, unpack, file_data


@ddt
class TestDDT(unittest.TestCase):
    pass

data

ddt.data用来向测试方法传递测试数据,可以传递多组,并以不同数据类型传递(列表、字典、元祖)

import unittest
from ddt import ddt, data, unpack, file_data


@ddt
class TestDDT(unittest.TestCase):

    @data(1, 2, 3)
    def test_01(self, value):
        self.assertEqual(value, 2)

    @data([1, 2], [3, 4])	# 如果这样传递,[1, 2] 和 [3, 4] 会被依次当做测试数据传入
    def test_02(self, value):
        self.assertEqual(isinstance(value, list), True)

unpack

unpack 作用是分割元素。解包

import unittest
from ddt import ddt, data, unpack, file_data


@ddt
class TestDDT(unittest.TestCase):

    @data([5, 6], [7, 8])
    @unpack
    def test_01(self, value1, value2):   # 这样做会传递两次数据,分别为 5, 6 和 7, 8
        print(value1, value2)
       
    @data({
     "name": "nancy", "age": 20}):   # @data里的数据key必须与字典的key保持一致
    @unpack
    def test_02(self, name, age):
        print(name, age)
       

file_data

file_data 会从json | yaml 中加载数据
需要注意的是,如果文件以.yml或者.yaml结尾,ddt会作为yaml类型处理,其他所有文件都会作为json文件处理。例如.txt

import unittest
from ddt import ddt, data, unpack, file_data


@ddt
class TestDDT(unittest.TestCase):
    
    
    @file_data('./json_test.json')
    def test_11(self, value):
        print(value)
        
    @file_data('./json_test2.json')
    def test_10(self, start, end, value):
        print(start, end, value)

json_test.json

{
    "1": "test01",
    "2": "test02",
    "3": "test03"
}

json_test2.json,这里面每组测试数据都为字典类型,所以在断言的时候可以根据字典的 key 取 value

{
    "positive_integer_range": {
        "start": 0,
        "end": 2,
        "value": 1
    },
    "negative_integer_range": {
        "start": -2,
        "end": 0,
        "value": -1
    },
    "positive_real_range": {
        "start": 0.0,
        "end": 1.0,
        "value": 0.5
    },
    "negative_real_range": {
        "start": -1.0,
        "end": 0.0,
        "value": -0.5
    }
}

官方文档

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