Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

457
Visualizações
Pytest generar pruebas basadas en argumentos

Nuevo en pytest...

Tengo lo siguiente en conftest.py para recopilar un argumento de equipo desde la línea de comando y leer en un archivo de configuración yaml:

 import pytest import yaml def pytest_addoption(parser): parser.addoption( '--team', action='store', ) @pytest.fixture def team(request): return request.config.getoption('--team') @pytest.fixture def conf(request): with open('config.yml', 'r') as f: conf = yaml.load(f.read()) return conf

Quiero ejecutar una prueba en cada jugador dentro de conf[team]['players'] (una lista). Puedo hacerlo de la siguiente manera en test_players.py:

 def test_players(team, conf): players = conf[team]['players'] for p in players: assert p == something

Este tipo de obras, en el sentido de que itera a través de los jugadores, pero todo se trata como una sola prueba. Si algo falla, toda la prueba se trata como fallida. Me gustaría que cada jugador fuera evaluado por separado.

Si coloco los reproductores manualmente, puedo hacer que esto funcione:

 import pytest class Test_Player(): @pytest.mark.parametrize( 'player', [ 'player1', 'player2', 'player3', ], ) def test_player(self, player): assert player == something

Así que mi problema es que no sé cómo pasar conf[team] a pytest.mark.parametrize. Los probé, pero en ambos casos se queja de que conf no está definido.

 import pytest class Test_Player(): @pytest.mark.parametrize( 'player', conf[team]['players'], ) def test_player(self, player): assert player == something

y

 import pytest class Test_Player(team, conf): @pytest.mark.parametrize( 'player', conf[team]['players'], ) def test_player(self, player): assert player == something

¿Que me estoy perdiendo aqui?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

El problema con su configuración es que desea parametrizar en conf[team] , pero conf debe definirse en el momento de la importación , porque es cuando se ejecuta el decorador.

Por lo tanto, tendrá que realizar esta parametrización de manera diferente, utilizando las funciones de parametrización metafunc de pytest .

 . ├── conftest.py ├── teams.yml └── test_bobs.py

En el archivo yaml:

 # teams.yml bobs: [bob1, bob2, potato] pauls: [paultato]

En el módulo de prueba:

 # test_bobs.py def test_player(player): assert 'bob' in player

En la configuración de pytest:

 import pytest import yaml def pytest_addoption(parser): parser.addoption('--team', action='store') def pytest_generate_tests(metafunc): if 'player' in metafunc.fixturenames: team_name = metafunc.config.getoption('team') # you can move this part out to module scope if you want with open('./teams.yml') as f: teams = yaml.load(f) metafunc.parametrize("player", teams.get(team_name, []))

Ahora ejecuta:

 pytest --team bobs

Debería ver tres pruebas ejecutadas: dos pruebas aprobadas (bob1, bob2) y una prueba fallida (papa). El uso pytest --team pauls generará una prueba fallida. El uso pytest --team bogus dará como resultado una prueba omitida. Si desea un comportamiento diferente allí, cambie teams.get(team_name, []) a, por ejemplo, teams[team_name] .

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda