摘要:华为导流测试平台通过对线上流量回放到被测环境中,利用线上实在流量进行充沛测试,保障业务零碎稳固上线。然而业务在导流测试过程中现网数据库往往难以同步到测试环境,导致现网数据无奈失常回放,测试价值升高。由此提出回放过程中对数据库进行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 。
点击关注,第一工夫理解华为云陈腐技术~