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