接口测试平台:Dubbo接口支持(旧版已废弃)

爱被打了一巴掌 2023-06-20 10:49 122阅读 0赞

Dubbo具体的Java调用方式可以参考这篇文章《Dubbo接口泛化调用》。

列表展示大概如下:
在这里插入图片描述
前端配置页,则是对入参进行二次封装。
在这里插入图片描述
返回结果的处理部分,与http请求基本一致
在这里插入图片描述
bean文件

  1. @Data
  2. public class DubboCase {
  3. /** 主键id */
  4. private int id;
  5. /** 创建人 */
  6. private String createrName;
  7. /** 创建人code */
  8. private String createrCode;
  9. /** 创建时间 */
  10. @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
  11. private Date createDate;
  12. /** 更新人 */
  13. private String updaterName;
  14. /** 更新人 */
  15. private String updaterCode;
  16. /** 更新时间 */
  17. @JsonFormat(locale="zh", timezone="GMT+8", pattern="yyyy-MM-dd")
  18. private Date updateDate;
  19. /** 所属系统名称 */
  20. private String systemName;
  21. /** 前端填写的apiName */
  22. private String apiName;
  23. /** 传给dubbo服务器的接口名 */
  24. private String apiNameValue;
  25. /** zookeeper地址 */
  26. private String zkAddress;
  27. /** 服务名 */
  28. private String serviceName;
  29. /** 分组 */
  30. private String groupName;
  31. /** zookeeper版本 */
  32. private String version;
  33. /** 入参 */
  34. private String params;
  35. /** 函数名 */
  36. private String functionName;
  37. /** 类名 */
  38. private String className;
  39. /** 备注 */
  40. private String description;
  41. /** 需要保存的变量 */
  42. private String variableListValue;
  43. private List<VariableSave> variableList;
  44. /** 校验方式 */
  45. private String expectedListValue;
  46. private List<Expected> expectedList;
  47. /** 最后一次请求状态 */
  48. private Boolean status;
  49. /** 响应结果 */
  50. private String result;
  51. }

service层
与http请求的处理基本一致,都是逐条case遍历进行处理,区别在于String result = ApiTestUtils.doDubboRequest(dubboCase);

  1. @Override
  2. public ResponseVo excuteRequest(Integer[] ids) {
  3. ResponseVo responseVo = new ResponseVo();
  4. // 全局变量赋值
  5. List<Variable> variableList = apiTestConfigMapper.selectGlobalVariable();
  6. for (Variable variable:variableList){
  7. ApiTestConfig.globalVariableMap.put(variable.getVariableName(), variable.getVariableValue());
  8. }
  9. // 获取当前选中的所有case
  10. List<DubboCase> caseList = dubboCaseMapper.selectDubboCaseListByIds(ids);
  11. // 遍历caseList,进行http请求
  12. for (DubboCase dubboCase :caseList){
  13. String result = ApiTestUtils.doDubboRequest(dubboCase);
  14. // 保存变量
  15. ApiTestUtils.saveVariable(result, dubboCase.getVariableListValue(), ApiTestConfig.GLOBAL_COLLECTION_ID);
  16. // 判断是否通过了所有校验条件
  17. if (ApiTestUtils.verifyResult(result, dubboCase.getExpectedListValue(), ApiTestConfig.GLOBAL_COLLECTION_ID)){
  18. dubboCase.setStatus(Boolean.TRUE);
  19. } else {
  20. dubboCase.setStatus(Boolean.FALSE);
  21. }
  22. // 给testCase的执行状态进行赋值
  23. dubboCase.setResult(result);
  24. // 更新数据库保存的信息
  25. setJsonValue(dubboCase);
  26. dubboCaseMapper.updateDubboCase(dubboCase);
  27. // 将执行后的结果返回给前端
  28. responseVo.setIsSuccess(Boolean.TRUE);
  29. responseVo.setResult(dubboCase);
  30. }
  31. return responseVo;
  32. }

ApiTestUtils

  1. public static String doDubboRequest(DubboCase dubboCase){
  2. ApplicationConfig application = new ApplicationConfig();
  3. application.setName(getVariable(dubboCase.getApiNameValue()));
  4. // 连接注册中心配置
  5. RegistryConfig registry = new RegistryConfig();
  6. registry.setAddress(getVariable(dubboCase.getZkAddress()));
  7. ReferenceConfig<GenericService> reference = new ReferenceConfig<>();
  8. reference.setApplication(application);
  9. reference.setRegistry(registry);
  10. reference.setInterface(getVariable(dubboCase.getServiceName()));
  11. // 声明为泛化接口
  12. reference.setGeneric(true);
  13. reference.setGroup(getVariable(dubboCase.getGroupName()));
  14. reference.setVersion(getVariable(dubboCase.getVersion()));
  15. try {
  16. ReferenceConfigCache cache = ReferenceConfigCache.getCache();
  17. GenericService genericService = cache.get(reference);
  18. HashMap<String, Object> maps = EntityUtil.jsonToMap(getVariable(dubboCase.getParams()));
  19. // 基本类型以及Date,List,Map等不需要转换,直接调用
  20. Object result = genericService.$invoke(getVariable(dubboCase.getFunctionName()),
  21. new String[]{getVariable(dubboCase.getClassName())},
  22. new Object[]{maps});
  23. return JSON.toJSONString(result);
  24. } catch (Exception e) {
  25. e.printStackTrace();
  26. }
  27. return null;
  28. }

目前Dubbo请求只支持调试执行,最近考虑在场景执行里,支持http与dubbo的混合执行。emm,如果场景支持多类型接口了,可能顺便会把sql执行,显示等待,函数助手等功能都加进去。这样,预计开源时间会推迟到3月以后。
有疑问的小伙伴欢迎在文章下方留言,我会根据问题不断优化文章内容!

发表评论

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

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

相关阅读