接口测试平台:接口执行顺序与依赖(旧版已废弃)

曾经终败给现在 2023-06-13 06:12 64阅读 0赞

在不同的case中,接口的依赖一般通过两个维度去控制:

  1. 变量:类似于订单号,cookie等等,其本质都是变量
  2. 接口的执行顺序:如果要在A接口中拿到一个字段,在B接口中使用,那当然我们就得确保A接口会先执行,并保证会保存所需要的变量

下面会分开讲一下,两个维度分别是如何处理的

1.变量的保存

在平台中,变量有一种通用的保存方式和存储方式,例如我有一个字段叫variable,那在保存时,会声明一个变量叫VARIABLE,在其他接口引用时使用${VARIABLE}即可。

变量的保存有两种方式:

  • 全局变量
    有一个配置页面可以配置全局变量,所有接口中均可引用该变量
    在这里插入图片描述
    执行开始时,会有一个从数据库中获取所有全局变量的操作,然后赋值给一个全局的globalVariableMap

    // 全局变量赋值
    List variableList = apiTestConfigMapper.selectGlobalVariable();
    for (Variable variable:variableList){

    1. ApiTestConfig.globalVariableMap.put(variable.getVariableName(), variable.getVariableValue());

    }

  • 接口内获取的变量
    在这里插入图片描述
    在接口的响应结果中,可以通过JsonPath和正则表达式两种方式获取变量。当然,在有多个接口的情况下,保存变量的接口必须在引用接口之前执行。

执行接口的函数内,有一个saveVariable,用以从返回结果中,保存所有需要在后续接口中使用的变量。
在这里插入图片描述

  1. public static void saveVariable(String result, TestCase testCase, Integer collectionId) {
  2. if (!result.isEmpty()) {
  3. List<VariableSave> variableList = JSON.parseArray(testCase.getVariableListValue(), VariableSave.class);
  4. for (VariableSave variable : variableList) {
  5. // 提取方式:1.jsonPath 2.正则表达式
  6. int extractMethod = variable.getExtractMethod();
  7. String variableName = variable.getVariableName();
  8. String extractRule = variable.getExtractRule();
  9. // 提取到的结果
  10. String extractRes = "";
  11. if (extractMethod == 1) {
  12. try {
  13. Object o = JsonPath.read(result, extractRule);
  14. extractRes = String.valueOf(o);
  15. } catch (Exception e) {
  16. log.error(String.valueOf(e));
  17. }
  18. } else if (extractMethod == 2) {
  19. Pattern p = Pattern.compile(extractRule);
  20. Matcher m = p.matcher(result);
  21. if (m.find()) {
  22. extractRes = m.group();
  23. }
  24. }
  25. // 如果是简单的调试执行则将变量保存到全局变量map中,如果是集合执行,则只保存到集合变量map中
  26. if (collectionId == 0) {
  27. ApiTestConfig.globalVariableMap.put(variableName, extractRes);
  28. } else {
  29. ApiTestConfig.collectionVariableMap.put(variableName, extractRes);
  30. }
  31. }
  32. }
  33. }
2.变量的获取

url、port、header、body等部分在进行请求前,都会经过一个getVariable函数进行处理,该函数的作用则是通过正则检查参数中是否存在${XX}形式的存在,如果有的话在将其视为变量,去全局变量map中查询对应的变量值进行替换
在这里插入图片描述

  1. private static String getVariable(String string,Integer collectionId){
  2. HashMap<String,String> variableMap = ApiTestConfig.globalVariableMap;
  3. // 如果为集合执行,会再次获取集合内变量
  4. if (collectionId != 0){
  5. variableMap.putAll(ApiTestConfig.collectionVariableMap);
  6. }
  7. // 查询string中是否有${KEY}格式的数据,如果有则将其替换为VALUE
  8. if (!string.isEmpty()){
  9. String reg = "\\$\\{.*?}";
  10. Pattern p = Pattern.compile(reg);
  11. Matcher m = p.matcher(string);
  12. // 遍历替换所有的变量
  13. while (m.find()){
  14. String key = m.group().replace("${","").replace("}","");
  15. if (variableMap.containsKey(key)){
  16. string = string.replace(m.group(),variableMap.get(key));
  17. }
  18. }
  19. return string;
  20. } else {
  21. return "";
  22. }
  23. }
3.接口执行顺序

在接口列表页,只有多选,只能按照接口的录制顺序来执行。
在这里插入图片描述
在集合内进行测试时,可通过鼠标拖拽的方式修改case的顺序
在这里插入图片描述
这边变可快速修改case的顺序,从而到达控制case执行顺序的需求。

有疑问的小伙伴欢迎在文章下方留言,我会根据问题不断优化文章内容!

发表评论

表情:
评论列表 (有 0 条评论,64人围观)

还没有评论,来说两句吧...

相关阅读