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

Тестирование формы на множестве данных в одной форме

pytest
page-object
python
webdriver
Теги: #<Tag:0x00007fedbb33f648> #<Tag:0x00007fedbb33f508> #<Tag:0x00007fedbb33f3c8> #<Tag:0x00007fedbb33f1c0>

(Дмитрий Золкин) #1

Есть некая форма допустим с 3 полями, которые надо проверить на различные значения.
Есть методы, что-то вроде:

def fill_first_field(text)
def fill_second_field(text)
def fill_third_field(text)

Как организовать проверку поля 1? В него могут вводиться два валидных значения и одно нет, например ("", 50) - валидные, 51-невалидное (ограничение в базе 50 символов)
Пока есть только вот такая идея (код теста):

@pytest.mark.parametrize('valid',["",50])
test_valid_field1(self, valid)
  def fill_first_field(valid)
  def fill_second_field(u'Тестовое значение 2')
  def fill_third_field(u'Тестовое значение 3')
  какой-то assert

@pytest.mark.parametrize('notvalid',[51])
test_notvalid_field1(self, notvalid)
  def fill_first_field(notvalid)
  def fill_second_field(u'Тестовое значение 2')
  def fill_third_field(u'Тестовое значение 3')
  какой-то assert

@pytest.mark.parametrize('valid',["",100])
test_valid_field2(self, valid)
  def fill_first_field(u'Тестовое значение 1')
  def fill_second_field(valid)
  def fill_third_field(u'Тестовое значение 3')
  какой-то assert

И так для каждого поля…
Где хранить данные например Тестовое значение 2 и Тестовое значение 3???
Как можно еще организовать такие тесты???

Используется pytest, page_object(в какой-то виде))), selenium


(Nikita) #2

Ну во первых, из вашего описания не понятно какой у вас контракт взаимодействия фронта и бека. И собственно архитектура приложения. Т.к. это влияет на архитектуру тестов.

Вариантов может быть несколько:
1 Фронт отсылает на бек данные как есть и получает ошибки валидации от бека (удобный вариант для автоматизации)
2 Фронт имеет свои валидации и только после проверки отсылает данные на бек.

Если у вас первый вариант, то UI тесты с webdriver’ом вам не нужны для проверки валидаций. Шлёте http запросы на бек с нужными тестовыми данными.
Если второй вариант, то посмотрите как у вас устроен UX, на каком этапе появляется ошибка валидации? Нужно ли вводить все 3 поля, чтобы её увидеть? Если да, то:
Сохраните 3 валидных значения и 3 не валидных в переменную класса.
У вас будет 6 тестов всего.


(Дмитрий Золкин) #3

Проверять надо через GUi. Тесты для апи тоже написаны. Пока просто никак не реализована валидация на GUi. На стороне бэкенда запроса с невалидныии данными не пропусти бд(ну или что что то вокруг нее).
Если например ввести 51 символ в нужное поле и заполнить все остальное, то программа просто выдаст 400 ошибку при сохранении(отправки на сервер невалидного jsona)


(Bolatbek) #4
  1. Почитайте про Pairwise, чтобы не гонять все варианты ваших полей, на основе какой-нибудь из утилит сгенерируйте наборы для негативных и позитивных случаев;
  2. На основе разработанных тестовых наборов из п1 - можно сгенерить результирующую таблицу, где в ячейках будут ваши значения для каждого поля и последнее поле - результат “passed” || “failed”;
  3. В итоге будут два теста - позитивный и негативный, в качестве параметров передадите распарсенную вашу таблицу (например из csv). А параметризацию попробуйте сделать как тут описано: https://docs.pytest.org/en/latest/parametrize.html#pytest-generate-tests

Ну и Nikita верно спрашивает: если валидация на стороне сервера, то на фронте достаточно проверить, как он отображает ответ с сервера. Зачем гонять через UI?

ЗЫ: в Pytest не силен, и возможно мое видение не правильное, но по описанию задания звучит как-то так.


(Дмитрий Мирошник) #5

Я не в курсе, что есть в PyTest, в Java я бы использовал TestNG + DataProvider, который натравил бы на файлик. В файлике должны быть перечислены необходимые наборы значений, например, так:

“1”, “1”, “1”
“100”, “100”, “199”
Ну и т.д.


(Дмитрий Золкин) #6

Спасибо за новый инстремент)) думаю поможет данные генерить


(Дмитрий Золкин) #7

Все таки данные в файлике отдельном бы хранили?


(Дмитрий Мирошник) #8

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