Size: a a a

testing_in_python

2021 December 11

ТЭ

Тачами Экстович... in testing_in_python
источник

СС

Сказочный Сникерс... in testing_in_python
Я вот тоже не знаю как ей тесты распараллелить чтобы без костылей)
источник

ТЭ

Тачами Экстович... in testing_in_python
И тебя научим)
источник

ТЭ

Тачами Экстович... in testing_in_python
Записывайся. Линк в закрепе!
источник

ТЭ

Тачами Экстович... in testing_in_python
В рамках продвижения курса дам бесплатный совет: создать под каждый воркер свою очередь, и забыть о проблемах
источник

СС

Сказочный Сникерс... in testing_in_python
А я вроде присылал недавно как заставить какие то тесты гнаться строго на 1 воркере
источник

СС

Сказочный Сникерс... in testing_in_python
Но от different collection это не спасет
источник

СС

Сказочный Сникерс... in testing_in_python
О во, не зря хештег сделал
источник

СС

Сказочный Сникерс... in testing_in_python
Кстати, путь отпиливания проверки different tests collected я уже прошел, но крайне не рекомендую это делать, если не знаешь зачем и как
источник

HS

Hanna Semerenko in testing_in_python
о! мне кажется это то что надо
спасибо большое!
источник
2021 December 14

OC

Oleg Chaplashkin in testing_in_python
Ребят, а можно как-то pytest.hookimpl подружить с фикстурой?

Логика такая:

1) Есть доп. аргументы для командной строки
def pytest_addoption(parser):
   parser.addoption("--uuid", action="store", dest="uuid")


2) И я хочу их получить. Ничего, кроме как фикстура - не работает:

@pytest.fixture
def uuid_opt(request):
   return request.config.getoption("uuid")


Это работает, если мы используем фикстуру по назначению. А вот у меня еще есть хук:

@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
   ....
   outcome = yield
   rep = outcome.get_result()
   ...
   return ''


Если добави фикстуру, логично, что оно ляжет ибо не понимает арность метода и не находит хук. Что делать?

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

OC

Oleg Chaplashkin in testing_in_python
сори что дернул, нашел ответ в сорсах пайтеста
у айтема есть _pytest.config.Config объект, поэтому можно прямо так обратиться:

@pytest.hookimpl(hookwrapper=True, tryfirst=True)
def pytest_runtest_makereport(item, call):
   ....
   outcome = yield
   rep = outcome.get_result()
   item.config.getoption("uuid")
   ...
   return ''

Задачу это решает, не знаю ок или не ок, если вы вне хуков, наверное лучше обойтись фикстурой
источник
2021 December 15

ДЛ

Дмитрий Лупачев... in testing_in_python
Подскажите, плиз, как корректно добавлять в многоуровневый словарь данные.

Допустим, у меня есть тело запроса формата:
data = {
   "name": "some subscription",
   "planned_period": {
       "is_paid": True,
       "start_at": datetime.datetime.now()
       }
   }

Все эти поля не обязательные, поэтому изначально у меня
data = {}
И если в тесте передаются необходимые данные, то они добавляются в этот dict.

Например:
        if name is not None:
           data.update({"name": name})

то data = {"name": name} и все корректно работает.

Но, если я хочу, например, добавить два параметра и is_paid и start_at, чтобы получилось:
data = {
   "planned_period": {
       "is_paid": True,
       "start_at": datetime.datetime.now()
       }
   }

Делаю я это так:
        if is_paid is not None:
           data.update({
               "planned_period": {
                   "is_paid": is_paid
               }
           })

       if start_at is not None:
           data.update({
               "planned_period": {
                   "start_at": start_at
               }
           })

В итоге одно значение, перезатирает другое (что в общем-то логично, так как первое создает ключ "planned_period", а второе видит его и update просто заменяет значение.

Как можно сделать так, чтобы второе значение не затирало, а добавлялось как соседняя запись?
источник

В

Владимир in testing_in_python
Немного костыльный вариант сделать сразу полный словарь, а потом удалять ненужные ключи с помощью метода pop
источник

ДЛ

Дмитрий Лупачев... in testing_in_python
Тогда, если я не передам ничего из этого, а передам только name, то у меня будет словарь вида
data = {
   "name": name,
   "planned period": {}
}

И запрос упадет, так как бэк просто не ожидает пустого planned period
источник

ИС

Игорь Середа... in testing_in_python
Во-первых, прекрати все значения пытаться пихать во вложенные словари и заведи для хранения разных сущностей соответствующие типы.

Во-вторых, перестань дрочиться со словарём и используй pydantic.
источник

В

Владимир in testing_in_python
data.pop("planned period")
и будет
data = {
   "name": name
}
источник

V

Vit in testing_in_python
from collections import defaultdict

data = defaultdict(dict)

if is_paid is not None:
   data['planned_period']["is_paid"] = is_paid

if start_at is not None:
   data['planned_period']["start_at"] = start_at
data = dict(data)
источник

ДЛ

Дмитрий Лупачев... in testing_in_python
Спасибо, попробую
источник

EK

Evgeny Karpovich in testing_in_python
Всем привет. Может кто использует deepdiff.
Проблема у меня есть с большим количестом массивов внутри. И мне надо exclude_path всех детей-массивов.
Как пример
root['result'][[0]['id']
root['result'][[1]['id']
и так далее.
Может кто подсказать как написать regex для такого? Спасибо
источник