测试用例的编写方法

Posted 眰恦ღ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了测试用例的编写方法相关的知识,希望对你有一定的参考价值。

测试用例

买手机、买电脑,要试用一下:开机、屏幕、运行速度、内存大小;这就是生活中的测试用例!

在这里插入图片描述

测试用例(Test Case)是为特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,它是指导测试工作进行的依据。

例子1:

买手机:按开机键,相当于输入了一组数据来测试,执行条件指的是开机的前提条件,比如是否有电;预期结果就是能顺利打开手机,那么测试完毕后,是否达到了想要的需求(顺利开机)。

例子2:

新浪注册页面:https://login.sina.com.cn/signup/signup?entry=homepage
这次测试的是邮箱地址格式是否正确,怎么测试的呢?分别输入了正确的地址和错误的地址进行测试的。

在这里插入图片描述

等价类划分法

等价类划分是一种重要的、常用的黑盒测试方法,不需要考虑程序的内部结构,只需要考虑程序的输入规格即可。它将不能穷举的测试过程进行合理分类,从而保证设计出来的测试用例具有完整性和代表性。

在有限的测试资源的情况下,用少量有代表性的数据得到比较好的测试效果。

计算器:到底输入几组数据才算测试完毕?(讨论课题) 答案:一个一个测试效率低下,一定要分类测试!

  1. 整数(在范围内的整数-99到99)取最大、最小、中间
  2. 小数(在范围内的整数-99到99)
  3. 符号(±/,。、!@#¥%……&())
  4. 汉字
  5. 空格
  6. 不输入

通过上面的描述,我们发现我们用户所有可能输入的数据,划分成了若干份(或者也可以称为子集),然后从每一个子集当中选取少数具有代表性的数据作为测试用例,这种测试用例我们称为“等价类划分法”。

等价类的分类

有效等价类:指符合《需求规格说明书》,输入合理的数据集合。
无效等价类:指不符合《需求规格说明书》,输入不合理的数据集合。

思考步骤:

1、 确定有效等价类和无效等价类

2、 有效等价类划分(题目条件,还要注意边界值(极值),中间再随意找个值)

3、 无效等价类划分(跟有效等价类相反,其它特殊情况(中文、英文、特殊符号、空格、空))

【注意】两个框要一个正确,一个错误,这样才能准确的判断;一定要根据需求来判断预期结果;

练习一:计算1-100的整数之和(包括1和100)

在这里插入图片描述

我们可以把 “有效等价”和“无效等价”用例写在一个Excel表格中(写出来永远比自己脑子里想要好)!

在这里插入图片描述

一般是一个框输入正确的值,一个框输入错误的值,没有两个框都输入错误的值,因为更容易确定到底是哪个框出现错误的值。

练习二:测试QQ账号,账号的要求是 6-10位正整数。![在这里插入图片描述](https://img-blog.csdnimg.cn

在这里插入图片描述

练习三:测试电话号码

某城市电话号码由三部分组成,分别是

  • 地区码:空白或是3位数字
  • 前缀:非‘0’且非‘1’开头的三位数字
  • 后缀:4位数字

例子:1232341234

在这里插入图片描述

练习四:测试登录页面

在这里插入图片描述

  • 用户名(昵称)长度为 3-19:以字母开头

  • 登录名称:非空

  • 密码: 非空

  • 确认密码: 值和密码相同

在这里插入图片描述

等价类细节

1、考虑输入长度

2、考虑输入类型

3、组成规则

4、是否为空

5、是否区分大小写

6、是否重复

7、是否去除空格

边界值

什么是边界?

边界值分析法也是一种常用的黑盒测试方法。边界是指对于输入等价类和输出等价类而言,稍高及稍低于其边界值的一些特定情况。
大量的错误是发生在输入或输出范围的边界上,而不是在输入范围的内部。

题目:输入的参数值必须大于0同时小于100的整数,边界条件设置错误:把**>写成了>=,把<**写成了<=

Scanner scanner = new Scanner(System.in);

System.out.print("请输入大于0同时小于100的值:");
int val = scanner.nextInt();

if (val >= 0 && val <= 100){ //0和100不该包含在其中
    System.out.println("输入正确");
}else {
    System.out.println("输入的参数值必须大于0同时小于100");
}

【注意】有效数据和无效数据的分界点,往往作为程序员编写程序的判断点,是程序员容易犯错误的地方,也是测试人员重点测试的内容。

如何解决这类问题

找到测试数据的边界点,也就是有效等价类和无效等价类的边界点,对边界点数据专门进行测试。
一般情况下,需要对边界值(0和100)以及边界值两边的数(-1和1以及101和99)分别进行测试。

题目:输入的参数值必须大于等于0同时小于等于100的整数

正确代码:

num>-1num>=0

num<101num<=100

错误代码:

num>=-1[选中了-1] 或 num>0[没有选中0] 或 num>=1[没有选中0]

num<=101[选中了101] 或 num<100[没有选中100] 或 num<=99[没有选中100]
在这里插入图片描述

确定边界情况(输入或输出等价类的边界),选取正好等于、刚刚好大于或刚刚好小于边界值作为测试数据,边界值的取值依据输入范围区间不同而有所不同,但是都需要把上点值、离点值和内点值取到。(闭两边、开中间)

练习1:使用边界值的方法设计添加标题的测试用例 【标题长度>0 标题长度<=30】

在这里插入图片描述

练习2:输入一个学生成绩n,判断是否及格(0到100整数);

(1)画流程图Axure(产品经理用来制作流程图的); http://www.zcool.com.cn/work/ZMTUxMjE1OTI=.html

在这里插入图片描述

(2)确定有效区域和无效区域;
(3)临界点:0、60、100;
(4)取值:-1、0、1、59、60、61、99、100、101;
(5)具体测试用例;
在这里插入图片描述

练习3:修改手机银行登录密码

  • 密码必须由字母与数字组合

  • 密码长度在8~24之间(包含8和24)

    在这里插入图片描述

边界值的方法小结

1、如果输入条件规定了值得范围,则应取刚到到这个范围的边界值,以及刚刚超越这个范围边界的值作为输入数据。两位整数加法器数的范围为-99—99,则应测试-99,-100和99,100

2、输入条件规定了值的个数,姓名要求1—20个字符,需要测试0、1、2个字符和19、20、21个字符;某商品信息查询系统,每页最多显示10条商品信息,我们就应该准备商品信息,使能够查询出9、10条、11条、1条、0条商品记录。

边界值和等价类区别:边界值分析不是从某等价类中随便挑一个作为代表,而是这个等价类的每个边界都要作为测试条件

因果图法

因果图法是一种利用图解法分析输入的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况

特点:

  • 考虑输入条件的相互制约及组合关系
  • 考虑输出条件对输入条件的依赖关系

因果图法产生的背景

等价类划分法和边界值分析方法都是着重考虑输入条件,但没有考虑输入条件的各种组合、输入条件之间的相互制约关系。这样虽然各种输入条件可能出错的情况已经测试到了,但多个输入条件组合起来可能出错的情况却被忽视了。

如果在测试时必须考虑输入条件的各种组合,则可能的组合数目将是天文数字,因此必须考虑采用一种适合于描述多种条件的组合、相应产生多个动作的形式来进行测试用例的设计,这就需要利用因果图(逻辑模型)。

因果图的核心

因果图法比较适合输入条件比较多的情况,测试所有的输入条件的排列组合。所谓的原因就是输入,所谓的结果就是输出。

  • “因”——输入条件
  • “果”——输出结果

**因果图法要注意考虑:**所有输入/输出条件的相互制约关系以及组合关系;输出结果对输入条件的依赖关系,也就是什么样的输入组合会产生怎样的输出结果,即“因果关系”。

因果图中的基本符号

通常在因果图中用Ci表示原因,用Ei表示结果,各结点表示状态,可取值“0”或“1”。“0”表示某状态不出现,“1”表示某状态出现。

恒等

恒等.png

含义:若原因出现,则结果出现;若原因不出现,则结果也不出现。

  • 若c1=1,则e1=1
  • 若c1=0,则e1=0

如:取钱、打印凭条

非(~)

在这里插入图片描述

含义:若原因出现,则结果不出现;若原因不出现,则结果出现。

  • 若c1=1,则e1=0
  • 若c1=0,则e1=1

如:搜索联系人,如果有就不提示错误,如果没就提示错误

或(V)

在这里插入图片描述

含义:若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现。

  • 若c1=1或c2=1或c3=1,则e1=1
  • c1=c2=c3=0,则e1=0

如:努力、认真、脑子好 满足其中一个==》成绩好

在这里插入图片描述

含义:若几个原因都出现,则结果才出现;若其中一个原因不出现,则结果不出现。

  • 若c1=1并且c2=1,则e1=1
  • 若c1=0或c2=0,则e1=0

如:在班里面戴眼镜、男的、老师==》我

在这里插入图片描述

利用因果图导出测试用例需要经过以下几个步骤:

  1. 找出所有的原因,原因即输入条件或输入条件的等价类。
  2. 找出所有的结果,结果即输出条件。
  3. 明确所有输入条件之间的制约关系以及组合关系。
    哪些条件不能组合到一起,哪些条件可以组合到一起
  4. 明确所有输出条件之间的制约关系以及组合关系。
    哪些输出结果不能同时输出,哪些输出结果可以同时输出
  5. 找出什么样的输入条件组合会产生哪种输出结果
  6. 把因果图转换成判定表/决策表。
  7. 为判定表/决策表中的每一列表示的情况设计测试用例。

案例:交通一卡通自动充值软件系统需求

系统只接收50或100元纸币,一次只能使用一张纸币,一次充值金额只能为50元或100元。
若输入50元纸币,并选择充值50元,完成充值后退卡,提示充值成功;
若输入50元纸币,并选择充值100元,提示输入金额不足,并退回50元;
若输入100元纸币,并选择充值50元,完成充值后退卡,提示充值成功,找零50元;
若输入100元纸币,并选择充值100元,完成充值后退卡,提示充值成功;
若输入纸币后在规定时间内不选择充值按钮,退回输入的纸币,并提示错误;
若选择充值按钮后不输入纸币,提示错误

充值.png

1、找到所有输入条件编号
2、找到所有输出条件编号
3、找出所有输入、输出的制约关系
在这里插入图片描述

在实际工作中,我们没有时间去画因果图,它是一个可有可无的中间过程,我们需要做的就是把可能出现的情况和产生的结果列出来,然后根据情况和结果之间的关系编写表格
在这里插入图片描述

判定表法

因果图只是一种辅助工具,通过分析最终得到判定表,再通过判定表编写测试用例。但有时画因果图非常麻烦,影响测试效率,可以直接写判定表,进而编写测试用例。

判定表的组成

条件桩:问题的所有条件

动作桩:问题的所有输出

条件项:针对条件桩的取值

动作项:条件项的各种取值情况下的输出结果

判定表步骤

1、列出所有的条件桩和动作桩。
2、填入条件项。
3、填入动作项。得到初始判定表。
4、简化判定表(合并相似规则(相同动作))

案例:判断是否是一个好学生

怎样称为一个好学生?遵纪守法的前提下,学习成绩好是一个好学生、品德高尚也是一个好学生;(只要违法乱纪就绝对不是一个好学生;成绩和品德有一项,再加遵纪守法也是好学生)
在这里插入图片描述

合并使用“-”代表无关条件,选什么都不影响结果。最好不要使用,容易遗漏条件

在这里插入图片描述

场景法

场景法就是模拟用户操作软件时的场景,主要用于测试系统的业务流程。

当拿到一个测试任务时,我们并不是先关注某个控件的边界值、等价类是否满足要求,而是先要关注它的主要功能和业务流程是否正确实现,这就需要使用场景法来完成测试。

当业务流程测试没有问题,也就是该软件的主要功能没有问题时,我们再重点从边界值、等价类等方面对控件进行测试。

在冒烟测试时也主要采用场景法进行测试。

用例场景定义

基本流:按照正确的业务流程来实现的一条操作路径(模拟正确的操作流程)
备选流 :导致程序出现错误的操作流程(模拟错误的操作流程)

用例场景是用来描述流经用例路径的过程,这个过程从开始到结束遍历用例中所有基本流和备选流。

产生的背景

现在的软件几乎都是由事件触发来控制流程的,事件触发时的情景便形成了场景。而同一事件不同的触发顺序和处理结果形成事件流。
将这种在软件设计方面的思想引入到软件测试中,生动的描绘出事件触发时的情景,有利于测试设计者设计测试用例,同时测试用例也更容易的得到理解和执行。

在使用场景法设计测试用例时,需要覆盖系统用例中的主成功场景和扩展场景,并且需要适当补充各种正反面的测试用例和考虑出异常场景的情形。

当使用场景法测试程序没有问题时,可以再使用边界值、等价类方法对账号、密码进行更加细致、完整的测试。

案例:使用场景法测试QQ登录功能

在这里插入图片描述

输入正确的账号和密码后点击“登录”按钮,程序能正常登录
输入正确的账号,错误的密码后点击“登录”按钮,程序应给出错误提示
输入正确的账号,不输入密码,点击“登录”按钮,程序应给出错误提示
不输入账号和密码,直接点击“登录”按钮,程序给出错误提示“请您输入账号后登陆”;
不输入账号,输入正确的密码,点击“登录”按钮,程序应给出错误提示
输入错误的账号,正确的密码,点击“登录”按钮,程序应给出错误提示
(更多……)
在这里插入图片描述

流程分析法

流程分析法主要是针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,是从白盒测试设计方法中的路径覆盖分析法借鉴过来的一种方法。
在白盒测试中,路径就是指函数代码的某个分支组合,路径覆盖法需要构造足够的用例覆盖函数的所有代码路径。
在黑盒测试中,若将软件系统的某个流程看成路径的话,则可以针对该路径使用路径分析的方法设计测试用例。

优点:降低了测试用例设计难度,只要搞清楚各种流程,就可以设计出高质量的测试用例来,而不需要太多测试方面的经验;在测试时间较紧迫的情况下,可以有的放矢的选择测试用例,而不用完全根据经验来取舍。

步骤

第一步:详细了解需求;

第二步:根据需求说明或界面原型,找出业务流程的各个页面以及各页面之间的流转关系;

第三步:画出业务流程(产品经理使用Axure软件制作);

第四步:写用例,覆盖所有的路径分支。

例:使用ATM机取款

一、详细了解需求;
二、找出业务流程的各个页面以及各页面之间的流转关系;

1、用户向ATM取款机中插入银行卡……
2、用户输入银行卡密码……
3、用户输入取款金额……
4、系统同步银行主机,点钞票,输出给用户并减去用户卡中相应数目的存款金额……
5、用户取款,银行卡退卡……
6、……

ATM正常流程

在这里插入图片描述

用例设计写用例,覆盖所有的路径分支。
需求描述及流程图中,ATM取款机的提示信息对应于测试用例中的预期输出部分,用户的操作对应测试用例中的测试步骤部分。原则是一条有效路径使用一个测试用例覆盖。

依据业务流程图确定测试路径,即需要测试的业务流程。其主要包含三个方面:
a)正常流程,取款成功(基本流程):对应一次性取款成功;
b)异常流程,取款失败(分支流程):对应取款失败,包括退卡、吞卡;
c)异常流程,取款成功(循环流程):对应取款中间出现意外,比如密码输入错误,但是最终成功取钱的情况。

在这里插入图片描述

总结

流程分析法适用于有先后顺序的测试。常用于业务流程测试、安装流程测试等。
流程分析法重点在于测试流程。因此,一般每个流程用一个测试用例验证。

流程测试没有问题并不能说明系统功能没有问题,还需要针对每步功能进行测试。对于包含复杂流程的系统,只有功能点和处理流程都进行测试覆盖,才算是比较充分的测试。

错误推测法

错误推测法是指利用直觉和经验猜测出出错的可能类型,有针对性列举出程序中所有可能的错误和容易发生错误的情况,它是测试经验丰富的测试人员喜欢使用的一种测试用例设计方法。

基本思想:列举出可能犯的错误或错误易发生的清单,然后根据清单编写测试用例;这种方法很大程度上是凭经验进行的,即凭人们对过去所作测试结果的分析,对所揭示缺陷的规律性作直觉的推测来发现缺陷。

采用错误推测法,最重要的是要思考和分析测试对象的各个方面,多参考以前发现的Bug的相关数据、总结的经验,个人多考虑异常的情况、反面的情况、特殊的输入,以一个攻击者的态度对待程序,才能够设计出比较完善的测试用例。

正交排列法

正交排列法能够使用最小的测试过程集合获得最大的测试覆盖率。当可能的输入数据或者输入数据的组合数量很大时,由于不可能为每个输入组合都创建测试用例,可以采用这种方法。

一个有名的案例研究

1992 年AT&T发表了一篇讲述在测试过程中使用正交表一个案例研究。
它描述了对PC(IBM格式)和StarMail(基于局域网的电子邮件软件)做回归测试:
最初制定的测试计划是用18周的的时间执行1500个测试用例。但是,开发推迟了,测试时间被压缩到仅仅8周时间。

测试负责人采取另外一个测试方案和计划,即2个人8周的时间测试1000个测试用例,但是他不敢保证测试的质量,对这些用例检测缺陷的能力不放心。

为了减轻这种不确定性的问题,他用正交表法重新设计了测试用例,此时测试用例只有422个。用这422个测试用例去测试发现了41个缺陷,开发人员修复缺陷,然后软件就发布了。

在使用的两年时间内,凡被测试到的领域都没有再发现缺陷,因此在发现缺陷这方面,此测试计划是100%有效。

据测试负责人估计,如果AT&T采用1000个测试用例的测试计划,可能仅仅只发现这些缺陷中的32个。

与最初的计划相比,用正交表设计测试用例执行工作量不到50%,但却多发现28%的缺陷,而且测试人员个人的效率也增加了。

案例:字符属性设置程序

窗体中有多个控件(字体、字符样式、颜色、字号),每个控件有多个取值
在这里插入图片描述

  • 字体:仿宋、楷体、华文彩云
  • 字符样式:粗体、斜体、下划线
  • 颜色:红色、绿色、蓝色
  • 字号:20号、30号、40号

在测试时,要考虑这些控件的组合情况,组合量非常大(有34 =81种组合情况)

由于组合量太大,不可能为每一种组合都创建测试用例。如何采用最少的测试用例集合获得最大的测试覆盖率——采用正交排列法

正交试验设计

是研究多因素多水平的一种设计方法,它是根据正交性从全面试验中挑选出部分有代表性的点进行试验,这些有代表性的点具备了“均匀分散,齐整可比”的特点,正交试验设计是一种基于正交表的、高效率、快速、经济的试验设计方法。


正交表

一种特制的表,一般的正交表记为:Ln(mk

n - 表的行数,也就是需要测试组合的次数0
K - 表的列数,表示控件的个数(因素的个数,或因子个数)
m - 是每个控件包含的取值个数(各因素的水平数,即各因素的状态数)

如: L9(34

  • 有4个控件
  • 每个控件有3个取值
  • 9为需要测试的组合个数
  • 叫4因素3水平

L9(34)正交排列表

在这里插入图片描述

查找正交表:http://support.sas.com/techsup/technote/ts723_Designs.txt

正交排列法的使用步骤

1、根据所测程序中控件的个数(因素)以及每个控件的取值个数(水平),选取一个合适的正交排列表
2、把控件及其取值列举出来,并对其进行编号
3、把控件及其取值映射到正交排列表中

  • 把正交排列表中的ABCD(因子)分别替换成4个控件
  • 把每列中的1,2,3(状态)分别换成这个控件的3个取值(水平),排列顺序要按照表中给出的顺序

4、根据映射好的正交排列表编写测试用例

现在我们了解了正交表概念,现在去把上面的字符设置案例实现!


步骤一:根据所测程序中控件的个数以及每个控件的取值个数,选取一个合适的正交排列表

  • 4个控件(因素):字体、字符样式、颜色、字号
  • 每个控件有3个取值(水平)
  • 选择L9(34)正交排列表

步骤二:把控件及其取值列举出来,并对取值进行编号

字体.png

步骤三:把控件及其取值映射到正交排列表中
1、把正交排列表中的A、B、C、D(因子)分别替换成4个控件

字体正交表.png

2、把每列中的1,2,3(状态)分别换成这个控件的3个取值,排列顺序要按照表中给出的顺序
在这里插入图片描述

步骤四:根据映射好的正交排列表编写测试用例
正交表的每一行表示一种组合,对应编写一条测试用例

这是进行测试的最少组合数量,但是,在测试中有72种(81-9)组合没有测试到。当然,如果时间允许,应该再补充一些用例。因为遗漏的组合越多,存在缺陷的可能性就越大。(时间问题!内测、公测)

混合正交表

我们可以会遇到一个问题,那就是水平数不同

体型年龄段性别
老人
适中青年
儿童

找不到现成的正交表,就使用工具来生成!

allpairs生成工具

使用步骤:

1、制作取值表(只列出数据即可,不用编号)
在这里插入图片描述

2、复制取值表的数据,放到文本文档中保存(注意不要更改任何格式,例如文件叫test.txt )

在这里插入图片描述

3.、把文本文档放在allpairs文件夹中

4、 win+r后输入cmd进入控制台

5、 进入allpairs文件夹下(cd 目录名字)

6.、输入allpairs.exe test.txt>test2.txt ( test2是自己起的名字,不必提前建好)

在这里插入图片描述

然后去看看test2.txt,已经生成了我们需要的正交表,直接复制到表格使用即可

在这里插入图片描述
~代表无关紧要,是男是女都一样

测试方法的选择

通常在确定测试方法时,有以下几条参考原则:
(1)拿到一个测试任务时,先关注它的主要功能和业务流程、业务逻辑是否正确实现,考虑使用场景法。
(2)需要输入数据的地方,考虑采用等价类划分法,包括输入条件和输出条件的等价划分,将无限测试变成有限测试。
(3)在任何情况下都必须采用边界值分析法。这种方法设计出的测试用例发现程序错误的能力最强。
(4)如果程序的功能说明中含有输入条件的组合情况,则一开始就应考虑选用因果图和判定表法。

(5)对于参数配置类的软件,需要考虑参数之间的组合情况,考虑使用正交排列法选择较少的组合方式
(6)对照程序逻辑,检查已设计出的测试用例的逻辑覆盖程度。如果没有达到要求的覆盖标准,则应当再补充更多的测试用例。
(7)采用错误推断法再追加测试用例——依靠测试工程师的经验和智慧。

以上是关于测试用例的编写方法的主要内容,如果未能解决你的问题,请参考以下文章

测试编写测试用例的思路和方法

测试用例的编写方法

测试编写测试用例的常用方法

selenium测试用例的编写

测试用例的设计步骤

编写测试用例常用的五种方法