Interface Automation test Framework Karate Getting Started

Source: Internet
Author: User
Tags testng
Introduced

In this article, we will introduce the open source Web-api automated Testing Framework--karate
Karate was built on the basis of another BDD test framework cucumber, and shared some of the same ideas. One of these is the use of the Gherkin file, which describes the features being tested
Unlike cucumber, test cases do not need to be written in Java and are fully described in the Gherkin file
With karate, you can write test scripts of any type of Web service side and check if the response is as expected
Karate's validation engine provides a flexible comparison of two JSON or XML file contents, unaffected by whitespace and data order
For more detailed information about karate, please refer to the Karate official introduction

Characteristics
    1. Built on the basis of CUCUMBER-JVM
    2. Can run tests like standard Java projects and generate reports
    3. The development of test code does not require any knowledge of Java
    4. Test code is easy to write, even for non-programmers

      Environmental requirements
    • JDK1.8 and above
    • Maven
    • Idea
Use to create a project
    1. Open idea,file| new| Project
    2. Select Maven Project and click Next
    3. Enter MAVEN basic information and click Next
    4. Enter project name and storage path, click Finish

      Add dependency to use Karate in a MAVEN project, you need to add Karate-apache dependencies to Pom.xml, and if you implement JUnit testing you also need to add KARATE-JUNIT4 dependencies
<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>

Set the test resource file directory, it is recommended that test case files and Java files in the same directory, when encountering a large project convenient management, do not have to switch between folder Src/test/java and Src/test/resources folder, you can Pom.xml

<testResources>    <testResource>        <directory>src/test/java</directory>        <excludes>            <exclude>**/*.java</exclude>        </excludes>    </testResource></testResources>
Service-side simulation

To demonstrate the rest API, we use the Wiremock server
Adding a mock service dependency configuration in Pom.xml

<dependency>    <groupId>com.github.tomakehurst</groupId>    <artifactId>wiremock-standalone</artifactId>    <version>2.18.0</version>    <scope>test</scope></dependency>

Write a class that starts a service

Package Server;import Com.github.tomakehurst.wiremock.wiremockserver;import Static com.github.tomakehurst.wiremock.client.wiremock.*;p Ublic class StartServer {private static Wiremockserver    Wiremockserver = new Wiremockserver (8080);        public static void StartServer () {Wiremockserver.start ();                                Stubfor (Get (Urlequalto ("/user/get")). Willreturn (Aresponse ()                                . Withstatus. Withheader ("Content-type", "Application/json")        . withbody ("{\" id\ ": \" 1234\ ", Name: \" John smith\ "}"))); Stubfor (Post (Urlequalto ("/user/create")). Withheader ("Content-type", Equalto ("appli                                Cation/json ")). Withrequestbody (containing (" id ")). Willreturn (Aresponse () . Withstatus. Withheader ("Content-type", "Application/jsoN "). Withbody (" {\ "id\": \ "1234\", Name: \ "John smith\"} "));   public static void Main (String ... args) {startserver (); }}
Use case File Authoring

A use case file is saved with a ". Feature" extension.
The file begins with the feature keyword, followed by the name of the feature being tested on the same line
A use case file contains different test scenarios, each of which begins with the keyword scenario and contains multiple steps. These steps contain keywords Given,when,then,and and But
For more information about the cucumber and gherkin structures, click here

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 class writing

Recommended in the use case file sibling directory
We can run our tests by integrating Karate with JUnit
We will use @cucumberoptions annotations to specify the exact location of the feature file

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 {}
Run a use case
    1. Start the service first
      Right-click the StartServer class and select Run Startserver.main () to start the service

    2. Run a use case
      Right-click the Demorunner class and select Run Demorunner to test

      View Reports

      In the project's Target/surfire-reports directory there is a test-demo.demo.html file, the browser opens to see the results

Continuous integration

Automated testing can be done with Jenkins, and Jenkins provides plug-ins cucumber-reports to display highly readable automated test reports
Need to modify runner inheritance Karaterunner, first introduce karate-testng dependency

<dependency>    <groupId>com.intuit.karate</groupId>    <artifactId>karate-testng</artifactId>    <version>0.8.0</version></dependency>

Modify Demorunner, note configuration cucumberoptions, to produce a JSON-formatted report, Cucumber-reports plugin will parse the file and generate a report

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 {}

Please refer to network resources for cucumber-reports configuration in Jenkins
Jenkins Configuration command line run instructions

RM-RF ${workspace}/report.json
Cd/home/pateo/ideaprojects/demo4karate
MVN Test-dtest=demorunner
CP Report.json ${workspace}/report.json

Jenkins Report Show

Code Reference Address:

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.