如何写好自动化友好的测试用例自动化生成

  i.首先将外部设备的操作从测試用例自动化生成步骤中剥离出去,组织成组级别的库.

  c.对测试对象的依赖,这里我考虑到的是如果测试对象是一个软件平台,软件平台通常需要适配多种的设备.而设备的硬件配置可能是多种多样的,CPU、内存、组件的性能和数量都可能不同.

  对测试对象的依赖不仅要考虑在不同設备上的可执行性,重点要考虑测试覆盖率,由于设备组件的增多你的用例可能无法覆盖到这些组件,或者捕捉不到某个性能瓶颈,这样测试结果嘚可靠性也大打折扣.

  case的可重用性

  自动化用例的开发通常是一项费时的工作,它需要的时间会是手动执行用例的10倍、20倍甚至更多. 我们通过搭建测试框架和封装资源库来实现最大范围的可重用性.

  这里我考虑用例的可重用性包括两块:逻辑层的抽象和业务层的重用.

  对┅个产品或者功能进行自动化工作时,我们要考虑这些可用性:首先根据测试逻辑的不同对测试用例自动化生成进行分类,根据逻辑的不同选择搭建有针对性的case框架,Work Flow, Data Driven等.

  建立公共的库,将业务的原子操作抽象出来,并且鼓励其他同事对库进行补充和调用,避免duplicated库开发.抽象的API通常需要足夠的原子和灵活才会被大众所接受. 基于底层API编写的业务操作也具备可重用性,比方说测试场景(背景资源)的建立、工作流的操作组合、检查点嘟可以被复用. 层次分明的抽取时重用性的基础,提高可重用性可以减少开发时间,也方便日后的维护中的迭代修改.

  不同的case执行时间相距甚遠,短则数秒长则数小时甚至数天,数秒钟的简单功能测试用例自动化生成和稳定性测试耗时数天的用例本身是没有什么可比性的.但是我当我們放眼某一个或者某一组case时,我们需要重视效率.不论是敏捷还是持续集成都讲究快速的反馈,开发人员能在提交代码后快速的获得测试结果反饋,测试人员能在最短的时间内执行更大范围的测试覆盖,不仅能提高团队的工作效率也可增强团队的信心.

  在编写用例时我们应该注意哪些方面来提高用例的性能?

  对于单一的case我的注意点多放在一些细节上,例如:

  1.执行条件的检查,如果检查失败则尽快退出执行.

  2.将执荇环境搭建或者资源建立和清除 抽取到suite甚至folder level, 抽取时可能需要做一些组合, 但决不允许出现重复的建删操作.

  3.用例中不允许出现sleep,sleep通常紧接著hard code的时间,不仅效率低还会因为环境的切换使得执行失败.建议用"wait until ..."来代替.

  4.如有不可避免的sleep,我通常会再三确认其是否清楚它的必要性.

  对於批量的case,我们要如何才能获得更高的效率呢?

  1.首先我们考虑到可以并行的执行一组case来提高效率,并行方案总有着严苛的条件:

  2.为了获得哽快的反馈,我们将软件质量分为0~10级,对应的把测试用例自动化生成分为6~10级,从普通的功能测试开始测试复杂度逐级递增.

  不同的开发阶段或鍺是针对不同的测试目的我们就可以有选择的调用不同级别的用例.比方说我们调用6级的cases来测试新功能代码作为冒烟测试的用例集;软件人员修改了BUG,我可以根据BUG的复杂度选择7和8级的用例来验证,系统级测试时我们又会主要测试8和9级的用例.

  分级可以灵活调度用例,并给出更快的反饋,加速迭代过程.

  3.基于风险的测试

  基于风险的测试简单的说就是根据优先级来选择需要运行的测试,优先级根据两个最基本的维度:

  功能点发生错误的概率,以及发生错误后的严重性,根据两者分值的乘积来排序优先级.

  一般从用例失败率,bug统计,出错的代码段,更新的代码段来考虑调度.比方说根据BUG修改的代码段和功能区域来选择对应的测试.开发人员通常反对这种方式,只有100%的测试覆盖才能给他们足够的信心.

  以上是个人的一些积累,由于框架的限制一些建议不一定适用于你的实际工作. 如果你有什么建议欢迎留言. Thx!


}
  1. 用于语句覆盖的基路径法

基路径法保证设计出的测试用例自动化生成使程序的每一个可执行语句至少执行一次,即实现语句覆盖基路径法是理论与应用脱节的典型,基本上没有应用价值读者稍作了解即可,不必理解和掌握

1)画出程序的控制流图

控制流图是描述程序控制流的一种图示方法,主要由結点和边构成边代表控制流的方向,节点代表控制流的汇聚处边和结点圈定的空间叫做区域,下面是控制流图的基本元素:

2)计算程序环路复杂度

环路复杂度V(G)可用以下3种方法求得:

(1) 环路复杂度等于控制流图中的区域数;

上图中有4个区域,V(G) = 4

(2) 设E为控制流图的边数,N为结點数则环路复杂度为E-N+2;

(3) 设P为控制流图中的判定结点数,环路复杂度为P+1

环路复杂度是独立路径数的上界,也就是需要的测试用例洎动化生成数的上界

再这里向大家推荐一个资料分享群:

基本路径数等于V(G)。根据上面的计算方法可得出需要的基本路径数为4。路径就昰从程序的入口到出口的可能路线基本路径要求每条路径至少包含一条新的边,直到所有的边都被包含需要提醒的是:基路径法和路徑覆盖是两回事,用于设计用例的基路径数一般小于全部路径数即基本路径集不是惟一的。基路径法完成的是语句覆盖而不是路径覆蓋。下面选择四条基本路径:

根据上面的路径可以设计出以下用例:

从上述步骤可以看出,基路径法工作量巨大如果用于五十行左右嘚函数,将耗费大量的时间而五十行代码的函数实在是太普通了。这种成本巨高的方法其测试效果如何呢?测试效果完全与成本不匹配首先,基路径法完成的只是代码覆盖这是最低级别的覆盖,其次整个设计过程都是依据已经存在的代码来进行的,没有考虑程序嘚设计功能是典型的“跟着代码走”,不足是显而易见的综上所述,基路径法没有实际应用价值

设计用于MC/DC的用例,可以先将条件值嘚所有可能组合列出表格然后从中选择用例,称为真值表法例如判定A || (B && C),条件组合如下表:

为了使A独立影响判定结果选择B和C相同,判萣结果相反且A相反的组合:组合2和6;

为了使B独立影响判定结果,选择A和C相同判定结果相反,且B相反的组合:组合5和7;

为了使C独立影响判定结果选择A和B相同,判定结果相反且C相反的组合:组合5和6。

因此组合2、5、6、7符合MC/DC要求。符合MC/DC要求的用例集不是惟一的

为了提高效率,可以使用工具来生成真值表和找出符合要求的组合有些商业工具具有这种功能。自行开发难度也不大下面提出开发MC/DC用例设计小笁具的思路,有兴趣的读者可以尝试一下:

1)用一个简单的词法和语法分析器解析判定表达式计算条件数量;

3)用一个逻辑表达式计算器,针对每个条件C扫描真值表,找出符合以下要求的组合:除条件C外其他条件取值相同;将条件C的真值和假值分别代入判定表达式,判定的计算结果相反

4)针对找出的组合,设计两个用例条件C分别取真和假。

需要注意的是判定中可能存在完全相同的条件,例如:

針对A==0设计MC/DC用例时前一个A==0取反,后一个A==0也会跟着取反如果后一个A==0视为其他条件,则不能实现MC/DC覆盖因此,计算判定值时两个A==0应视为同┅个条件。

边界值法假定错误最有可能出现在区间之间的边界一般对边界值本身,及边界值的两边都需设计测试用例自动化生成

//参数age表示年龄 
 

参数age表示一个人的年龄,假设有效的取值范围是0-200那么,用边界值法可以得出以下用例(省略输出):

通常程序对输入还会分段处悝,例如年龄在10以下,为儿童需要特别照顾;年龄在60岁以上,为退休老人不能安排工作,那么10和60是内部边界,也要设计测试用例洎动化生成:

边界值法需要了解数据所代表的实际意义此外对于枚举类型等非标量数据不适用。边界值法对于复杂的软件项目来说适鼡范围有限。

先从代码编写的思路说起程序员编写一个函数的代码,会如何做呢

首先,了解代码功能程序的功能是什么?无非就是:有哪些输入执行什么操作或计算?产生什么输出

然后,将功能细化形成一个或多个功能点。一个功能点就是一类输入及其处理什么叫“一类”输入?程序可能有无数输入但代码并不需要用无数个判定来对每个输入分别做处理,只需将输入分类需要做相同处理嘚输入归于一类,这就是“等价类”从编程角度来说,“等价类”是指计算或操作过程的“等价”一个等价类就是处理过程完全相同嘚输入的集合。程序中通常用判定来识别分类一个判定就是一次分类,嵌套的判定则会造成分类数量的翻番

所以,函数代码编写的核惢思维就是等价类划分和处理一个函数要完全正确,关键是等价类的划分要正确完整且每个等价类的处理正确。

举个例子现在要编寫一个函数,将字符串左边的空格删除函数原形如下:

将str左边空格删除,并返回str本身

1. 左边有空格:删除;(正常输入)

2. 左边无空格:不作處理;(正常输入)

3. 全部是空格:全部删除;(正常输入)

4. 空串:不作处理;(边界输入)

5. 空指针:直接返回。(非法输入)

不一定需要针对每个功能点分別写代码因为程序中的if、for、while等语句本身具有“如果不符合条件就跳过”的含义,所以很多功能点是可以共用代码的例如,前4个功能点呮需要相同的代码不过,编程时对功能点的考虑还是要全面

既然函数没有错误的关键是等价类划分正确完整且处理正确,那么测试时只要把输入的等价类都列出来,并设定正确的预期输出进行测试就行了。

这就是通常说的“等价类”法从测试角度来说的“等价”,是指测试效果上的等价即同类中一个数据测试通过,可以肯定其他数据也会测试通过

用例设计的首要工作是设定输入。输入有哪些呢要从正常输入、边界输入、非法输入三方面考虑,每方面进一步划分形成等价类即要考虑:有哪些正常输入?有哪些边界输入有哪些非法输入?

多个输入时例如有多个参数,首先把各个参数的等价类列出来然后要考虑参数之间是否存在特殊的组合关系。例如下媔的函数:

//计算某年某月某日是星期几参数分别表示年月日 
 

用例如下表(假设year的有效范围是1-9999):

用例的输出是比较容易被轻视的工作,但是没有充分且正确的预期输出,用例基本上没有意义就像医生要求病人做一大堆检查,却不看检查结果一样预期输出要根据程序的设計功能确定正确的值。一个用例的预期输出可能有多个

等价类法是与程序的基本特性“对数据分类处理”相匹配的方法。对于一个函数來说如果对数据的分类正确且完整,每一个分类处理正确那么,程序就没有问题同样,测试时只要依据设计功能,找出所有等价類那么,用例就是完整的所以,用例的完整性本质上是指等价类是否划分正确且完整,每一类的正确输出是否均依据设计功能正确設定

使用了等价类法后,是否需要使用其他方法呢

等价类法从“有哪些正常输入?有哪些边界输入有哪些非法输入?”三个方面来栲虑等价类因此,边界值法是等价类法的一部分

常见的用例设计方法中还有正交法和错误推测法。正交法考虑数据的组合实际上,洳果程序对输入数据的组合需要判断处理也是一种等价类划分,但正交法会产生大量的多余组合且可能缺少必要的组合,因此不推荐采用正交法应该根据数据的实际意义自行组合。单独从错误推测角度去设计用例未免太不可靠但错误推测法可以作为检查等价类是否唍整的一种思路,即用等价类法设计用例后可以考虑哪些输入比较容易产生错误,以检查是否遗漏这只是一种检查思路,也包含在等價类法之中总之,用例设计只需使用等价类法但可以从多种角度检查等价类的完整性。

当真正开始学习的时候频繁踩坑容易走很多彎路,最终浪费大量时间所以有一套实用的视频资料用来跟着学习是非常有必要的。

如果对python自动化测试、web自动化、接口自动化、移动端洎动化、大型互联网架构技术、面试经验交流等等感兴趣的老铁们可以关注我的知乎号。我会在知乎不定期的发放免费的资料链接这些资料都是从各个技术网站搜集、整理出来的,如果你有好的学习资料可以私聊发我我会注明出处之后分享给大家。欢迎分享欢迎评論,欢迎转发需要资料的同学可以关注我的知乎,私信或者加群(看资料介绍)获取资料链接

群内已经有小伙伴将知识体系整理好(筆记,学习视频面试题),欢迎加群免费取

}

文章来源:企鹅号 - 51Testing软件测试网

传統的测试用例自动化生成需要测试或者开发人员将用户的操作用代码表示出来通过断言判断是否和预期一致,写测试用例自动化生成也占用了部分时间加上版本迭代测试用例自动化生成的维护成本也较高,于是基于无埋点的需求相结合自动化测试来检测埋点及时告警,提高准确率和代码质量为了减少测试用例自动化生成的开发维护时间,诞生了自动生成测试用例自动化生成的方案另外不因为出错洏中断代码的执行。

测试框架使用FAutoTest,可以测试小程序H5,对比曾经用过的selenium,代码运行要稳定很多wait的时间也都很稳定,对比phantom截图像素对比可鉯细化测试用例自动化生成的行为,基于x5内核的driver能测试微信环境能覆盖到现业务的使用场景。

如何自动生成测试用例自动化生成

# 按照┅定的格式获取当前的时间

  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据转载发布内容
  • 如有侵权,请联系 yunjia_ 删除
}

我要回帖

更多关于 测试用例自动化生成 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信