TestFrameWork是Java編寫的測試框架
TestFrameWork
TestFrameWork是Java編寫的測試框架
特點: 1. 使用了Java8 lambda表達式 2. 使用get, post, put, delete方式傳輸數據, 返回值校驗,同時可以根據測試數據生成相應的md格式文檔
Quickly Start
導入相應的jar包 TestFrameWork和依賴包 FastJson.jar 導入成功就可以運行了 靜態導入文件
import static com.testfreamwork.core.TestFrameWork.*;發送一個post請求
public static void main(String [] args){ post("http://localhost/RestfulApi/index.php/api/sign", "登錄", (request -> { MyJsonObject myJsonObject = new MyJsonObject(); myJsonObject.put("name", "wer123", "姓名"); request.setJson(myJsonObject.toString()); return request.send_json(); })).print_content(); }post函數第一個參數表示要發送的地址,第二個參數表示API接口的作用,第三個參數發送請求 發送請求時我們可以使用MyJsonObject對象傳入我們的信息,它繼承了JsonObject對象,使用request.setJson()方法設置json字符串,用request.send_json()方法表示傳送的信息是jsonges,它返回一個Response對象,我們打印它的返回值 如果我們在函數后增加一個createDoc()方法,它會根據測試代碼的內容生成md格式的接口文檔
## 登錄 `post http://localhost/RestfulApi/index.php/api/sign` ##### 請求體 參數名 | 描述 --- |--- name |姓名 #####請求示例 \``` { "name":"wer123" } \``` ##### 響應示例 \``` 200 OK { } \```
反斜杠是為了方便表示加的,程序不會生成
說明文檔
傳輸方式:get post put delete
get("http://localhost/RestfulApi/index.php/api/sign", "登錄", (request -> { request.send_param(); })).print_content(); } post("http://localhost/RestfulApi/index.php/api/sign", "登錄", (request -> { request.send_json(); //request.send_param(); })).print_content(); } put("http://localhost/RestfulApi/index.php/api/sign", "登錄", (request -> { request.send_json(); //request.send_param(); })).print_content(); } delete("http://localhost/RestfulApi/index.php/api/sign", "登錄", (request -> { request.send_json(); //request.send_param(); })).print_content(); }
使用MyJsonObject或JsonObject封裝數據,MyJsonObject的put()函數可以傳輸參數的解釋,其他的方法都相同
request
MyJsonObject myJsonObject = new MyJsonObject(); myJsonObject.put("name", "wer123", "姓名"); JsonObject jsonObject = new JsonObject(); jsonObject.put("name", "wer123", "姓名");
如果使用了json數據就要使用request.setJson()方法傳入json字符串,用request.send_json()發送請求
如果要用一般的方法發送請求,需要把對象封裝在Map對象里,用request.setParameters()方法傳入map對象,用request.send_param()方法發送
Map<String, String> map = new HashMap<String, String>(); map.put("name", "wer123"); map.put("phone", "121"); request.setParameters(map); return request.send_param();
request對象提供了一些方法
request.setAccept(); request.setContentsType(); request.setCookie(); request.setDefaultContentEncoding();
get post put delete 方法返回Response對象
get("http://localhost/RestfulApi/index.php/api/sign", "登錄", (request -> { return request.send_param(); })).print_content(); print_content() //打印返回內容 print_code() //打印狀態碼 print_content_type() //答應返回值類型
對返回數據進行校驗
對返回值校驗只支持Json格式的數據
get("/api/getplease", "邀請碼", (request -> { return request.send_param(); })).getJson().except().equalStr("status", "1");
使用getJson()和except()可以進入校驗
校驗的方法
printJsonObject() //打印json字符串的值 equalInt() equalDouble() equalStr() //參數第一個為校驗值的name,第二個參數為期望值,第三個為可選參數為name的說明,可以在接口文檔里生成 isInt() isDouble() //第一個參數為期望值,第二個為可選參數為name的說明,可以在接口文檔里生成 isRegex() //參數第一個為校驗值的name,第二個參數為正則,第三個為可選參數為name的說明,可以在接口文檔里生成
錯誤信息
如果真實值和期望值不符將會報錯,但不影響下面的值的檢驗,接口文檔只會和校驗代碼有關,和接口的正確性沒有關系
--------------------------------------- testfream.java: Line 121 ===============>.getJsonArray("data").isArrayKey().isRegex("num",[0-9a-zA-Z|-]) ^ Actual => 123 正則表達式匹配錯誤 ---------------------------------------
錯誤信息會顯示錯誤的行數,期望值和實際值
對Json數組的檢驗
使用getJsonArray("data").isArrayKey()開始進行數組校驗,也可以用 getJsonArray("data").isArrayNum(2).isArrayKey()進行數組個數的判斷,它會影響接口文檔的生成,data表示json的鍵
{"status":1, "data":[...]}
isArrayKey()后面與對json字符串的校驗相同(相當于現在的json值就是數值內第一個json字符串),但一定要用isArrayEnd()方法結尾,isArrayEnd()方法讓當前的字符串又變為以前的Json對象,但是只能獲取上一層的json對象(數組內部的數組執行isArrayKey()方法后最外層的json對象會丟失),如果要校驗多個json數組檢驗獲取返回的Response對象,進行多次校驗
與Junit的結合
使用Junit框架我們可以在測試方法之前初始化一些信息
@BeforeClass public static void setup(){ init("http://localhost", "", "RestfulApi/index.php/"); initFile(); }
init()方法可以初始化url信息(第一個參數是ip地址,第二個參數是端口號,第三個參數是項目根目錄地址),現在我們在傳送信息時url只需要加上后面的地址就行了
get("/api/sign", "登錄", (request -> { return request.send_param(); })).print_content();
initFile()方法可以生成接口文檔的基本信息
功能完善
- 可以控制文檔的生成 isCreateDoc(false); 在執行之前調用isCreateDoc(false)方法將不會生成文檔,使用Junit框架時可以放在@BeforeClass注釋的函數initFile()方法前,不讓生成文檔,在測試完成后將false改成true就可以開始生成文檔
- 實現了對一些敏感參數的封裝
- 完成了對返回狀態碼不等于200情況的處理,用戶可以對其他狀態碼返回的數據進行校驗
- 更新了驗證錯誤的提示信息,可以找出錯誤信息的位置
下面給出一個Demo
@BeforeClass public static void setup(){ init("http://localhost", "", "RestfulApi/index.php/"); initFile(); } @Test public void sign(){ post("/api/sign", "簽到", (request -> { MyJsonObject myJsonObject = new MyJsonObject(); myJsonObject.put("name", "wersdf123", "姓名"); request.setJson(myJsonObject.toString()); Response response = request.send_json(); return response; })).getJson().except().equalStr("status", "1", "標識符").getJsonArray("data").isArrayNum(2).isArrayKey().equalStr("name", "wer123").equalInt("position", 1).isArrayEnd(); createDoc(); } @Test public void please(){ get("/Api/getplease", "邀請碼", (request -> { Response response = request.send_param(); return response; })).getJson().except().equalStr("status", "1"). getJsonArray("data").isArrayKey().isInt("id").isRegex("num", "[0-9a-zA-Z|-]").isArrayEnd(); createDoc(); }
執行測試方法,可以得到相應的錯誤提示來判斷接口是否正確,同時會生成相應的接口文檔
# 接口文檔 `接口url:http://localhost/RestfulApi/index.php/` ## 邀請碼 `get /Api/getplease` #####請求示例 /``` /``` ##### 響應示例 /``` 200 OK { "data":[ "{ "num":"正則:[ 0-9a-zA-Z|- ]", "id":"Integer.class" }", "{ ... }" ], "status":"1" } /``` ## 簽到 `post /api/sign` ##### 請求體 參數名 | 描述 --- |--- name |姓名 status |標識符 #####請求示例 /``` { "name":"wersdf123" } /``` ##### 響應示例 /``` 200 OK { "data":[ "{ "name":"wer123", "position":1 }" ], "status":"1" } /```