Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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


(Shestavin) #1

Добрый день!

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

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

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

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

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

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

 

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


(Mykhailo Poliarush) #2

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


(Alexander Petrovich) #3

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


(Alexander Petrovich) #4

подозреваю

import os

os.environ.get('browser')


(Shestavin) #5

 

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

(Shestavin) #6

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


(Alexander Petrovich) #7

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


(Shestavin) #8

да.


(Alexander Petrovich) #9

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

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

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

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

import os

os.environ.get('browser') 
 

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


(Mykhailo Poliarush) #10

если вы параметриризуете и используете 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