Karate-让WebService的测试变的更简单![通俗易懂]

Karate-让WebService的测试变的更简单![通俗易懂]karate的github项目地址:https://github.com/intuit/karatekarate是唯一一个将API测试自动化、模拟和性能测试结合到一个统一框架当中的开源工具。除了强大的JSON和XML断言之外,你还可以并行运行测试来提高运行速度——这对于HTTPAPI测试非常的重要。karate可以轻松的构建和重用复杂的有效请求负载并动态的响应数据构建更多的请求。负载和模…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

karate的github项目地址:https://github.com/intuit/karate

karate是唯一一个将API测试自动化、模拟和性能测试结合到一个统一框架当中的开源工具。除了强大的JSON和XML断言之外,你还可以并行运行测试来提高运行速度——这对于HTTP API测试非常的重要。

karate可以轻松的构建和重用复杂的有效请求负载并动态的响应数据构建更多的请求。负载和模式验证引擎可以对两个JSON和XML文件或内容进行智能比较(这对于测试还是非常的简便的,下面会提到),甚至可以在需要时忽略动态值。

karate是基于Java8(至少是1.8.0_112或者更高的版本),可以通过Maven或者Gradle加上IDE来实现。其实说实话,用什么IDE之间的差别不大,主要是看用的是Maven还是Gradle,在笔者看来Gradle的命令行要比Maven的强大的多,但是现在很多地方用的还是Maven,所以本篇采用的依旧是maven。

1、打开idea或者ecplise创建一个maven项目,并在pom.xml中引入以下配置:

<dependencies>
        <dependency>
            <groupId>com.intuit.karate</groupId>
            <artifactId>karate-apache</artifactId>
            <version>0.9.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.intuit.karate</groupId>
            <artifactId>karate-junit4</artifactId>
            <version>0.9.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <testResources>
            <testResource>
                <directory>src/test/java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </testResource>
        </testResources>
    </build>

Jetbrains全家桶1年46,售后保障稳定

karate-apache和karate-junit4的版本目前最高的是0.9.2,引入最新的就可以了。

karate的脚本是写在扩展名为.feature的文件中,而在Maven项目中,非Java的源文件会放在单独的src/test/resources文件夹结构中,但是这里还是建议放在一起,以后项目变大的时候,可能还需要操作一些.js的数据文件,放在一起看起来更加的简洁且便于管理。

当默认的系统编码不是UTF-8的时候,可能会报错,无法正常工作,可以加入以下插件来避免:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.10</version>
        <configuration>
            <argLine>-Dfile.encoding=UTF-8</argLine>
        </configuration>
    </plugin>

2、创建一个Java启动类

package sf;

import org.junit.runner.RunWith;

import com.intuit.karate.junit4.Karate;

@RunWith(Karate.class)
public class CallAPIServiceRunning {
}

3、在Java启动类的同级目录下创建一个以.feature结尾的文件,命名最好和启动类一样,便于管理和识别。Karate脚本的语法格式大致分为以下的三个部分(特性、背景和场景):

Feature: 测试内容的简要描述

Background:
  # 这部分可写可不写
  # 这步骤是在下面每个场景运行前都会执行的
  # 这里定义的变量就相当于全局变量

Scenario: 当前场景的简要描述
  # 这个场景要执行的内容

Scenario: 另一个场景
  # 这个场景要执行的内容

4、POST请求

Feature: CallServiceAPI

  Background:
	* def Base64 = Java.type('java.util.Base64')
    * def param = read('param.json')
    * def result = read('result.json')

  Scenario: post
    Given url 'http://*****************'
    And def encoded = Base64.encoder.encodeToString('用户名:密码'.bytes)
    And header Authorization = "Basic " + encoded
    And request param
    When method post
    Then status 200
    And match response == result

这段代码是把要传入的参数放入了一个json的配置文件当中,因为参数的量很大,并且request只能传输key-value形式的数据。read()方法可以把整个的json文件读取(也能读取其它文件,诸如xml之类的)。

* def Base64 = Java.type(‘java.util.Base64’)和And def encoded = Base64.encoder.encodeToString(‘用户名:密码’.bytes)这两行主要是实现通过请求的Basic认证。

And match response == result 这一步就是对获得的json对象和预期的json对象进行比较,上面提到过karate的这个优点,能够智能的对比两个json或者xml对象,所以,我们只需要提供两个json对象即可,剩余的交给karate来做。

5、Get请求

Feature: CallServiceAPI

  Background:
	* def Base64 = Java.type('java.util.Base64')
    * def param = read('param.json')
    * def result = read('result.json')

  Scenario: html url encoded form submit - get
    Given url 'http://**************'
    When method GET
    Then status 200
	* def convertJsonResponse = function(response){ return JSON.parse(response.slice(1)) }
	* def json = convertJsonResponse(response)
    And match result == json

6、生成Html网页版的报告

点击Java启动类,运行之后会发现控制台的最后会有一个url,直接copy,并且在浏览器中打开,就能看到html版的report了。路径就和在java类的同级目录下创建了一个同名的HTML文件的路径一样。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215534.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pycharm2021.5专业版最新激活码(最新序列号破解)[通俗易懂]

    pycharm2021.5专业版最新激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    121
  • 流程图的绘图规范_流程图绘制的基本规则

    流程图的绘图规范_流程图绘制的基本规则画了多年的流程图,你真的画规范了吗?|人人都是产品经理流程有哪些作用?我们为什么要画流程图呢?正确的画流程图规范是什么?流程图是一个很强大的工具,在我们的日常工作中经常会使用到。但我们也发现,有时看到别人流程图的画法、规范都不太一样,这是为什么呢?难道流程图就没有统一的标准或规范吗?基于这个疑问,我出于好奇认http://www.woshipm.com/zhichang/2329530.html以上为笔记来源出!一、流程图的符号要求 有几个重要且常用的符号:…

    2025年7月15日
    4
  • pageinfo 分页实现_分页显示

    pageinfo 分页实现_分页显示项目中有时候遇到list多种来源,不能使用PageInfo在查询数据库时分页,需要查询全部之后,手动分页。 //手动分页的分割起始下标IntegerfromIndex=0;//手动分页的分割结尾下标IntegertoIndex=0;Integertotal=arrayList.size();…

    2025年7月28日
    2
  • Java泛型详解,史上最全图文详解「建议收藏」

    Java泛型详解,史上最全图文详解「建议收藏」泛型在java中有很重要的地位,无论是开源框架还是JDK源码都能看到它。毫不夸张的说,泛型是通用设计上必不可少的元素,所以真正理解与正确使用泛型,是一门必修课。一:泛型本质Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,即给类型指定一个参数,然后在使用时再指定此参数具体的值,那样这个类型就可以在使用时决定了。这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛.

    2022年7月8日
    29
  • [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720A

    [I.MX6UL] U-Boot移植(六) 网络驱动修改 LAN8720AI.MX6UL/ULL内部有个以太网MAC外设,也就是ENET,需要外接一个PHY芯片来实现网络通信功能,也就是内部MAC+外部PHY芯片的方案。I.MX6UL/ULL有两个网络接口ENET1和ENET2,I.MX6U-ALPHA开发板提供了这两个网络接口,其中ENET1和ENET2都使用LAN8720A作为PHY芯片。NXP官方的I.MX6ULLEVK开发板使用KSZ8081这颗PHY芯片,LAN8720A相比KSZ8081具有体积小、.

    2022年6月21日
    32
  • Java语言实现自动关机程序

    Java语言实现自动关机程序@Java实现自动关机系统Java语言实现自动关机程序该项目实现了以下任务:1、提示用户,欢迎使用某某关机程序2、提示用户,输入倒计时关机的秒数3、根据用户输入的秒数,进行自动关机4、开始自动关机时,提示用户xxx秒后关机项目具体代码我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown将代码片显示选择的

    2022年7月22日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号