diffy,一款使开发和测试从测试中解脱的工具 (三、现实场景中的应用)

在上一篇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

一. 环境准备

  1. 应用实例--首先准备三个应用实例(master,secondary,candidate),如果不需要噪声消除可以将线上版本(master和secondary)设置为同一个地址,这样只需要准备一个线上版本,一个待测试版本两个实例就可以了。首先准备三个应用实例(master,secondary,candidate),如果不需要噪声消除可以将线上版本(master和secondary)设置为同一个地址,这样只需要准备一个线上版本,一个待测试版本两个实例就可以了。首先准备三个应用实例(master,secondary,candidate),如果不需要噪声消除可以将线上版本(master和secondary)设置为同一个地址,这样只需要准备一个线上版本,一个待测试版本两个实例就可以了。首先准备三个应用实例(master,secondary,candidate),如果不需要噪声消除可以将线上版本(master和secondary)设置为同一个地址,这样只需要准备一个线上版本,一个待测试版本两个实例就可以了。
  2. 数据库准备--如果只测试只读(即不写数据,参数allowHttpSideEffects=false),只需准备一个数据库即可, 若需要同时测读写(参数allowHttpSideEffects=true),则需要准备与应用实例相同数量且数据的数据库。
  3. 缓存服务器--各应用实例需要使用不同缓存服务器。

二. 现实场景应用

  1. 测试待上线版本,使用全新的请求数据(自动化或人工均可),参数responseMode=candidate,返回待测试版本的请求结果,所有测试工作与不使用diffy完全一样,只是请求地址由测试版本地址变成了diffy代理服务器地址,diffy会默默将请求发送到master和secondary,测试版本测试完成后,再去分析下diffy服务器生成的差异报告,可查看新版本改动对旧版本的影响。
  2. 测试已上线版本,与1相同,只是将参数改为responseMode=primary即可。
  3. 利用历史访问数据进行请求回放
    a.对线上环境的访问进行记录,可通过gor及nginx或filter等手段记录用户访问数据,数据可保存在文件或数据库中,然后将记录的访问数据解析成类似如下的结构
      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已经发挥了它的功能。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值