TestFrameWork是Java編寫的測試框架

jopen 8年前發布 | 34K 次閱讀 單元測試 TestFrameWork

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()方法可以生成接口文檔的基本信息

功能完善

  1. 可以控制文檔的生成 isCreateDoc(false); 在執行之前調用isCreateDoc(false)方法將不會生成文檔,使用Junit框架時可以放在@BeforeClass注釋的函數initFile()方法前,不讓生成文檔,在測試完成后將false改成true就可以開始生成文檔
  2. 實現了對一些敏感參數的封裝
  3. 完成了對返回狀態碼不等于200情況的處理,用戶可以對其他狀態碼返回的數據進行校驗
  4. 更新了驗證錯誤的提示信息,可以找出錯誤信息的位置
下面給出一個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"
}
/```

項目地址: https://github.com/wwg377655460/TestFrameWork

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!