Si quieres aprender Pytest desde cero, ¡puedes consultar esta serie de artículos!
https://www.cnblogs.com/poloyy/category/1690628.html
Prólogo
- Para mejorar la reutilización, usaremos diferentes dispositivos al escribir casos de prueba, tales como: la operación de inicio de sesión más común, la condición previa de la mayoría de los casos de uso es iniciar sesión
- Suponiendo que diferentes casos de uso desean iniciar sesión en diferentes cuentas de prueba, entonces el dispositivo de inicio de sesión no puede escribir la cuenta muerta, y la operación de inicio de sesión debe completarse pasando parámetros
Caso 1: Pase un solo parámetro
import pytest @ pytest.fixture () def login (request): name = request.param print (f " == 账号 是 : {name} == " ) return name data = [ " pyy1 " , " polo " ] ids = [f " login_test_name es: {name} " para el nombre en los datos] @ pytest.mark.parametrize ( " login " , data, ids = ids, indirecto = True) def test_name (login): print (f " La cuenta de inicio de sesión para el caso de prueba es: {login} " )
Resultado de ejecución
recolectando ... recolectando 2 elementos 10fixture_request.py::test_name[login_test_name is : pyy1] == El número de cuenta es: pyy1 == APROBADO [ 50% ] La cuenta de inicio de sesión para el caso de prueba es: pyy1 10fixture_request.py::test_name[login_test_name es : polo] == El número de cuenta es: polo == APROBADO [ 100%] La cuenta de inicio de sesión para el caso de prueba es: polo
Punto de conocimiento
- El parámetro indirecto = verdadero se agrega para ejecutar el inicio de sesión como una función, no como un parámetro, y para pasar datos como un parámetro a la función
- def test_name (login) , donde login es para obtener el valor devuelto por el dispositivo
Caso 2: múltiples parámetros
@ pytest.fixture () def inicios de sesión (solicitud): param = request.param print (f " 账号 是 : {param ['username']} , 密码 是 : {param ['pwd']} " ) return param data = [ { " nombre de usuario " : " nombre1 " , " pwd " : " pwd1 " }, { " nombre de usuario " : " nombre2 " , " pwd ": "pwd2 " }, ] @ pytest.mark.parametrize ( " logins " , data, indirecto = True) def test_name_pwd (logins): print (f " El número de cuenta es: {logins ['username']}, la contraseña es: {logins [ 'pwd']} " )
Resultado de ejecución
10fixture_request.py::test_name_pwd[logins0] La cuenta es: nombre1, la contraseña es: pwd1 APROBADA [ 50% ] La cuenta es: nombre1, la contraseña es: pwd1 10fixture_request.py::test_name_pwd[logins1] La cuenta es: nombre2, la contraseña es: pwd2 APROBADO [ 100%] La cuenta es: nombre2, la contraseña es: pwd2
Punto de conocimiento
Si necesita pasar varios parámetros, debe pasar el diccionario
Caso 3: múltiples accesorios (solo agregue un decorador)
Esto se usa más comúnmente
# 多个 fixture @ pytest.fixture (scope = " module " ) def input_user (request): user = request.param print ( " 登录 账户 :% s " % user) return user @ pytest.fixture (scope = " module " ) def input_psw (request): psw = request.param print ( " 登录 密码 :% s " % psw) return psw data = [ (" nombre1 " , " pwd1 " ), ( " nombre2 " , " pwd2 " ) ] @ pytest.mark.parametrize ( " input_user, input_psw " , data, indirecto = True) def test_more_fixture (input_user, input_psw): print ( " accesorio返回 的 内容: " , input_user, input_psw)
Resultado de ejecución
10fixture_request.py::test_more_fixture[name1- pwd1] acceso a la cuenta: nombre1 Contraseña: pwd1 PASADA [ 50% ] accesorio contenido devueltos: nombre1 pwd1 10fixture_request.py::test_more_fixture[name2 - contraseña2] acceso a la cuenta: nombre2 Contraseña: contraseña2 APROBADO [ 100%] Lo que devuelve el aparato: nombre2 pwd2
Caso 4: múltiples accesorios (decorador de superposición)
# 多个 fixture @ pytest.fixture (scope = " function " ) def input_user (request): user = request.param print ( " 登录 账户 :% s " % user) return user @ pytest.fixture (scope = " function " ) def input_psw (solicitud): psw = request.param print ( " 登录 密码 :% s " % psw) return psw name = [ "nombre1 " , " nombre2 " ] pwd = [ " pwd1 " , " pwd2 " ] @ pytest.mark.parametrize ( " input_user " , nombre, indirecto = verdadero) @ pytest.mark.parametrize ( " input_psw " , pwd, indirecto = Verdadero) def test_more_fixture (input_user, input_psw): print ( " fixture 返回 的 内容: " , input_user, input_psw)
Resultado de ejecución
10fixture_request.py::test_more_fixture[pwd1- NAME1] cuenta entrada: nombre1 Contraseña: pwd1 PASSED [ 25% ] accesorio contenido devueltos: nombre1 pwd1 10fixture_request.py::test_more_fixture[pwd1 - NAME2] cuenta entrada: nombre2 Contraseña: pwd1 PASSED [ 50% ] accesorio contenido devueltos: NAME2 pwd1 10fixture_request.py::test_more_fixture[pwd2 - NAME1] cuenta entrada: nombre1 contraseña: contraseña2 PASADA [ 75% ] accesorio contenido devueltos: nombre1 contraseña2 10fixture_request.py::test_more_fixture [ pwd2 - nombre2 ] cuenta de inicio de sesión: nombre2 contraseña de inicio de sesión: pwd2 APROBADA [ 100%] lo que devuelve el dispositivo: nombre2 pwd2
Número de casos de prueba = 2 * 2 = 4