前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口自动化测试框架Karate入门

接口自动化测试框架Karate入门

作者头像
顾翔
发布2019-12-11 12:54:12
2.9K0
发布2019-12-11 12:54:12
举报

来源:http://www.uml.org.cn/ 在这篇文章中,我们将介绍一下开源的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.即使对非编程人员,测试代码也很容易编写

环境需求

1.JDK1.8及以上

2.Maven

3.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 endpointGiven url 'http://localhost:8080/user/get'When method GETThen status 200Scenario: Testing the exact response of a GET endpointGiven url 'http://localhost:8080/user/get'When method GETThen status 200And match $ == {id:"1234", name:"John Smith"}Scenario: Testing that GET response contains specific fieldGiven url 'http://localhost:8080/user/get'When method GETThen status 200And 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.jsoncd /home/pateo/IdeaProjects/demo4karatemvn test -Dtest=DemoRunnercp report.json ${WORKSPACE}/report.json

jenkins报告展示

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-09-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
持续集成
CODING 持续集成(CODING Continuous Integration,CODING-CI)全面兼容 Jenkins 的持续集成服务,支持 Java、Python、NodeJS 等所有主流语言,并且支持 Docker 镜像的构建。图形化编排,高配集群多 Job 并行构建全面提速您的构建任务。支持主流的 Git 代码仓库,包括 CODING 代码托管、GitHub、GitLab 等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档