zoukankan      html  css  js  c++  java
  • 接口自动化测试框架Karate入门

    介绍

    在这篇文章中,我们将介绍一下开源的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
      选择Maven
    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

  • 相关阅读:
    [Luogu P3626] [APIO2009] 会议中心
    杭电 1869 六度分离 (求每两个节点间的距离)
    杭电 1874 畅通工程续 (求某节点到某节点的最短路径)
    最短路径模板
    杭电 2544 最短路径
    POJ 1287 Networking (最小生成树模板题)
    NYOJ 1875 畅通工程再续 (无节点间距离求最小生成树)
    POJ 2485 Highways (求最小生成树中最大的边)
    杭电 1233 还是畅通工程 (最小生成树)
    杭电 1863 畅通工程 (最小生成树)
  • 原文地址:https://www.cnblogs.com/ouguangqian/p/karate_learn.html
Copyright © 2011-2022 走看看