Здравствуйте вам каждому. Мы — Дмитрий и Павел, специалисты по тестированию в 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. Если вы тоже пробовали применять нейросетки в своей работе, пожалуйста, делитесь в комментариях лайфхаками.

Комментарии (8)


  1. white-wild
    09.11.2023 08:59

    Вопрос, так или иначе для chatgpt, чтобы получить что-то полезное нужно передать те же xml или возможно даже куски кода, которые могут быть закрыты коммерческой тайной. Как вы работаете с этим?


    1. hel1n
      09.11.2023 08:59

      смириться



  1. UnknownUser
    09.11.2023 08:59

    • Google Bard Ai. Очень похож на ChatGPT, но получает информацию из интернета. Не поддерживает русский язык.

    Посмотрел, русский язык плохонько, но поддерживает. Попробовал попросить дать мне актуальные ссылки на какие нибудь странички, или дать сводку по какой нибудь теме за прошедшую неделю - пишет фигню какую то. Видимо, в интернет его таки не пускают.

    А так, спасибо за статью, интересный опыт.


  1. yursha
    09.11.2023 08:59

    Я ещё и тестовые сценарии в xml формате для импорта в Zephyr через него заполняю, очень быстро набор тестов генерится. И скрипты для генерации тестовых данных через него клепаю. И оптимизацию sql запросов. Полезная штука.


  1. inscriptios
    09.11.2023 08:59
    +2

    Пока что сервис может принимать только текстовую информацию.

    Вы же, наверное, недавно статью писали? И точно что‑то упустили, как минимум, мультимодальность.

    Получается, что для получения корректного результата нужно тщательно описать, что вы хотите от чат-бота, с использованием каких-то методик.

    Поздравляю! Вы, наконец, открыли для себя prompt engineering, который уже почти стал профессией) Догоняйте)


  1. Tempest23
    09.11.2023 08:59

    Мне ChatGPT помогал быстро накидать типовые тест-кейсы по самым распространённым техникам тестирования. Это удобно. Но дальше демо дело не зашло, ибо сливать туда закрытые коммерческие данные было бы глупо.

    Зачем его использовать для баг репортов я не очень понимаю. Написать репорт - это простейшая часть работы. Сложная часть предшествует ей, поскольку такие тривиальные баги, как в вашем примере, крайне редки.

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

    Да в общем-то надо ли оно? День, когда чатжпт научится эффективно решать все эти проблемы будет днём, когда вы перестанете быть нужны. Во всяком случае я не вижу, где здесь могут появиться новые таски, которые мог бы выполнять человек. Много людей для составления промтов не нужно, что ударит не только по количеству рабочих мест, но и по зарплатам.


  1. XVlady5
    09.11.2023 08:59

    Мне одного смущает, что лаконичные и понятные фразы превращаются в портянку тяжело читаемого текста?