如何回答“测够了吗”。代码覆盖率是衡量测试充分性的起点,但远远不是终点。要回答”测够了吗”,至少还要考虑是否测了所有的场景、所有的状态、所有的状态转移路径、所有可能的配置、所有可能的数据等等。即便如此,我们可能还是无法100%确信我们已经测够了。
01/何为全链路
本文的创作来源于作者曾经作为主测试的项目实践,主要给大家介绍如何做全链路的测试场景分析。
首先以一个时序图回顾一下何为全链路。链路可以分为业务链路和调用链路,调用链路主要指从请求发起方到结果返回所途径各种服务/中间件产生的路径,可以理解为单系统[域]下的某一功能模块,例如淘宝添加购物车->提交订单->支付这个场景,就包含收单域/支付域/商服域/会员域等,所以全链路必然包含[微服务架构下]多个系统[域]的相互交互,而这些系统的纽带则是契约,这也是为什么微服务架构下非常重视契约测试质量的关键所在。、
02/全链路测试分析关键要素
言归正传,如何做全链路测试场景分析呢?我先按住不表,咱们继续分析上文中举的一个场景:即用户购买商品并支付成功。
首先上文说到已经说到了两个关键点:
1. 全链路必然包含[微服务架构下]多个系统[域]的相互交互,这里也可以称之为信息流,即可以理解为一条链路所经。
2. 契约测试是微服务架构关键。
另外,上述的场景咱们也可以从资金流向的角度来分析,即
3. 上述场景也完成了资金从账户A流向了账户B。
OK,经过上述分析,我们已经提炼出做好全链路测试场景分析的关键点,即
-
信息流
-
资金流
-
契约
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:691998057【暗号:csdn999】
下面来分析这三个关键要素。
信息流
信息流也即是这条链路所经历的系统(服务)集合,如果全链路要验证到下单支付场景,则构造的用例必须要覆盖上述说的系统(服务)集合。反之,则认为是不充分的。
资金流
资金流即这个场景下资金从账户类型A/B流向了账户C/D。下单支付场景实际的资金流向是用户买家的钱流向了卖家(商户)的账户。
-
买家账户的钱来源于银行卡/余额宝/花呗/余额户等;
-
卖家账户收款账户可以是银行卡/余额户等
当然,资金流的要素不单单包含账户类型,如果涉及到跨境支付,则需要考虑付款和收款账户主体信息。
因此,为了保证测试充分,则全链路必须验证所有的资金流向。反之,则认为是不充分的。
契约
请求报文则是契约的一种载体,理论上信息流和资金流所需要覆盖的测试场景,都可以通过构造不同的请求报文来实现。
因此我们分析全链路测试场景,则可以转化为分析请求报文。
03/如何分析全链路测试场景?
全链路场景必须满足上述信息流/资金流的充分覆盖。
而全链路信息流要素则首先需要集合内需要各个域的测试owner基于单域被测服务分析得出场景因子,全链路的测试场景理论上是单域测试因子的笛卡尔积,但是鉴于全链路场景的成本比较高,因此在全链路场景分析上也要结合等价类分析方法。
结论:单域测试因子笛卡尔积 => 全链路发起的请求报文构造
资金流的覆盖则需要基于业务经验做端到端的分析,因为涉及到资金的流入和流出,仅仅单域是感知不全的,所以要基于全链路角度分析。
为什么仅仅信息流覆盖是不足的?
下面我从请求报文的角度来分析这个问题,例如下单支付功能,网关的请求报文如下:
字段参数 | 类型 | 备注 |
paymentType | String | 支付类型 |
buyerId | String | 买家ID |
sellerId | String | 卖家ID |
OrderAmount | Class | 订单 |
-currency | String | 订单币种 |
-amount | String | 订单金额 |
OK,如果我们只考虑信息流,则根据上述分析全链路场景方法,我们可以得到如下用例:
CASE01: 支付方式A,买家buyerId不存在
CASE02: 支付方式A,买家buyerId存在, 商户sellerId不存在
CASE03: 支付方式A,买家buyerId存在, 商户sellerId存在,支付成功
CASE04: 支付方式B,买家buyerId存在, 商户sellerId存在,支付成功
问题点就出现了,如果涉及跨境支付,就漏测了。因此则需要把买家/卖家的主体也作为场景因子进行覆盖。
OK,就写到这里了,抛砖引玉,大家有什么想法可以直接给我留言。
下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
最后: 可以在公众号:程序员小濠 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。
如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!