Удаленка для jenkins+selenide+selenoid+allure+docker спецов на 2-3 часа в день. 100% remote! Присоединиться к проекту

Параметризованные тесты получают одинаковые данные

webdriver
python
selenium
Теги: #<Tag:0x00007fedc4683918> #<Tag:0x00007fedc4683760> #<Tag:0x00007fedc46834e0>

(Viacheslav) #1

Есть тесты Selenium + Python + Pytest. Данные для них генерируются с помощью функции, в которой использую datetime, string.ascii_letters, string.digits + random.choice(). Однако, после первого же теста, в последующие попадают уже сгенерированные раннее значения. То есть, никакой random не срабатывает. Я так понимаю, что Pytest просто их подтягивает из кэша.
Как можно от этого избавиться (очищать кэш после каждой генерации данных или после каждого теста)

.


(Maxim Andryushchenkov) #2

Используйте параметризацию фикстур и теста а если уж сильно надо определить список до теста то не вызывайте сразу choice(), используйте lambda функции
PS: а вообще без кода тут вас никто не поймет, приводите примеры кода чтобы детально разобрать ситуацию


(Viacheslav) #3

Вот такой примерно код:

def random_name(prefix, maxlen):
symbols = string.ascii_letters + string.digits + " " * 5
return prefix + str(round(time.time() * 100)) + “”.join([random.choice(symbols) for i in range(random.randrange(maxlen))])

title = [Something(name=random_name("it_ ", 10))]

@pytest.mark.parametrize(“name”, title, ids=[repr(x) for x in title])
def test_foo(name):
something.create_one(name)
assert …


(Maxim Andryushchenkov) #4
  1. Код оборачивается в нужные теги для наглядности.
  2. Что-то мне кажется что строчкой
title = [Something(name=random_string("it_ ", 10))]

вы уже посчитали себе рандомные значения для теста и тест просто берет готовое


(Viacheslav) #5

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


(Maxim Andryushchenkov) #6

А какой в этом смысл? Зачем автоматизировать не зная заранее какую именно тест-дату вы тестируете? Ну можно например нагенерить данных генератором или лямбдой, ну не попадут они в ваше критическое значение - тест зеленый и все рады. Так? Смысл автоматизации тогда?
В вашем случае нужно заранее параметризовать либо фикстуру либо тест и не дурить себе и людям голову рандомизацией. Вам перед тем как параметризовать тест нужно еще определиться с критическими значениями (на которых может тест упасть) для поля или что вы там тестируете.

PS: для вставки кода нажимайте этот значок в редакторе:

</>

(Viacheslav) #7

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