首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口自动化测试平台系列:接口执行顺序与依赖

接口自动化测试平台系列:接口执行顺序与依赖

作者头像
软件测试君
发布2019-11-18 16:02:23
1K0
发布2019-11-18 16:02:23
举报
文章被收录于专栏:测试人生测试人生

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

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

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

1、变量的保存

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

变量的保存有两种方式:

  • 全局变量

有一个配置页面可以配置全局变量,所有接口中均可引用该变量

执行开始时,会有一个从数据库中获取所有全局变量的操作,然后赋值给一个全局的globalVariableMap

// 全局变量赋值
List<Variable> variableList = apiTestConfigMapper.selectGlobalVariable();
for (Variable variable:variableList){
    ApiTestConfig.globalVariableMap.put(variable.getVariableName(), variable.getVariableValue());
}
  • 接口内获取的变量

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

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

public static void saveVariable(String result, TestCase testCase, Integer collectionId) {

        if (!result.isEmpty()) {
            List<VariableSave> variableList = JSON.parseArray(testCase.getVariableListValue(), VariableSave.class);
            for (VariableSave variable : variableList) {
                // 提取方式:1.jsonPath  2.正则表达式
                int extractMethod = variable.getExtractMethod();
                String variableName = variable.getVariableName();
                String extractRule = variable.getExtractRule();
                // 提取到的结果
                String extractRes = "";
                if (extractMethod == 1) {
                    try {
                        Object o = JsonPath.read(result, extractRule);
                        extractRes = String.valueOf(o);
                    } catch (Exception e) {
                        log.error(String.valueOf(e));
                    }

                } else if (extractMethod == 2) {
                    Pattern p = Pattern.compile(extractRule);
                    Matcher m = p.matcher(result);
                    if (m.find()) {
                        extractRes = m.group();
                    }
                }
                // 如果是简单的调试执行则将变量保存到全局变量map中,如果是集合执行,则只保存到集合变量map中
                if (collectionId == 0) {
                    ApiTestConfig.globalVariableMap.put(variableName, extractRes);
                } else {
                    ApiTestConfig.collectionVariableMap.put(variableName, extractRes);
                }

            }
        }
    }

2、变量的获取

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

private static String getVariable(String string,Integer collectionId){

        HashMap<String,String> variableMap = ApiTestConfig.globalVariableMap;


        // 如果为集合执行,会再次获取集合内变量
        if (collectionId != 0){
            variableMap.putAll(ApiTestConfig.collectionVariableMap);
        }

        // 查询string中是否有${KEY}格式的数据,如果有则将其替换为VALUE
        if (!string.isEmpty()){
            String reg = "\\$\\{.*?}";
            Pattern p = Pattern.compile(reg);
            Matcher m = p.matcher(string);
            // 遍历替换所有的变量
            while (m.find()){
                String key = m.group().replace("${","").replace("}","");
                if (variableMap.containsKey(key)){
                    string = string.replace(m.group(),variableMap.get(key));
                }
            }
            return string;
        } else {
            return "";
        }
    }

3、接口执行顺序

在接口列表页,只有多选,只能按照接口的录制顺序来执行。

在集合内进行测试时,可通过鼠标拖拽的方式修改case的顺序

这边变可快速修改case的顺序,从而到达控制case执行顺序的需求。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档