Size: a a a

testing_in_python

2021 October 04

SL

Stan Ley in testing_in_python
Тогда придётся переписывать conftest, конечно, чтобы он работал только с одним девайсом, а не со всеми. Плюс ещё нужен будет кастомный сборщик финальных логов для всех девайсов. Примерно так вижу.
источник

А

Алексей in testing_in_python
Да, именно такое и придется делать. Мерж логов и тп для репорта делает скедуллер в этой схеме. Вариант два - переделывать скеддулер xdist, но смысл переделки будет весьма похожий
источник

SL

Stan Ley in testing_in_python
Понял. Спасибо за совет!
источник

СС

Сказочный Сникерс... in testing_in_python
так не проще взять и сделать —dist=each (запустятся все тесты на каждом из воркеров xdist). а в conftest прописать маааленькую логику, буквально 1 метод, который выберет себе нужный девайс?
источник

СС

Сказочный Сникерс... in testing_in_python
условно есть список

devices = ['device1', 'device2', 'device3']
этот список статичен и будет одинаковым на каждом воркере


на каждом воркере мы знаем айди воркера

int(os.environ.get('PYTEST_XDIST_WORKER', 'gw0').replace('gw', ''))

и далее мы просто берем по индексу из devices.

единственное ограничение тут - запускать нужно строго в столько процессов сколько девайсов. точнее не больше чем доступно девайсов. ну и минимальную обработку какие именно девайсы выбирать, если надо
источник

А

Алексей in testing_in_python
там потом начинает нарастать логика, и все тяжелее и тяжелее это пихать в конфтест под xdist. Я тож начинали с быстрого прототипа ввиде пайтест и sdist для работы с фермами устройств :)
источник

АК

Александр Кот... in testing_in_python
Можно проставлять значение опции dist в зависимости от len(списка девайсов). Прямо в addoption parser.
источник

А

Алексей in testing_in_python
не, дльаше начинается получение девайсов в реалтайме, блокировки девайсов и тп, и проще надстройку напаисать над пайтестом, чем корячить бедный xdist
источник

А

Алексей in testing_in_python
если же задача такой и будет дальше - прогонять регресс на каждом подключенном евайсе (типа приемочное тестирование в конце производственной линии) - то тут решение Сникерса выше вполне сгодится
источник

TU

Telegram User in testing_in_python
Поделитесь опытом - как вы готовите тестовые данные и передаете их в параметризированные тесты?

У меня сейчас сделано примерно так. Есть main фикстура, которая является инстансом класса. В фикстурах по созданию тестовых сущностей я сохраняю в атрибутах этой фикстуры необходимые id сущностей. Затем в тестах, при необходимости, обращаюсь к этим атрибутам. Но обратиться я могу только в рамках тестовой функции. А список для параметризации находится вне этой функции.
Хотел бы узнать, какие есть варианты решения - чтобы иметь инфу об id тестовых сущностей вне тестовой функции\класса?
источник

IS

Idi Suda in testing_in_python
Покажи код
источник

IS

Idi Suda in testing_in_python
Что ты читал по этому поводу в интернетах?
источник

А

Алексей in testing_in_python
не совсем понял задачу. Ты хочешь автоматически параметеризировать тест данными из фикстуры (полученными при генерации тетсовых данных)?
источник

TU

Telegram User in testing_in_python
да
источник

B

Bola in testing_in_python
Как вам робот фреймворк? Есть тут любители?
источник

P

Pengo in testing_in_python
есть «принужденные»)
источник

TU

Telegram User in testing_in_python
class Data():
   pass


class App(Service, Helper):
   def __init__(self, options):
       self.options = options

   self.restapi = RestApi(self.options)

   self.data = Data()

---

@pytest.fixture(scope="session")
def api(request):
   app = App(options=options, login=login, password=password)
   yield app

---


@pytest.fixture()
def create_foo(api):

   resp = api.restapi.post(param="foo")
   api.data.foo_id = resp.json()["id"]
   yield app

---


def test_1(api, create_foo):
   resp = api.restapi.get(endpoint="foo", id=api.data.foo_id)
   assert len(resp.json()) > 0
источник

СС

Сказочный Сникерс... in testing_in_python
попахивает Баранцевым)
источник

А

Алексей in testing_in_python
посмотрите в сторону генерации тестов
def pytest_generate_tests(metafunc):
https://docs.pytest.org/en/6.2.x/example/parametrize.html
источник

TU

Telegram User in testing_in_python
немного есть, да )
источник