Генерация реалистичных тестовых данных может быть довольно сложной задачей. Однако с появлением искусственного интеллекта она значительно упростилась. В этой статье мы поговорим о том, как создавать тестовые данные с помощью OpenAI API в Postman и автоматически отправлять их на ваш сервер. Но все по порядку.
Друзья, поддержите нас вступлением в наш телеграм канал QaRocks. Там много туториалов, задач по автоматизации и книг по QA.
Если мы имеем среду, специально предназначенную для тестирования, то данные часто состоят из одинаковых значений со словом “тест”. Ориентироваться в таком наборе достаточно сложно. Можно использовать генераторы случайных данных, но в этом случае теряется релевантность предметной области тестируемого продукта. Кроме того, реалистичность тестовых данных становится особенно важной при демонстрации продукта. Ручное создание тестовых данных, конечно возможно, но если схема одного объекта данных сложна, а таких объектов требуется большое количество, то процесс становится слишком трудоемким и в итоге нецелесообразным.
Как же сгенерировать реалистичные и разнообразные тестовые данные без больших временных затрат? Здесь на помощь приходит искусственный интеллект (AI). Допустим, у нас есть веб-приложение с каталогом наиболее популярных ноутбуков. При этом в нашей тестовой среде самих продуктов еще не существует, поэтому нам необходимо их создать. Для этого мы воспользуемся публичным API https://restful-api.dev/ который предоставляет возможность записи наших данных через POST-запрос в следующем формате:
{ "name": String, "data": Object }
То есть, согласно документации API, структура должна содержать имя и любые данные в виде объекта. Рассмотрим, как в несколько простых шагов создать тестовые данные для нашего приложения.
Шаг 1. Определение структуры объекта тестовых данных.
Пусть каждый продукт в нашем приложении имеет следующие характеристики:
{ "name": "Apple MacBook Pro 16", "data": { "year": 2019, "price": 1849.99, "currency": "USD" "CPU model": "Intel Core i9", "Hard disk size": "1 TB" } }
Таким образом, структура элементов, которые мы должны генерировать, выглядит так:
{ "name": "String", "data": { "year": "Number", "price": "Number", "currency": "String", "CPU model": "String", "Hard disk size": "String" } }
Согласитесь, вручную создать десяток различных и реалистичных предметов для последующего тестирования займет кучу времени. Именно здесь нам на помощь приходит API OpenAI.
Создадим коллекцию под названием “Create Test Data” и первый запрос под названием “Generate Test Data”. В скрипте предусловия (Pre-request Script) определим структуру JSON (чтобы можно было легко изменить её перед преобразованием в строку) и сохраним её как переменную коллекции:
Шаг 2. Генерация тестового объекта с помощью OpenAI API.
Для генерации элементов нам необходимо отправить POST запрос на следующую конечную точку: https://api.openai.com/v1/chat/completions, которая позволяет получить ответ для заданной чат-беседы. Сконструируем тело запроса к API OpenAI.
В поле content
мы указываем, что мы хотим получить от модели в ответ, при этом точная ожидаемая структура JSON была определена на Шаге 1.
Параметр temperature
позволяет регулировать предсказуемость ответов модели. Большие значения, например 0,8, сделают вывод более случайным, а меньшие, например 0,2, – более целенаправленным и детерминированным. Параметр принимает значения от 0 до 2.
Если API вашего приложения может принимать массив товаров для создания, то можно добавить n
параметр, который позволяет настроить количество ответов. Другой способ генерации набора данных заключается в изменении запроса на что-то вроде: Generate array (length 2) of objects describing a laptop items using the following structure… (Сгенерировать массив (длина 2) объектов, описывающих товары ноутбука, используя следующую структуру...)
. Способ генерации набора влияет на то, как будет извлекаться информация для следующего запроса.
Поскольку наш тестовый API принимает только один объект за раз, мы используем запрос на генерацию одного объекта и не передаем параметр n, а по умолчанию он установлен как 1.
Чтобы опробовать пример, можно импортировать в рабочее пространство Postman следующий curl:
curl --location 'https://api.openai.com/v1/chat/completions' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer $OPENAI_API_KEY' \ --data '{ "model": "gpt-3.5-turbo", "messages": [ { "role": "user", "content": "Generate object describing a single laptop item using the following JSON structure \"{\"name\": String,\"data\": {\"year\": Number,\"price\": Number,\"currency\": String,\"CPU model\": String,\"Hard disk size\": String}}\"" } ], "temperature": 0.7 }'
OPENAI_API_KEY
это ваш ключ аутентификации. На вашей API Keys странице вы можете получить API-ключ, который будете использовать для своего запроса.
Можно изменять структуру JSON и параметры в теле запроса, чтобы сделать результат более подходящим для ваших целей. Дополнительную информацию вы найдете в документации API OpenAI.
Итак, ответ на наш запрос будет следующим:
{ "id": "chatcmpl-7SB7rzphTMzpB9VrLDtUknZyPQjez", "object": "chat.completion", "created": 1686950307, "model": "gpt-3.5-turbo-0301", "usage": { "prompt_tokens": 51, "completion_tokens": 70, "total_tokens": 121 }, "choices": [ { "message": { "role": "assistant", "content": "{\n \"name\": \"Dell Inspiron 15\",\n \"data\": {\n \"year\": 2021,\n \"price\": 800,\n \"currency\": \"USD\",\n \"CPU model\": \"Intel Core i5-1135G7\",\n \"Hard disk size\": \"512 GB SSD\"\n }\n}" }, "finish_reason": "stop", "index": 0 } ] }
В поле content
мы получаем тестовые данные, которые хотели сгенерировать – реалистичные и соответствующие нашей структуре. Теперь сохраним их в переменной коллекции для последующей отправки в теле следующего запроса.
Шаг 3. Сохранить сгенерированные данные как переменную коллекции.
Для этого на вкладке “Test” запроса “Generate Test Data” напишем следующий скрипт:
var jsonData = pm.response.json(); const item = jsonData.choices[0].message.content; pm.collectionVariables.set("item", item);
Теперь, после отправки запроса, скрипт выполнит его и сохранит полученный ответ в переменной коллекции с именем “item”.
Тестовые данные готовы, и настало время их использовать.
Шаг 4. Отправьте данные на ваш сервер.
Создадим в коллекции еще один запрос под названием “Send Data”:
curl --location 'https://api.restful-api.dev/objects' \ --header 'Content-Type: application/json' }'
В качестве тела запроса мы отправим JSON, сохраненный в переменной коллекции.
Коллекция готова. Чтобы сгенерировать несколько товаров, настроим конфигурацию для запуска нескольких итераций.
В результате наше приложение теперь имеет различные реалистичные тестовые данные. Быстро и просто!Поделитесь в комментариях, как вы используете API OpenAI для тестирования.
Перевод статьи «How to prepare realistic test data via OpenAI API in Postman».