一种非侵入的GUI自动化测试系统设计

2018-01-05 00:58吴立金韩新宇唐龙利
计算机测量与控制 2017年12期
关键词:嵌入式软件测试用例脚本

吴立金,韩新宇,张 凯,唐龙利

(中国船舶工业综合技术经济研究院,北京 100081)

一种非侵入的GUI自动化测试系统设计

吴立金,韩新宇,张 凯,唐龙利

(中国船舶工业综合技术经济研究院,北京 100081)

针对嵌入式GUI软件自动化测试,提出一种非侵入的GUI自动化测试系统设计方案,能够使用Python格式的测试脚本灵活描述测试用例的执行步骤,能够自动化执行测试脚本;系统将人机交互步骤转成鼠标键盘模拟设备的控制命令,实现对被测软件鼠标键盘的控制,从而输入需要的人机交互信息,实现测试用例的自动执行;同时以不干扰被测系统为原则,直接采集被测系统输出到显示器中的视频数据,通过对图像数据的处理进行图像对比、图像查找和文字识别,根据测试用例预期输出自动判断用例的执行结果;该测试系统解决了嵌入式软件GUI自动化测试的难题,提高了测试效率。

嵌入式;图形用户界面;自动化测试;测试脚本

0 引言

目前,普通GUI测试框架常常需要与被测软件运行在同一系统,对资源消耗巨大,不适合嵌入式软件轻型、占用资源少、高性能、高可靠性、便于移植等特点。如何针对嵌入式软件GUI,开展自动化测试,在自动化测试领域中是一项技术难点。为此,本文设计了一种新型嵌入式GUI自动化测试系统,不涉及对代码的修改,同时完成对嵌入式运行过程的实时跟踪,能够实现无侵入式的进行嵌入式GUI自动化测试,避免了现存嵌入式GUI自动化测试技术的瓶颈。

本测试系统综合应用了GUI信息捕获、图像识别、人机交互以及测试自动控制等技术。1)GUI信息捕获、图像识别、人机交互解决的问题往往不是软件测试,而是其他领域,本系统创造性的将其应用到嵌入式软件GUI自动化仿真测试技术;2)人机交互上,设计了一种鼠标键盘通用模拟设备,同时模拟USB鼠标、USB键盘和PS/2鼠标、PS/2键盘;3)将图像识别领域中的OCR、快速模板匹配算法封装成适用于GUI测试领域中的文字识别函数、图像对比函数、图像查找函数,用于测试结果判断,进行应用创新。本文从功能设计、硬件设计、软件架构设计、软件界面设计、业务流程设计等方面对提出的一种非侵入的GUI自动化测试系统进行描述。

1 功能设计

1.1 测试工程管理需求

测试工程管理功能包括:

1)测试工程的新建,测试工程提供相应的描述;

2)测试工程的保存,测试工程保存在MySQL数据库中;

3)测试工程的删除,将测试工程从MySQL数据库中删除,相关的其他内容也随之删除;

4)一个测试工程中可以包含多个被测设备,能够添加和删除设备;

5)测试工程管理的内容包括被测设备、测试脚本、调度脚本、以及测试结果。

1.2 图像信息管理需求

图像信息管理系统主要实现以一定周期的频率对视频采集系统提供的视频信息进行图像截取和存储管理,为图像信息识别提供数据源,同时保证测试过程的历史证据。其主要功能有:

1.2.1 图像信息采集

1)图像的主要来源是嵌入式软件视频采集系统,保存图像的格式可由用户选择,包括jpg和bmp,用户可以根据需要自行选择;

2)能够通过与嵌入式软件视频采集系统的接口直接将实时采集的图像信息添加到本系统;

3)能够通过与嵌入式软件视频采集系统的接口预览当前采集的图像;

4)从视频采集卡采集图像添加到本系统,并自动命名,名称由项目和时间标签信息构成;

5)从嵌入式软件视频采集系统接口采集并添加到本系统的图像可在添加过程中修改名称;

6)能够对视频采集实时显示进行控制,包括开始、停止;

7)对视频采集频率为20帧/秒采集频率的设置;

8)视频采集输入接口支持VGA和DVI视频的采集。

1.2.2 图像保存

1)将截取的图像保存到数据库中作为基准图像;

2)支持从本地文件夹导入图像;

3)从本地导入的图像自动以原始文件名命名;

4)添加到本系统的文件在本系统的命名必须唯一;

5)添加图像自动命名时出现文件名重复则自动提示修改文件名。

1.2.3 图像信息浏览

1)能够通过与数据库接口浏览所采集的历史图像;

2)能够浏览添加到本系统的所有图像;

3)浏览图像时以文件名称为列表;

4)浏览图像时能够生成图像信息预览;

5)浏览图像可在新视图中打开该图像进行详细浏览或修改。

1.2.4 图像删除

1)支持图像的删除;

2)能够对图像进行批量删除。

1.3 测试用例转换需求

本系统中测试用例以Python脚本形式表示。测试用例转换主要是把按体系文件或国军标要求编写的测试用例通过一定的规则转换成本系统能够识别的Python脚本。

1.3.1 测试脚本管理需求

1)能够新建和删除测试脚本;

2)能够对测试脚本重命名测试脚本;

3)能够支持对脚本的说明;

4)支持对脚本的复制,复制后的脚本以“复件”+“原名称”命名,脚本包含原内容;

5)支持测试脚本与调度脚本两种脚本,调度脚本将每个测试脚本视为一个对象,在调度脚本中run一个脚本,相应的脚本便运行。

1.3.2 脚本函数自动生成

1)对基准图像拖拉鼠标选中需要识别的区域,获取区域位置,选择的生成函数,会自动生成图像对比函数,图像查找函数以及OCR函数;

2)在实时采集的图像中,自动获取鼠标的位置的像素坐标,点击鼠标,自动生成鼠标移动与点击的函数。

1.3.3 文本编辑

1)文本编辑,支持复制、粘贴、剪切、删除、撤销功能,行定位脚本编辑环境可显式的显示出脚本行号;支持添加/删除断点;

2)支持设置关键字亮显;

3)支持单行和多行注释以及自动缩进;

4)在脚本编辑界面,每当按下“.”键,自动出现关键字索引列表,给出相应的关键字函数,函数后面有相应的注释,根据注释在函数中输入测试数据参数,是利用脚本关键字的自动输入;

5)支持脚本的调度编辑。

1.4 测试脚本执行需求

解析脚本的关键字和参数,将解析的关键和参数传递给脚本的驱动。协同管理视频信息采集系统、图像信息管理系统、图像信息特征识别系统和键盘鼠标模拟系统的工作,将控制命令下发到各个系统中。人机交互命令发送到键盘鼠标模拟系统中,由键盘鼠标模拟系统对被测件进行人机交互输入。功能包括:执行某个脚本;等待指定的时间;保存结果到数据库;支持添加断点与删除断点以及调试功能。

其中,键盘和鼠标指令执行由键盘鼠标模拟模块提供支持,图像比对、字符识别等相关指令由图像信息特征识别模块提供支持。

1.5 键盘鼠标模拟需求

键盘和鼠标模拟系统主要模拟键盘和鼠标与计算机系统交互的信息,将GUI测试执行管理系统发出的人机交互指令转换成被测软件的鼠标键盘控制信号输出,控制被测件的鼠标、键盘人机交互操作,包括USB和PS2两种形式。具体功能包括:

1)鼠标控制:在执行测试用例时,根据人机交互需要,GUI 测试执行管理系统将鼠标控制命令下发到键盘鼠标模拟系统,由模拟系统功能对该命令进行解析实现对被测软件鼠标的控制。

(1)鼠标左右键按下或弹起;

(2)鼠标移动到某一像素坐标;

(3)鼠标相对移动,先横向移动,在纵向移动;

(4)鼠标左右键点击。

2)键盘控制:在执行测试用例时,根据人机交互需要,GUI 测试执行管理系统将需要向被测件输入的信息内容和位置信息发送到键盘鼠标模拟系统,由模拟系统解析后输入到被测件界面的相应位置。

1.6 图像信息特征识别需求

图像信息特征识别系统主要实现对嵌入式软件人机交互界面上的颜色、字符等信息进行识别的功能。主要功能有:

1)图像比对:能够实时地比较视频中的各帧图像,确定出变化的图像,并将其进行标记存储,用户可以设置图像变化的阈值。图像比对的实时性应与视频采集的实时性相同。

2)图像查找:能够在图像中查找目标图像,包括目标图像的模糊查找,即忽略目标图像大小,仅通过纹理信息查找。目标图像必须为矩形区域,支持在指定区域查找目标区域。支持多个目标图像的同时搜索,即除了给出目标图像,还需要描述目标图像之间的位置关系再进行查找。

3)文字识别:能够对嵌入式软件人机交互界面上显示的信息包括数字字符等进行识别将识别出的结果保存到本地。

(1)支持图像数字识别功能;

(2)支持图像英文识别功能;

(3)支持BMP图片格式;

(4)支持用户指定区域的文字识别。

1.7 测试结果信息管理

测试结果比对和判断主要是根据图像信息识别系统的输出结果,将该输出结果进行记录,同时与测试用例的预期输出进行比较,判断执行结果是否通过。需求包含如下:

1)脚本执行时每个步骤的运行状态信息;

2)OCR文字识别后的对比信息;

3)图像比较的信息,包括图像对比、图像查找信息等;

4)一个测试脚本的测试结果以“脚本名称”+“时间”方式命名;

5)测试结果信息支持重命名和删除操作。

脚本执行时每个步骤的运行状态信息在脚本执行时实时显示,OCR文字对比,图像对比以及其他信息通过测试结果管理进行显示。

2 硬件设计

2.1 平台构成设计

硬件由以下几部分组成:

1)GUI自动化测试计算机 1台,使用windowsXP系统,部署MySQL数据库和一体化的嵌入式软件GUI自动化测试平台软件。

2)视频分屏器1台,将被测件显示的视频进行分频。

3)视频采集卡1套,支持VGA和DVI两种制式视频格式,VGA或DVI端连接分屏器,USB端连接测试主机,驱动装在主机上。

4)键盘鼠标模拟设备1套,装在GUI自动化测试计算机PCI插槽内,连接被测件,包含USB和PS2两种制式,一路USB键盘模拟和一路USB鼠标模拟;一路PS2键盘模拟和一路PS2鼠标模拟。根据被测件选用一种制式即可。

5)设备外壳,将各硬件组成一体化的设备平台。

2.2 外部接口设计

嵌入式软件GUI自动化仿真测试原理样机的外部接口主要是和被测件的接口,传输的信息内容包括测试数据、鼠标控制信息和键盘控制信息,如图1所示。

1)视频信息采集接口,通过视频分配,采用VGA接口形式与分频器相连,通过USB接口与嵌入式软件GUI自动化仿真测试原理样机相连。该接口将被测系统的视频信息截取图像到仿真测试原理样机中;

2)鼠标控制接口,包括PS2、USB两种,能够模拟鼠标信号激励,模拟鼠标左右键点击、鼠标移动到某位置,鼠标相对移动操作。

3)键盘控制接口,包括USB和PS2两种接口。模拟键盘信号激励,能够发送大小写字母信号、数字信号、Shift/Alt/Ctrl等功能按键。

3 软件设计

软件架构设计如图2所示。

3.1 业务层

业务层主要面向测试任务,包括测试用例转换、测试驱动执行与过程管理、测试结果收集分析等,其调用了以下各层模块的功能。

3.1.1 人机交互界面测试执行管理系统

主要实现人机交互界面测试用例的转换、视频输出的判断、测试用例执行控制以及测试执行结果的对比判断。采用Python语言进行指令解析实现视频输出信息的判断和测试用例的执行控制。包括以下7个模块:

1)测试环境配置:允许测试人员对测试环境进行配置,主要是对嵌入式软件设备的输入输出设备进行配置和选择;

2)测试用例建模:建立GUI测试用例模型,包括测试用例数据模型和GUI测试用例行为模型。根据文档化的嵌入式软件GUI测试用例,转换为模型化的测试用例;

3)测试用例转换:根据测试用例模型,建立测试用例模型元素与Python脚本元素的对应关系,将测试用例脚本化,形成Python测试脚本;

4)测试管理执行:根据嵌入式软件GUI测试需求,建立测试用例执行序列,通过解析Python测试脚本,自动驱动测试用例执行;

5)测试数据收集:在GUI测试用例脚本执行中,根据脚本中测试数据收集要求,自动进行测试数据收集,并存入数据库;

6)测试日志记录:在GUI测试用例脚本执行中,自动记录测试中关键流程中的执行信息,为用户了解测试执行情况。

7)测试结果判定:将测试用例执行中收集的测试用例步骤中的实际输出和预期输出进行比较,通过执行Python脚本中的判断语句判断结果正确性。

3.1.2 图像信息管理系统

主要实现对视频采集的视频信息进行图像抓取和存取管理,为图像信息识别提供数据源,同时保证测试过程的历史数据。

3.2 核心层

核心层主要为测试任务提供核心功能。为测试执行提供功能支持。主要包括视频信息的采集、图像信息的识别(图像对比、图像查找、OCR识别等)以及键盘鼠标的模拟功能。

3.3 数据层

数据层主要提供数据支持,使用MySQL数据库,提供操作接口供上层使用。数据内容是所有要存储数据库的内容,包括GUI界面对象数据、测试用例数据、测试结果数据、测试日志数据、鼠标事件映射数据和键盘按键事件映射数据。

3.4 物理通信层

通信层是上层模块对被测件信息之间的驱动,驱动硬件完成对被测件的操作。作为硬件提供支持,由上层模块驱动执行。

本系统使用MFC进行实现,使用了MySQL 5.0数据库,需要支持的底层环境包括:鼠标键盘模拟系统驱动;图像采集系统驱动;openCV开源开发库;boost1.3开源开发库;python-2.5.1.msi;Google支持的OCR图文识别的开源项目Tesseract_OCR。

4 业务流程设计

嵌入式软件GUI自动化测试平台软件工作过程如图3所示。

图3 业务流程设计图

1)测试项目工程管理和测试环境配置,测试人员根据被测件相关文档,在测试主控机上新建工程,并配置被测件鼠标键盘类型和外围交联设备类型,保存到MySQL数据库中。

2)程序执行和视频信息采集,执行被测系统,截取被测系统的图像,作为生成测试用例的基准图像。

3)测试用例转换和建模,将基准图像进行建模,获取像素坐标值,用于自动生成图像对比、图像查找、OCR以及鼠标移动的函数。

4)脚本生成与编辑,通过利用自动生成的函数以及对脚本编辑,将测试用例转换成可执行的脚本文件,脚本包括测试脚本和调度脚本。

测试脚本包括基于图像建模的脚本函数自动生成和文本编辑两种方式。调度脚本主要有测试脚本运行函数和Python语言自身的关键字组成,采用文本编辑方式进行编辑。

5)脚本执行,通过对脚本的函数进行解析,自动执行测试过程。脚本中函数会调用到视频采集子系统、图像信息子系统、图像特征识别子系统和鼠标键盘模拟子系统。可以编写调度脚本进行运行,通过运行调度脚本运行测试脚本,也可以直接运行单个测试脚本。

本测试系统的脚本解析会调用Python脚本解析器,Python脚本解析器会解析Python语言的关键字和变量,当遇到Python语言之外的关键字后,Python解析器会产生中断,并将执行权交给本测试系统脚本解析器,本测试系统脚本解析器会查找使用VC开发的驱动函数关键字,当查找到后,发送驱动函数的事件,驱动函数执行,执行完毕后,本测试系统脚本解析器将执行权再交给Python脚本解析器,同时将驱动函数返回信息传递给Python脚本解析器,Python脚本解析器继续执行。这样,本测试系统的脚本解析器与Python脚本解析器融为一体,一方面实现了将Python语言编辑于执行界面嵌入到测试系统界面中;另一方面也实现了Python语言功能的扩展。

6)数据收集及存储,在测试执行过程中,会根据关键函数执行结果进行保存数据,对测试的数据保存在保存到MySQL数据库中。

7)测式数据服务器根据所存储的测试数据,进行结果分析。

5 实验结果与分析

根据本设计研发的GUI自动仿真测试系统软件界面如图4所示。

图4 系统界面图

1)测试准备:利用“测试工程管理”和“视频信息采集”功能,按照测试环境及测试用例要求,准备测试环境及获取基准图像和图像管理,为测试脚本编写准备。

2)测试脚本编写:根据获取的基准图像以及测试用例要求,完成测试用例到测试脚本转换。脚本中指令主要是对鼠标和键盘的操作,包括鼠标移动、鼠标左键点击、鼠标右键点击、键盘输入字符、键盘输入组合按钮等指令。

3)脚本执行与分析。运行测试脚本,对测试结果察看。结果的判断主要在脚本中利用条件语句,讲图像处理结果与预期结果比较,输出是否执行成功。

由于测试指令是自己定义开发,需要有相应的容错性。本系统采用如下措施,提高了系统容错性。(1)鼠标键盘模拟功能、视频采集功能失败以及注册组件模块功能失败后软件的其他功能能正常使用;(2)在错误指令、错误参数、图像采集失败、误关闭情况下给出提示;(3)测试脚本运行中键盘鼠标相关指令、图像获取指令以及信息识别指令时遇到故障时系统能够识别并给出提示信息。(4)输入有效性检查:对工程名称检查,不允许名称重复;对基准图像名称检查,不允许名称重复;对脚本指令和参数检查,不能执行不支持的指令。

6 结束语

本文设计并实现了一种非侵入的GUI自动化测试系统。该测试系统有以下优点:

1)该测试平台面向嵌入式,采用人机交互设备模拟真实指令,图像采集与信息识别模拟人的判别行为,不会干扰被测系统的运行。

2)该测试平台采用非侵入式自动测试机制,测试平台软件不需要与被测软件运行在同一系统,解决了通用GUI测试工具无法针对嵌入式GUI软件测试的困难。

3)通用GUI工具常常调用API,只支持被测件单一的运行系统,本测试平台应用不受被测件运行环境限制,与被测件操作系统无关,只要是支持鼠标和键盘的输入类型(触摸屏除外)即可。

4)该测试平台采用Python脚本形式编辑用例。Python语言嵌入平台软件中,与平台软件有机结合,融为一体。支持基于图像建模的脚本函数自动生成和文本编辑两种方式生产测试脚本。提高了脚本编写的效率。脚本编辑方式,使脚本灵活多样,能够实现复杂的测试用例。

5)该测试平台利用调度脚本方式支持测试脚本的调度,可以支持测试用例的周期执行、条件执行、顺序执行以及脚本模块化、脚本共享等复杂测试方式。

6)该测试平台可以仿真外围交联环境,集成通讯子系统,包括网络通讯和串口通讯,实现被测系统与外围设备的交互。

[1] Memon A M. GUI testing: pitfalls and process[J]. Computer, 2002, 35(8):87-88.

[2] 吴立金, 唐龙利, 韩新宇, 等. 嵌入式软件GUI自动化测试平台研究[J]. 计算机测量与控制, 2015(04):1094-1097.

[3] 谭 苗. GUI 可用性评价与自动化测试框架研究[D].重庆:重庆大学,2006.

[4] 游泽青,面向GUI软件的自动化测试框架的研究与实现[D].重庆:西南大学,2012.

Design of Non-Intrusive GUI Automated Test System

Wu Lijin,Han XinYu,Zhang Kai,Tang Longli

(China Institute of Marine Technology & Economy,Beijing 100081,China)

To solve the problem of the automatic testing of embedded GUI software,this paper proposes a non-intrusive GUI automatic test system ,which can convert the execution steps of test cases into Python test script. The human-computer interaction is transformed into the control instruction of mouse and keyboard simulation equipment to enter the required human-computer information, so that the test case execution is carried out. At the same time, in the principle of not interfering with the tested system,the output video data of the tested system is collected directly, and the result of the test case is determined automatically according to the expected output through the image data processing algorithm such as image comparison, image search and text recognition.The test system can improve the test efficiency.

embedded software;GUI;automatic test;test script

2017-06-13;

2017-07-23。

吴立金(1987-),男,山东人,工程师,主要从事软件可靠性与软件测试方向的研究。

1671-4598(2017)12-0049-05

10.16526/j.cnki.11-4762/tp.2017.12.013

TP311

A

猜你喜欢
嵌入式软件测试用例脚本
酒驾
基于相似性的CITCP强化学习奖励策略①
测试用例自动生成技术综述
嵌入式软件测试数据传输稳定性检测方式分析
基于安全性分析的嵌入式软件测试
自动推送与网站匹配的脚本
全景相机遥控器嵌入式软件V1.0 相关操作分析
基于VPRS方法的汽车嵌入式软件品质评估
测试工时受限的测试策略研究
愚公移山