Как импортировать питона внутри прибора и использовать его в качестве глобальных переменных для каждого теста в Pytest? - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь автоматизировать тесты пользовательского интерфейса для приложения Django с SeleniumWebDriver, и я хотел интегрировать Pytest, потому что мы уже используем его для унитарных тестов, и я хотел бы иметь папку с профилями в соответствии с конкретной средойкак локальные, производственные или промежуточные с кучей переменных, так что мы можем запустить Pytest с определенным профилем.

Мне нужны разные файлы, такие как локальные, промежуточные и производственные, с разными значениями переменных, но одной и той же схемой, и использовать ихвнутри каждого теста, как будто они были глобальными переменными.

Я пытался использовать фиксатор внутри файла conftest.py, но он выдает ошибку, в которой говорится, что я не могу импортировать целый модуль.

Есть ли способ иметь что-то вроде профилей для всех тестов в pytest и изменять его с помощью аргумента?

Я хотел бы сделать что-то вроде:

pytest --profile=local

И автоматически запускается весь тест с переменными, определенными в файле local.py.У меня есть такая идея, но любые советы приветствуются, поэтому я могу реализовать это каким-то другим способом.

1 Ответ

0 голосов
/ 15 января 2019

Это может быть следующий формат конфигурации:

class Config:
    def __init__(self, env):
        self.base_url = {
            'local': 'https://local-env.com',
            'prod': 'https://prod-env.com',
            'stage': 'https://stage-env.com',
        }[env]

        self.app_port = {
            'local': 8080,
            'prod': 80,
            'stage': 1111
        }[env]

В этом случае conftest.py будет:

from pytest import fixture

from config import Config


def pytest_addoption(parser):
    parser.addoption(
        "--env", 
        action="store",
        help="Environment to run tests against"
    )

@fixture(scope='session')
def env(request):
    return request.config.getoption("--env")

@fixture(scope='session')
def app_config(env):
    cfg = Config(env)
    return cfg

И тест:

def test_environment_is_staging(app_config):
    base_url = app_config.base_url
    port = app_config.app_port
    assert base_url == 'staging'

Использование будет выглядеть так:

pytest --env=stage 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...