介绍

在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架——Karate

Karate是基于另一个BDD测试框架Cucumber来建立的,并且共用了一些相同的思想。其中之一就是使用Gherkin文件,该文件描述了被测试的功能

与Cucumber不同的是测试用例不需要用Java编写,并且被完整的描述在Gherkin文件中

通过Karate,您可以编写任何类型的Web服务端的测试脚本,并检查响应是否符合预期

Karate的验证引擎可以灵活的比较两个JSON或XML文件内容,不受空格和数据顺序的影响

有关Karate的更详细的内容,请参考Karate官方介绍

特点

  1. 建立在Cucumber-JVM基础上
  2. 可以像标准的Java工程一样运行测试并且产生报告
  3. 测试代码的开发不需要掌握任何的Java知识
  4. 即使对非编程人员,测试代码也很容易编写

环境需求

  • JDK1.8及以上
  • Maven
  • IDEA

使用

创建工程

  1. 打开IDEA,File|New|Project

  2. 选择Maven工程,点击Next

  3. 输入Maven基本信息,点击Next

  4. 输入工程名称和存放路径,点击Finish

添加依赖

要在Maven项目中使用Karate,需要将karate-apache依赖项添加到pom.xml,如果实现JUnit测试还需要添加karate-junit4依赖

<dependencies>
<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-apache</artifactId>
<version>0.8.0</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-junit4</artifactId>
<version>0.8.0</version>
<scope>test</scope>
</dependency> </dependencies>

设置测试资源文件目录,建议测试用例文件和java文件放在同一个目录下,遇到庞大的工程的时候方便管理,不必在文件夹src/test/java和src/test/resources文件夹之间切换,可以在pom.xml的标签中添加一下设置

<testResources>
<testResource>
<directory>src/test/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</testResource>
</testResources>

服务端模拟

为了演示REST API,我们使用WireMock服务器

在pom.xml中添加mock服务依赖配置

<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-standalone</artifactId>
<version>2.18.0</version>
<scope>test</scope>
</dependency>

编写一个启动服务的类

package server;

import com.github.tomakehurst.wiremock.WireMockServer;

import static com.github.tomakehurst.wiremock.client.WireMock.*;

public class StartServer {

    private static WireMockServer wireMockServer = new WireMockServer(8080);

    public static void startServer(){
wireMockServer.start(); stubFor(
get(urlEqualTo("/user/get"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{ \"id\": \"1234\", name: \"John Smith\" }"))); stubFor(
post(urlEqualTo("/user/create"))
.withHeader("content-type", equalTo("application/json"))
.withRequestBody(containing("id"))
.willReturn(aResponse()
.withStatus(200)
.withHeader("Content-Type", "application/json")
.withBody("{ \"id\": \"1234\", name: \"John Smith\" }"))); } public static void main(String... args){
startServer();
}
}

用例文件编写

一个用例文件以“ .feature”扩展名保存。

文件以Feature关键字开头,在同一行跟着所测试的功能名称

一个用例文件包含不同的测试场景,每个场景都以关键字Scenario开头,并且包含多个步骤。这些步骤包含关键字Given,When,Then,And和But

有关Cucumber和Gherkin结构的更多信息,请点击此处

Feature: Learn How to use Karate for testing.

  Scenario: Testing valid GET endpoint

    Given url 'http://localhost:8080/user/get'
When method GET
Then status 200 Scenario: Testing the exact response of a GET endpoint Given url 'http://localhost:8080/user/get'
When method GET
Then status 200
And match $ == {id:"1234", name:"John Smith"} Scenario: Testing that GET response contains specific field Given url 'http://localhost:8080/user/get'
When method GET
Then status 200
And match $ contains {id:"1234"}

Runner类编写

建议放在用例文件同级目录下

我们可以通过将Karate与JUnit集成来运行我们的测试

我们将使用@CucumberOptions注解指定Feature文件的具体位置

package demo;

import com.intuit.karate.junit4.Karate;
import cucumber.api.CucumberOptions;
import org.junit.runner.RunWith; @RunWith(Karate.class)
@CucumberOptions(features = "classpath:demo/demo.feature") public class DemoRunner { }

运行用例

  1. 先启动服务

    右击StartServer类选择Run StartServer.main()启动服务

  2. 运行用例

    右击DemoRunner类选择Run DemoRunner运行测试

查看报告

在项目的target/surfire-reports目录下有TEST-demo.demo.html文件,浏览器中打开即可看到结果

持续集成

可以借助于jenkins完成自动化测试并且jenkins提供插件cucumber-reports可以展示可读性强的自动化测试报告

需要修改Runner继承KarateRunner,先引入Karate-testng依赖

<dependency>
<groupId>com.intuit.karate</groupId>
<artifactId>karate-testng</artifactId>
<version>0.8.0</version>
</dependency>

修改DemoRunner,注意配置CucumberOptions,要产生json格式的报告,cucumber-reports插件会去解析该文件并生成报告

package demo;

import com.intuit.karate.junit4.Karate;

import com.intuit.karate.testng.KarateRunner;
import cucumber.api.CucumberOptions;
import org.junit.runner.RunWith; @CucumberOptions(features = "classpath:demo/demo.feature",format={"pretty","html:reports","json:report.json"}) public class DemoRunner extends KarateRunner { }

jenkins中cucumber-reports配置请参考网络资源

jenkins配置命令行运行指令

rm -rf ${WORKSPACE}/report.json

cd /home/pateo/IdeaProjects/demo4karate

mvn test -Dtest=DemoRunner

cp report.json ${WORKSPACE}/report.json

jenkins报告展示

代码参考地址: https://github.com/ouguangqian/demo4Karate

接口自动化测试框架Karate入门的更多相关文章

  1. 接口测试入门(4)--接口自动化测试框架 / list和map用法 / 随机选取新闻 (随机数生成) / 接口相关id映射

    一.接口自动化测试框架 为了更好的组织测试方法,测试用例并且持续集成,我们选择了  java+testNG(测试用例组织)+gitlab(代码版本管理)+Jenkins(持续集成工具) 作为一整套的自 ...

  2. 1分钟入门接口自动化框架Karate

    介绍 在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架——Karate Karate是基于另一个BDD测试框架Cucumber来建立的,并且共用了一些相同的思想.其中之一就是使用Gher ...

  3. python版接口自动化测试框架源码完整版(requests + unittest)

    python版接口自动化测试框架:https://gitee.com/UncleYong/my_rf [框架目录结构介绍] bin: 可执行文件,程序入口 conf: 配置文件 core: 核心文件 ...

  4. 接口自动化 [授客]基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0

    基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0   by:授客 QQ:1033553122     博客:http://blog.sina.com.cn/ishou ...

  5. 接口自动化 基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]

    基于python+Testlink+Jenkins实现的接口自动化测试框架[V2.0改进版]   by:授客 QQ:1033553122 由于篇幅问题,,暂且采用网盘分享的形式: 下载地址: [授客] ...

  6. 基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0

    基于python+Testlink+Jenkins实现的接口自动化测试框架V3.0 目录 1. 开发环境2. 主要功能逻辑介绍3. 框架功能简介 4. 数据库的创建 5. 框架模块详细介绍6. Tes ...

  7. 【转】robot framework + python实现http接口自动化测试框架

    前言 下周即将展开一个http接口测试的需求,刚刚完成的java类接口测试工作中,由于之前犯懒,没有提前搭建好自动化回归测试框架,以至于后期rd每修改一个bug,经常导致之前没有问题的case又产生了 ...

  8. 【python3+request】python3+requests接口自动化测试框架实例详解教程

    转自:https://my.oschina.net/u/3041656/blog/820023 [python3+request]python3+requests接口自动化测试框架实例详解教程 前段时 ...

  9. 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    基于python实现的http+json协议接口自动化测试框架(实用改进版)   by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436     目录 1.      ...

随机推荐

  1. Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类

    转载请标明出处: http://blog.csdn.net/forezp/article/details/78616738 本文出自方志朋的博客 RBAC介绍 RBAC(Role-Based Acce ...

  2. DBF导入到Oracle数据库

    今天我遇到了一个需求,是将一个DBF文件导入到Oracle库中,之前一直使用的是公司提供的迁移工具,但是不知道怎么回事今天一直报DBF文件无法访问之类的错误,尝试多次之后,一气之下弃之不用,另寻他法. ...

  3. Oracle 差异性增量 和 累计增量 原理(转)

    RMAN一个强大的功能是支持增量备份,增量备份中心思想就是减少备份的数据量,我们不需要在从头开始备份了,只需要备份自上次已备份之后的数据块即可.   Oracle 9i 共有五种级别 0 1 2 3 ...

  4. 关于SQLNET.AUTHENTICATION_SERVICES= (NTS) 的解释

    原文转自:http://www.360doc.com/content/12/0207/12/3446769_184740592.shtml       标题所代表的意思为 使用操作系统本地验证,一般不 ...

  5. C++创建People类--练习

    题目描述 /*设计一个用于人事管理的People(人员)类.*/ /* 考虑到通用性,这里只抽象所有类型人员都具有的属性: number(编号).sex(性别).birthday(出生日期).id(身 ...

  6. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛--D-psd面试

    链接:https://www.nowcoder.com/acm/contest/90/D 来源:牛客网 1.题目描述 掌握未来命运的女神 psd 师兄在拿了朝田诗乃的 buff 后决定去实习. 埃森哲 ...

  7. 一个关于 json ,加密,测试,集多功能为一体的在线工具

    很多情况下我们会序列化json或者解析json,那么要解析json也许使用json实体类会好很多,或者你有时候需要压缩转义json的时候, 有一个网站真的是非常好用,里面什么都有......是真的啥都 ...

  8. 利用python实现《数据挖掘——概念与技术》一书中描述的Apriori算法

    from itertools import combinations data = [['I1', 'I2', 'I5'], ['I2', 'I4'], ['I2', 'I3'], ['I1', 'I ...

  9. jquery图片滚动demo.css

    body, html { font-size: 100%; padding: 0; margin: 0;} /* Reset */*,*:after,*:before { -webkit-box-si ...

  10. html5 手风琴菜单

    因为项目需要,现在需要做个手风琴菜单,于是自己就瞎整了一下,所用只是less.js  javascript  jquery效果如图: 具体代码如下: <!DOCTYPE html> < ...