Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >接口自动化测试框架Karate入门

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

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

来源:http://www.uml.org.cn/ 在这篇文章中,我们将介绍一下开源的Web-API自动化测试框架——Karate介绍

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

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

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

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

有关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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
cucumber测试框架
1.1 什么是BDD(行为驱动开发)   首先了解一个概念,BDD(BehaviorDrivenDevelopment:行为驱动开发)为用户提供了从 开发人员和客户的需求创建测试脚本的机会。因此,开始时,开发人员,项目经理,质量保证,用户验收测试人员和产品所有者(股东)都齐聚一堂,集思广益,讨论应该传递哪些测试场景,以便成功调用此软件/应用程序。这样他们想出了一组测试场景。所有这些测试脚本都是简单的语言,所以它也可以服务于文档。
爱撸猫的杰
2019/08/24
4.1K0
浅谈BDD下的自动化测试框架
测试驱动开发(TDD)相信大家已经很熟悉了,而行为驱动开发(BDD)其实是TDD的一种演化。那什么是BDD,为什么要使用BDD, BDD下的自动化测试该如何做呢?本文将通过简单的例子,向大家展示如何使用Cucumber 描述需求,编写、执行测试用例,并输出测试报告。
yuanyi928
2018/08/15
7.3K0
浅谈BDD下的自动化测试框架
BDD测试框架之Cucumber使用入门
cucumber早在ruby环境下应用广泛,作为BDD框架的先驱,cucumber后来被移植到了多平台,简单来说cucumber是一个测试框架,就像是juint或是rspec一样,不过cucumber遵循的是BDD的原则。
软件测试君
2019/06/20
4.5K0
BDD测试框架之Cucumber使用入门
Karate-让WebService的测试变的更简单![通俗易懂]
karate的github项目地址:https://github.com/intuit/karate
全栈程序员站长
2022/11/17
1.3K0
敏捷测试价值观、方法和实践读书笔记(7)
features = "src/test/java/hellocucumber/test.feature"指明feature文件位置
顾翔
2024/09/10
960
敏捷测试价值观、方法和实践读书笔记(7)
SpringBoot整合自动测试框架Cucumber
在test目录下建一个resources目录,在该目录下建一个test.feature的文件
算法之名
2021/09/06
9710
cucumber自动化测试官方教程
cucumber是一款测试工具。可用于大多数主流编程语言。比如JAVA、JS、Ruby、C++、Lua、Android、Kotlin、C#/F#、PHP、Python、Go、Groovy、Scala等等。其中JAVA、JS、Ruby的代码托管在cucumber下。官方建议选择与生产代码相同的平台或编程语言的实现。本文主要是JAVA平台下的介绍教程。使用方法非常简单,创建一个mvn工程,在pom.xml文件引入以下依赖即可。
顾翔
2019/12/12
2.2K0
接口测试框架之Karate
Karate是一款将接口自动化测试、mock、性能测试集合到一起的测试框架。采用BDD语法,对于无编程能力的人也很容易;另外提供强大的JSON、XML断言功能及并发执行。以上的内容翻译自Karate官网,也许你看到这些描述时仍然不能直观感受到Karate和其他接口测试框架的区别,接下来让我们看一个Karate编写的接口测试demo。以下是一个Graphql的接口,下面是利用Karate实现该接口测试的代码
全栈程序员站长
2022/11/03
4.2K1
BDD与单元测试相关问题介绍
java进程的启动依赖于唯一的main函数,java中的junit采用插件隐藏main函数的方式,我们右键运行某测试用例。其本质上传入的是测试用例的路径。而插件启动的main函数通过args去接受传入的用例路径,并解析出测试用例的前后执行方法(包括一些注解),并对具体的方法进行排序,最后采用多线程submit任务,从而进行测试用例的执行。在idea中选中包路径运行整个包下的测试用例,相当于启动了若干个runner任务。
写一点笔记
2022/08/11
9250
BDD与单元测试相关问题介绍
测试开发基础 mvn test | 利用 Maven Surefire Plugin 做测试用例基础执行管理
这个时候就需要 Maven 登场了,利用 Maven 的Maven-Surefire-Plugin插件可以帮助我们完成上述的目标!它可以通过命令行的形式来管理我们要执行的用例。
霍格沃兹测试开发
2020/09/13
2.3K0
一文让你了解微服务契约测试
谈到微服务,大家都想到契约测试,到底什么是契约测试呢,为什么要使用契约测试呢,关于这样的文章很多,本文将结合Spring Boot让你了解微服务契约测试。
顾翔
2024/09/10
1220
一文让你了解微服务契约测试
Java自动化测试框架-05 - 来给你的测试报告化个妆整个形 - (上)(详细教程)
  前边通过宏哥的讲解和分享想必小伙伴们和童鞋们都已经见过testng框架生成的测试报告,是不是它的样子和长相实在是不敢让大家伙恭维。那么今天宏哥就当一回美容师,由宏哥来给它美美容;当一回外科医生,做一名整形医生。由宏哥来主刀,给它整整形。让她变得丰满、美丽、可爱一些。
北京-宏哥
2019/11/04
9420
『Jenkins』使用Jenkins实现自动化测试
假设我们在一家软件开发公司工作,开发一个基于Java的Web应用。在开发过程中,我们采用自动化测试方法来验证代码的功能性和稳定性。为了能够快速地捕捉到可能出现的问题,我们决定使用Jenkins作为持续集成工具,配合JUnit进行单元测试,并结合Selenium进行端到端的自动化测试。
数字扫地僧
2025/01/25
2080
LLT工作总结与Gherkin语法解析器简单应用
这几天产品线这里要搞LLT(Low level Test)重点工作,保障版本的高质量发布。工作当然包括一系列的规范、培训、编码、检视,不过具体看下来主要还是提取了下面的一些度量要点:
mythsman
2022/11/14
9610
LLT工作总结与Gherkin语法解析器简单应用
推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!
Cucumber是一个行为驱动开发(BDD)工具,它结合了文本描述和自动化测试脚本。它使用一种名为Gherkin的特定语言来描述应用程序的行为,这种语言非常接近自然语言,使得非技术人员也能够理解和参与测试。
测试开发技术
2024/06/25
4240
推荐一款基于业务行为驱动开发(BDD)测试框架:Cucumber!
自动化测试报告必会神器Allure使用
之前用过testNG自带的测试报告、优化过reportNG的测试报告、extentreport、ZReport(大飞总原创),这些是我之前都用过的,也是在去年雯姐和我说过Allure2这个报告不错,一直没时间,正巧最近有用到,接触下发现确实是个神器。
软件测试君
2019/06/03
1.7K0
搭建自动化测试持续集成项目
首先您需要了解maven、testNG、jenkins、tomcat、git。源代码放在github上。
测试邦
2019/08/19
7000
搭建自动化测试持续集成项目
Java接口测试之ExtentReport测试报告
ExtentReport是由Anshoo Arora创造的一个基于HTML5报告,它提供了Java与.NET类库,非常容易使用并且创建出漂亮的自动化测试报告。
软测小生
2019/07/05
1.2K0
Java接口测试之ExtentReport测试报告
测试兵器谱のCucumber-JVM框架篇
最近业务上使用的自动化测试项目在改进项目执行方案,优化框架,正好结合实践记录一下最近遇到的问题和解决方法,打算从以下几个部分跟大家探讨一下:
雷子
2021/03/15
1.6K0
测试兵器谱のCucumber-JVM框架篇
如何使用模拟框架测试微服务? | 微服务系列第八篇
作为开发人员尝试创建集成测试时,会遇到许多复杂问题。出现的两个最常见的问题包括与:
魏新宇
2018/09/30
3.7K0
如何使用模拟框架测试微服务? | 微服务系列第八篇
相关推荐
cucumber测试框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档