Если вам необходимо тестировать API но у вас слабый технический бэкграунд и вы недостаточно скилованы для этого, тогда попробуйте Karate. Это оперсорсный проект от Intuit. Он предназначен для автоматизированного тестирования API и имеет весь необходимый функционал, чтобы сделать этот процесс более простым и приятным.
Многие инструменты для тестирования API требуют навыки программирования даже для того, чтобы сделать и проверить базовые вещи. Karate работает сразу из коробки. Вы можете построить самые сложные операции запроса-ответа без знания какого-либо языка программирования. Все, что вам нужно сделать, это написать файл функций, используя простой текст в стиле Gherkin.
Поскольку Karate является DSL и базируется на Сucumber-JVM, то вы можете запускать тесты и генерировать отчёты по их результатам, как в любом другом Java – проекте. Но вместо написания Java – кода вы пишете тесты на языке, предназначенном для работы с HTTP, JSON или XML.
Хоть для работы с Karate не требуется какой-либо подготовки, всё равно не лишним будет хотя бы базовое понимание HTTP, JSON, XML, JsonPath, XPath или JavaScript.
Далее мы рассмотрим установку Karate и работу с его базовым функционалом.
Установка зависимостей
Maven
Для Maven необходимо установить следующие две зависимости
1 2 3 4 5 6 7 8 9 10 11 |
<dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-apache</artifactId> <version>0.6.0</version> <scope>test</scope> </dependency> <dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-junit4</artifactId> <version>0.6.0</version> <scope>test</scope> |
Gradle
Тут зависимости те же самые
1 2 |
testCompile 'com.intuit.karate:karate-junit4:0.6.0' testCompile 'com.intuit.karate:karate-apache:0.6.0' |
Структура проекта
Файлы скриптов Karate имеют аналогичное Cucumber расширение: .feature. Вы вольны организовать строение проекта, как хотите, можно и придерживаться строения по конвенции Java.
Maven обычно определяет место для файлов, отличных от .java, по пути src/test/resources, однако, разработчики Karate рекомендуют хранить их рядом.
Как и при использовании Cucumber, для Karate нужен “Runner” для запуска фича-файлов. Но есть и отличительная черта: нету т.н. класса с определением стэпов, использующихся при написании фича-файла. В этом состоит вся магия Karate.
Допустим есть у нас незамысловатый класс TestRunner.java
1 2 3 4 5 6 7 8 9 |
package com.tutorials.karate; import com.intuit.karate.junit4.Karate; import org.junit.runner.RunWith; @RunWith(Karate.class) public class TestRunner { } |
Тогда необходимо для работы с ним подредактировать наш pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Tutorials</groupId> <artifactId>Karate</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-apache</artifactId> <version>0.6.0.4</version> </dependency> <dependency> <groupId>com.intuit.karate</groupId> <artifactId>karate-junit4</artifactId> <version>0.6.0.4</version> </dependency> </dependencies> <build> <testResources> <testResource> <directory>src/test/java</directory> <excludes> <exclude>**/*.java</exclude> </excludes> </testResource> </testResources> </build> </project> |
Пример автотеста API
Допустим, есть у нас API (https://some-api.com/api/users), который возвращается список пользователей в JSON формате:
1 2 3 4 5 6 7 8 9 10 11 12 |
[ { "id": 1, "name": "FirstUser", "password": "User1Pass" }, { "id": 2, "name": "SecondUser", "password": "User2Pass" } ] |
Сценарий будет выглядеть так:
1 2 3 4 5 6 |
Scenario: Fetch all users Given url 'https://some-api.com/api/users' When method GET Then status 200 And assert response.length == 2 And match response[0].name == 'FirstUser' |
И это всё просто и легко, а главное – не нужно ничего кодить. Karate поставляется с очень богатым набором полезных функций, которые позволяют вам легко и быстро проводить автоматизированное тестирование API.