Size: a a a

testing_in_python

2020 November 05

IS

Idi Suda in testing_in_python
Boris Krutskih
У меня сейчас процесс построен таким образом...
Есть 2 env: alpha, beta... джобы в дженкинсе тригерятся по пушам в репу для сборки проекта, после удачной сборки в данный момент запускаются тесты с вот таким флагом
make run-tests MAKE_ARGS="pytest tests/frontend/dashboard/ -x --url=about:blank --headless --reruns 1"

почему указано about:blank, потому что у меня в тестах осущеставляется переход на нужный урл в данный момент на beta енв...
тянутся эти все урлы с .env...
Думал сделать таким образом, в джобах с тестами добавить параметризированную сборку с урлами... но дальше где туплю так это где в коде в тестах проверку писать в зависимости на каком енве пошла сборка проекта)
осущеставляется переход на нужный урл в данный момент на beta енв...

Не понял
источник

BK

Boris Krutskih in testing_in_python
Idi Suda
Сделай parser.addoption путестовский
вот такой у меня сейчас есть

def pytest_addoption(parser):
   parser.addoption("--headless", action="store_true", default=False)
   parser.addoption("--browser", action="store", default=chrome)
   parser.addoption("--url", action="store", default="localhost")
   parser.addoption("--dimensions", action="store", default="1440,900", help="Example: --dimensions=1440,900")
источник

BK

Boris Krutskih in testing_in_python
Idi Suda
осущеставляется переход на нужный урл в данный момент на beta енв...

Не понял
https://i.imgur.com/m4sJ2tt.png
ну вот смотри)) где _URL у меня щас тянется по дефолту урл для beta енва
источник

IS

Idi Suda in testing_in_python
Boris Krutskih
У меня сейчас процесс построен таким образом...
Есть 2 env: alpha, beta... джобы в дженкинсе тригерятся по пушам в репу для сборки проекта, после удачной сборки в данный момент запускаются тесты с вот таким флагом
make run-tests MAKE_ARGS="pytest tests/frontend/dashboard/ -x --url=about:blank --headless --reruns 1"

почему указано about:blank, потому что у меня в тестах осущеставляется переход на нужный урл в данный момент на beta енв...
тянутся эти все урлы с .env...
Думал сделать таким образом, в джобах с тестами добавить параметризированную сборку с урлами... но дальше где туплю так это где в коде в тестах проверку писать в зависимости на каком енве пошла сборка проекта)
>Думал сделать таким образом, в джобах с тестами добавить параметризированную >сборку с урлами... но дальше где туплю так это где в коде в тестах проверку писать в >зависимости на каком енве пошла сборка проекта)

Ну засунь все урлы свои в конфиг какой нить.  Или датакласс
class URL:
 blabla = foo

parser.addoption("--environment", action="store", choices=["alfa", "beta"])
вот тут проверяй и загружай нужный конфиг, условно load_config(for_env="blabla")

И пользуйся во всех тестах этим конфигом. Так у тебя проверка будет единственная в самом начале и на всю тестовую сессию
источник

BK

Boris Krutskih in testing_in_python
Спасибо, щас попробую)
источник

BK

Boris Krutskih in testing_in_python
не хуйня какая-то запутался....
как я могу здесь определить нужный мне урл с энва, если у меня строго там урл для беты используется как и в остальных тестах, я так понял это уже проёб написания тестов, и теперь прийдётся лезть менять во все места? https://i.imgur.com/NLuprtI.png
источник

А

Алексей in testing_in_python
Boris Krutskih
не хуйня какая-то запутался....
как я могу здесь определить нужный мне урл с энва, если у меня строго там урл для беты используется как и в остальных тестах, я так понял это уже проёб написания тестов, и теперь прийдётся лезть менять во все места? https://i.imgur.com/NLuprtI.png
ну пичарм в этом поможет как бы
источник

А

Алексей in testing_in_python
но так да, константу надо заменить на значение, полученное из переменной или через CLI
источник

АК

Александр Кот... in testing_in_python
Boris Krutskih
Всем привет, можете подсказать, как вы запускаете тесты на разных урлах в зависимости от environment'a? допустим есть alpha и beta, тесты одни и те же, но запускать нужно в зависимости от того на какой env происходит деплой?
Тебе всё правильно советуют.

Сделай дикт или дата класс с урлами.

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

Доставай из дикта или дата класса урл окружения по этому ключу окружения.

Подставляй как base_url везде где надо.
источник

BK

Boris Krutskih in testing_in_python
Алексей
но так да, константу надо заменить на значение, полученное из переменной или через CLI
т.е что-то типа такого
@pytest.fixture
def sign_in_as_super_admin(set_config):
   from pages.amd_dashboard.sign_in import LoginPage as AmdUser
   if set_config.env == 'beta':
       navigate_to(AMD_URL)
   if set_config.env == 'alpha':
       navigate_to(AMD_URL_ALPHA)
   AmdUser().login_action(login=AMD_USER, password=AMD_PASSWORD)
источник

IS

Idi Suda in testing_in_python
Boris Krutskih
т.е что-то типа такого
@pytest.fixture
def sign_in_as_super_admin(set_config):
   from pages.amd_dashboard.sign_in import LoginPage as AmdUser
   if set_config.env == 'beta':
       navigate_to(AMD_URL)
   if set_config.env == 'alpha':
       navigate_to(AMD_URL_ALPHA)
   AmdUser().login_action(login=AMD_USER, password=AMD_PASSWORD)
ага
источник

BK

Boris Krutskih in testing_in_python
Александр Кот
Тебе всё правильно советуют.

Сделай дикт или дата класс с урлами.

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

Доставай из дикта или дата класса урл окружения по этому ключу окружения.

Подставляй как base_url везде где надо.
а с диктом типа класс и в него все урлы с энва
class Urls:
   urls = {
       'AMD_URL': AMD_URL
   }
источник

IS

Idi Suda in testing_in_python
@pytest.fixture
def sign_in_as_super_admin(set_config):
   from pages.amd_dashboard.sign_in import LoginPage as AmdUser
   url = {'beta': ADM_URL, 'alpha': AMD_URL_ALPHA}
        navigate_to(url[set_config.env])
   AmdUser().login_action(login=AMD_USER, password=AMD_PASSWORD)
источник

BK

Boris Krutskih in testing_in_python
Idi Suda
@pytest.fixture
def sign_in_as_super_admin(set_config):
   from pages.amd_dashboard.sign_in import LoginPage as AmdUser
   url = {'beta': ADM_URL, 'alpha': AMD_URL_ALPHA}
        navigate_to(url[set_config.env])
   AmdUser().login_action(login=AMD_USER, password=AMD_PASSWORD)
ну так выглядит красивее)))
источник

BK

Boris Krutskih in testing_in_python
получается теперь этот set_config будет и в тесты лететь, где я вызываю навигейт урл
источник

АК

Александр Кот... in testing_in_python
Boris Krutskih
получается теперь этот set_config будет и в тесты лететь, где я вызываю навигейт урл
Лучше вынеси в глобальную фикстуру выбор урла, а в тесты пусть полетит уже конкретный урл окружения
источник

IS

Idi Suda in testing_in_python
Boris Krutskih
получается теперь этот set_config будет и в тесты лететь, где я вызываю навигейт урл
Сделай enum/дата класс с нужными урлами, в фикстуре возвращай этот объект, в зависимости от окружения, и ходи в тестах просто по config.my_url
источник

BK

Boris Krutskih in testing_in_python
тут сперва нужно научится работать с dataclass ами 😁
источник

IS

Idi Suda in testing_in_python
Эээ ок
источник

BK

Boris Krutskih in testing_in_python
Idi Suda
Сделай enum/дата класс с нужными урлами, в фикстуре возвращай этот объект, в зависимости от окружения, и ходи в тестах просто по config.my_url
а нету хороших примеров допустим как вот в дата класс правильно засунуть это всё и возвращать в фикстурах?
Всё что гугл показывает это стандартные примеры как его создать и на этом полномочия всё
в закрепе тож ничего ненашёл
источник