测试思想-测试设计 关于测试用例设计的一点感想(优先级与拆分合并设计)

简介: 测试思想-测试设计 关于测试用例设计的一点感想(优先级与拆分合并设计)

于测试用例设计的一点感想(优先级与拆分合并设计)


废话不多说,直奔主题吧

1、用例优先级

大家都知道,用例有优先级之分,但是实际执行过程中如果没有养成良好的思维习惯,又容易把这个给忽略,那么问题来了,怎么破?

 

解析:以“用户”为主,兼顾程序“依赖”

即以用户为中心,从用户的角度考虑,同时遵循序功能(模块)彼此之间的“依赖”关系展开对用例的设计。

 

以下为例进行说明。

 

如上,这是个支付资料进件的需求原型图,站在用户的角度考虑,这个页面的核心功能就是“审核资料”,其它的功能,比如,查询,列表标题旁的下拉筛选,列表排序等都是为了更好的服务这个功能而设置的,所以结论是:“审核”功能--列表的“操作”的用例设计优先于查询,下拉筛选,列表排序等功能的用例设计。

 

再从用户的角度出发,如果想用户提交的支付资料被“审核”通过,那么必须对这些资料进行查阅,包括列表记录项(商户全称,商户简称,资料商户全称,第一次提交时间,提交来源,资料类型等)和上传附件(可通过“下载”查看),所以,结论是:需要先对记录数据准确性校验,先对“下载“功能进行用例设计。

 

问题:这里为何不以“程序依赖”为主呢?按我的理解,打开支付资料审核页面时,默认的也会进行查询,要进行审核就必须先把记录查询出来,如果以“程序依赖”为主,那这里就应该先对查询进行用例设计。但是我没有,因为通常情况下,如果存在列表记录,那么打开类似这种页面应该能自动显示数据的,也就说打开页面(测试的必经之路)已默认解决了这种“依赖”关系,即审核需要查询出数据

 

2、用例设计拆分

如下图,这是很常见的一种设计,见图1(这里的“终端”可以是某个app,可以是某个web后台、web页面等)

       

 

         (1)                       (图2

 

拆分思路:见图2以数据库为中心,“一刀两段”,分成两部分:终端提交资料到数据库,这里关注资料能否提交成功,数据库存储是否正确;web后台从数据库读取数据并展示,这里关注展示是否正确。

 

按这种思路来,那么设计提交(新增、修改)资料功能用例时,用例的校验重点是看数据库存储是否正确,如果对该功能对应的数据库、数据库表比较熟的话,可以通过直接查看数据库校验(推荐),如果没权限或者对数据库、数据库表不熟的话,也可通过本终端相关web页面(比如记录详情页面,修改资料页面等,如果有的话)查看“可见部分”的资料数据是否正确

 

设计web后台展示数据功能用例时,用例的校验重点是看读取是否正确。这种情况下,可通过直接修改数据库相关字段的值后,查看web后台展示变化,当然这也建立在对数据库、数据表对应关系比较熟悉的情况下,如果不熟悉、对数据库表等没操作权限的情况下咋办?可借助“终端操作”,即通过终端提交(新增、修改)资料来修改数据库对应记录的值,这里不需要对终端是怎么新增,怎么修改的等细节展开细致描述,因为这块在写提交资料的时候已经写了,仅简单的把其当作用例中的一个操作步骤来写,一句话概况。

 

注:验证展示时需分清

哪些数据会动态改变,且由终端改变的(比如审核拒绝后再次提交审核,会改变审核状态,在验证数据展示时,需要针对这部分,构造对应的数据,否则容易漏测);

哪些是由web后台自己的操作改变的(比如审核操作,这部分的数据变化比如审核状态,可以放在审核操作的用例步骤预期结果里进行校验)。

 

注意:因为程序可能使用类似redismongodb等缓存功能,所以直接修改数据库可能并不会导致web后台等数据发生变化,因为它可能是从缓存读取的数据,所以如果是在对程序实现不了解的情况下,靠谱起见,还是建议通过借助“终端操作”的方式来实现对数据库的更改(有些程序实现会在执行终端操作时调用刷新缓存命令,使得缓存的数据更新为数据库中最新的值)。

 

再举个“支付收款”的例子。

我公司做智能pos这块的,涉及支付宝收款,微信收款等,通常这些功能都会涉及到一些关键的配置,要正常收款,必须做正确的参数配置,所以从依赖角度看,设计用例时分两大块,一块是测试配置,看配置保存能否成功,数据库存储是否正确,另一大块呢,查看正确、错误配置下的功能是否正常、是否做了容错处理,查看读取配置是否正确(通过动态执行程序操作,比如执行支付宝收款,执行不同场景的微信收款)

 

3、用例设计合并

用例合并,没看错吧?对,没看错,就是用例合并。之前提过,一条用例一个点--就验证一个点,出发点是没错的,但是考虑到实际执行效率,我们要做一些取舍,把部分用例合并到一起。

eg:



如上图,左图是收款成功界面,暂且我们称之为“收款成功页”,右图是收款成功后打印的小票,暂且称之为“小票”。关于这两个界面,分别提了一些业务规则,如下:

 

1)收款成功页:

“不可优惠金额”,“卡券优惠”,“商家活动”,“抹零”,“平台优惠金额”,“交易备注”,这几项如果有则显示,否则不显示,其中抹零金额为0则视为无抹零

 

“卡券优惠”:如果是会员折扣则显示“会员x-¥金额”;如果是代金券,且只核销一张,则显示“代金券名称-¥金额”,如是多张则显示“代金券名称*数量-¥金额”;如果是折扣券则显示为“折扣券名称-¥金额”

 

2)小票:

“不可优惠金额”,“不可优惠金额”,卡券优惠(“会员xx折”\“折扣券名称”\“代金券名称”\“金券名称*xx张”),“商家活动”,“抹零”,“平台优惠金额”,这几项如果有则显示,否则不显示,其中抹零金额为0则视为无抹零

 

如是门店帐号登录收款,则“交易流水凭证”下方的抬头显示“门店名称”,如果是商户帐号收款则显示为“商户简称”。

 

3)自动打印:如果后台配置了自动打印且打印小票数不为0,收款成功后自动答应小票

 

4)打印按钮:点击打印后,再次打印小票,基本同自动打印的小票,但是需要在此基础上增加“重印”二字

 

按常规思维,有的人就可能会这么设计用例:

Ø 1、按照需求,复制黏贴,数据和逻辑分离,比如,[约束限制]打印小票-“不可优惠金额”有则显示,无则不显示

Ø 2、按照需求,一条用例一个验证点,比如

[约束限制]打印小票-没有“不可优惠金额”;

[约束限制]打印小票-有“不可优惠金额”;

[约束限制]支付宝收款-无不可优惠金额

 

问题:这样设计有啥不好?

解析:以上用例为例

用例1,看起来似乎很有逻辑性,但是从等价类的角度来看,这里有两种输入,分别对应这两种输出,每种输出走了一条逻辑分支,我们提倡“逻辑”和“数据”分离,但个人认为这里的“逻辑”确切的说应该是逻辑分支,即一条逻辑分支对应n条测试数据,对应到自动化时也是这样,方便处理。所以推荐按用例2的方式编写。

 

用例2,看起来也没问题,根据等价类划分,可用1条测试数据、1次操作进行覆盖n条正向用例,问题出在执行,这样设计用例,如果动手测试前没规划好,可能会造成这种结果:

收款时,针对“收款结果页”部分字段有则不显示,无则显示的规则把那些字段显示规则都校验一次,然后测试完成,再对小票部分字段有则不显示,无则显示的规则把那些字段显示规则再校验一次,这样会造成重复的投入,如下:

执行支付宝收款->测试收款“结果页”字段信息

执行支付宝收款->测试打印小票字段信息

 

另外,这里的打印按钮,打印的小票也要遵守这个规则,这样不得不再次做同样的操作(虽然按经验,这里的打印和自动打印调用的应该是同一个接口,但是我们没法保证它真的是那样,因为程序不是我们写的)

 

那咋整?

按我的理解,这里,支付宝收款,自动打印小票,打印在业务角度看,都是紧密关联的(用例划分要适当,需要考虑执行),执行效率起见,我们可以把用例合并起来,确切的说是串联起来:

支付宝收款->>验证收款结果页面->>验证自动打印的小票信息->>验证重印的小票信息

 

值得注意的是,这里需要对实际业务逻辑比较深入的理解,结合业务逻辑进行用例的设计(这点很重要,要知道数据怎么走,数据传递时在哪里会发生变化,否则很容易因覆盖不全导致出问题)。

 

如上图,我们可以看到,如果把判断是否抹零前的计算结果,即应付金额,作为中间结果,那么“是否有可不可优惠金额”和“使用优惠”则是影响应付金额的两个因素,这里考虑使用强一般等价类划分:

是否有可不可优惠金额(有不可优惠金额,无不可优惠金额)

使用优惠(使用会员折扣,使用折扣券,使用代金券,不使用优惠)

 

得到如下用例:

【功能校验】支付宝收款-有不可优惠金额,不使用优惠

【功能校验】支付宝收款-无不可优惠金额,不使用优惠

【功能校验】使用优惠-有不可优惠金额,折扣券,支付宝收款

【功能校验】使用优惠-有不可优惠金额,多张代金券,支付宝收款

【功能校验】使用优惠-有不可优惠金额,单张代金券,支付宝收款

【功能校验】使用优惠-有不可优惠金额,会员折扣,支付宝收款

【功能校验】使用优惠-无不可优惠金额,折扣券,支付宝收款

【功能校验】使用优惠-无不可优惠金额,多张代金券,支付宝收款

【功能校验】使用优惠-无不可优惠金额,单张代金券,支付宝收款

【功能校验】使用优惠-无不可优惠金额,会员折扣,支付宝收款

 

搞定这个,接下来的就比较简单了,基本的等价类,

如下:

【功能校验】支付宝收款-不抹零

【功能校验】支付宝收款-有抹零(抹零金额为0)

【功能校验】支付宝收款-有抹零(抹零金额不为0)

【功能校验】支付宝收款-无平台优惠金额

【功能校验】支付宝收款-有平台优惠金额

【功能校验】支付宝收款-有商家活动

【功能校验】支付宝收款-无商家活动

 

同时,收款结果页,小票的字段有则显示,无则不显示的规则,在上面的用例中未覆盖到的,需要再针对性的设计用例,如下:    

【功能校验】支付宝收款-无订单备注

【功能校验】支付宝收款-有订单备注

 

-----------------------支付抹零用例---------------------------------

【功能校验】支付抹零-四舍五入到角

【功能校验】支付抹零-往下抹零到角

【功能校验】支付抹零-四舍五入到元

【功能校验】支付抹零-往下抹零到元

 

注:我们的抹零有4中,如上,测试抹零用例时,实际需要再覆盖以上四种情景的用例

 

附用例步骤:【功能校验】使用优惠-有不可优惠金额,多张代金券,支付宝收款

 



注:

1、有人会问,这里为何不进行类似如下的组合:

【功能校验】使用优惠-无不可优惠金额,无商家活动,无平台优惠,无备注,无抹零,扫码验证,会员折扣,支付宝收款

【功能校验】使用优惠-有不可优惠金额,无商家活动,有平台优惠,有备注,有抹零,扫码验证,会员折扣,支付宝收款

 

理由:组合不是不可以,但是这样组合起来后,一眼看去就有点分不清这些“影响因素”之间的关系了,相互制约还是互不影响,这个真不清楚,而且分不清这条用例的测试重点在哪里,整个逻辑显得很乱,影响因素比较少的情况下,可以考虑这样组合下。

 

2、根据上面说的,你用例预期里也有,类似“如果xxxxxxx,否则。。。。”这样的描述,这不自相矛盾呢?

 

理由:是有,但是这里有针对性的,这部分不是用例的核心校验点,但是也可能是用例结果的组成部分,不能丢弃

 

3、有人又会问,金额啥的还不是重点呀?

 

解答:是重点,根据测试用例等价类设计思想,我们验证用例时,我们可以稍微组合下,一次收款操作,可以覆盖n条正向用例,这样在验证用例时,可能会把备注2中非重点部分也当作重点部分进行校验(某条用例中不是重点,但是在其它用例中是重点)。

pdf版本下载:关于测试用例设计的一点感想(优先级与拆分合并设计).pdf

目录
相关文章
|
3月前
|
数据采集 运维 安全
测试需要写测试用例吗?
测试需要写测试用例吗?
30 0
|
4月前
|
前端开发 测试技术
可访问性测试清单/测试用例/场景
可访问性测试清单/测试用例/场景
可访问性测试清单/测试用例/场景
|
5月前
|
Web App开发 SQL 安全
软件测试/测试开发|一文告诉你什么是测试用例
软件测试/测试开发|一文告诉你什么是测试用例
49 0
|
5月前
|
测试技术
软件测试/测试开发|测试用例设计方法——边界值
软件测试/测试开发|测试用例设计方法——边界值
166 1
软件测试/测试开发|测试用例设计方法——边界值
|
5月前
|
测试技术
软件测试/测试开发|测试用例设计方法——等价类划分
软件测试/测试开发|测试用例设计方法——等价类划分
45 1
|
5月前
|
分布式计算 测试技术 Spark
通过Langchain实现大模型完成测试用例生成的代码(可集成到各种测试平台)
通过Langchain实现大模型完成测试用例生成的代码(可集成到各种测试平台)
695 0
|
3月前
|
测试技术
接口测试测试用例编写注意事项
接口测试测试用例编写注意事项
|
3天前
|
测试技术
【测试】构建质量保证之路:编写测试用例的艺术
【测试】构建质量保证之路:编写测试用例的艺术
|
3天前
|
测试技术
【测试】优化软件测试:有效测试用例设计的关键
【测试】优化软件测试:有效测试用例设计的关键
|
6天前
|
测试技术 API 网络架构
Python的api自动化测试 编写测试用例
【4月更文挑战第18天】使用Python进行API自动化测试,可以结合`requests`库发送HTTP请求和`unittest`(或`pytest`)编写测试用例。以下示例: 1. 安装必要库:`pip install requests unittest` 2. 创建`test_api.py`,导入库,定义基础URL。 3. 创建继承自`unittest.TestCase`的测试类,包含`setUp`和`tearDown`方法。 4. 编写测试用例,如`test_get_users`,检查响应状态码和内容。 5. 运行测试:`python -m unittest test_api.py`
13 2

热门文章

最新文章