前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口测试平台:支持混合Case的执行(Http\Dubbo\Sql)

接口测试平台:支持混合Case的执行(Http\Dubbo\Sql)

作者头像
软件测试君
发布2020-02-12 16:48:40
5800
发布2020-02-12 16:48:40
举报
文章被收录于专栏:测试人生测试人生
首先还是看前端~

Case的管理页面,由原本的Http变成支持Http、Dubbo以及Sql。

集合详情页,Case所展示的内容也做了适当调整,只会展示Case名称和Case类型。

这张表用于保存集合内的case顺序。

然后新建了一个CommonCase,caseInfo字段用于保存case的完整信息。

代码语言:javascript
复制
public class CommonCase {

    /**
     * 前端传入的id
     * 不入库,在函数里转换为caseId
     */
    private Integer id;

    /** 集合id */
    private Integer collectionId;

    /** caseId */
    private Integer caseId;

    /** Case名称 */
    private String caseName;

    /**
     * 集合类型
     * 1:http 2:dubbo  3:mysql
     */
    private Integer caseType;

    private Object caseInfo;

}

Service层

之前传入testng的是一个httpCase,现在改成了一个commonCase

代码语言:javascript
复制
@Override
public ResponseVo collectionExcute(Integer collectionId) {

   ResponseVo responseVo = new ResponseVo();

   // 获取完整的case列表
   ApiTestConfig.caseList = collectionCaseManageMapper.selectCommonCase(collectionId);

   // 遍历caseList,给caseInfo进行赋值,获取完整的case信息
   for (CommonCase commonCase:ApiTestConfig.caseList){
       Integer caseType = commonCase.getCaseType();
       switch (caseType){
           case ApiTestConfig.HTTP_CASE_TYPE:
               commonCase.setCaseInfo(httpCaseMapper.selectHttpCase(commonCase.getCaseId()));
               break;
           case ApiTestConfig.DUBBO_CASE_TYPE:
               commonCase.setCaseInfo(dubboCaseMapper.selectDubboCase(commonCase.getCaseId()));
               break;
           case ApiTestConfig.SQL_CASE_TYPE:
               SqlCase sqlCase = sqlCaseMapper.selectSqlCase(commonCase.getCaseId());
               DataBase dataBase = apiTestConfigMapper.selectDataBaseById(sqlCase.getDatabaseId());
               dataBase.setSqlCase(sqlCase);
               commonCase.setCaseInfo(dataBase);
               break;
           default:
               break;
       }
   }

   ApiTestConfig.collectionId = collectionId;

   // 全局变量赋值
   List<Variable> globalVariableList = apiTestConfigMapper.selectGlobalVariable();
   for (Variable variable:globalVariableList){
       ApiTestConfig.globalVariableMap.put(variable.getVariableName(),variable.getVariableValue());
   }

   // 集合变量赋值
   List<Variable> collectionVariableList = apiTestCollectionMapper.selectCollectionVariable(collectionId);
   for (Variable variable:collectionVariableList){
       ApiTestConfig.collectionVariableMap.put(variable.getVariableName(),variable.getVariableValue());
   }

   // 测试报告保存路径
   ApiTestConfig.reportName = String.valueOf(System.currentTimeMillis())+ ".html";
   CollectionDetail collectionDetail =  apiTestCollectionMapper.selectCollectionDetail(collectionId);
   collectionDetail.setId(collectionId);
   collectionDetail.setReportPath("/report/" + ApiTestConfig.reportName);

   // 更新最后执行人和最后执行时间
   User u = HttpBasicAuthorizeAttribute.getTokenUserInfo().get();
   collectionDetail.setExcuterCode(u.getCode());
   collectionDetail.setExcuterName(u.getName());
   collectionDetail.setExcuteDatetime(new Date());
   apiTestCollectionMapper.updateCollection(collectionDetail);

   // 新增执行记录
   apiTestCollectionMapper.insertExcuteRecords(collectionDetail);

   // 测试报告推送至企业微信
   if (collectionDetail.getWxPush()){
       String content = "接口测试平台报告 \n";
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       content += "【测试时间】" + sdf.format(new Date()) + "\n";
       content += "【测试报告】http://10.230.27.158:8080/report/" + ApiTestConfig.reportName;
       WxMsgPush.wxMsgPush(u.getCode(), content);
   }

   // 测试执行
   TestNG testNg = new TestNG();
   Class[] listenerClass = {ExtentTestNGIReporterListener.class};
   testNg.setListenerClasses(Arrays.asList(listenerClass));

   testNg.setTestClasses(new Class[]{CollectionDetailExcute.class});
   testNg.run();

   responseVo.setIsSuccess(Boolean.TRUE);
   responseVo.setResult("执行完毕");

   return responseVo;
}

CollectionDetailExcute

原本的http请求拓展为三种Case类型。

具体的执行代码可以参考之前的文章《接口测试平台-Http请求的简单执行》《接口测试平台-Dubbo接口支持》《接口测试平台-支持SQL语句执行(Mysql、Oracle)》

代码语言:javascript
复制
@Override
public ResponseVo collectionExcute(Integer collectionId) {

   ResponseVo responseVo = new ResponseVo();

   // 获取完整的case列表
   ApiTestConfig.caseList = collectionCaseManageMapper.selectCommonCase(collectionId);

   // 遍历caseList,给caseInfo进行赋值,获取完整的case信息
   for (CommonCase commonCase:ApiTestConfig.caseList){
       Integer caseType = commonCase.getCaseType();
       switch (caseType){
           case ApiTestConfig.HTTP_CASE_TYPE:
               commonCase.setCaseInfo(httpCaseMapper.selectHttpCase(commonCase.getCaseId()));
               break;
           case ApiTestConfig.DUBBO_CASE_TYPE:
               commonCase.setCaseInfo(dubboCaseMapper.selectDubboCase(commonCase.getCaseId()));
               break;
           case ApiTestConfig.SQL_CASE_TYPE:
               SqlCase sqlCase = sqlCaseMapper.selectSqlCase(commonCase.getCaseId());
               DataBase dataBase = apiTestConfigMapper.selectDataBaseById(sqlCase.getDatabaseId());
               dataBase.setSqlCase(sqlCase);
               commonCase.setCaseInfo(dataBase);
               break;
           default:
               break;
       }
   }

   ApiTestConfig.collectionId = collectionId;

   // 全局变量赋值
   List<Variable> globalVariableList = apiTestConfigMapper.selectGlobalVariable();
   for (Variable variable:globalVariableList){
       ApiTestConfig.globalVariableMap.put(variable.getVariableName(),variable.getVariableValue());
   }

   // 集合变量赋值
   List<Variable> collectionVariableList = apiTestCollectionMapper.selectCollectionVariable(collectionId);
   for (Variable variable:collectionVariableList){
       ApiTestConfig.collectionVariableMap.put(variable.getVariableName(),variable.getVariableValue());
   }

   // 测试报告保存路径
   ApiTestConfig.reportName = String.valueOf(System.currentTimeMillis())+ ".html";
   CollectionDetail collectionDetail =  apiTestCollectionMapper.selectCollectionDetail(collectionId);
   collectionDetail.setId(collectionId);
   collectionDetail.setReportPath("/report/" + ApiTestConfig.reportName);

   // 更新最后执行人和最后执行时间
   User u = HttpBasicAuthorizeAttribute.getTokenUserInfo().get();
   collectionDetail.setExcuterCode(u.getCode());
   collectionDetail.setExcuterName(u.getName());
   collectionDetail.setExcuteDatetime(new Date());
   apiTestCollectionMapper.updateCollection(collectionDetail);

   // 新增执行记录
   apiTestCollectionMapper.insertExcuteRecords(collectionDetail);

   // 测试报告推送至企业微信
   if (collectionDetail.getWxPush()){
       String content = "接口测试平台报告 \n";
       SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       content += "【测试时间】" + sdf.format(new Date()) + "\n";
       content += "【测试报告】http://10.230.27.158:8080/report/" + ApiTestConfig.reportName;
       WxMsgPush.wxMsgPush(u.getCode(), content);
   }

   // 测试执行
   TestNG testNg = new TestNG();
   Class[] listenerClass = {ExtentTestNGIReporterListener.class};
   testNg.setListenerClasses(Arrays.asList(listenerClass));

   testNg.setTestClasses(new Class[]{CollectionDetailExcute.class});
   testNg.run();

   responseVo.setIsSuccess(Boolean.TRUE);
   responseVo.setResult("执行完毕");

   return responseVo;
}

DataProvider

代码语言:javascript
复制
public class DataProvider implements Iterator<Object[]> {

    /** 查询结果集 */
    List<CommonCase> caseList;

    /** 总行数 */
    private int rowNum=0;
    /** 当前行数 */
    private int curRowNo=0;

    public DataProvider(List<CommonCase> cases){

        this.caseList = cases;
        this.rowNum = caseList.size();

    }

    @Override
    public boolean hasNext() {
        if(rowNum==0||curRowNo>=rowNum){
            return false;
        }else{
            return true;
        }
    }

    @Override
    public Object[] next() {
        CommonCase commonCase = caseList.get(curRowNo);
        Object[] o=new Object[1];
        o[0]= commonCase;
        this.curRowNo++;
        return o;
    }
}

extentreport的配置文件部分做了点修改,修改case的name。

到此混合Case的执行就完成啦,有疑问的小伙伴欢迎在文章下方留言,我会根据问题不断优化文章内容!

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

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

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

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

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