您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
测试用例设计方法六脉神剑——第三剑:倚天屠龙,正交试验冲锋
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
测试用例设计方法六脉神剑——第三剑:倚天屠龙,正交试验冲锋
自猿其说Tech
2022-06-01
IP归属:未知
393浏览
测试
### 1 引言 上篇讲了因果图和判定表法,而这两种方法在变量值很多、排列组合数量极大的场景下,会生成非常庞大且冗余的测试用例,此时我们很难对所有组合场景进行全量测试用例覆盖,基于此短板,正交试验法应运而生。 ### 2 概念及原理 #### 2.1 定义 正交试验法是研究多因素、多水平的一种试验法,它是利用正交表来对试验进行设计,通过少数的试验替代全面试验 思想:用部分试验来代替全面试验,通过对部分试验结果的分析,了解全面试验的情况。 全面试验:可以分析各因素的效应,交互作用,也可选出最优水平组合。但全面试验包含的水平组合数较多,工作量大,在有些情况下无法完成。 #### 2.2 正交表 使用正交试验法设计测试用例的核心在于正交表的选取,正交表是一整套规则的设计表格,一般表示为: ![](//img1.jcloudcs.com/developer.jdcloud.com/31ac0bcf-754b-4c73-b4c8-b0097d9a0eb420220601144002.png) 其中,L代表是正交表,n代表正交表的行数(即测试用例数),k代表因素的个数或正交表的列数(即输入条件的个数),m表示每个因素的水平数,且有n=k*(m-1)+1 - 因素(Factors) 表示在一项试验中,需要观察的变量 - 水平数(Levels) 表示在试验范围内,任何单个因素能够取得的值得最大个数(变量的取值) 举个栗子: ![](//img1.jcloudcs.com/developer.jdcloud.com/f32b656f-ca2e-4c0b-a628-bedc88648a4120220601144034.png) 正交表必须满足以下两个特点,有一条不满足,就不是正交表: - 每列中不同属性值出现的次数相等。 这一特点表明每个因素的每个水平与其它因素的每个水平参与试验的几率是完全相同的,从而保证了在各个水平中最大限度地排除了其它因素水平的干扰,能有效地比较试验结果并找出最优的试验条件 - 在任意2列横向组成的属性值对中,每种属性值对出现的次数相等。 这个特点保证了试验点均匀地分散在因素与水平的完全组合之中,因此具有很强的代表性 这也是正交表的两大优越性,即“均匀分散性,整齐可比”。通俗的说,每个因素的每个水平与另一个因素各水平各碰一次,这就是正交性。 ### 3 方法步骤 #### 3.1 整体流程 1.确定因素(变量)和每个因素的水平数(变量取值); 2.根据因素数和水平数确定n值,这里区分2种情况: 单一水平正交表(各因素的水平数相同) ![](//img1.jcloudcs.com/developer.jdcloud.com/1599ec87-88cd-4b59-860a-bd135e5de0d020220601144138.png) 混合水平正交表,即各因素的水平数不完全相同的正交表 ![](//img1.jcloudcs.com/developer.jdcloud.com/9397bb3b-5067-49a9-b76c-849605916fb420220601144151.png) 3.选择合适的正交表; 4.根据正交表把变量的值映射到表中,每一行的各因素的取值组合作为一个测试用例。 #### 3.2 选择正交表 1.查Dr. Genichi Taguchi 设计的正交表:Dr. Genichi Taguchi 正交表https://www.york.ac.uk/depts/maths/tables/orthogonal.htm 2.SAS标准技术支持:SAS设计正交表http://support.sas.com/techsup/technote/ts723_Designs.txt 查找时需要关注不同类型的正交表,区分以下2种情况: 1.单一水平正交表: ![](//img1.jcloudcs.com/developer.jdcloud.com/60d1fe61-7bb2-444b-8998-c93a4ba5129c20220601144349.png) 2.混合水平正交表: ![](//img1.jcloudcs.com/developer.jdcloud.com/214c2ff3-472a-4dc2-b6da-c9a595ba9e3820220601144423.png) 当有2个或2个以上正交表可以被选择时,选取原则是:选试验次数最少的那个正交表。 ### 4 举个栗子 场景:对支持4种特殊场景的破损类异常三级类型的报备功能进行测试 异常三级类型 = 外包装破损,商品腐坏,外包完好内物破损/泄漏 特殊场景 = 打包不规范,违规揽收,集包封签异常,车辆封签异常 上传方式 = 单条上报,批量上传 #### 4.1 传统方法:全量覆盖 1. 分析上述测试需求,根据规格描述有: 异常三级类型(外包装破损,商品腐坏,外包完好内物破损/泄漏) 特殊场景(打包不规范,违规揽收,集包封签异常,车辆封签异常) 上传方式(单条上报,批量上传) 因此有3个被测元素(因素),每个因素分别有3、4、2个取值。 1. 针对所有因素的全部水平值进行全排列,测试用例个数:3*4*2=24,具体用例如下: ![](//img1.jcloudcs.com/developer.jdcloud.com/71172a1a-b2b6-4dc5-971e-8dc8e158ab2020220601144543.png) #### 4.2 正交试验法设计用例 1.根据因素数和水平数确定n值: ![](//img1.jcloudcs.com/developer.jdcloud.com/83b00788-b273-4f7f-8f80-4bca38b7320d20220601144610.png) 2.选择合适的正交表。根据计算得出n=6,在 Dr. Genichi Taguchi 正交表 查找发现不存在n=6的正交表,这时我们就需要根据如下原则确定使用的正交表: - 查找同时满足 n>6 && m>=max(m1=3,m2=4,m3=2) && k>=k1+k2+k3=1+1+1=3的正交表; - 当有2个或2个以上正交表可以被选择时,选择试验次数最少的那个正交表,本次选取L16b。 3.将各因素水平值填入映射表,每一行转换成一个测试用例,测试用例数量:12个,可以看到,比全量覆盖方法得到的用例数减少了50%。 ![](//img1.jcloudcs.com/developer.jdcloud.com/43e5670c-fb17-4873-8b23-7e9c2e12b1f820220601144636.png) #### 4.3 PICT生成正交试验测试用例 虽然使用正交试验法可以帮助我们筛选合适的测试用例,提升测试效率,但选择正交表并输出测试用例的过程却需要耗费一定的时间,那么有没有更加快捷的方法呢? 当然有!PICT这个小工具只需要我们提供所有的因素及变量值,它就可以帮助我们自动生成正交试验的测试用例了,接下来让我们学习一下如何使用PICT生成测试用例吧! 在使用PICT直接生成测试用例之前,需要先准备需要生成测试用例的txt文件,这个txt文件必须放在安装目录的同一个文件夹下,否则没有作用。 本次建立了一个名称test_pict.txt的文件,在文件中输入所有的因素及变量值,每一行是一个因素及其对应的所有变量值枚举,因素名称与变量值枚举之间用 “:” 连接,各变量值之间用“,”连接,均为英文符号,无空格,如: - 异常三级类型:外包装破损,商品腐坏,外包完好内物破损/泄漏 - 特殊场景:打包不规范,违规揽收,集包封签异常,车辆封签异常 - 上传方式:单条上报,批量上传 注意编码格式是ANSI,否则会乱码(可以使用Notepad++改变编码格式),如下图: ![](//img1.jcloudcs.com/developer.jdcloud.com/f53d5c40-8e8b-4f32-a597-34a62c53eb7920220601144723.png) 下面就开始准备测试用例的生成了,打开DOS窗口; 首先把目录切换到pict安装目录,本次为C:\Users\chenyuting50\Downloads,使用该命令: pict test_pict.txt 即可自动生成测试用例,如下图: ![](//img1.jcloudcs.com/developer.jdcloud.com/31275de2-36ef-4672-aa99-c0c15b33768b20220601144744.png) 接下来需要执行:pict test_pict.txt >text_pict.xls命令,将测试用例保存到text_pict.xls文件中,该文件仍会存放在安装目录下,打开该文件内容如下,每行数据即为一条测试用例: ![](//img1.jcloudcs.com/developer.jdcloud.com/b9acd7b9-8629-49c2-b7cd-12a3cb01265320220601144755.png) ### 5 总结 ![](//img1.jcloudcs.com/developer.jdcloud.com/abef9c8d-e78a-478b-a8d6-1b14c8c1a81520220601144811.png) 但正交试验法并不适用于强流程性需求的测试用例设计,这些场景我们就需要借助功能图法或场景法来进行测试用例的设计,这些方法又该怎样使用呢? ------------ ###### 自猿其说Tech-JDL京东物流技术与数据智能部 ###### 作者:陈雨婷 (西安CS测试小分队)
原创文章,需联系作者,授权转载
上一篇:基于Raft算法的DLedger-Library分析(一)
下一篇:测试用例设计方法六脉神剑——第二剑:招式组合,因果判定出世
相关文章
安全测试之探索windows游戏扫雷
Jmeter压测实战:Jmeter二次开发之JSF采样器实现
Laputa自动化测试框架介绍
自猿其说Tech
文章数
426
阅读量
2150606
作者其他文章
01
深入JDK中的Optional
本文将从Optional所解决的问题开始,逐层解剖,由浅入深,文中会出现Optioanl方法之间的对比,实践,误用情况分析,优缺点等。与大家一起,对这项Java8中的新特性,进行理解和深入。
01
Taro小程序跨端开发入门实战
为了让小程序开发更简单,更高效,我们采用 Taro 作为首选框架,我们将使用 Taro 的实践经验整理了出来,主要内容围绕着什么是 Taro,为什么用 Taro,以及 Taro 如何使用(正确使用的姿势),还有 Taro 背后的一些设计思想来进行展开,让大家能够对 Taro 有个完整的认识。
01
Flutter For Web实践
Flutter For Web 已经发布一年多时间,它的发布意味着我们可以真正地使用一套代码、一套资源部署整个大前端系统(包括:iOS、Android、Web)。渠道研发组经过一段时间的探索,使用Flutter For Web技术开发了移动端可视化编程平台—Flutter乐高,在这里希望和大家分享下使用Flutter For Web实践过程和踩坑实践
01
配运基础数据缓存瘦身实践
在基础数据的常规能力当中,数据的存取是最基础也是最重要的能力,为了整体提高数据的读取能力,缓存技术在基础数据的场景中得到了广泛的使用,下面会重点展示一下配运组近期针对数据缓存做的瘦身实践。
自猿其说Tech
文章数
426
阅读量
2150606
作者其他文章
01
深入JDK中的Optional
01
Taro小程序跨端开发入门实战
01
Flutter For Web实践
01
配运基础数据缓存瘦身实践
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号