介面測試平台:支援函數助手

因為介面的需求,需要支援類似於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內進行拓展。