2017-01-17 12 views
1

Я звоню тестовый файл сделанный в питона, со следующим:Передаёт строку в pytest, к UnitTest класса

py.test mytest.py 

Я сделал проверить документацию и следовали примеру, чтобы добавить приспособление, что прочитать передаваемый аргумент, в conftest файл:

import pytest 

def pytest_addoption(parser): 
    parser.addoption("--myoption", action="store", default="", 
     help="Specify the option string") 

@pytest.fixture 
def myoption(request): 
    return request.config.getoption("--myoption") 

И в моем единичном тестовом классе, я добавить декоратор назвать прибор:

import pytest 

@pytest.mark.usefixtures("myoption") 
class VariousTests(unittest.TestCase): 

    def test_runsomething(self): 
     print(myoption) 

Хотя я никак не могу получить значение моего варианта; что я делаю неправильно здесь? Все, что я хочу, это передать строку в pytest, чтобы она могла заполнить переменную класса в моем модульном тестовом классе.

+0

См [Параметрирование тесты] (http://doc.pytest.org/en/latest/ example/parametrize.html) в документации. –

+0

Спасибо, я прочитал это, но на самом деле это не так ясно; Я пытаюсь передать что-то вроде «моя строка параметров», работая над этим примером, чтобы узнать, как его достичь. –

+0

Он не работает для классов единичных тестов; Я попытался написать файл conftest, как в примере, добавив прибор для считывания параметра, но потом у меня нет способа получить содержимое этого параметра, потому что когда я вызываю прибор из моего модульного тестового класса, я получаю сообщение об ошибке, потому что эта функция ожидает параметр –

ответ

0

Если вы используете маркер pytest.mark.usefixtures, вы не можете получить доступ к объекту прибора, но только имеете побочный эффект функции крепления.

Если вы хотите использовать доступ к объектам арматуры в методе испытаний, используют явно указать прибор в качестве параметра:

import pytest 

def test_runsomething(myoption): # <--- myoption specified as parameter 
    print(myoption) 

➜ t cat t.py 
import pytest 

def test_runsomething(myoption): 
    print(myoption) 
➜ t py.test -s --myoption myoption-value t.py 
========================================== 
platform darwin -- Python 2.7.13, pytest-3.0.5, py-1.4.31, pluggy-0.4.0 
rootdir: /private/tmp/t, inifile: 
collected 1 items 

t.py myoption-value 
. 

============ 1 passed in 0.00 seconds ============ 

Если вы хотите использовать unittest.TestCase на основе тестах, вам необходимо изменить conftest.py, чтобы впрыскивать приспособление в класс:

conftest.py

import pytest 

def pytest_addoption(parser): 
    parser.addoption("--myoption", action="store", default="", 
     help="Specify the option string") 

@pytest.fixture 
def myoption(request): 
    request.cls.myoption = request.config.getoption("--myoption") 
    # ^-- set `myoption` attribute 

и доступ к нему в качестве метода испытаний self.myoption или VariousTests.myoption:

import unittest 
import pytest 

@pytest.mark.usefixtures("myoption") 
class VariousTests(unittest.TestCase): 
    def test_runsomething(self): 
     print(self.myoption) # <---- 
+0

Большое вам спасибо !!!!! Я сходил с ума, пытаясь понять, как вы получаете данные; потому что я выполнял с отладчиком назначение параметров, и это действительно включалось в часть прибора conftest.py; но ради небес, я не смог получить какой-либо пример, который показывает, как получить эти данные позже. Весь пример воспитывает то же, что и ваша первая часть ответа; что отлично, если вы используете тесты прямого тестирования pytest; но поскольку у меня уже есть тонна модульного теста, я просто хотел ввести параметр в класс; и во второй раз преобразуйте тесты. –

+0

@newbiez, Извините, но я не понимаю, что вы хотите мне сказать. – falsetru

+0

Я указывал, что ни один пример не упоминает, что вы можете получить миопцию, назначив request.cls.myoption выводу getoption() в приборе. –