您的位置:首页 > 编程语言 > Java开发

基于spring数据抓取和数据回放实现方案

2018-08-10 16:49 681 查看

一、概要

如何线上的实际数据在测试环境进行回放。需要解决的问题

1. 线上数据如何记录

2.线下数据如何回放

3.依赖第三方接口(甚至数据库)可以mock

声明:也许这并没有多大是使用价值

github: https://github.com/Athlizo/pheonix

二、phx



phx分为2个部分

phx-Recorder:用于抓取数据

phx-Replayer:把抓取的数据用于线下回放

难点:如何处理泛型,Optional,null(详细参考代码)

三、使用

第一步,总是在配置类加上@EnablePhx

3.1 Phx-Recorder

1.在入口使用 @PhxEntry

例(phx-test中的代码)

@PostMapping("/n")
@PhxEntry(type = PhxTypeEnum.CONTROLLER)
public Object n() throws SQLException {
phService.creditRefundMoneyReady3(1234, null, null, "content".getBytes());
return "ok";
}


2.在需要mock的地方加上@PhxMock(类和方法名上都可以)



@PhxMock
@Service
public class PhDaoImpl implements PhDao {
....
}


3.2 Phx-Replayer

@Autowired
PhxReplayer phxReplayer;

//一条调用记录
String aRecorder = 你的保存phx-recorder的地方
phxReplayer.replay(aRecorder);


四、例子

参考项目里的phx-test,启动spring boot,然后打开调动/n接口,模拟线上输入



然后标准IO会输出,就是本次调用记录的东西,参考代码在

注1:好吧,我这里没实现怎么保存,就简单打印出来,你们可以把他保存到数据库,文件都可以

注2:key太长了,可以简写


real call //注,证明真的是调用phDao里面的方法

{"abstractPhxMocks":[{"className":"com.enniu.phx.service.PhDaoImpl","methodName":"testMock3","mocked":false,"phxParameters":[{"clz":"@null","val":"null"},{"clz":"java.lang.Integer","val":"1"}],"phxResult":{"clz":"com.enniu.phx.service.PhDo","exception":false,"val":"{\"autoId\":2}"},"uid":"3682431e-0861-4f02-bddb-f12ce16ecd41"}],"entry":{"className":"com.enniu.phx.Application","methodName":"n","phxParameters":[],"phxResult":{"clz":"java.lang.String","exception":false,"val":"\"ok\""}},"type":"CONTROLLER"}

然后把上面json复制,调用/check



这下看到并没有打印 real call

为了说明,回放失败,我把上面的json改一下



在调用一下 check,会发现抛出了 回放失败的异常

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: