一、关于”好的“测试用例
  在设计测试用例的时候有多种设计方法和策略可以使用,使得测试用例设计得更丰富,尽可能覆盖到更多的程序路径和功能场景。常见的测试用例设计方法被提到最多的就是等价类划分、边界值分析、错误推断法等,而且在常规思路中希望测试用例越全面越完整越好。但是在复杂测试问题场景中,设计出完整全面的测试用例不是不可能,但是数量巨大的测试用例往往严重降低了测试效率,甚至可以说不是很好的用例设计。从我自己的经验,作为一名测试新手,最开始设计测试用例的时候希望做到”全面“,眼花缭乱的用例乍一看很是惊艳,可是真正测试起来便知其效率有多低下、冗余有多繁杂。因而,设计出全面完整的测试用例不是难事,难在如何将用例做减法。也就是说,如何用尽可能少的测试用例覆盖到更多的程序路径和功能场景,这才算是一份‘好的”的测试用例。
  二、关于PairWise策略
  PairWise(又称全对偶)策略是组合测试中的一种设计测试用例的方法,在很早之前就被提出,且被多项文章和实验证明是成效显卓。为了更好地理解PairWise,我们先假设一个常见的测试场景。假如我们测试公司电脑能够正常打印,需要测试两个因素,操作系统和打印机类型。假设操作系统有win7、mac、win8三个,打印机类型有EP、HP两种。我们此时设计一下测试用例:
  假如此时我们再增加一个测试因素,打印类型(打印单面、打印双面两个值),按照“全面”的测试用例设计方法,此时我们的测试用例个数达到6*2=12个,当然这也可以接受。
  但是我们考虑到这其中有冗余的情况,比如7号测试用例win7-HP这两个因素组合的情况已经由1号测试用例测试过了,且7号测试用例HP-双面这两个因素的组合也会由8号测试用例测试。因而7号测试用例就是多余的,因为它可能发现的bug,1号和8号完全可以测试出来。按照这个思路,我们需要的是在一组测试用例中能够保证至少一个用例中的每个其他变量的每个取值都配对过。这样的话我们只要6个测试用例就够了:
  事实上,如果这三个参数中的某两个参数的值的任意不同的组合会触发一个bug的话,那表格上的那组测试用例也可以发现该bug。
  相对于所有组合情况来说,PairWise的测试效率要高很多。例如,如果你想测试10个参数且每个参数都有26个值的功能,所有组合情况将导致存在141167095653376个测试用例。而PairWise测试法就只要测试1094个测试用例就可以。因而善于利用PairWise设计测试用例,可以利用较少的测试用例覆盖尽可能全的测试路径。
三、PairWise策略设计用例实践
  在云阅读接口测试的用例设计过程中,有时会用到PairWise设计策略,以保证测试覆盖率的同时提升测试效率。比如在最近的”阅读圈评论大师榜“的接口测试中,测试人员要设计不同的大师评论,查看调用接口时返回的数据是否完整。大师评论设计的因素主要有:评论主体(书籍、资讯、文章)、选中文字还是不选中文字(选中、不选中)、原评论还是子评论(原评论、子评论)。其中是否选中文字只是针对书籍或者文章这两种评论主体才会有的区分。如果我们按照全面完整的思路设计测试用例时,我们会得到4+2+4=10个测试用例。
  如果我们按照PairWise策略设计测试用例的话,我们只需要6个测试用例就可以了:
  这样的话我们只需要设计6种评论就可以满足测试要求了,可以提高测试效率。那这样设计测试用例是否是完备的呢?验证一下。从倒数第二个表格中,我们可以看一下省掉的这4个测试用例,其中的一个是4号测试用例(书籍+选中+子评论),这个用例需要验证的点包括:接口返回书籍详细信息、接口返回评论的选中文字、接口返回子评论和原评论的全部信息,所以这个用例完全可以由1号测试用例(书籍+选中+原评论)与6号测试用例(文章+选中+子评论)这两个测试用例验证出。也就是说,4号用例能测试出来的bug,1号与6号也能测试出来。自然我们可以不需要4号测试用例。当然,这也仅仅是使用PairWise策略设计测试用例的一次小实践,10个用例减少到6个,但是这种测试策略和原理掌握了的话,在以后更为复杂繁琐的测试场景中,合理地利用PairWise能够更大地减少不必要测试用例的数量、提高测试效率。PairWise自然也有其缺点,就是难以发现在特殊因素组合情况下产生的bug,但是这种策略的优势体现在复杂的测试场景中在比较完备的测试用例和测试效率之间的平衡折衷。

策略设计测试用例实践(2)--Pairwise(转)的更多相关文章

  1. 来自Google资深工程师的API设计最佳实践

    来自Google资深工程师Joshua Bloch的分享:API设计最佳实践 为什么API设计如此重要?API是一个公司最重要的资产. 为什么API的设计对程序员如此重要? API一旦发布,出于兼容性 ...

  2. MaxCompute表设计最佳实践

    MaxCompute表设计最佳实践 产生大量小文件的操作 MaxCompute表的小文件会影响存储和计算性能,因此我们先介绍下什么样的操作会产生大量小文件,从 而在做表设计的时候考虑避开此类操作. 使 ...

  3. RESTful API 设计最佳实践

    背景 目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个"万能"的设计标准:如何鉴权?API ...

  4. Atitit 词法分析器的设计最佳实践说明attilax总结

    Atitit 词法分析器的设计最佳实践说明attilax总结 1.1. 手写的优点:代码可读,对源代码中的各种错误给出友好的提示信息,用户体验高,1 1.2. 使用状态表比较简单,dfa比较麻烦1 1 ...

  5. atitit.基于http json api 接口设计 最佳实践 总结o7

    atitit.基于http  json  api 接口设计 最佳实践 总结o7 1. 需求:::服务器and android 端接口通讯 2 2. 接口开发的要点 2 2.1. 普通参数 meth,p ...

  6. ****RESTful API 设计最佳实践(APP后端API设计参考典范)

    http://blog.jobbole.com/41233/ 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而 ...

  7. RESTful API 设计最佳实践(转)

    摘要:目前互联网上充斥着大量的关于RESTful API(为了方便,以后API和RESTful API 一个意思)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API格式如何?你的API ...

  8. RESTful API 设计最佳实践(转)

    背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API 格式如何?你的 ...

  9. Slickflow.NET 开源工作流引擎基础介绍(六)--模块化架构设计和实践

    前言:在集成Slickflow.NET 引擎组件过程中,引擎组件需要将用户,角色等资源数据读取进来,供引擎内部调用:而企业客户都是有自己的组织架构模型,在引入模块化架构设计后,引擎组件的集成性更加友好 ...

随机推荐

  1. IDEA的Maven Projects无法显示

    记一个小坑: 前两天重装了一下电脑系统,下载了个最新的IDEA2018.3.5,把Maven.JDK.TomCat都设置好了 今天打开IDEA创建一个新的Maven项目,项目没有显示让我导入Maven ...

  2. 【Codeforces 329B】Biridian Forest

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 找到出口到每个点的最短距离. 设你到出口的最短距离为temp 那么如果某个人到终点的距离<=temp,则他们肯定能遇到你 因为他们可以在 ...

  3. JavaEE JDBC 了解JNDI

    了解JNDI @author ixenos Web与企业应用中的连接管理 1. 数据库连接方式: (1)使用配置文件 (2)使用JNDI 2. 在Web或企业环境中部署 JDBC应用时,数据库连接管理 ...

  4. Android BottomSheet:List列表或Grid网格展示(3)

     Android BottomSheet:List列表或Grid网格展示(3) BottomSheet可以显示多种样式的底部弹出面板风格,比如常见的List列表样式或者Grid网格样式,以一个例子 ...

  5. 【扫描线】HDU 5124 lines

    http://acm.hdu.edu.cn/showproblem.php?pid=5124 [题意] 在数轴x上,每次操作都覆盖一个区间的所有点,问被覆盖次数最多的点是覆盖了多少次 [思路] 最简单 ...

  6. 贝尔数--Codeforces908E. New Year and Entity Enumeration

    给n<=50个长度m<=1000的二进制数,记他们为集合T,求满足下面条件的集合S数:令$M=2^m-1$,1.$a \epsilon S \Rightarrow a \ \ xor \ ...

  7. HDU 5950 Recursive sequence 递推转矩阵

    Recursive sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

  8. git一个本地仓库连接多个远程仓库

    前言:由于公司的GIT是内网服务器,而在家工作访问不了内网服务器,由此想把本地仓库连接一个外网的GIT服务器(码云),方便不在公司时开发. 原文 某些场合,一个git项目需要能同时使用两个甚至多个远程 ...

  9. Tomcat服务器调优

    一,目标:优化tomcat来提高访问的并发能力. 服务器提供的内存,cpu,以及硬盘的性能对数据的处理起决定性作用. tomcat的3种运行模式 tomcat的运行模式有3种: 1. bio默认的模式 ...

  10. MongoDB小结06 - update【$push】

    数组修改器,既然名字都这样叫了,那么这个修改器就只能对数组进行操作啦. db.user.update({"name":"qianjiahao"},{" ...