缩略图
Education and Training

提高单元测试效率方法研究

作者

郑艳梅

中电科思仪科技股份有限公司 山东青岛 266555

1 引言

单元测试一般采用白盒测试的方法。由于白盒测试具有测试成本高、维护负担重等缺点,在实际操作中也可以通过黑盒或灰盒测试来替代白盒测试,可以大大提高测试效率,加快项目进度。

本文结合一款自动测试工具 TestCenter,采用黑盒测试的方式,解决了单元测试需覆盖多种编程语言、按自定义模板自动生成测试报告等问题,可以帮助开发者快速找到测试发现的问题,并方便测试人员回归测试。

2 测试工具分析

市面上有众多的单元测试工具,大部分工具针对的编程语言比较单一,如C++Test 、qTest、gTest 等只针对 C/C++ 语言,MSTest、NUnit 只针对 C#/.NET 语言,JUnit 只针对 JAVA 语言,Parasoft 主要针对 C/C++/JAVA 语言,pyTest 只针对 Python 语言。测试人员面对采用混合多种语言开发的一个项目或采用不同语言开发的多个项目时,需要熟练掌握多种测试工具才能开展工作,导致单元测试难度大、测试效率低。

TestCenter 是研发的一款通用的自动测试软件平台,主要应用于各领域电子产品及设备测试程序的开发、运行和管理,提供图形化的测试用例开发环境,以插件配置组装的方式实现测试用例的快速开发,测试工程师可以简单、高效的对测试用例进行开发与维护。

插件是TestCenter 软件平台中的可扩展软件模块,符合一定的接口规范,可以很方便的装载和卸载,不影响主平台功能,又可以扩充测试能力。TestCenter通过 ADE(应用程序开发环境)适配器插件为用户提供调用执行各种编程语言开发的软件模块的功能,ADE 适配器插件包括 DotNet 适配器(C#)、DLL 适配器( )、Python 适配器(Python)、脚本适配器(JavaScript、VBScript)、Matlab适配器(Matlab)等。

图 1 适配器插件

因此,TestCenter 可以满足覆盖更多的编程语言的需求。

从保存测试结果的角度分析, C++Test 、qTest、Parasoft 可以生成专业报告或企业级报告,MSTest、NUnit、JUnit、pyTest 仅支持 HTML/XML,或需要插件支持。TestCenter 可以在自定义模板的情况下生成客户满意的 WORD 或 EXCEL 文件的报告。

图 2 文件操作插件

TestCenter 通过这两个插件实现测试报表生成功能,可以帮助用户通过可视化方式设计报表生成流程。因此,TestCenter 可以满足测试报告的个性化定制需求。

3 TestCenter 简介

TestCenter 是一款成熟、强大的桌面端自动测试软件平台,涵盖测试程序开发与调试、测试程序执行、测试资源管理、测试数据管理、测试程序发布等功能,拥有50 余个内置插件并支持用户自定义扩展,可满足用户多样的测试需求。

TestCenter 为用户提供可视化、组装式、所见即所得的测试序列开发环境。使用 TestCenter,用户只需从插件库中拖放插件并组装它们即可快速完成测试序列的开发。在测试编辑器中,用户还可以方便地进行循环、跳转、分支执行、条件执行及其它复杂流程设计。同时,TestCenter 还提供断点设置、单步运行、变量监视等功能,方便用户进行测试序列的调试。

4 使用TestCenter 进行程控命令测试,提高测试用例编写效率程控功能是测试测量仪器(以下简称仪器)的重要功能之一,越来越多的用户通过程控方式对测量仪器进行远程控制。

传统的测试方法是针对每种型号的仪器编写一个专用测试软件,软件中使用固化的流程和命令参数对该功能进行测试,该方法的缺点是无法复用,每次一个新项目就需要手动修改命令,参数。TestCenter 提供非编码组装式的可视化测试用例开发环境,开发的测试用例采用树状结构表达,具有形象、直观、易懂、易维护的特点。测试节点具有可复制、可剪切粘贴等功能,可通过鼠标上移下移来调节节点位置,可提取程控命令的通用部分作为共有父节点,在修改便捷性和防出错上有比较好的效果。

使用TestCenter 开发的测试用例示例见下图所示。

图 3 TestCenter 开发的测试用例示例

在TestCenter 中,只需要按照测试过程和逻辑关系依次建立测试节点,并将测试节点关联好具体的插件并完成参数设置,就可以实现测试用例的开发。上图中,“连接 3674”节点关联程控命令插件,完成建立仪器通讯的操作; “程控命令”节点关联程控命令插件,实现执行程控命令的操作,命令为“*IDN?”查询仪器IDN,确认关联正确的仪器设备;“Excel 文件操作-新建”节点关联Excel文件操作插件,利用 Excel 模板新建一个 Excel 文件,用来保存程控命令执行过程中的命令名称、参数、返回值等信息,逐条插入Excel 文档中。这些信息可以帮助测试人员找到程控命令执行中的错误,也可以帮助开发人员找到出错点进行改正。

后面的节点都是具体的程控命令执行节点。其中CALCulate 子系统父节点关联一个通用命令符(:CALCulate),后面的节点都将此字符串和子命令连接(如::CALCulate:CORRection:EDELay:DISTance 由节点 CALCulate 子系统的 SCPI参数和:CORRection:EDELay:DISTance 的 SCPI 参数连接),“表达式”做这个连接工作,“程控命令”执行当前这个指令,“Excel 文件操作-写”将当前命令和参数及测试结果写入前面打开的Excel 文件中。

执行结束得到的测试结果显示在Excel 文件中。测试结果文件示例如下图所示。

图 4 保存在Excel 文件中的测试结果

本文通过对三种不同类型仪器分别采用 VS 和 TestCenter 这两种工具开发程控命令测试用例的方式进行了效率对比。第一个项目使用 VS 编写用例花费 15天,第二个项目花费 7 天,第三个项目花费 3 天;使用TestCenter 编写测试用例,第一个项目花费 7 天,第二个项目3 天,第三个项目就会非常熟练只需要 1 天。实际测试时间基本一致。测试用例编写前后时间统计如下。

图 5 编写用例和测试三个项目所占用的时间

编写用例的时间平均下降了 56% ,总时间下降 42% 。

5 使用TestCenter 定制测试报告,提高测试报告生成效率

测试报告通常情况下有一定的格式,其中有些数据或文本需要替换,也有一些主观的内容(如系统概述、典型问题分析)需要手动编写。可以将报告模板中需要替换的内容以一种容易标识和查找的方式存在(如{项目名称}、{项目标识}等),利用TestCenter 的Word 文件操作插件进行替换工作,将具体的项目名称和项目数据等通过自动化的方式快速替换,提高测试报告生成效率,也减少了人为操作时造成一些错误。

下面是TestCenter 工程中的替换节点。

图 6 TestCenter 工程中的替换节点

如“报告类型”节点关联Word 文件操作插件,执行替换模板中的{报告类型}字符串为实际的报告类型为“系统”,表示此测试报告是系统级测试报告。

下面两个图是模板示例以及替换后的测试报告文件截图。

图 7 模板示例
图 8 生成的测试报告文件

6 针对不同的编码语言开发单元测试

采用程控命令测试同样的方法,执行适配器插件,将 C/C++ 代码编译成DLL文件,使用DLL 适配器插件,可以将DLL 中暴露的函数或方法加载到TestCenter平台上,逐个执行这些函数或方法,方法参数通过 TestCenter 平台传送到 DLL中,执行后,将执行结果返回到 TestCenter 平台中,平台获取结果,使用 Excel文件保存起来供测试人员和开发人员使用。

针对使用C#语言编写的代码,将其编译成DLL 形式的程序集后,使用DotNet适配器插件进行调用,执行代码中的方法和属性。针对 Python 代码,可以直接使用 Python 适配器插件进行调用,执行代码中的函数。函数或方法的参数可以通过 TestCenter 输入,测试结果可以通过 TestCenter 保存到 Excel 文件中。

7 结束语

本文通过多项目实证研究表明,TestCenter 测试框架在跨语言环境下展现出显著的通用性优势,其模块化架构设计实现了跨语言单元测试用例的统一管理,可使单元测试执行效率提升 42% 。该解决方案有效解决了多开发语言项目中的测试效能瓶颈问题,为持续集成与敏捷开发环境下的高效测试实践提供了一种有效的技术手段。

参考文献:

[1] 《TestCenter6.0 用户手册》

[2] 《基于 Qt Test 的自动化单元测试》价值工程 2017 年 14 期

作者简介:郑艳梅,1980.10,女,汉族,陕西渭南人,本科,工程师,研究方向:自动测试。