php dubbo 接口测试工具,接口测试平台:Dubbo接口支持

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

bc316e52d010ee166375f1268e2f806b.png

c9a1880f90537210281148e2083e721c.png

关注测试君 | 会上瘾

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

列表展示大概如下:

178d4de880391672b346b4b55f664e97.png

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

84bd764197c017e69b02262917e0c4c1.png

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

db77ebc08e8568875b9317e76e413e40.png

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 variableList;

/** 校验方式 */

private String expectedListValue;

private List 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 variableList = apiTestConfigMapper.selectGlobalVariable();

for (Variable variable:variableList){

ApiTestConfig.globalVariableMap.put(variable.getVariableName(), variable.getVariableValue());

}

// 获取当前选中的所有case

List 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 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 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月以后。

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

End -

软件测试君 -

我们只研究那些

你感兴趣的技术

喜欢我们就长按下方图片扫码关注吧

3276cbcf7163ae6564ea896efc91311b.png

· 猜你喜欢的文章 ·

1、刚做测试工作一年的时候,我是怎样的?

2、请问,软件测试中,购物车的测试点有哪些?

3、四个类搞定分层自动化测试框架

4、关于接口测试看这篇文章就够了

5、python接口自动化学习笔记(封装方法用于读取excel)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值