Diez minutos para llevarlo a comprender: la conferencia más completa sobre pytest del marco de pruebas de Python

pytest extra corto

pytest es un marco de prueba de Python muy maduro y con todas las funciones, que tiene principalmente las siguientes características:

Simple y flexible, fácil de usar

Parametrización de soporte

Puede admitir pruebas unitarias simples y pruebas funcionales complejas, y también puede usarse para pruebas automatizadas como selenium/appnium y pruebas automatizadas de interfaz (pytest+requests)

pytest tiene muchos complementos de terceros y puede personalizar extensiones, como pytest-selenium (selenio integrado), pytest-html (generación perfecta de informes de prueba html), pytest-rerunfailures (ejecución repetida de caso fallido), pytest-xdist ( distribución multi-CPU), etc.

Omitir y xfail procesamiento de casos de prueba

Se puede integrar bien con jenkins

marco de informe----allure también es compatible con pytest
 

1. instalación de prueba de pytest

1.1 Instalación

instalación pip -U pytest

 

1.2 Verificar la instalación

pytest --version # mostrará la versión actualmente instalada

 

1.3 documentación de prueba

Documentación oficial:
https://docs.pytest.org/en/latest/contents.html

En el marco pytest, existen las siguientes restricciones:

Todos los nombres de archivo de prueba de unidad deben cumplir con el formato test_*.py o el formato *_test.py.

En el archivo de prueba unitaria, la clase de prueba comienza con Prueba y no puede tener un método de inicio (nota: al definir una clase, debe comenzar con T, de lo contrario, pytest no ejecutará la clase)

En una clase de prueba unitaria, se pueden incluir una o más funciones que comienzan con test_.

En este momento, al ejecutar el comando pytest, buscará automáticamente funciones de prueba que cumplan con las restricciones anteriores del directorio y subdirectorios actuales para ejecutar.

1.4 Modo de ejecución Pytest

 

# file_name: test_abc.py
import pytest # 引入pytest包
def test_a(): # test开头的测试函数
print("------->test_a")
assert 1 # 断言成功
def test_b():
print("------->test_b")
assert 0 # 断言失败
if __name__ == '__main__':
pytest.main("-s test_abc.py") # 调用pytest的main函数执行测试

1. Modo de función principal de clase de prueba

pytest.main("-s prueba_abc.py")

2. Modo de línea de comandos

ruta del archivo pytest / nombre del archivo de prueba

Por ejemplo: pytest ./test_abc.py

1.5 Lista de significados del código de salida de Pytest

  • Código de salida 0 Todos los casos de uso han sido ejecutados y aprobados
  • Código de salida 1 Se han ejecutado todos los casos de prueba y hay casos de prueba fallidos
  • Código de salida 2 El usuario interrumpió la ejecución de la prueba
  • Código de salida 3 Se produjo un error interno durante la ejecución de la prueba
  • Código de salida 4 Error de uso de la línea de comandos de pytest
  • Código de salida 5 No se recopilaron archivos de casos de prueba disponibles

1.6 Cómo obtener información de ayuda

Ver versión de Pytest

pytest --versión

Mostrar argumentos de funciones integradas disponibles

pytest --accesorios

Ver información de ayuda y opciones del archivo de configuración a través de la línea de comandos

pytest --ayuda

1.7 Control de la ejecución de casos de prueba

1. Después de que falle el enésimo caso de prueba, finalice la ejecución de la prueba

pytest -x # 01er error, detener la prueba

pytest --maxfail=2 # terminar la prueba si hay 2 fallas

2. Especifique el módulo de prueba

pytest test_mod.py

3. Especifique el directorio de prueba

Pruebas de PyTest/

4. Filtre la ejecución por expresión de palabra clave

pytest -k "MyClass y no método"

Este comando coincidirá con el caso de uso donde el nombre del archivo, el nombre de la clase y el nombre del método coinciden con la expresión. Aquí, este comando ejecutará
TestMyClass.test_something y no ejecutará TestMyClass.test_method_simple

5. Especificar casos de prueba por ID de nodo

nodeid se compone de nombre de archivo de módulo, delimitador, nombre de clase, nombre de método y parámetros, los ejemplos son los siguientes:

Ejecute el caso de uso especificado en el módulo

pytest test_mod.py::test_func

Ejecutar el método especificado en el módulo

ytest test_mod.py::TestClass::test_method

6. Ejecución a través de expresiones etiquetadas

pytest -m lento

Este comando ejecutará todos los casos de prueba decorados por el decorador @pytest.mark.slow

7. Ejecutar pruebas a través de paquetes

pytest --pyargs pkg.testing

Este comando importará automáticamente el paquete pkg.testing y usará el directorio donde se encuentra el paquete para ejecutar los siguientes casos de uso.

1.8 Casos en ejecución multiproceso

Cuando hay muchos casos, el tiempo de ejecución también será muy largo. Si desea acortar el tiempo de ejecución del script, puede utilizar varios procesos para ejecutarlo.

Instale pytest-xdist:

pip install -U pytest-xdist

Modo operativo:

pytest test_se.py -n NÚM

Entre ellos, NUM completa el número de procesos concurrentes.

1.9 Vuelva a intentar ejecutar casos

Al realizar pruebas de interfaz, a veces se pueden encontrar 503 o fluctuaciones de red a corto plazo, lo que hace que el caso falle, y este no es el resultado que esperábamos. En este momento, se puede resolver volviendo a intentar los casos.

Instale pytest-rerunfailures:

pip install -U pytest-rerunfailures

Modo operativo:

pytest test_se.py --reejecutando NUM

NUM completa el número de reintentos.

1.10 Mostrar contenido de impresión

Al ejecutar el script de prueba, para depurar o imprimir algún contenido, agregaremos algún contenido de impresión al código, pero al ejecutar pytest, este contenido no se mostrará. Si trae -s, puede mostrarlo.

Modo operativo:

pytest prueba_se.py -s

Además, los múltiples modos de ejecución de pytest se pueden superponer y ejecutar.Por ejemplo, desea ejecutar 4 procesos al mismo tiempo y desea imprimir el contenido de la impresión. Puedo usar:

pytest prueba_se.py -s -n 4

2. Las funciones de instalación y desmontaje de Pytest

1. La configuración y el desmontaje se dividen principalmente en: nivel de módulo, nivel de clase, nivel de función, nivel de función.

2. Existe dentro de la clase de prueba

Ejemplo de código:

  • Configuración de nivel de función ()/desmontaje ()

Ejecutar al principio y al final del método de prueba, es decir: ejecutar una función de prueba ejecutará la configuración y el desmontaje una vez

import pytest
class Test_ABC:
# 函数级开始
def setup(self):
print("------->setup_method")
# 函数级结束
def teardown(self):
print("------->teardown_method")
def test_a(self):
print("------->test_a")
assert 1
def test_b(self):
print("------->test_b")
if __name__ == '__main__':
pytest.main("-s test_abc.py")

Resultados de la:

prueba_abc.py

------->setup_method # primera configuración()

------->prueba_a

.

------->teardown_method # primer desmontaje()

------->setup_method # segunda configuración()

-------> prueba_b

.

------->teardown_method # segundo desmontaje()

2.2 Nivel de clase

Ejecute al principio y al final de la clase de prueba, es decir: solo ejecute setup_class y teardown_class una vez en una prueba, independientemente de cuántas funciones de prueba haya en la clase de prueba.

Ejemplo de código:
 

import pytest
class Test_ABC:
# 测试类级开始
def setup_class(self):
print("------->setup_class")
# 测试类级结束
def teardown_class(self):
print("------->teardown_class")
def test_a(self):
print("------->test_a")
assert 1
def test_b(self):
print("------->test_b")
if __name__ == '__main__':
pytest.main("-s test_abc.py")

Resultados de la:

test_abc.py
------->setup_class # 第一次 setup_class()
------->test_a
.
------->test_b
F
------->teardown_class # 第一次 teardown_class()

3. Archivo de configuración de Pytest

El archivo de configuración de pytest generalmente se coloca en el directorio de prueba, llamado pytest.ini, y la configuración en el archivo de configuración se usará cuando se ejecute la línea de comando.

#配置pytest命令行运行参数
[pytest]
addopts = -s ... # 空格分隔,可添加多个命令行参数 -所有参数均为插件包的参数配置测试搜索的路径
testpaths = ./scripts # 当前目录下的scripts文件夹 -可自定义
#配置测试搜索的文件名称
python_files = test*.py
#当前目录下的scripts文件夹下,以test开头,以.py结尾的所有文件 -可自定义
配置测试搜索的测试类名
python_classes = Test_*
 
#当前目录下的scripts文件夹下,以test开头,以.py结尾的所有文件中,以Test开头的类 -可自定义
配置测试搜索的测试函数名
 
python_functions = test_*
 
#当前目录下的scripts文件夹下,以test开头,以.py结尾的所有文件中,以Test开头的类内,以test_开头的方法 -可自定义

4 complementos comunes de Pytest

URL de la lista de complementos:
https://plugincompat.herokuapp.com

Contiene muchos paquetes de complementos, puede elegir usarlos de acuerdo con las necesidades del trabajo.

4.1 Condiciones previas:

1. Ruta del archivo:

- Test_App
- - test_abc.py
- - pytest.ini

2. Contenido del archivo de configuración pyetst.ini:

[pytest]
# 命令行参数
addopts = -s
# 搜索文件名
python_files = test_*.py
# 搜索的类名
python_classes = Test_*
#搜索的函数名
python_functions = test_*

4.2 Informe de prueba Pytest

pytest-HTML es un complemento para pytest para generar informes HTML de los resultados de las pruebas. Compatible con Python 2.7, 3.6

Método de instalación: pip install pytest-html

pip install pytest-html

Genere un informe de prueba en formato xml/html a través de la línea de comando y guárdelo en la ruta especificada por el usuario. Nombre del complemento: pytest-html

Cómo usar: formato de línea de comando: pytest --html=ruta de usuario/informe.html

Ejemplo:

import pytest
class Test_ABC:
def setup_class(self):
print("------->setup_class")
def teardown_class(self):
print("------->teardown_class")
def test_a(self):
print("------->test_a")
assert 1
def test_b(self):
print("------->test_b")
assert 0 # 断言失败```
运行方式:
1.修改Test_App/pytest.ini文件,添加报告参数,即:addopts = -s --html=./report.html
# -s:输出程序运行信息
# --html=./report.html 在当前目录下生成report.html文件
️ 若要生成xml文件,可将--html=./report.html 改成 --html=./report.xml
2.命令行进入Test_App目录
3.执行命令: pytest
执行结果:
1.在当前目录会生成assets文件夹和report.html文件

6. Resumen

pytest es una herramienta de prueba de Python con todas las funciones que lo ayuda a escribir mejores programas. Es similar al marco de prueba unittest que viene con Python, pero pytest es más conciso y eficiente de usar, y es compatible con el marco unittest. pytest admite pruebas unitarias simples y pruebas funcionales complejas. Puede combinar solicitudes para implementar pruebas de interfaz, combinar selenio y appium para realizar pruebas funcionales automatizadas y usar pytest combinado con Allure2 para integrarse en Jenkins para lograr una integración continua.

Por último, me gustaría agradecer a todos los que han leído detenidamente mi artículo. La reciprocidad siempre es necesaria. Aunque no es algo muy valioso, puedes quitártelo si lo necesitas:

Estos materiales deben ser el almacén de preparación más amplio y completo para los amigos [de pruebas de software]. Este almacén también ha acompañado a decenas de miles de ingenieros de pruebas a través del viaje más difícil, ¡y espero que pueda ayudarlos! 

Supongo que te gusta

Origin blog.csdn.net/OKCRoss/article/details/131055884
Recomendado
Clasificación