基于PICT的API测试用例设计应用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2019年
软 件
2019, V ol. 40, No. 3
作者简介: 杨丽丽(1985-),女,工程师,主要研究方向:软件测试。

基于PICT 的API 测试用例设计应用
杨丽丽
(中国电子科技集团公司第十五研究所,北京 100083)
摘 要: API 是软件工程中的一个重要组成部分,需要设计大量的测试用例来进行充分测试。

借助PICT 工具
利用组合测试原理可产生比手动生成更高效的测试用例。

本文介绍了PICT 的工作原理及使用方法,分析了API 测试用例的设计思路,并通过一个API 测试用例设计实例详细说明了如何通过PICT 工具对API 进行测试用例进行设计。

关键词: PICT ;组合测试;API
中图分类号: TP311. 56 文献标识码: A DOI :10.3969/j.issn.1003-6970.2019.03.045 本文著录格式:杨丽丽. 基于PICT 的API 测试用例设计应用[J]. 软件,2019,40(3):222-226
The Application of API Test Case Design based on PICT
YANG Li-li
(15th of Research Institute of China Electronics Technology Group Corporation, Beijing 100083, China )
【Abstract 】: Application Programming Interface (API) is an import part of soft engineer, which needed be tested by a large number of test cases. The Pairwise Independent Combinatorial Testing tool (PICT) can help you generate tests that are more effective than manually generated tests. This paper describes the principle of PICT and how it works, analyses the design thinking about the API test case and shows how to design API test case with PICT by giving a detailed example.
【Key words 】: PICT; Combinatorial testing; API testing
0 引言
随着软件工程理论和实践的发展,从业人员对软件测试的重要性有了一定的认知,希望正式版本发布前对软件进行充分测试,及早发现问题[1-2]。

然而现代软件项目需要适应快速变化的市场需求,具有周期短、体量大、稳定性要求高的特点,软件测试人员在有限的项目周期和人力资源下,无法做到完全的测试。

而不完全的测试又会导致软件缺陷的遗漏,造成无法估量的损失。

因此,针对被测对象的特点选择合适的测试方法,保证测试覆盖率的同时兼顾测试成本,把数量巨大的测试减少到可实现范围,减少软件缺陷造成的风险,成为测试用例设计关注的重点。

本文针对API (Application Programming Interface ,应用程序编程接口)的特点,结合PICT 工具,对使用组合测试原理对API 测试用例进行设计的方法进行 探讨。

1 API 测试介绍
1.1 API 概念
API 是一些预定义的封装好的函数,即预先把复杂的操作写在一个函数里面,并配上说明文档,开发人员只需调用API 而不需了解内部工作机制的细节,即可实现复杂的工作。

其提供了应用程序与开发人员基于某软件得以访问一组例程的能力[3]。

作为模块与模块、系统与系统、软件与开发人员之间连接的桥梁,API 是软件工程中的重要组成部分,在软件项目中应用广泛[4]。

API 的重要性也决定了针对API 的测试在软件研发过程中也是重点关注的内容。

1.2 API 测试方法
API 接口的测试一般在集成测试阶段进行,重点检查部件之间的调用和交互是否起作用,对其的
测试方法分为白盒测试和黑盒测试。

白盒测试时,软件测试人员可访问程序中的代
杨丽丽:基于PICT 的API 测试用例设计应用
223
《软件》杂志欢迎推荐投稿:cosoft@
码,并通过检查代码的线索来协助测试;黑盒测试时,代码对测试人员不可见,测试人员需要进行一些输入,得到某种输出结果,不需了解代码如何运行[5]。

出于代码安全和商业机密的考虑,在实际软件工程项目中,代码的查看权限一般不向测试人员开放。

因此,黑盒测试在API 测试中应用较多,本文着重探讨黑盒测试的情况。

使用黑盒测试方法时,测试人员根据接口文档中API 的功能描述,编写测试程序或使用辅助测试工具模拟其它模块调用API 。

通过对输入参数不同的取值覆盖,验证输出的对应关系是否符合功能描述,同时验证API 对边界值、异常值的处理,确保接口的可靠性。

综上所述,API 测试用例设计的核心与难点在于设计输入参数的取值覆盖方案。

仅考虑测试覆盖率的情况下,可使用穷举测试法列出所有可能的输入参数。

此方法的测试效果虽然最为理想,但由于工作量太大,不符合实际工程情况;兼顾测试效率的情况下,常用组合测试法或正交测试法,利用参数之间的正交关系尽可能的覆盖较多测试场景[6-7]。

两者相比较,组合测试设计的用例数量更为精简,
更能提高测试效率。

2 PICT 介绍
2.1 概念
PICT (The Pairwise Independent Combinatorial Testing tool )为一款微软公司出品的命令行用例生成工具,生成的测试集可以覆盖任意N 个变量的取值组合。

基于组合测试的理论,该测试用例集可以发现N 个因素共同作用引发的缺陷。

PICT 接受纯文本模式的文件作为输入,输入文件中包括参数类别、取值集与约束关系,输出是一个用来组成组合覆盖测试用例的矩阵,每一行表示一个测试用例,每一列代表系统的一个参数,每一项代表测试用例对应的参数取值。

PICT 可帮助测试人员产生比手动生成更高效的测试用例。

2.2 实现原理
组合测试(combinatorial testing )是一种测试用例生成方法,其对传统测试用例方法进行了综合。

组合测试理论可由一个数学模型和一个假设表示:
数学模型:被测对象被抽象为函数f ,影响被测对象变量作为函数f 的输入,其取值构成有限的变
量集合X ={x 1,x 2,…,xn },产品的输出为函数的返回值,构成变量集合Y ={y 1,y 2,y 3,…,ym }。

假设:如果测试覆盖了任意i 个(2≤i ≤n )输入变量的取值组合,那么该测试用例集理论上可以发现所有i 个变量共同作用引发的函数f 的缺陷。

组合测试方法包括多变量组合方法和两变量组合方法[8]。

多变量组合方法的覆盖率更好,但占用的测试资源多。

两变量组合方法理论上可以暴露所有由两个变量共同作用而引发的缺陷,占用的测试资源少。

Kuhn 和Reilly 在2002年通过对Mozilla 浏览器的错误分析报告开展了组合测试的可用性结果研究。

研究结论表明,大约70%的故障是由两个以下参数的相互作用引起的[9]。

因此,两变量组合方法在测试覆盖性上也基本满足工程需求。

PICT 默认使用两变量组合方法,生成的测试集可以覆盖任意两个变量的取值组合。

并且由于组合测试的数学模型没有描述变量之间的约束关系,生成的用例集存在一定的冗余,利用PICT 可通过添加输入的约束条件来进行改进[10]。

2.3 使用方法
使用PICT 进行用例设计的步骤包括: (1)参数建模。

通过分析被测对象,抽象出待生成变量的类型和取值,使用等价类方法将有限的取值代替无限的取值域。

然后使用文本编辑器创建一个模型文件,在该文件中分行详细列出变量类型、取值、变量间的约束条件。

(2)将模型文件放入PICT 安装程序路径,在命令行程序中运行PICT ,并设定输出结果格式,将输出矩阵导出至指定文件中。

(3)打开输出文件,查看用例设计结果。

PICT 生成一组简洁的参数值选项,用来组合覆盖测试用例。

3 API 测试用例设计
3.1 设计思路
根据1.2节的介绍,API 用例设计思路主要考虑以下三个方面:
(1)根据接口文档中对输入参数的使用规则,设计样本验证输入参数个数、长度、类型、有效性等。

(2)根据等价类划分方法,精简输入参数的取值集,减少冗余用例。

(3)分析接口文档中对输出参数的业务规则描述,梳理业务逻辑,明确输入和输出的对应关系以及输入条件之间的约束条件。

第40卷 第3期 软 件
224
《软件》杂志欢迎推荐投稿:cosoft@
3.2 设计步骤 3.2.1 分析接口文档
本文以一个API 接口为例,介绍使用PICT 进行API 测试用例设计的过程。

接口文档描述如下所示:
(1)API 名称:自动请求双工热备切换 (2)调用格式:int reqDupSwitch (DUPSTS *pD-upStatus ); (3)描述:应用程序可调用此API 请求改变双工状态。

只有在自动方式下才可以在主机上请求切换。

如果本机为副机,不允许切换;如果本机为主机,它机为副机,并且它机网络或软件异常,不允许切换。

(4)参数:pDupStatus :指向DUPSTS 类型的指针,用于存放当前的双工状态。

DUPSTS 结构中包括的参数内容如下:
表1 DUPSTS 数据元素 Tab.1 DUPSTS date element
序号 名称 标识符 数据类型 大小和格式/单位
范围/枚举说明
1. 本机双工状态 lstat unsigned int 4 0,1,2 表示本机的主/副状态,值为2时本机为主机,值为1时本机为副机,值为0时表示脱机,其它值未定义。

2. 它机双工状态 pstat unsigned int
4 0,1,2 表示本机的主/副状态,值为2时本机为主机,值为1时本机为副机,值为0时表示脱机,其它值未定义。

3. 双工工作方式 mode int 4 0,1 表示双工工作方式,值为0时为人工方式,值为1时为自动方式,其它值未定义
4. 本机数据网状态 lnet bool 1 0,1 表示本机数据网的状态,值为1时正常,值为0时故障。

5. 本机关键软件状态 lsoft bool 1 0,1 表示本机关键软件的状态,值为1时正常,值为0时表示异常。

6. 它机数据网状态 pnet bool 1 0,1 表示本机数据网的状态,值为1时正常,值为0时故障。

7.
它机关键软件状态
psoft
bool
1
0,1
表示本机关键软件的状态,值为1时正常,值为0时表示异常。

(5)返回值:完成双工切换时,API 返回成功值:0。

否则返回失败值: 1。

3.2.2 使用PICT 生成测试用例
(1)确定变量xi
xi 应包括测试的输入和预期输出。

被测API 的输入为一个结构体,结构体中共包含7类数值;API 的输出为一个整数型数值。

因此,测试用例的输入变量xi 共包括8类数值。

(2)确定每个变量xi 的取值组合
为了更充分的发现缺陷,每个变量的取值要进行充分设计,尤其是“典型取值”,可以通过等价划分、边界值等方法进行取值。

根据本接口文件,7个输入变量的有效取值均为离散的有限值,需要逐一列出;无效值采用等价类划分法和边界取值法,取–1。

输出值包括两个固定值:0和–1。

在PICT 的安装路径下新建模型文件APItest. txt ,使用文本编辑器写入如下内容:
本机双工状态:0,1,2,–1
它机双工状态:0,1,2,–1 双工工作方式:0,1,–1 本机数据网状态:0,1,–1 本机关键软件状态:0,1,–1 它机数据网状态:0,1,–1 它机关键软件状态:0,1,–1 返回值:0,–1
(3)确认变量之间的约束关系
如不加约束条件,在组合测试生成的用例中,有一些是无效用例。

需要通过定义参数之间的约束关系来精简用例。

根据接口文档中对API 的描述,整理出如下所示的返回值为–1的约束关系:
双工工作方式为人工方式时,调用API 返回失败值;
本机状态为副机时,调用API 返回失败值; 本机状态为主机但它机网络异常或它机软件异常,调用API 返回失败值。

杨丽丽:基于PICT 的API 测试用例设计应用
225
《软件》杂志欢迎推荐投稿:cosoft@
返回值为0的约束关系如下:
自动方式下,本机状态为主机,同时它机网络和它机软件正常。

(4)确定检查方法,以判断y 1,y 2,…,yn 是否正确。

错误或不严谨的检查都有可能造成缺陷的遗漏。

根据步骤(3)中的约束关系,采用PICT 的语法定义,将约束条件写入模型文件APItest.txt 中:
IF [双工工作方式]in{–1,0} THEN [返回值]=–1; IF [本机双工状态]in{–1,0,1} THEN [返回值]=–1;
IF [本机双工状态]=2 AND [它机数据网状态]=0 OR [它机关键软件状态]=0 THEN [返回值]=–1;
IF [本机双工状态]=1 AND [本机双工状态]=2 AND [它机数据网状态]=1 OR [它机关键软件状态]=1 THEN [返回值]=0;
步骤(2)与步骤(4)最终形成的输入模型文件如图1所示。

(5)运行PICT ,并将结果导出至Excel 中 在Windows 环境下打开命令行程序,进入PICT 安装路径,将上一步形成的模型文件作为输入,执行PICT 程序,输出结果至APItest.xls 文件中,具体如图2所示。

3.2.3 设计结果
打开生成的测试用例文件APItest.xls ,最终的测试用例如图3所示。

从最终的用例生成结果看,采用PICT 两两覆盖的用例设计方法,同时结合接口文档指定约束关
系,共生成了19个测试用例。

而如果采用全覆盖的用例设计方法,需要设计4*4*3*3*3*3*2=2592个测试用例;两者对比,可以看出利用PICT 工具显著提高了用例设计和生成的效率,节省了测试资源。

图1 模型文件
Fig.1 Model file
图2 执行PICT 程序示意图 Fig.2 Execute PICT programs
图3 生成的测试用例 Fig.3 Generated test case
第40卷 第3期 软 件
226
《软件》杂志欢迎推荐投稿:cosoft@
4 结束语
通过PICT 工具生成测试用例集合,缩短了测试人员针对API 的测试用例设计的时间,对实际工作具有指导意义。

但PICT 为追求测试效率而牺牲了部分覆盖率的要求,可能会错过特定的取值组合,如上文中最终生成的用例未包含本机数据网状态和关键软件状态均为故障时的切换成功场景测试。

因此测试人员可根据实际情况,对测试集进行优化,如减少测试用例数量或补充个别测试用例,达到更佳测试覆盖效果
[11]。

参考文献
[1] 颜乐鸣. 基于工作流的软件测试过程模型研究[J]. 软件, 2018, 39(5): 160-165.
[2] 张琪. 大数据背景下软件测试的挑战与展望[J]. 软件, 2018, 39(6): 181-183.
[3]
沈默, 刘强, 童自力. API 测试的二元组合测试算法研究与
实现[J]. 计算机工程与应用, 2005, 26: 48-57. [4] 黄沛. 基于RESTful 架构的科技信息共享接口系统的设计[J]. 软件, 2018, 39(7): 170-172.
[5] Patton, R 著: 张小松, 王钰, 曹跃等译. 软件测试(原书第2版)[M]. 北京: 机械工业出版社, 2006.
[6] 叶常春, 尹良泽. 面向小规模程序的轻型测试方法[J]. 软件, 2015, 36(10): 90-93.
[7] 陈星, 赵佳萌, 宣军法. 移动应用自动化兼容性测试方法综述[J]. 软件, 2018, 39(7): 89-94.
[8] Trehan A. Algorithms for self-healing networks [D]. USA: The University of New Mexico, 2010.
[9]
Kuhn DR, Reilly MJ. An investigation of the applicability of design of experiments to software testing. [R] In: Caulfield M, ed. Proc. of the Annual NASA/IEEE Software Enginee-ring Workshop(SEW). Los Alamitos: IEEE Press, 2002. 91- 95.
[10] 王子元, 徐宝文, 聂长海. 组合测试用例生成技术[J], 计
算机科学与探索, 2008, 2(6).
[11] 陈皓, 王曙燕, 潘晓英. 成对组合测试数据的整体优化和
生成方法[J]. 计算机工程与应用, 2012, 48(11): 32-36.。

相关文档
最新文档