Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

153
Vistas
pytest usando accesorios como argumentos en parametrizar

Me gustaría usar accesorios como argumentos de pytest.mark.parametrize o algo que tenga los mismos resultados.

Por ejemplo:

 import pytest import my_package @pytest.fixture def dir1_fixture(): return '/dir1' @pytest.fixture def dir2_fixture(): return '/dir2' @pytest.parametrize('dirname, expected', [(dir1_fixture, 'expected1'), (dir2_fixture, 'expected2')] def test_directory_command(dirname, expected): result = my_package.directory_command(dirname) assert result == expected

El problema con los parámetros del dispositivo es que cada parámetro del dispositivo se ejecutará cada vez que se use, pero no quiero eso. Quiero poder elegir qué accesorios se usarán según la prueba.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si está en pytest 3.0 o posterior, creo que debería poder resolver este escenario en particular escribiendo un accesorio como:

 @pytest.fixture(params=['dir1_fixture', 'dir2_fixture']) def dirname(request): return request.getfixturevalue(request.param)

Documentos aquí: http://doc.pytest.org/en/latest/builtin.html#_pytest.fixtures.FixtureRequest.getfixturevalue

Sin embargo, no puede usar este enfoque si el dispositivo que intenta cargar dinámicamente está parametrizado.

Alternativamente, es posible que pueda resolver algo con el enlace pytest_generate_tests. Sin embargo, no he sido capaz de obligarme a investigar tanto.

over 4 years ago · Santiago Trujillo Denunciar

0

Will estaba en el camino correcto , debe usar request.getfixturevalue para recuperar el accesorio.

Pero puedes hacerlo bien en la prueba, que es más sencilla.

 @pytest.mark.parametrize('dirname, expected', [ ('dir1_fixture', 'expected1'), ('dir2_fixture', 'expected2')]) def test_directory_command(dirname, expected, request): result = my_package.directory_command(request.getfixturevalue(dirname)) assert result == expected

Otra forma es usar el complemento perezoso :

 @pytest.mark.parametrize('dirname, expected', [ (pytest.lazy_fixture('dir1_fixture'), 'expected1'), (pytest.lazy_fixture('dir2_fixture'), 'expected2')]) def test_directory_command(dirname, expected): result = my_package.directory_command(dirname) assert result == expected
over 4 years ago · Santiago Trujillo Denunciar

0

Por ahora, mi única solución es crear un accesorio que devuelva un diccionario de accesorios.

 import pytest import my_package @pytest.fixture def dir1_fixture(): return '/dir1' @pytest.fixture def dir2_fixture(): return '/dir2' @pytest.fixture def dir_fixtures( dir1_fixture, dir2_fixture ): return { 'dir1_fixture': dir1_fixture, 'dir2_fixture': dir2_fixture } @pytest.mark.parametrize('fixture_name, expected', [('dir1_fixture', 'expected1'), ('dir2_fixture', 'expected2')] def test_directory_command(dir_fixtures, fixture_name, expected): dirname = dir_fixtures[fixture_name] result = my_package.directory_command(dirname) assert result == expected

No es el mejor ya que no usa una solución integrada en pytest, pero funciona para mí.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda