Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

157
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!