接口测试平台:Dubbo接口支持

发表于:2019-12-19 17:25

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:糖小幽    来源:软件测试君

  Dubbo具体的Java调用方式可以参考这篇文章《Dubbo接口泛化调用》。
  列表展示大概如下:
  前端配置页,则是对入参进行二次封装。
  返回结果的处理部分,与http请求基本一致
  bean文件
   @Data
  public class DubboCase {
  /** 主键id */
  private int id;
  /** 创建人 */
  private String createrName;
  /** 创建人code */
  private String createrCode;
  /** 创建时间 */
  @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
  private Date createDate;
  /** 更新人 */
  private String updaterName;
  /** 更新人 */
  private String updaterCode;
  /** 更新时间 */
  @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
  private Date updateDate;
  /** 所属系统名称 */
  private String systemName;
  /** 前端填写的apiName */
  private String apiName;
  /** 传给dubbo服务器的接口名 */
  private String apiNameValue;
  /** zookeeper地址 */
  private String zkAddress;
  /** 服务名 */
  private String serviceName;
  /** 分组 */
  private String groupName;
  /** zookeeper版本 */
  private String version;
  /** 入参 */
  private String params;
  /** 函数名 */
  private String functionName;
  /** 类名 */
  private String className;
  /** 备注 */
  private String description;
  /** 需要保存的变量 */
  private String variableListValue;
  private List<VariableSave> variableList;
  /** 校验方式 */
  private String expectedListValue;
  private List<Expected> expectedList;
  /** 最后一次请求状态 */
  private Boolean status;
  /** 响应结果 */
  private String result;
  }
  service层
  与http请求的处理基本一致,都是逐条case遍历进行处理,区别在于String result = ApiTestUtils.doDubboRequest(dubboCase);
   @Override
  public ResponseVo excuteRequest(Integer[] ids) {
  ResponseVo responseVo = new ResponseVo();
  // 全局变量赋值
  List<Variable> variableList = apiTestConfigMapper.selectGlobalVariable();
  for (Variable variable:variableList){
  ApiTestConfig.globalVariableMap.put(variable.getVariableName(), variable.getVariableValue());
  }
  // 获取当前选中的所有case
  List<DubboCase> caseList = dubboCaseMapper.selectDubboCaseListByIds(ids);
  // 遍历caseList,进行http请求
  for (DubboCase dubboCase :caseList){
  String result = ApiTestUtils.doDubboRequest(dubboCase);
  // 保存变量
  ApiTestUtils.saveVariable(result, dubboCase.getVariableListValue(), ApiTestConfig.GLOBAL_COLLECTION_ID);
  // 判断是否通过了所有校验条件
  if (ApiTestUtils.verifyResult(result, dubboCase.getExpectedListValue(), ApiTestConfig.GLOBAL_COLLECTION_ID)){
  dubboCase.setStatus(Boolean.TRUE);
  } else {
  dubboCase.setStatus(Boolean.FALSE);
  }
  // 给testCase的执行状态进行赋值
  dubboCase.setResult(result);
  // 更新数据库保存的信息
  setJsonValue(dubboCase);
  dubboCaseMapper.updateDubboCase(dubboCase);
  // 将执行后的结果返回给前端
  responseVo.setIsSuccess(Boolean.TRUE);
  responseVo.setResult(dubboCase);
  }
  return responseVo;
  }
  ApiTestUtils
   public static String doDubboRequest(DubboCase dubboCase){
  ApplicationConfig application = new ApplicationConfig();
  application.setName(getVariable(dubboCase.getApiNameValue()));
  // 连接注册中心配置
  RegistryConfig registry = new RegistryConfig();
  registry.setAddress(getVariable(dubboCase.getZkAddress()));
  ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
  reference.setApplication(application);
  reference.setRegistry(registry);
  reference.setInterface(getVariable(dubboCase.getServiceName()));
  // 声明为泛化接口
  reference.setGeneric(true);
  reference.setGroup(getVariable(dubboCase.getGroupName()));
  reference.setVersion(getVariable(dubboCase.getVersion()));
  try {
  ReferenceConfigCache cache = ReferenceConfigCache.getCache();
  GenericService genericService = cache.get(reference);
  HashMap<String, Object> maps = EntityUtil.jsonToMap(getVariable(dubboCase.getParams()));
  // 基本类型以及Date,List,Map等不需要转换,直接调用
  Object result = genericService.$invoke(getVariable(dubboCase.getFunctionName()),
  new String[]{getVariable(dubboCase.getClassName())},
  new Object[]{maps});
  return JSON.toJSONString(result);
  } catch (Exception e) {
  e.printStackTrace();
  }
  return null;
  }
  目前Dubbo请求只支持调试执行,最近考虑在场景执行里,支持http与dubbo的混合执行。emm,如果场景支持多类型接口了,可能顺便会把sql执行,显示等待,函数助手等功能都加进去。这样,预计开源时间会推迟到3月以后。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号