介面測試平台:支援函數助手
- 2020 年 1 月 2 日
- 筆記
因為介面的需求,需要支援類似於Jmeter中函數助手的功能。 以以下兩個函數進行舉例:
- Random

Random
- time

time
其實處理方式很簡單,因為我們原本對${KEY}
類型的欄位,有一個getVariable函數的處理,詳情可參考介面測試平台:介面執行順序與依賴。我們只需要對${KEY}
中的KEY的字元做解析,如果key以"__"開頭,則調用函數助手。

下面只以random和time兩個函數為例,講解functionAssistant。
private static final String RANDOM = "__Random"; private static final String TIME = "__time"; /** 函數助手 */ private static String functionAssistant(String key){ /** * 入參:最小值,最大值,變數名 * __Random(1,99,INT) => 從1~99的數字,保存變數為 INT */ if (key.startsWith(RANDOM)){ String parameters = key.replace(RANDOM + "(","").replace(")",""); String[] paramList = parameters.split(","); // 格式不對,返回空string if (paramList.length != 3 && paramList.length != 2){ return key; } Long min = Long.valueOf(paramList[0]); Long max = Long.valueOf(paramList[1]); String value = String.valueOf((long) (min + Math.random()*(max - min +1))); if (paramList.length == 3){ ApiTestConfig.globalVariableMap.put(paramList[2], value); } return value; } /** * 入參:時間格式,變數名 * __time(,) 獲取當前時間毫秒 * __time(/1000,) 獲取當前時間秒 * __time(yyyy-MM-dd,) 獲取yyyy-MM-dd格式時間 */ if (key.startsWith(TIME)){ String parameters = key.replace(TIME + "(","").replace(")",""); String[] paramList = parameters.split(","); Long now = System.currentTimeMillis(); if (paramList.length == 0){ return String.valueOf(now); } if (paramList[0].isEmpty() && !paramList[1].isEmpty()){ // __time(,Var) ApiTestConfig.globalVariableMap.put(paramList[1], String.valueOf(now)); } if (paramList[0].equals("/1000")){ String value = String.valueOf(now / 1000); // __time(/1000,Var)或 __time(/1000,) if (paramList.length == 2){ ApiTestConfig.globalVariableMap.put(paramList[1], value); } return value; } // __time(yyyy-MM-dd,)或__time(yyyy-MM-dd,Var),包含其他各種日期格式 SimpleDateFormat sdf = new SimpleDateFormat(paramList[0]); String value = sdf.format(new Date(now)); if (paramList.length == 2){ ApiTestConfig.globalVariableMap.put(paramList[1], value); } return value; } return key; }
更多函數,可直接在functionAssistant內進行拓展。