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

Перечада аргумента из командной строки в pytest


(heartwilltell) #1

Привет. Как понятно из темы нужно передать значение аргумента из командной строки в тесты.

Например py.test --baseurl=http://localhost:8080/api/v1

Нужно получить значение аргумента --baseurl в тестах.

Я создал в корне проекта файл conftest.py следующего содержания

def pytest_addoption(parser):
    parser.addoption("--baseurl", action="store", default="http://localhost:8080/api/v1",
                     help="Type the base URL: http://someurl.com. Default is http://localhost:8080/api/v1")

@pytest.fixture()
def get_base_url(request):
    obtained_base_url = request.config.getoption("--baseurl")
    return obtained_base_url

У меня есть базовый тестовый класс от которого наследуются все остальные тестовые классы. Как мне получить этот самый --baseurl в них

За пайтоном второй день если что :slight_smile:


(heartwilltell) #2

В принципе нашел простое решение без использования фикстур даже.

в базовом классе просто метод

def base_url(self):
base_url = pytest.config.getoption("–baseurl")
return base_url


(ex3me0) #3
import pytest
import unittest


@pytest.fixture()
def get_base_url(request):
    obtained_base_url = request.config.getoption("--baseurl")
    request.cls.base_url = obtained_base_url


@pytest.mark.usefixtures("get_base_url")
class BaseClass(unittest.TestCase):
    pass


class Child1(BaseClass):
    def test_one(self):
        assert self.base_url
        print(self.base_url)
        assert False

Запуск:

py.test test_one.py -v --baseurl=http://ololo.example.com

Вывод на консоль:

    def test_one(self):
        assert self.base_url
        print(self.base_url)
>       assert False
E       AssertionError: assert False

test_one.py:14: AssertionError
---------------------------- Captured stdout call -----------------------------
http://ololo.example.com

Все работает =) Хоть и request.cls.base_url - довольно не очевидная хрень


(ex3me0) #4

Тогда уж с декоратором @property, если через метод базового класса, дабы было лакшери


#5

Добрый день ,
Подскажите - создал новый проект - скопировал этот код - попробовал запустить - и выводит

py.test: error: unrecognized arguments: --baseurl=http://ololo.example.com
в чем моя ошибка?


(heartwilltell) #6

@mrGorobec
conftest.py
зарегистрируй там аргумент


(ex3me0) #7

@mrGorobec В моем примере опущен pytest_addoption


(Sergey Kozhevnikov) #8

Попробовал так же реализовать, не получается. В чем может быть ошибка?
Выводит: ValueError: no option named ‘-–baseurl’