Basado en datos en Unit Test UnitTest

prefacio


Al diseñar casos de uso, algunos casos de uso solo son diferentes en la entrada de datos de parámetros. Por ejemplo, el proceso de operación de la función de inicio de sesión es el mismo. Si el caso de uso escribe repetidamente el proceso de operación, la cantidad de código aumentará. En correspondencia con este tipo de caso de prueba con múltiples conjuntos de datos, se puede usar el patrón de diseño basado en datos. Un conjunto de datos corresponde a un caso de prueba, y el caso de uso se carga y genera automáticamente.


1. Introducción al DDT

1.1 que es ddt

ddt:data driver tests ,数据驱动测试,是一种单元测试框架

1.2 Beneficios de usar ddt

Consulte el 'Prólogo' de este artículo.

1.3 importar módulo ddt

ddt属于第三方模块,需要安装,安装方法:
方法一:在cmd命令窗口中输入:pip install ddt
方法二:pycharm中打开终端,输入:pip install ddt

1.4 Cuatro modos

ddt要与unittest单元测试框架一起结合使用
@ddt 引入ddt模块
@data 导入数据
@unpack 拆分数据
@file_data导入外部数据

2. ddt maneja varios tipos de datos

需注意以下几点:
1.使用ddt模块要在测试类前用@ddt进行修饰
2.要导入测试数据需在测试用例(以test_开头的方法)前用@data修饰
3.若需对测试数据进行拆分需用@unpack修饰
4.若需导入外部数据需用@file_data修饰

2.1 Analizar el principio de funcionamiento de ddt

import unittest
from ddt import ddt, data, unpack  # 根据需要导入相应的模块
@ddt  #引入ddt模块
class TestDdt(unittest.TestCase):
    @data(1,2,"jack")   #导入数据
    def test_single_element(self, value):
        print(value)
if __name__ == '__main__':
    unittest.main()
输出:1 2 jack
代码中@data(1,2,“jack”)传入了三个元素,故ddt自动生成了3个测试用用例。分别打印传入的数据

注意点:
	是不是发现了什么?对!对于没有使用ddt的测试用例来说,一个test_开头的测试方法一次只能
生成一个测试用例,但是!有了ddt之后,可以一次向测试方法中传入多个测试数据,而生成测试用例
的个数则是根据@data中传入的测试数据的元素个数而定的

2.2 datos de tupla de prueba ddt

2.2.1 Prueba de un único conjunto de elementos

import unittest
from ddt import ddt, data, unpack  # 根据需要导入相应的模块
@ddt  #引入ddt模块
class TestDdt(unittest.TestCase):
    @data(1,2,"jack")  #导入数据
    def test_single_element(self, value):
        print(value)
if __name__ == '__main__':
    unittest.main()
输出:1 2 jack

2.2.2 Probar múltiples conjuntos de elementos sin descomponer

import unittest
from ddt import ddt, data, unpack  # 根据需要导入相应的模块
@ddt  #引入ddt模块
class TestDdt(unittest.TestCase):
    @data((1,2,3),(6,7,8))  #导入数据
    def test_multiple_elements(self, value):
        print(value)
if __name__ == '__main__':
    unittest.main()

输出:
(1,2,3)
(6,7,8)

2.2.3 Prueba de elementos de descomposición multigrupo

import unittest
from ddt import ddt, data, unpack  # 根据需要导入相应的模块
@ddt   #引入ddt模块
class TestDdt(unittest.TestCase):
    @data((1,2,3),(6,7,8))   #导入数据
    @unpack                  #拆分数据
    def test_single_element(self, value1,value2,value3):
        print(value1,value2,value3)
if __name__ == '__main__':
    unittest.main()
输出:1 2 3
     6 7 8

2.3 datos de la lista de prueba ddt

2.3.1 Datos divididos de lista multigrupo

import unittest
from ddt import ddt, data, unpack  # 根据需要导入相应的模块
@ddt
class TestDdt(unittest.TestCase):
    @data([1, 2, 3], [5, 6, 11])
    @unpack     #拆分数据
    def test_single_element(self, value1,value2,value3):
        print(value1,value2,value3)
if __name__ == '__main__':
    unittest.main()
  输出:1 2 3 4
      5 6 7 8  

2.3.2 Listas complejas (incluyendo diccionarios) datos divididos

import unittest
from ddt import ddt, data, unpack  # 根据需要导入相应的模块
@ddt
class TestDdt(unittest.TestCase):
    @data([{"username":"ljx","password":"123456"},{"addresss":"wuhan","phone":"152738748"}])
    @unpack
    def test_single_element(self, value,value1):
        print( value,value1)
if __name__ == '__main__':
    unittest.main()
输出:  
{"username":"ljx","password":"123456"},{"addresss":"wuhan","phone":"152738748"}

2.4 ddt prueba múltiples conjuntos de datos de diccionario

import unittest
from ddt import ddt, data, unpack  # 根据需要导入相应的模块
@ddt
class TestDdt(unittest.TestCase):
    @data({"username": "ljx", "password": "123456"}, {"username": "wuhan", "password": "152738748"})
    @unpack
    def test_single_element(self, username,password):
        print( username,password)
if __name__ == '__main__':
    unittest.main()

输出:
ljx 123456
wuhan 152738748

Combinación de datos de lista de diccionario de prueba 2.5 ddt

    在实际应用中会存在数据比较多的情况,如果都直接把数据传入@data中会显得代码非常冗杂,
以包含多个字典的列表数据为例,可将包含多个字典的元素存放在一个列表变量中,在@data中传入
列表变量即可
import unittest
from ddt import ddt, data, unpack  # 根据需要导入相应的模块
@ddt
class TestDdt(unittest.TestCase):
    test_data = [{"username": "ljx", "password": "123456"},
                 {"username": "wuhan", "password": "152738748"},
                 {"username": "1", "password": "18"}]
    @data(*test_data)    #*test_data将test_data变量拆包成3个字典元素
    def test_single_element(self,value):
        print(value["username"],value["password"])
if __name__ == '__main__':
    unittest.main()


输出:
ljx 123456
wuhan 152738748
1 18

2.6 datos de archivo de lectura de prueba ddt

数据格式必须为json,且必须为双引号的键值对形式,如果不是json格式
import unittest
from ddt import ddt, data, unpack,file_data  # 根据需要导入相应的模块
@ddt
class TestDdt(unittest.TestCase):
    @file_data("../data/test.json")
    def test_single_element(self,value):
        print(value)
if __name__ == '__main__':
    unittest.main()
输出:jack
	13

datos de prueba.json

{
  "name": "jack",  #必须用双引号
  "age": 13,
}

Supongo que te gusta

Origin blog.csdn.net/qq_44954371/article/details/126530570
Recomendado
Clasificación