Всем привет! Я QA Engineer и недавно открыл для себя ChatGPT и хочу открыть этот мир другим тестировщикам. Эта статья не руководство к применению и каких-то суперлайфхаков здесь не будет. Цель этой статьи в том, чтобы показать огромные возможности нейросетей в помощи нам, тестировщикам, в работе. Надеюсь что кто-то, прочитав это, хоть немного сможет облегчить себе составление тест-кейсов, написание документации или написание автотестов. Примеров с написанием кода здесь по минимуму, так как таких материалов уже много. Небольшая вводная:
Преимущества применения ChatGPT в тестировании ПО:
Автоматизация генерации тестовых данных: ChatGPT может использоваться для генерации различных тестовых данных, таких как исходные данные и ожидаемые результаты, что может значительно ускорить процесс тестирования.
Повышение качества тестирования: ChatGPT может использоваться для генерации более реалистичных и сложных тестовых случаев, которые могут помочь выявить более широкий спектр ошибок и проблем в ПО.
Сокращение времени тестирования: ChatGPT может ускорить процесс создания тестовых случаев и тестирования, что позволяет сократить время, затрачиваемое на ручное тестирование.
Недостатки применения ChatGPT в тестировании ПО:
Ограниченность обучения: ChatGPT может быть обучен только на основе доступных данных, что может ограничить его возможности в создании более сложных тестовых случаев.
Необходимость дополнительной проверки: ChatGPT может генерировать тестовые случаи, которые не всегда являются корректными и точными, поэтому требуется дополнительная проверка и ручное тестирование.
Высокая сложность: ChatGPT - это достаточно сложная технология, что может потребовать дополнительных усилий для ее внедрения в процесс тестирования ПО.
Ниже приведены возможные примеры использования технологии в работе.
1. Тест-кейсы
Я попросил ChatGPT написать тест-кейсы на форму авторизации, любимая задача на любом собеседовании QA. Конечно, ему понадобились условные требования для составления кейсов.
Запрос:
Ответ
Первых 10 кейсов вполне хватит для проверки валидации, как я считаю, но я решил его помучать и попросил еще.
Ответ
После 21 кейса он уже начал фантазировать и придумывать свои требования, так как посчитал что на мои требования он написал достаточно. Это говорит о том что проверки которые он предлагает оптимальные и покрывают необходимые требования за минимальное количество кейсов:
Ответ
2. Матрица компетенций
У нас маленький стартап и нет готовых матриц компетенций на позиции, а я хочу повышения и мне нужно знать к чему стремиться, чтобы объективно себя оценивать. А еще я могу взять эту матрицу и стать автором грейдов у себя в компании :)
Запрос: "Составь матрицу компетенций для Manual Senior QA Engineer"
Ответ
3. Виды тестирования
Я пишу документацию и хочу описать виды тестирования, чтобы показать всей команде чем мы вообще занимаемся.
Запрос:
В чем цель нагрузочного тестирования?
Каким методом проводить нагрузочное тестирование?
Как определить что нагрузочное тестирование проведено успешно?
Ответ
4. Как определить какие кейсы нужно автоматизировать?
Тоже, кстати, вопрос с собеседований:
Запрос: “Я пришел на новый проект. Как определить, какие тесты должны быть автоматизированы?”
Ответ
5. Выбор мобильных устройств
Допустим у нас есть какая-то метрика девайсов и нам нужно передать задачу в закупку, выбрав нужные модели оптимально, рассмотрим пример:
Запрос: "У нас есть список из 10 смартфонов которыми пользуются пользователи нашего сайта, напиши на каких разрешениях и операционных системах нам нужно тестировать сайт чтобы убедиться что у них все будет работать, а также цены этих смартфонов":
Xiaomi Redmi 9C
Samsung Galaxy A12
OPPO A17
Realme 8
Xiaomi Redmi Note 11 Pro
POCO X4 Pro
Realme GT Master Edition
Infinix HOT 12i
iPhone 11
iPhone 5s"
Ответ
Можно также попросить его самому определить устройства.
Запрос: "Напиши список из 10 самых популярных смартфонов в интернете, напиши на каких разрешениях и операционных системах нам нужно тестировать сайт чтобы убедиться что у них все будет работать, а также цены этих смартфонов":
Ответ
P.S. подобную информацию лучше пока что перепроверять хотя бы точечно.
6. Поиск локаторов на странице
Я не хочу тратить много времени на написание теста, поиск и описание локаторов можно делегировать нейросети:
Запрос:
"Я скину тебе сайт, найди на его главной странице все элементы содержащие "Security", "Sign Up", а также поисковую строку и кнопки с ссылками на соц. сети внизу страницы и напиши мне уникальные локаторы этих элементов в формате XPATH
Ответ
Конечно, не все локаторы он нашел безупречно, но с чем-то справился и попробовать, в общем то, стоит:
Проверка локаторов
7. SQL запрос
В SQL я не силен, но нужно срочно составить запрос и достать нужную информацию:
Запрос:
"Даны две таблицы В первой есть колонки: id, age, name Во второй id, salary, vacation_days Составь запрос который выведет name у которого наибольший age и его vacation_days"
Ответ с пояснениями
8. API запрос на Requests
По-моему, с этим он справился лучше всего. Конечно весь проект такими тестами не покроешь, но по сути нагенерил себе кода, а потом дорабатываешь руками, почему нет:
Запрос:
"Напиши пожалуйста код на Python + Requests который отправляет GET запрос на URL https://reqres.in/api/users?page=2 и проверяет статус код плюс валидность схемы JSON"
Ответ с комментариями
import requests
import jsonschema
url = 'https://reqres.in/api/users?page=2'
# отправляем GET запрос на URL
response = requests.get(url)
# проверяем статус код
if response.status_code == 200:
print('Статус код:', response.status_code)
else:
print('Ошибка! Статус код:', response.status_code)
# проверяем валидность схемы JSON
schema = {
"type": "object",
"properties": {
"page": {"type": "integer"},
"per_page": {"type": "integer"},
"total": {"type": "integer"},
"total_pages": {"type": "integer"},
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "integer"},
"email": {"type": "string"},
"first_name": {"type": "string"},
"last_name": {"type": "string"},
"avatar": {"type": "string"}
},
"required": ["id", "email", "first_name", "last_name", "avatar"]
}
}
},
"required": ["page", "per_page", "total", "total_pages", "data"]
}
try:
jsonschema.validate(response.json(), schema)
print('Схема JSON валидна!')
except jsonschema.exceptions.ValidationError as err:
print('Ошибка валидации схемы JSON:', err)
Такие дела. Это лишь малая часть того что можно придумать. Я уверен что уже в этом году будут выходить нейросети, специализированные на тестировании ПО, какие функции они будут выполнять можно только представить. Возможно кто-то из прочитавших эту статью здесь вдохновится и сделает свой собственный продукт. Если бы я в университете знал что матрицы и матанализ могут мне понадобиться для написания своей нейросети то определенно учился бы лучше.
Кстати, в написании этой статьи мне также помогли нейросети ChatGPT, Notion AI и MidJourney.
Комментарии (21)
mclander
00.00.0000 00:00+4И второе. Половина тесткейсов для форм авторизации, скорее относится к форме регистрации. Если уж логин из одного символа с пробелами попал в систему, то форма авторизации должна его проглотить и улыбнуться. Боржоми же пить уже поздно
sshikov
00.00.0000 00:00+3В SQL я не силен, но нужно срочно составить запрос и достать нужную информацию:
Ваша постановка задачи априори неполна, так что для нее нельзя построить однозначно правильный ответ. Но вы почему-то считаете полученный ответ верным.
Вы не указали боту, какие колонки являются в таблицах ключами. Вы не указали, что id в обеих таблицах — это тот же самый id (а в общем случае для суррогатного ключа это совсем даже не очевидно). То есть, я вот например, считаю JOIN ON t1.id = t2.id недопустимым, и человек, решая задачу, должен был бы сначала уточнить, что так можно. То что колонка в обеих таблицах называется одинаково — ни разу не повод для того, чтобы строить по ней JOIN.
Дальше больше — group by name, серьезно? То есть у нас вроде как есть id, робот по ним делает JOIN, но при этом мы группируем по имени, игнорируя тот факт, что однофамильцы бывают в природе? Не говоря уже о том, что запрос выведет все группы по всем именам, у которых есть пара во второй таблице. А в задаче (неявно, то есть это тоже дефект постановки вопроса) предполагается, что результатом будет одна строка.
Если бы это было реальное интервью на знание SQL, к человеку с таким ответом были бы вопросы. И много.obojealexander Автор
00.00.0000 00:00очень подробный разбор кейса с SQL)
статья не про то чтобы научить делать запросы скл, а для того чтобы смотивировать кого-то обратить внимание на возможности чатгпт
в скл я действительно не силен и задача высосана из пальца, это очевидно
sshikov
00.00.0000 00:00+1Для ясности — я совершенно согласен, что результат получен очень интересный. Но как по мне, на сегодня совершенно непрактичный.
То есть, вы чуть меня недопоняли — я как раз в основном про ChatGPT. SQL тут вторичен. Вот вы, к примеру (это касается нас всех, смотря какая задача), не понимаете, правильный ли ответ, и не можете это (легко) проверить. Но результату доверяете. Я же в частном случае вижу, что он сомнительный. Есть ли возможности применения инструмента, которому вы не можете всегда доверять? Для меня на сегодня такой инструмент неприменим. Для кого-то в иной ситуации — возможно может использоваться. Где границы — вот что интересно.
И второй фактор — тут уже предлагали тестировать на ChatGPT свои базы и запросы. Как по мне, это упирается в простой фактор — у нас вот в компании за вынос наружу данных сотрудника уволят, и правильно сделают. А теперь расскажите мне, как вы будете применять на внутренних приватных данных инструмент, который имеет место только в облаке? Который вы не контролируете, и не знаете, куда он завтра ваши данные сольет? А ведь ему как минимум нужно будет показать вашу реальную схему данных, а возможно и сами данные. Пока не будет версии ChatGPT, работающей на своем железе, для меня ни о каком реальном применении к реальным данным вообще речи быть не может.
Вот смотрите, я недавно показывал код, который он мне «написал» по моему запросу: habr.com/post/712390/#comment_25166598
Если посмотреть серьезно, то это вообще не код, а фигня. Оно просто не работает. Но выглядит поначалу тоже правдоподобно. Ну как же, скала, спарк, все как просили :)
Я уже не говорю о том, что когда я его спросил, кто такой Буратино, ответ был просто шедевральный:Буратино — герой русских народных сказок. Он добрый и отзывчивый, способен на доброту и благородство. У него есть друг Карлсон, с которым они проводят много времени и приключений. Буратино очень любит клюкву, он знает много историй и любит поющие рассказы. Он очень добрый, смелый и храбрый, и всегда готов помочь тем, кто в беде.
А когда я намекнул, что это не народная сказка, он быстро согласился, и выдал очередной перл:Алексей Толстой действительно придумал Буратино. Буратино появился в первой книге Толстого «Детство Буратино» в 1892 году. Затем Толстой написал другие книги о Буратино, включая «Возвращение Буратино», «Буратино и его друзья» и «Последние приключения Буратино». Все эти книги стали популярными и привлекли внимание многих читателей. В наше время Буратино достаточно известен и пользуется большой популярностью.
Верим, верим :))) В продакшн. Срочно!iBljad
00.00.0000 00:00Я как-то спрашивал его, почему Jenkins так называется (простой ответ: из-за спора с Oracle пришлось сменить название Hudson на то, что выиграло в соответствующем голосовании), ответы были один лучше другого:
Так звали почившего кота автора
Так звали поныне живущего пса автора
Так звали дворецкого автора, когда он учился в университете
sshikov
00.00.0000 00:00Еще бы узнать, где оно это берет? Я вот пользуюсь дженкинсом с тех самых пор, как его звали Хадсон, и не знаю, в честь кого новое название. Все что я знаю — это то, что это имя означает примерно "Джонкинс", а точнее, ребенок Джона (а еще точнее, Маленького Джона, того самого).
iBljad
00.00.0000 00:00Откуда — понятно, все слова взяты из интернета :) Но с количеством параметров, исчисляющихся сотнями миллионов, думаю, мы никогда не узнаем, как именно оно приходит к генерации той или иной последовательности слов.
Ну и чисто в качестве развлечения: задал тот же вопрос GPT-4: уже смогло упомянуть спор с Ораклом (таки новость попала в выборку?), но все еще выдумывает:
As a result, Kawaguchi and the community decided to change the name of the project to "Jenkins" as an homage to a key contributor to the Hudson community, who had passed away earlier that year, whose last name was Jenkins.
Когда спросил, кого же так звали, какое полное имя, то каждый раз было смешно:
оказывается фамилия Дженкинс была у человека, которого звали Andrew Bayer
The person who passed away and was honored by naming Jenkins after him was Kohsuke Kawaguchi's friend and fellow contributor to the Hudson community, whose full name was Kohsuke Kawaguchi. He was known by the nickname "Kohsuke-san" to distinguish him from the project's creator, who is also named Kohsuke Kawaguchi.
бесконечный цикл (кажется, я остановил генерацию после 20 итерации) с добавлением в ответ строки "Kohsuke Kawaguchi's colleague, " :)
PZ1
00.00.0000 00:00Midjourney в каком месте помог со статьей?
Mywex
00.00.0000 00:00Странно что чатГПТ ответил вам в пункте номер 6 - Конечно, я могу вам помочь! У него же вроде как нет доступа в интернет. Мне он ответил следующее:
К сожалению, я не могу получить ссылку на сайт, чтобы найти эти элементы для вас. Однако, я могу объяснить, как вы можете найти локаторы XPATH для этих элементов самостоятельно.
Вероятно, он был обучен когда-то и "видел" гитхаб сайт. Из чего можно сделать вывод что его знания не актуальны. И см. комментарий о том, что ему нельзя верить выше
obojealexander Автор
00.00.0000 00:00странно, я вставлял ссылки на сторонние сайты не из числа самых известных и он с ними работал, по поводу доверия согласен, доверять машинам пока рано (да и вообще стоит ли :)
Mywex
00.00.0000 00:00Если у него спросить прямо - Сходи на этот сайт и скажи что там в заголовке, например, то он ответит, что у него нет доступа в интернет. А если он выдает вам то что написано на сайте, то это только потому, что в процессе обучения ему "скормили" этот сайт(как он сам тоже отвечает). Про доверие это да...
Ivan_Pod
00.00.0000 00:00Про то, что эти кейсы скорее для формы регистрации, а не авторизации уже написали. Добавлю, что как-то все простенько - без фантазии. Что еще можно проверить (Целесообразность во внимание брать не будем. Нам же нужно сломать форму регистрации, раз уж задача дошла до тестирования?)
Где происходит верификация? Фронт/бэк? Нужна проверка и там и там, но, обязательно она должна быть на бэке (фронту, как известно - верить нельзя)
Из предыдущего пункта сразу напрашивается проверка - а могу ли я вообще ввести в поле что-то некорректное? Если могу - могу ли отправить - или фронт как-то покажет мне ошибку - подсветит или напишет?
А если отправить миллион символов?
А если отправить картинку, видео, и т.д.?
Пустую строку проверили, а NULL, NaN, undefined, true, false?
SQL-инъекция?
Race condition - попробовать одновременно зарегистрировать двух пользователей с одинаковыми логинами?
А если такой логин уже есть в системе?
А можно ли использовать логин admin, administrator и т.д.?
Et cetera
obojealexander Автор
00.00.0000 00:00А если достать провод интернета и ввести?
А если вводить без клавиатуры?
А что если компьютер находится на улице?
Замечание правильное, фанатизма в этих проверках явно не хватает)
Ivan_Pod
00.00.0000 00:00+1Ввод без клавиатуры? Прекрасный кейс. Часто забывают про ctrl+c - ctrl+v
Дело не в фанатизме, а в профессионализме
Malenka08
00.00.0000 00:00Привет, спасибо за статью. А можешь дать ссылку на бота got , которого ты использовал? Я нашла в телеге и у него ограничение по запросам в день.
obojealexander Автор
00.00.0000 00:00Привет, спасибо тебе за комментарий!
Я делал напрямую, через https://openai.com/blog/chatgpt
Нужно купить виртуальный номер, я брал филиппины за 22.5₽ и зарегаться на сайте через впн, там нужна почта и номер для подтверждения
Можешь написать в телегу я подскажу подробнее @Neznayuusername
mclander
Вроде интересно, но вот напрягает снимать очки, чтобы разобрать мелкий текст на картинках с ответами бота)
В текстовом виде в статье было бы дружественные к пользователям с неидеальным зрением, читающим с телефона. Да, chatGPT?
obojealexander Автор
ага, про мобилки действительно не подумал, виноват