在上一篇Diffy的安装部署及使用已经介绍了如何使用diffy,这里再重新贴一下各参数的作用便于后面的说明。
candidate=localhost:9200 (待上线版本部署地址)
master.primary=localhost:9000 (已上线版本地址1)
master.secondary=localhost:9100 (已上线版本地址2)
service.protocol=http (http协议或https)
serviceName=My Service (服务名称,无影响)
proxy.port=:8880 (diffy代理端口,所以请求都应从这个端口访问)
admin.port=:8881 ( 通过http://localhost:8881/admin可以查看请求状况)
http.port=:8888 (查看界面,在这里可以比较差异)
rootUrl='localhost:8888' (同上)
responseMode=primary (代理服务器是否返回结果,默认(empty)无返回,可指定primary返回线上版本,secondary(同线上版本,用于噪音消除),candidate(待测试版本)
excludeHttpHeadersComparison=false (是否排除header的差异,不同服务器,cookie,nginx版本可能有所差异,设置为true可以忽略这些差异)
notifications.targetEmail=123@emal.com (对差异发送到指定邮箱)
allowHttpSideEffects=true
一. 环境准备
allowHttpSideEffects=false
),只需准备一个数据库即可, 若需要同时测读写(参数allowHttpSideEffects=true
),则需要准备与应用实例相同数量且数据的数据库。二. 现实场景应用
responseMode=candidate
,返回待测试版本的请求结果,所有测试工作与不使用diffy完全一样,只是请求地址由测试版本地址变成了diffy代理服务器地址,diffy会默默将请求发送到master和secondary,测试版本测试完成后,再去分析下diffy服务器生成的差异报告,可查看新版本改动对旧版本的影响。responseMode=primary
即可。 UserAccess(
var accessID: Long = -1,(accessID, 根据时间生成的id)
var userID: Long = -1, (用户ID,可选)
var requestURI: String = null,(请求的uri)
var context: String = null,(请求的context)
var header:String = null,(请求头部信息,如Content-type)
var requestMethod = null,(请求类型,如post get)
var paramData: String = null,(请求参数)
var accessTimestamp: Long = -1,(请求时间,建议转换成长整型,这样查询比较时比较方便)
var isParamTooLong:Boolean = false( 请求参数是否过长,过长的可能会考虑截断,数据不完整,无法重现请求)
var version:String = null(此条日志在哪一版本应用服务上生成)
)
b.假设项目P的版本V1在时间D1上线,版本V1上线前的数据库为DB1,我们先备份DB1;在对V2进行测试时,我们取出线上版本V1的的访问日志(即version=V1,或时间D1到当前时间).
c.通过访问日志,利用httpClient或其他类似框架去重造请求,请求diffy代理服务器,应用服务器对应的数据库应该是DB1的备份,其余步骤与1 2相同。
d.另外针对写,可能会一条数据失败导致后面所有与之相关的请求失败,diffy的记录与成功或失败无关,只有差异相关,对于这样的请求,我们可以去查看分析,也可以忽视,因为大多用户或不同类用户的数据是隔离的,只是我们有效分析的数据可能由10万条变成了1W了而已,Diffy已经发挥了它的功能。