вторник, 21 июля 2026 г.

Как я сделала отчет о дифференциальном тестировании через Cursor

Я хочу рассказать, как я сделала отчет о дифференциальном тестировании (сравнение двух функций на одних данных) через ИИ. Знаю, что многие уже применяют ИИ и в хвост и в гриву, но также много тех, кто пока не умеет этого делать.

Картинка на заставку, конечно же, тоже сделала через ИИ (нанобанано)
Картинка на заставку, конечно же, тоже сделала через ИИ (нанобанано)

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



Мой пример

1. Проведение тестирования

Тестировала задачу исследования — изменение коэффициента похожести для поиска дублей. То есть функция определения коэффициента уже есть, работает. Но решили «тут поменять, там поменять», и посмотреть, станет ли лучше. 

Поэтому это и называется задачей исследования — мы не сразу заменяем старую функцию новой, а проводим эксперимент:

  1. делаем вторую функцию, 

  2. готовим тестовые данные, 

  3. прогоняем их на старой и новой функции,

  4. анализируем результат — если “да, круто вышло!”, то заменяем одну функцию на другую, если “чет не то”, то думаем дальше.

Вторую функцию сделали, моя задача была — провести шаги 2-3. И частично 4, нужно красиво-понятно отобразить отчет о тестировании, чтобы аналитик его изучил и потом уже принимал решение.

Тестовые данные я подготовила сама. Посмотрела на ТЗ и так, и эдак, и поняла, что я дольше буду расписывать ИИ, что именно тут надо сделать, чем сделаю это сама. Хотя ИИ я все равно погоняла и в хвост, и в гриву для сбора тестовых данных, но об этом я расскажу в следующий раз.

Данные собрала, потом написала автотесты. Выглядят они примерно так (для простоты понимания будем сравнивать ФИО):

Опечатка в отчестве;99;Назина;Ольга;Евгеньевна;Назина;Ольга;Еквгеньевна

Что тут есть:

  • Описание теста

  • Коэффициент похожести

  • ФИО первой пары в трех ячейках

  • ФИО второй пары

Обычно в автотестах делают разные файл — что подается на вход, что получаем на выходе. Но у меня выходной параметр всего один (коэффициент), поэтому он записывается сразу внутри теста.

Если автотест упадет, выглядеть это будет так (допустим, вместо коэффициента 99 вернулся 0):

 Expected:  [2/Similarity]:99

     Actual:  [2/Similarity]:0

Input data: 1. Опечатка в отчестве;99;Назина;Ольга;Евгеньевна;Назина;Ольга;Еквгеньевна

Etalon data: 1. Опечатка в отчестве;99;Назина;Ольга;Евгеньевна;Назина;Ольга;Еквгеньевна

Result data: 1. Опечатка в отчестве;0;Назина;Ольга;Евгеньевна;Назина;Ольга;Еквгеньевна

Это стандартный вывод автотестов:

  • Input data — что на входе

  • Etalon data — что я ожидаю

  • Result data — что тест ожидает

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

Итак, автотесты я сделала. Получилось их довольно много, больше 300, так как много разных сценариев нужно было покрыть + на каждый сценарий надо было сделать 2-6 тестов (тест-дизайн и все такое).

Прогнала на новой функции — 100 падений (цифры эти для примера, но чтобы показать масштаб проблемы формирования результата). Сохранила результаты прогона в файл new.txt.

Прогнала на старой функции — 200 падений (то есть новая работает лучше).  Сохранила результаты прогона в файл old.txt. 

Огонь, осталось оформить!


2. Оформление результата

Я подумала — как я хочу видеть результат? Хорошо бы в виде таблички, чтобы сразу видно “эта функция справилась, эта нет”.

Взяла из результатов прогона новой функции первое падение (см пример выше) и на его основе накидала в конфлюенсе такую табличку:

Описание

Коэф

ФИО 1

ФИО 2

testOldFunction

testNewFunction

Комментарий

testOldFunction работает, testNewFunction нет

1. Опечатка в отчестве

99

Назина

Ольга

Евгеньевна

Назина

Ольга

Еквгеньевна

Успех

FAIL / ожидает 0

По сути я просто вытащила все колонки из теста и добавила в конец 3 новые для анализа результата:

  • testOldFunction — как справилась старая функция

  • testOldFunction — как справилась новая функция

  • Комментарий — чтобы подсвечивать “тут некритично, а тут обратите внимание!”

Что писать в колонки прогонов:

  • Успех — если в файле прогона функции НЕТ этого теста, значит, он не упал, а прошел успешно. По крайней мере я сохранила в файл именно падения.

  • «FAIL / ожидает такое-то значение», чтобы было видно, что ждем мы (2 колонка) и что выдал тест.

Ну и, конечно, результаты надо бы сгруппировать:

  • Старая функция работает, новая нет

  • Новая функция работает, старая нет

  • Обе не работают

И внутри еще сгруппировать (помните ведь, что падений было 200+, да?). Я посмотрела глазками отчеты и выделила некоторые повторяющиеся падения. 

Допустим, есть проблема в двойном имени. Тогда все сценарии, в которых оно участвует, упадут. И вот эти падения хотелось бы сгруппировать, чтобы:

  • Сразу увидеть масштаб проблемы — сколько таких сценариев сломалось

  • Понять, что еще сломалось — увидеть все другие падения отдельно, а не так, что через раз будет “снова двойное имя”.

Так, работа понятна! Но делать ее вручную — это ж капец сколько времени! Вытащить из результатов падений что-то одно (например, строку Result data), чтобы открыть в экселе, а не блокноте, чтобы это все скопировать и вставить в таблицу в конфлюенсе.

Но ведь все группировки придется делать вручную! Да, можно через поиск их находить и копировать пачками, а потом удалять в прогоне и смотреть, что осталось, но все равно это очень унылая работа.

А вот робот с рутиной справляется на ура! Главное, четко сформулировать ему, что именно ты хочешь. И показать, в каком виде тебе это нужно сделать. А у меня и это есть, вон табличка с примером.

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

В конфлюенсе это выглядело очень красиво, а вот в выгрузке в ворд — нет. Слишком много колонок, табличку просто разносит. Да, можно сделать альбомную ориентацию, но я так прикинула… И собрала ФИО в одну колонку, просто выписав каждый компонент на новую строку. Тоже удобно вышло, и в ворд выгрузилось нормально.

Ну и все, теперь у меня есть все нужные данные и примеры для ИИ, для удобства я положила их все в папку C:\tmp. 

Работать я решила в Cursor — это инструмент, внутри которого есть разные ИИ-модели. Фишка работы в нем — ты пишешь свои пожелания на простом русском языке, а он сам все делает. То есть пишет все необходимые скрипты, запускает, прогоняет… Очень удобно!

У меня Cursor Pro, но для этой задачи подошла бы и бесплатная версия. Я не меняла ИИ-модель, какую он предложил (Composer 2.5), с той и общалась. На компьютере установлен питон, потому что для похожих задач ИИ часто использует его.


3. Промпт для Cursor-а

Осталось написать промпт! У меня получилось вот так:

Проанализируй результаты прогона двух автотестов:

C:\tmp\testOldFunction.txt

C:\tmp\testNewFunction.txt

Оформи результат в файле C:\tmp\test_results.docx по примеру внутри файла C:\tmp\test_results_demo.docx.

Пополни таблицу, выписав туда все падения тестов. Структура таблицы, в результатах прогона смотри по «Input data»:

- Описание — 1 колонка из Input data

- Похожесть — 2 колонка

- ФИО 1 - 3, 4, 5 колонки, значение новой колонки идет с новой строки (получится 3 строки)

- ФИО 2 - 6, 7, 8 колонки, значение новой колонки идет с новой строки (получится 3 строки)

- testOldFunction и testNewFunction — пиши "Успех", если в результатах прогона соответствующего файла НЕТ такого теста (по описанию сверяй) и "FAIL", если тест упал. И допиши, что тест ожидает из строки « Actual:  [2/Similarity]:97» (в данном примере это будет 97)

Колонку "комментарий" оставляй пустой.

Сгруппируй результаты верхнеуровнево так:

- testOldFunction работает, testNewFunction нет

- testNewFunction работает, testOldFunction нет

- оба падают

Внутри эти групп добавь группы:

- двойные имена, если в описании теста есть слова “двойное имя”

- (другая группа и как роботу понять, кто к ней относится)

- все остальные

Вот и все. Важно просто прописать роботу все подробности — что в какой колонке смотреть, что в каком случае писать. И он все сделает!

Курсор немного пошуршал, анализируя мои файлы, составляя питон-скрипт для работы, выполняя его… И выдал результат!

Дальше копируем из ворда в конфлюенс, пишем свои выводы, добавляем комментарии, где это надо, и передаем аналитику красивый отчет!


Итого

Я даже представить боюсь, сколько времени у меня бы ушло на красивый отчет без помощи ИИ. Это ладно, когда надо десять падений выписать, но 200+... Как хорошо, что теперь есть, кому делегировать эту работу!

Что для этого нужно сделать? Только составить промпт. А для этого сесть и подумать:

  • Какие данные надо проанализировать (в моем случае это результаты двух прогонов автотестов).

  • В каком виде составить отчет — лучше всего показать ему пример. Я сделала одну строку, а робот заполнил все остальные. 

  • Как именно заполнять — что в какую колонку писать. Если нужна группировка, расписываем, какая именно.

И всё. Отдаем промпт курсору и идем пить чай, пока робот работает =))

PS — эта статья написана в помощь студентам моего курса «Применение ChatGPT в тестировании» 

1 комментарий:

  1. Вам срочно нужен кредит для оплаты счетов или на другие цели? Вам ранее отказывали в кредите в финансовых учреждениях или дома? Тогда у вас есть уникальная возможность получить кредит в нашей компании. Trustbridge Financial Service — это авторитетный и легальный кредитор, предоставляющий кредиты физическим и юридическим лицам по низкой процентной ставке 3%. Свяжитесь с нами сегодня по электронной почте (trustbridgefinancialservice943@yahoo.com), и мы поможем вам с получением финансовой помощи.
    
    Пожалуйста, заполните заявку на кредит, чтобы мы могли как можно скорее начать оформление вашей кредитной операции.
    
    Мы предлагаем следующие виды кредитов:
    a) Потребительский кредит, кредит на расширение бизнеса,
    b) Кредит на открытие бизнеса, кредит на образование,
    c) Кредит на консолидацию долгов, кредит на ремонт дома,
    d) Кредиты под залог недвижимости, инвестиционные кредиты,
    e) Кредит на подготовку к Рождеству.
    
    Заполните информацию ниже для начала процедуры.
    
    ФИО:
    Адрес:
    Страна:
    Необходимая сумма кредита:
    Срок кредита:
    Цель кредита:
    Номер телефона:
    
    Для получения дополнительной информации свяжитесь с нами через WhatsApp: +2349124847559.
    
    Спасибо
    Администрация
    Финансовые услуги Trust Bridge

    ОтветитьУдалить