Karate-让WebService的测试变的更简单!

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中引入以下配置:


        
            com.intuit.karate
            karate-apache
            0.9.2
            test
        
        
            com.intuit.karate
            karate-junit4
            0.9.2
            test
        
    
    
        
            
                src/test/java
                
                    **/*.java
                
            
        
    

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

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

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

    
        org.apache.maven.plugins
        maven-surefire-plugin
        2.10
        
            -Dfile.encoding=UTF-8
        
    

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文件的路径一样。

你可能感兴趣的:(karate)