前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >接口测试平台:Dubbo接口支持

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

作者头像
软件测试君
发布2019-12-19 16:33:22
1.4K0
发布2019-12-19 16:33:22
举报
文章被收录于专栏:测试人生测试人生
Dubbo具体的Java调

列表展示大概如下:

前端配置页,则是对入参进行二次封装。

返回结果的处理部分,与http请求基本一致

bean文件
代码语言:javascript
复制
@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);

代码语言:javascript
复制
@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
代码语言:javascript
复制
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月以后。

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • bean文件
  • service层
  • ApiTestUtils
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档