一、背景
测试人员在回归整个交易流程的时候,需要创建内部测试商品,除了价格是1分钱外,还不能对外暴露给普通用户。
在推新品或者特定的商品的时候,其可见性是指定人群范围,符合市场的推广需求。这时也需要具备灰度的思维。
另外一个场景就是支付测试。
在做多渠道多商户的支付路由,新的渠道特别是新的商户,为安全起见,在本地测试完成后,直接上线。这样做,既减少中间流程,不让支付api密钥和退款证书暴露在开发和测试环境,也大大提高了发布效率。但这要求我们在本地能够做好支付的测试。
二、目标
- 1、提高测试验证的安全性。
- 2、满足市场的定向推广。
- 3、方便测试人员回归整个交易流程。
三、关键设计
3.1、业务隔离
测试支付的路由配置,采取单独的业务。新业务的测试目标是新商户的支付和退款两大功能。

编号105就是我们用于灰度测试支付的业务。
为了测试拉起支付的场景,我们特意申请了一个微信公众号。然后把业务105的支付路由指向新商户。

待测试验证完成后, 再将线上正式的业务111的支付路由指向新商户。

这就是业务隔离给我们在测试支付路由带来的好处。正式业务在切换使用新商户前,使用灰度业务来提前验证。再也不用担心换商户带来的额外风险了,另外还有一重要的点是,测试可以在生产环境里直接验证。
业务方105就是一个试水者,蹚过了这浑水,业务方111才放心了。
3.2、灰度商品的展示
在之前的商品模块里已或多或少介绍过,这里简单再梳理一遍思路。
灰度商品的要求有以下几点:
- 1、灰度商品只有特定的测试人群才能看到
- 2、需要维护一个灰度人员的名单,一般是登录用户的userId
- 3、前端默认展示的是正常商品列表
- 4、当登录后且用户ID是在灰度人员名单里,有两种展示设计,一是和商品列表在一起混合展示,另一是在单独的一块区域界面展示灰度商品。(推荐使用前一个方案,查询商品列表接口由后端提供,查询条件增加是否灰度)
- 5、测试人员对商品定价为1分钱,方便测试后面的业务。
试想,没有灰度商品的设计,你会偷偷摸摸地上架一个商品,商品名称前增加“测试”字眼,大写特写,还担心真实用户看到了。呵呵,当用户看到了只需要一分钱就能购买,你还敢不履约吗?想想风险不可谓不大。
3.3、商品的标签
上一点只是简单地区分是灰度还是正常,我们在推广商品的时候,开放的规则往往是更复杂的。比如只有ip地址是浙江的才可见,也可能要求某个学校的用户才可见(甚至不同的学校看到的商品价格是不一样的),或者对指定的vip用户而言可见。
这些就不是单纯地灰度一把,就能解决得了。要实现它,其实是灰度设计的延续,那就是标签机制了。
这里梳理一下标签机制的适用场景:
- 1、任务的优先级匹配。比如对某些任务打上high的标签,说明该任务的优先级是高。还可以打上其他标签,因为标签是支持多个的。
- 2、商品的可见学校,多个使用逗号隔开。刚开始学校标签,就只有一个学校ID,随着市场的推广开放,标签包含的学校会越来越多。
- 3、给商品打上什么标签,展示的时候,根据查询条件,反查标签。
3.4、灰度订单
支持将不同的业务隔离开来
具体的实现和商品、支付类同,这里就不赘述了。
四、总结
在做服务发布的时候,灰度发布也是采用上面的设计思路了。所以,很多设计思路都是相通的,互相借鉴,能让你的业务满足产品或者市场的各种变化的需求,高阶的程序员在设计的时候,还要能够做到更抽象的设计。(产品没想到的,你早想到了)
网友评论