Я прочитал документацию pytest. Раздел 7.4.3 содержит инструкции по регистрации маркеров. Я точно следовал инструкциям, но, похоже, это не сработало для меня.
Я использую Python 2.7.2 и pytest 2.5.1.
У меня есть файл pytest.ini в корне моего проекта. Вот все содержимое этого файла:
[pytest]
python_files=*.py
python_classes=Check
python_functions=test
rsyncdirs = . logs
rsyncignore = docs archive third_party .git procs
markers =
mammoth: mark a test as part of the Mammoth regression suite
Немного предыстории для контекста: люди, создавшие систему автоматизации, над которой я работаю, больше не работают в компании. Они создали собственный плагин, который расширил функциональность стандартного pytest.mark. Насколько я понимаю, единственное, что делает пользовательский плагин, — это делает так, чтобы я мог добавлять отметки к тесту следующим образом:
@pytest.marks(CompeteMarks.MAMMOTH, CompeteMarks.QUICK_TEST_A, CompeteMarks.PROD_BVT)
def my_test(self):
вместо такого:
@pytest.mark.mammoth
@pytest.mark.quick_test_a
@pytest.mark.prod_bvt
def my_test(self):
Пользовательский код плагина остается в базе кода. Я не знаю, оказывает ли это какое-либо негативное влияние на попытку зарегистрировать знак, но подумал, что стоит упомянуть, если кто-то знает иное.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я выполняю следующую команду в командной строке, я НЕ вижу свою гигантскую метку в списке других зарегистрированных меток.
py.test --markers
Вывод, возвращаемый после выполнения вышеуказанной команды, таков:
@pytest.mark.skipif(condition): skip the given test function if eval(condition) results in a True value. Evaluation happens within the module global context. Example: skipif('sys.platform == "win32"') skips the test if we are on the win32 platform. see http://pytest.org/latest/skipping.html
@pytest.mark.xfail(condition, reason=None, run=True): mark the the test function as an expected failure if eval(condition) has a True value. Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. See http://pytest.org/latest/skipping.html
@pytest.mark.parametrize(argnames, argvalues): call a test function multiple times passing in different arguments in turn. argvalues generally needs to be a list of values if argnames specifies only one name or a list of tuples of values if argnames specifies multiple names. Example: @parametrize('arg1', [1,2]) would lead to two calls of the decorated test function, one with arg1=1 and another with arg1=2.see http://pytest.org/latest/parametrize.html for more info and examples.
@pytest.mark.usefixtures(fixturename1, fixturename2, ...): mark tests as needing all of the specified fixtures. see http://pytest.org/latest/fixture.html#usefixtures
@pytest.mark.tryfirst: mark a hook implementation function such that the plugin machinery will try to call it first/as early as possible.
@pytest.mark.trylast: mark a hook implementation function such that the plugin machinery will try to call it last/as late as possible.
Что я делаю не так и как мне зарегистрировать свой знак?
Еще одна информация: я применил метку мамонта к одному тесту (показанному ниже), когда запустил команду py.test --markers:
@pytest.mark.mammoth
def my_test(self):
/Users/user/projects/fh/consumersites/
Однако среда автоматизации живет здесь:/Users/user/projects/fh/consumersites/automation
Итак, когда я запускалpy.test --markers
, я запустил это из каталога Consumersites верхнего уровня и получил вывод, который я вставил в свой вопрос. Однако по какой-то причине, когда я запускаю команду из каталога автоматизации, я вижу, что моя гигантская метка действительно зарегистрирована. - person A_R   schedule 05.02.2014consumersites/automation/
, то вызов py.test вconsumersites/
без каких-либо аргументов будет означать (я думаю), что py.test не найдет файл pytest.ini. Если я прав, вызовpy.test automation
вconsumersites/
должен работать. - person flub   schedule 05.02.2014I have a pytest.ini file **at the root of my project**. Here is the entire contents of that file:
Когда я впервые задал вопрос, я не осознавал, что место, откуда я запускал команду, было фактором, определяющим, что я делаю неправильно. Еще раз спасибо за ответ!! - person A_R   schedule 11.02.2014consumersites
. Еслиautomation
является подкаталогомconsumersites
, разве это не должно работать? Или такой дизайн сделан специально, чтобы люди могли иметь несколько файлов pytest.ini в разных местах? Зачем кому-то иметь более 1 файла pytest.ini в кодовой базе платформы автоматизации? - person A_R   schedule 11.02.2014py.test --markers
очень похож на запуск сценария, и вам нужно запускать его из того места, где живет сценарий... и в этом случае сценарий - это pytest.ini, поэтому команду нужно запустить оттуда, где живет pytest.ini. Опять же, я понятия не имею, как все это работает, но если у кого-то есть больше информации об этом, я хотел бы услышать больше просто ради обучения. Таких пояснений нюансов нигде нет в документации, так что еще раз спасибо! - person A_R   schedule 11.02.2014