Здравствуйте вам каждому. Мы — Дмитрий и Павел, специалисты по тестированию в ITFB Group. В нашей работе, как и у любого тестировщика, есть много рутинных, однотипных задач. Делать их не хочется, но без них нельзя. К счастью, нам теперь могут помогать генеративные нейросети.
Мы решили исследовать возможности ChatGPT в нашей работе: чем он может быть полезен при составлении документации, написании тестовых сценариев и генерации автотестов. Конечно, это пока что не идеальный инструмент, но мы на своем опыте убедились, что в чём-то он уже может быть полезен многим тестировщикам.
Приглашаем под кат почитать про наш опыт.
ChatGPT в тестировании
Главный минус ChatGPT — ограниченная способность к анализу. Пока что сервис может принимать только текстовую информацию. И, как и человек, допускает ошибки. В случае с тестированием иногда у него возникают трудности с пониманием контекста — в проектах требования к тестированию могут быть написаны сложным языком, а что-то вообще может быть понятно только вам и вашей команде. Еще могут возникнуть этические и юридические вопросы относительно конфиденциальности и прав на данные.
Мы решили сами разобраться, что сейчас умеет этот сервис и какие у него есть ограничения. Для этого мы погоняли его в своих рабочих задачах. Если вкратце, то тестировщику ChatGPT может быть полезен для того, чтобы:
генерировать тестовые сценарии;
создавать документацию: план тестирования, отчет об ошибках, чек-лист;
работать с базами данных и запросами;
работать с техниками тест-дизайна и генерировать автотесты;
взаимодействовать с системными администраторами и администраторами чат-ботов.
По каждому из пунктов есть свои нюансы, пройдемся по каждому детально.
Генерация тестовых сценариев
Прежде чем писать тест, нужно составить его сценарий. С этого мы и начали эксперименты с ChatGPT. Например, нужно было проверить сервис «База данных». Нейросеть составила для нас такой документ с описанием вкладок, полей и некоторых проверок графического интерфейса:
Мы попросили ChatGPT: «Напиши тест-кейсы». Но в ответ получили не сами сценарии, а расширенный список проверок, на основе которого можно создать сценарии.
Тогда решили спросить подробнее: «Напиши тестовые сценарии как опытный тестировщик». И чат-бот действительно их написал, дал названия и прописал основные атрибуты. А заодно и некоторые комментарии.
Это примеры базовых тестовых сценариев. Они демонстрируют основную функциональность, но не покрывают все возможные способы использования. Тогда мы решили написать запрос еще подробнее, чтобы ChatGPT придумал тестовый сценарий для проверки требований. Приятно, что и ответ мы получили более детализированный:
Получается, что для получения корректного результата нужно тщательно описать, что вы хотите от чат-бота, с использованием каких методик.
Составление баг-репорта
Мы тестируем не ради самого процесса, а для поиска ошибок. И обнаружив баг, мы должны составить об этом отчёт. Это тоже однообразное занятие, которое хорошо бы автоматизировать. Мы предложили эту задачу ChatGPT. Попробовали сначала на этой простой форме с именем пользователя и кнопками «Зарегистрироваться» и «Авторизоваться».
Мы попросили бота составить отчет, что при регистрации нового пользователя с именем, которое уже есть в системе, не возникает ошибки, что такой пользователь уже есть, и отправили ему URL-формы с багом. Бот ответил, что у нас есть некий шаблон отчета, и перечислил все основные атрибуты: ID, название, описание, шаги для воспроизведения, ожидаемый фактический результат. ChatGPT даже назначил серьезность ошибки и пояснил, что это может привести к конфликтам в базе данных и проблемам с безопасностью.
Но если посмотреть внимательно, то в отчете не описаны действия с кнопками. Попросили бота это исправить:
В шаге 5 он указал, что нужно заполнить форму и нажать кнопку «Регистрация», но у нас такой кнопки нет. Забавно, что с ChatGPT можно спорить. Мы указали на его неточность, бот извинился и обосновал свой ответ тем, что пока, к сожалению, он не может просматривать веб-сайты и опирается на список элементов пользовательского интерфейса, которые присущи большинству сайтов с формой регистрации.
Получается, что для получения корректного отчета об ошибках нужно детализировать требования. К примеру, мы указали, какие поля у нас есть. И после этого бот пошагово корректно описал наши кнопки и поля.
Проектирование тестирования
В части проектирования бот умеет формировать классы эквивалентности, таблицы принятия решений, таблицы для попарного тестирования или пользовательские сценарии. Мы предложили ему написать тестовый сценарий с использованием методики «Эквивалентное разбиение на классы»:
Бот даже отметил, что эквивалентное разбиение на классы выполняется на основании предположения, будто каждый класс обрабатывается системой одинаково, однако в реальной жизни это может быть не так. Полезное напоминание.
Однако такого уровня подробности маловато, и мы снова попросили бота конкретизировать. На этот раз эквивалентных классов он перечислил столько же, а шаги описал подробнее:
Работа с базами данных и запросами
В тестировании часто приходится писать SQL-запросы к базам данных, чтобы выдернуть оттуда разную информацию. ChatGPT умеет и такое. Для примера мы попросили его составить запрос на получение списка всех сотрудников, которые пришли на работу в 2008 году:
Бот использовал оператор YEAR для извлечения даты. Других полей мы ему не указали, однако бот сам предположил, что в таблице есть поле start date
с датой начала работы сотрудника. То есть ChatGPT оперирует присущими большинству баз данных полями. Но что если такой запрос не подходит из-за каких-нибудь особенностей базы? Сможет ли ChatGPT перефразировать его? Давайте проверим:
Неплохо! А справится ли бот с задачей посложнее? Мы сказали ему, что у нас есть таблица Analyze, таблица Orders и таблица Group, и предложили вывести названия и цену для всех анализов, которые продавались с 5 февраля 2020 года и всю следующую неделю:
Ответ стал подробнее: с пояснениями, какие операторы использованы, какие таблицы объединены и как именно.
Генерирование тестов и автотестов
Хорошо, выяснили, что ChatGPT умеет писать сопроводиловку в виде сценариев и отчетов, а что насчет самих тестов? В качестве подопытного кролика мы взяли форму для регистрации на сайте Google и попросили бота применить методики составления тестов для полей «Имя», «Фамилия», «Имя пользователя» и «Пароль». Проверки обычные: ограничение до пяти символов, символы на латинице, цифры от 0 до 9, и чтобы по каким-то полям они были уникальны. Бот подробно расписал каждую методику:
Снова наше любимое «а если добавить вес?»: мы предложили боту напиcать XPath-локаторы на основе части XML, в котором находятся искомые поля. Бот оказался погружен в контекст и сразу понял, что мы хотим. Обратите внимание, что нейросети для корректных ответов нужно много контекста.
Раз уж он такой сообразительный, пусть теперь напишет автотест:
К нашему удивлению, бот выдал класс целиком, подключив библиотеки Selenide и Junit.
Кстати, мы обнаружили одну классную особенность ChatGPT: если вы только начинаете изучать автоматизацию или другие дисциплины, вам будут очень полезны примечания, которые бот делает в коде. Есть даже пояснение, что этот пример может не соответствовать желаемой реализации. Если хотите, можно поправить код или задать уточняющие вопросы.
Работа с API
В нашей работе нередко нужно обращаться к API, чтобы проверить тот или иной сервис. Мы решили опробовать ChatGPT на одном из сторонних сервисов, который содержит известные методы — GET, POST, PUT, DELETE, PATCH и т. д. И попросили бота сгенерировать автотест с ответом в формате JSON для вкладки «Test» в POSTMAN, где проверяется поле «Avatar», и при этом чтобы параметры в списке объектов заканчивались на .jpg:
Бот назвал тест по-своему. Он поместил в переменную json data
ответ от сервера, прошел по нему циклом и сопоставил значения полей. Но разве бывают тестировщики без желания что-нибудь сломать? Мы решили изменить в самом тесте формат картинки на .png. Естественно, получили fail. И бот даже указал место ошибки.
А если есть множество вложенностей? Тогда JSON станет очень сложным. Мы взяли для пробы еще один сторонний сервис, который тоже написан на Swagger. С помощью метода GET получили ответ со списком игр и попросили ChatGPT найти подстроку в поле publish date
. Затем на уровне вложенности (тут у нас массив с объектами) попросили найти значение либо в формате string, либо содержащее название string в своем параметре. Бот дал верный результат: два цикла проходят по внешним и внутренним полям, дальше программа погружается и ищет то, что нужно.
Мы прогнали тест, и он выполнился корректно. Но он не «защищен от дурака», его можно сломать:
Чем еще таким можно нагрузить бота? О, а что если нам нужно написать конвейер для GitLab, чтобы в нём были задачи для модульных, интеграционных и UI-тестов, и чтобы все это собиралось на этапе Test?
ChatGPT выдал конфигурационный файл в формате YAML. Мы проверили его на вкладке «Edit» в GitLab CD, и во вкладке «Visualize» всё корректно собралось — есть этапы и задачи, которые можно расширять и применять:
Выводы и рекомендации, что еще потестить
Мы убедились, что с помощью ChatGPT можно ускорить тестирование. Сейчас этот сервис может помочь написать документацию и отчеты, он даже умеет генерировать автотесты. Но рекомендуем всегда подходить к его творчеству критически, со здравым смыслом. Ведь нейросеть может выпасть из контекста вашей беседы и напридумывать абсолютно бессмысленные тестовые сценарии.
Конечно, этот сервис вовсе не единственный в своем роде. Сами мы их не пробовали, но рекомендуем присмотреться:
Google Bard Ai. Очень похож на ChatGPT, но получает информацию из интернета. Не поддерживает русский язык.
YaGPT. Разработан в Яндексе. Пока не умеет вести конструктивный диалог, поэтому приходится каждый раз заново писать, что вы от него хотите, давать полный контекст.
ChatSonic. Чат-бот для создателей новостного контента. Пока не может выполнять математические операции.
YouChat. Держит в курсе текущих событий, поддерживается Google.
Первый опыт работы с чат-ботами точно считаем удачным и уже думаем, как расшарить его на всю команду тестирования ITFB Group. Если вы тоже пробовали применять нейросетки в своей работе, пожалуйста, делитесь в комментариях лайфхаками.