
Ivan
21.11.2017
12:57:22
в любой момент можно поменять хттп фреймворк)

roma
21.11.2017
13:00:21

Shoo
21.11.2017
13:02:23
Со следующего года только начну изучать пайтон, вот тогда уж точно заживу)
Ну, просто, честно говоря, не первый раз натыкаюсь на статьи о том, как люди пишут килотонны джава кода (не важно даже, на каком языке, джава она везде джава) со всеми этими сериализаторами в объекты, кучей наследования и прочего ада ради того, что бы сматчить в итоге три параметра из респонза в итоговом ассерте.
Это выглядит как какой-то космолет.

roma
21.11.2017
13:03:49

Google

Shoo
21.11.2017
13:04:37
Мне не очень понятно желание завернуть все это в объект.
У тебя есть response с вполне предсказуемой структурой, который сам по себе представляет key:value данные.
Сохранил это в key:value структуру и по ключу выдергиваешь нужные значения, вместо размножения классов и их экземпляров.

roma
21.11.2017
13:06:41
Да космолёт тот ещё выходит.. Но всё некоторые приведённые объекты мне надо целиком передавать или часть их. Поэтому привожу к объекту и фильтрую его через лямбды а не через json path или xpath

Ivan
21.11.2017
13:06:48

Shoo
21.11.2017
13:07:01

Ivan
21.11.2017
13:07:35
Рефакторить что, собственно?
если имя поле поменялось, например, еще какая нить дрянь, через ИДЕ говоришь переименовать, и он по всему проекту поменяет, в случае классов
больше видимости, по мне

D.
21.11.2017
13:07:55
Подскажите, как правильно передавать данные между шагами кейса при тестировании API?

Shoo
21.11.2017
13:08:12

roma
21.11.2017
13:08:20

Ivan
21.11.2017
13:08:34

roma
21.11.2017
13:08:59
созранение таких данных лучше делать в теле теста, а не как сохранение состояния - зависит конечно от сценария но всё же

Google

Shoo
21.11.2017
13:10:31
апи
С рефакторингом API всё просто: если сохранена обратная совместимость (а API рефакторить нужно только так), то нужные ключи будут сохранены и тесты успешно (не ложнопозитивно) пройдут.
Если обратная совместимость будет поломана -> они упадут с указанием на конкретную причину падения.
При этом расширение API (добавление новых ключей) вообще не потребует изменения структуры объектов, а просто потребует новых ассертов.

D.
21.11.2017
13:11:10

Valery
21.11.2017
13:11:41
лишний

Shoo
21.11.2017
13:13:01

roma
21.11.2017
13:13:03
Передача данных в сценарии автотеста между действиями через переменные - это норм. А вот сохранение в файл - это уже избыточно..

D.
21.11.2017
13:15:02
Я понял, спасибо

Cadabrum
21.11.2017
13:19:38

Shoo
21.11.2017
13:20:41
Про парсить уж вообще молчу.

roma
21.11.2017
13:20:52
@azshoo может в пайтоне это легко работать чисто с ключ значение, но в джава придётся работать в любом случае с помощью xpath или json path - т.е. как со строками
Приведение к объекту позволяет же сгенерировать документ с которым я могу сранивть ответ от сервака - просто создав экземпляр с данными.
А храня такие объекты на котлине в виде дата классов - даёт мне лёгкую читабельность того что есть в объекте

Ivan
21.11.2017
13:21:01

ACx0
21.11.2017
13:21:27
gson?
это опечатка или я чего-то не знаю?

Shoo
21.11.2017
13:21:35
gson?
Gson это здорово. Рождает потрясающие полотна кода при ненулевом уровне вложенности.

Ivan
21.11.2017
13:22:15

Shoo
21.11.2017
13:23:19
ну смотря какой АПИ
Ну, если в API есть только JSONы нулевого уровня вложенности, то их сериализация в объекты выглядит ещё более бессмысленной. Так можно, хотя бы, сослаться на то, что оперировать структурами данных внутри объекта (upd.) красивее, чем в словаре.

Ivan
21.11.2017
13:23:53
по мне, красивее нахреначить классов, которые будет где то в дебрях находится, и будешь туда заходить только что то добавить / накодить новый класс для новой фичи апи, и через GSON их заполнять. Затем ассертить уже с классом, а не с магической переменной

Shoo
21.11.2017
13:24:37
О чем, собственно, и речь.

Google

roma
21.11.2017
13:24:49
Есть и такие случаи, когда в системе нужно создать опеределённую сущность с помощью резличных эндпоинтов и сравнить конечный результат. В шапке теста я создаю такой экземпляр из него вытягиваю нужные данные для онужных эндопоинтов и в конце проверяю что фактический резульатат и созданный эземпляр эквивалентен

Ivan
21.11.2017
13:25:11

roma
21.11.2017
13:25:55

Shoo
21.11.2017
13:26:28
Вы и так и так их парсите, просто помимо парсинга занимаетесь ещё и их сериализацией.

roma
21.11.2017
13:26:55
десериализацией и сериализацией

Shoo
21.11.2017
13:27:00
В чем разница между работой с объектом и работой со словарем, и где во втором случае кроется возможность ошибки - я хз. Может я чего-то не понимают.

Cadabrum
21.11.2017
13:27:01

Shoo
21.11.2017
13:27:53
Тестирование API это взять статичные данные, отправить на сервер, получить ответ, сравнить его по ключевым параметрам с ожидаемым (статичным, опять же) результатом.

roma
21.11.2017
13:28:49
> А если важен порядок "собирания"?
что за зверь такой?

Shoo
21.11.2017
13:31:44
Я могу понять необходимость накручивания объектов и классов когда внутри объекта могут лежать ссылки на другие объекты, и такая вложенность достигает бесконечности.
Но в случае с API запросами это всё, в итоге, всё равно приводится к строке с key:value. Следовательно складывание это всё в объекты и раскладывание обратно выглядит как переливание из пустого в порожнее ради сохранения ООП.

Ivan
21.11.2017
13:33:13

roma
21.11.2017
13:33:41
Да кстати, вопрос. Есть сценарные апи тесты которые написаны на "java", их надо запускать на проде некоторое время. Их около 10 штук. Так вот, если их запускать через крон из под только одного каталога, не будет ли проблем? Бо я думаю будут проблемы с файловой системой, типа рид врайт еррор. Выходит что нужно копипастить проект для запуска кроном разных тестов?

Ivan
21.11.2017
13:34:29

roma
21.11.2017
13:36:07
ну к примеру если в один момент времени будет одновременное обращение к одному классу
из разных тестов

Shoo
21.11.2017
13:36:26
Но это, конечно, моё сугубо личное имхо.

Google

Ivan
21.11.2017
13:37:37

roma
21.11.2017
13:37:45
ну к примеру тест запускает из одних исходников с помощью gradle someTask

Cadabrum
21.11.2017
13:38:47

Shoo
21.11.2017
13:39:41

roma
21.11.2017
13:39:44
такие проблемы были когда отчёты junit записывались в хмл, я отключил их и от греха подальше тогда для двух тестов скопипастил просто проект и запускал из под другой дирректории

Ivan
21.11.2017
13:41:25

Shoo
21.11.2017
13:42:24

roma
21.11.2017
13:45:38

Shoo
21.11.2017
13:50:49

Cadabrum
21.11.2017
13:52:02
Не, в целом я даже согласен с таким подходом, если речь идет о сайтиках и тривиальном API

Shoo
21.11.2017
13:52:33
Это работает везде, хоть на сайтиках, хоть на самолетах.

roma
21.11.2017
13:53:34
ну а зачем тогда говорить, что строка не имеет вложенностей, я понимаю что строка это просто набор символов.
Но мы говорим не про рюшечки без вложенности а про большие json/xml документы с массивами данных, а не уникальными элементами и это всё добро надо как-то обработать

Vitaliy
21.11.2017
13:56:26
привет, кто может подсказать в чем причина: переехал на мак - тесты на селениде перестали работать, браузер и страницы открываются, но тупо не видил локаторов - не найдены на странице


Shoo
21.11.2017
13:56:35
ну а зачем тогда говорить, что строка не имеет вложенностей, я понимаю что строка это просто набор символов.
Но мы говорим не про рюшечки без вложенности а про большие json/xml документы с массивами данных, а не уникальными элементами и это всё добро надо как-то обработать
Я не говорил, что строка не имеет вложенности.
Я говорил про вложенность объектов, т.е. когда в коде идет операция над объектами (напр. настройки вебдрайвера кастомятся и дальше этот драйвер, как ссылка на entity в памяти, передается дальше).
Но это ситуация не про API, потому что API предполагает что на входе и на выходе у тебя всегда будет текстовый формат данных. Не важно, какой вложенности.
Зачем преобразовывать текстовую дату в кастомный объект, вместо более примитивных (и уже реализованных) типов - в этом и был вопрос.

Nikolay
21.11.2017
13:58:04
всем хеллоу, есть те кто под espresso тесты гоняет? отчеты в чем сделаны потом? после прогона

Ivan
21.11.2017
13:58:32

Google

Anna
21.11.2017
14:01:30
allure2 уже есть

Ivan
21.11.2017
14:02:07

Nikolay
21.11.2017
14:02:49
лан спс, гляну)

Cadabrum
21.11.2017
14:04:10
Я не говорил, что строка не имеет вложенности.
Я говорил про вложенность объектов, т.е. когда в коде идет операция над объектами (напр. настройки вебдрайвера кастомятся и дальше этот драйвер, как ссылка на entity в памяти, передается дальше).
Но это ситуация не про API, потому что API предполагает что на входе и на выходе у тебя всегда будет текстовый формат данных. Не важно, какой вложенности.
Зачем преобразовывать текстовую дату в кастомный объект, вместо более примитивных (и уже реализованных) типов - в этом и был вопрос.
Ещё вариант - пришедшие данные нужно пересчитать, посчитать хеши, сделать обмен ключами, дослать то чего нехватает, придумать-еще-плясок с бубном, при которых один ответ в API не может считаться полноценной транзакцией. Всё через словари костылять?


Shoo
21.11.2017
14:05:33
Но в целом да, собирать запросы и валидировать респонзы проще словарями, чем объектами.
Всё остальное - выносить из логики теста и использовать те структуры данных, которые подходят для конкретного случая.

Cadabrum
21.11.2017
14:08:09

Ivan
21.11.2017
14:09:25
учитывая, что можно легко накосячить с именем ключа в этом злочастном словаре...

Shoo
21.11.2017
14:09:26
А в чем, собственно, разница масштабируемости между словарем и объектом, если вы правильно декомпозируете тесты и используете в них только те значения, которые важны для ассерта, вынося всю лишнюю логику во вне?

Roman
21.11.2017
14:10:17
неужели так сложно написать пару классов, камон
или вообще сгенерировать по схеме

Shoo
21.11.2017
14:11:16
Писать код вообще не шибко сложно. Можно хоть три десятка, если вечер продуктивный.
Ключевой вопрос: "Зачем?"
Мы же не пишем, по каким-то причинам, кастомные классы для цифр, строк и всего прочего. Потому что уже реализовано, есть из коробки.
Зачем генерировать кастомные классы для данных, которые всегда приходят и уходят только в key:value - я не очень понимаю.

Roman
21.11.2017
14:14:20
для переиспользования в других проектах, как вариант
и ты так говоришь, будто на питоне можно писать в 2 раза больше тестов за день

Shoo
21.11.2017
14:16:05
Нет, я говорю, что можно писать те же тесты, используя вдвое меньше излишних абстракций, втрое меньше кода и не фонтанируя потом историями о том "Как я победил сериализацию в gson всего за три дня и 800 строк кода".

Ivan
21.11.2017
14:16:52