Karate-让WebService的测试变的更简单![通俗易懂]
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文件的路徑一樣。
總結
以上是生活随笔為你收集整理的Karate-让WebService的测试变的更简单![通俗易懂]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《TCP/IP详解》笔记----第二章
- 下一篇: 深信服(scsa认证)学习过程[通俗易懂