摘要:华为导流测试平台通过对线上流量回放到被测环境中,利用线上实在流量进行充沛测试,保障业务零碎稳固上线。然而业务在导流测试过程中现网数据库往往难以同步到测试环境,导致现网数据无奈失常回放,测试价值升高。由此提出回放过程中对数据库进行mock,以保障回放过程失常进行。

一、需要剖析

1.背景

华为导流测试平台通过对线上流量回放到被测环境中,利用线上实在流量进行充沛测试,保障业务零碎稳固上线。然而业务在导流测试过程中现网数据库往往难以同步到测试环境,导致现网数据无奈失常回放,测试价值升高。由此提出回放过程中对数据库进行mock,以保障回放过程失常进行。

2.计划剖析

数据库Mock计划大抵分为以下3种:

3.计划比照

二、计划2:MySQL驱动字节码批改加强计划具体阐明

1.方案设计

字节码加强:通过剖析MySQL数据库驱动源码可知,获取数据库返回的ResultSet后果集的办法在com.mysql.jdbc.PreparedStatement类中的executeQuery办法,和执行完execute办法之后再调用getResultSet办法两种形式,所以咱们须要对executeQuery和execute两个办法进行字节码批改加强。即在这两个办法执行实现之后,注入以下代码:获取Mock文件中的行列数据,转成MySQL须要的字节码对象,再设置到ResultSet实例化对象中替换原数据库的实在数据即可。

Mock数据设计和解析:一次申请链路中,比方有上面三次查问语句,并且存在雷同sql执行屡次并且返回后果不同的状况,那么咱们在回放申请过程时,就得按程序去顺次获得每条sql执行的后果数据,而且能做到可对链路中其中一些sql后果进行mock,不mock的sql返回数据库的实在数据。

2.应用阐明

1.在须要数据库Mock性能的第三方服务的启动命令中减少-javaagent参数指向该jar包,形式如下:

java -javaagent:D:/dbmockagent.jar -jar **.jar

2.参数设置:

(1)可设置dbmock.file参数指定Mock数据文件,不设置时默认为C:/dbmock.data。目前只实现了从文件中读取mock数据,可扩大从接口等其它中央获取Mock数据。

java -javaagent:D:/dbmockagent.jar -Ddbmock.file="D:/dbmock.data" –jar **.jar

(2)可设置dbmock.port参数指定重载Mock数据接口调用的端口,可不设置,默认为8888:

java -javaagent:D:/dbmockagent.jar -Ddbmock.file="D:/dbmock.data" -Ddbmock.port=8088 -jar **.jar

3.计划测试

3.1 应用MySQL驱动直连数据库

3.1.1 不应用插件

3.1.2 应用插件

再次运行下面的代码,执行后果如下,输入了DBMock相干的log信息,返回的数据正好为下面mock的数据,并且两次sql语句尽管雷同,然而返回的后果数据是依照mock文件里的程序返回的。

3.2 SpringBoot工程中通过MyBatis连贯数据库

3.2.1 不应用插件

3.2.2 应用插件

3.3 Mock数据更新

**


**

本文分享自华为云社区《数据库Mock方案设计》,原文作者:chenhuaping 。

点击关注,第一工夫理解华为云陈腐技术~