Pandaria, легкий инструмент для тестирования API

задняя часть база данных SQL контрольная работа

задний план

Я недавно участвовал в проекте.У команды есть требования к автоматизированному тестированию, но у тестировщиков нет навыков программирования, а у разработчиков нет сил помочь.Изучив существующие инструменты автоматизированного тестирования, они решили построить свои собственные колеса после того, как не смогли удовлетворить потребности команды.

  • Postman

Postman — очень удобный инструмент автоматизированного тестирования, не требующий навыков программирования.Так как многие точки проверки тестов в проекте нуждаются в проверке правильности данных в базе данных, при использовании Postman необходимо создавать некоторые ненужные HTTP API для тестовое задание. К сожалению, это колесо не соответствует нашим требованиям.

  • Rest-assured

Второй инструмент, который мы исследовали, Rest-assured, Хотя он инкапсулирует очень простой и красивый DSL для операций, связанных с тестированием API, поскольку это непосредственно код Java, проверка базы данных не вызывает затруднений. Но чтобы писать автоматизированные тесты на основе Rest-assured, у вас должна быть определенная основа для программирования.К сожалению, мы не используем это колесо.

  • Cucumber

Cucumber поддерживает написание автоматизированных тестов на естественном языке. Естественный язык вызывает код. Если Cucumber хорошо инкапсулирован, авторы тестов могут писать автоматизированные тесты без написания кода. Для этого требуется достаточно общая инкапсуляция, поэтому Pandaria — это DSL для автоматизированного тестирования API-интерфейсов HTTP(S), инкапсулированных огурцом jvm. Cucumber сам по себе очень функционален, и вы все еще можете использовать все функции cucumber jvm напрямую, используя pandaria.

Pandaria

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

Тестовый HTTP-API

  Scenario: simple get
    * uri: /users/me
    * send: GET
    * status: 200
    * verify: '$.username'='jakim'
    * verify: '$.age'=18

Чтобы написать тесты автоматизации API с помощью pandaria, как и выше, вам нужно только использовать абстрактные ключевые слова, описать процесс отправки запросов и написать свои условия проверки.

Интерпретация приведенного выше кода: к относительному пути uri/users/meОтправьте запрос GET на адрес и убедитесь, что статус возврата равен 200, а путь json в теле возврата$.usernameценность'jakim', json-путь$.ageстоимость в18.

Проверить базу данных

* query:
"""
SELECT NAME, AGE FROM USERS
"""
* verify: '$[0].name'='jakim'
* verify: '$[0].age'=18

или

* query: select.sql
* verify: '$[0].name'='jakim'
* verify: '$[0].age'=18

select.sql

SELECT NAME, AGE FROM USERS

Тестировщикам нужно только написать SQL, чтобы проверить содержимое базы данных, как json. Приведенный выше код будет использовать оператор SQLSELECT NAME, AGE FROM USERSЗапросите базу данных и убедитесь, что первая строка возвращаемого результатаnameа такжеageАтрибуты.

Чтобы подготовить тестовые данные, вы можете напрямую выполнить файл SQL:

* execute sql: prepare_users.sql
* execute sql:
"""
insert into users(name) values('test');
"""

функция ожидания

При автоматизированном тестировании часто требуется дождаться завершения одной операции, особенно в асинхронных операциях.В настоящее время обычной практикой является ожидание определенного периода времени, проверка результата и, в случае неудачи, повторная попытка определенное количество раз, пока проверка прошла успешно, или превышено максимальное количество отказов. Используя Pandaria, вы можете написать:

* wait: 1000ms times: 3
* uri: /sequence
* send: GET
* response body:
"""
3
"""

Приведенный выше код будет идти в/sequenceОтправьте запрос и убедитесь, что возвращенное тело сообщения равно3, если равно продолжать выполнение, если не получается, подождать 1000 мс, а затем повторить попытку, если повторная попытка превышает максимально допустимую3раз тест не проходит.

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

* wait: 1000ms times: 3
* query: select.sql
* verify: '$[0].name'='jakim'
* verify: '$[0].age'=18

Переменная

Во многих случаях путь URI reзов API содержит идентификатор саморазвития базы данных, который может быть создан асинхронной операцией, так что мы не можем напрямую получить результат от возврата API, но можно только найти его только от База данных в соответствии с условиями тестовых данных, а также в последующем тестировании API, используя Pandaria, мы можем написать:

* query:
"""
select id from users where name='test-user-name';
"""
* var: 'auto_generated_id'<-'$[0].id'

* uri: /users/${auto_generated_id}
* send: GET
* verify: '$.id'=${auto_generated_id}
* verify: '$.name'='test-user-name'

Приведенный выше код сначала проверяет саморастущий из базы данныхid, затем используйте<-оператор приведет кidопределяется какauto_generated_idпеременную и использовать эту переменную в последующих операциях.

Суммировать

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