Проблема с передачей параметров в тест при запуске через xdist pytest

Добрый день!

При запуске теста через pytest указываю в параметрах browser (по умолчанию chrome), например:

py.test --tx browser=ff test_1.py

тест запускается в firefox,

но при запуске тестов параллельно

py.test -n2 --tx browser=ff test_1.p

параметр browser не учитывается и тесты запускаются параллельно, но не в том браузере (в браузере по умолчанию).

 

Не подскажете, как правильно передавать в таком случае параметры?

а где и как вы считываете опции, которые передаются на запуск тестов?

Попробуйте 
browser=ff py.test -n2 --tx test_1.py

подозреваю

import os

os.environ.get('browser')

 

for i in sys.argv:
    if i.__contains__("browser="):

Как и ожидалось, не знает команду browser.

Вы под виндой запускаете?

да.

В командной строке для управления переменными есть команда SET

На работе винды под рукой нет, но вы можете попробовать:

cmd >> SET browser=ff & py.test -n2 --tx test_1.py

А в самом тесте, как я писал выше,  

import os

os.environ.get('browser') 
 

UPD: Пардон, забыл амперсанд сначала. Проверл дома, строка os.environ.get('browser') отдаёт ff

если вы параметриризуете и используете pytest то нужно делать через hooks http://pytest.org/latest/example/simple.html?highlight=pytest_addoption

вот рабочий пример 

  1. настройка приема опции
  2. сами тесты
  3. их запуск
  4. и результаты

 

how to run
  •  
  •  
1

py.test --capture=no --browser=ff -n 3 --junitxml=junit.xml .
output of execution
  •  
  •  
1234567891011121314151617181920212223242526272829303132

c:\temp\xdist
>py.test --capture=no --browser=ff -n 3 --junitxml=junit.xml .
============================= test session starts =============================
platform win32 -- Python 2.7.3 -- pytest-2.3.4
plugins: xdist
gw0 [2] / gw1 [2] / gw2 [2]
scheduling tests via LoadScheduling
FF
================================== FAILURES ===================================
_________________________ test_something_in_parallel2 _________________________
[gw0] win32 -- Python 2.7.3 c:\Program Files (x86)\Python27\python.exe
browser = 'ff'
 
def test_something_in_parallel2(browser):
> raise Exception(browser)
E Exception: ff
 
test_something.py:6: Exception
_________________________ test_something_in_parallel1 _________________________
[gw1] win32 -- Python 2.7.3 c:\Program Files (x86)\Python27\python.exe
browser = 'ff'
 
def test_something_in_parallel1(browser):
> raise Exception(browser)
E Exception: ff
 
test_something.py:2: Exception
----------------- generated xml file: c:\temp\xdist\junit.xml -----------------
========================== 2 failed in 0.59 seconds ===========================
 
c:\temp\xdist
>
pytest config file
  •  
  •  
1234567891011

import pytest
 
 
def pytest_addoption(parser):
parser.addoption("--browser", action="store", default="firefox",
help="my option: firefox or explorer")
 
 
@pytest.fixture
def browser(request):
return request.config.getoption("--browser")
test file
  •  
  •  
123456

def test_something_in_parallel1(browser):
raise Exception(browser)
 
 
def test_something_in_parallel2(browser):
raise Exception(browser)

все вместе можно посомтреть тут https://gist.github.com/polusok/6138334

2 лайка

Подскажите , пожалуйста, как, используя pytest, в середине выполнения теста передать тесту данные? Обычный ввод с клавиатуры input не работает.