首页/文章/ 详情

使用QtTesting建立可视化软件的自动化测试系统

6月前浏览5582

本文摘要:(由ai生成)

QtTesting是一个开源测试框架,适用于使用QT框架的软件,特别是可视化软件的自动化测试。它可以捕捉和播放UI事件,测试GUI以及通过GUI属性测试其他功能,如计算结果的精确性。QtTesting包含录制与运行两大模块,通过与QT框架中的元器件建立连接实现互动。它提供了易于使用的界面和核心功能,支持开发者根据产品控件增加新的测试模块。WELSIM作为通用仿真软件,成功应用QtTesting并开源了测试案例,展示了QtTesting在自动化测试中的有效性。


自动化测试是现代大型软件的必要组成部分。通过使用大量的无人值守的自动化测试算例,达到维护大型软件产品的稳定性的目的。对于可视化软件,建立自动化测试系统难度大,相关资料少,笔者曾经写过关于工程仿真CAE软件的自动化测试文章,参见《自动化测试大型通用工程仿真CAE软件》《快速创建WELSIM的回归测试算例》,《大型工程仿真CAE软件的自动化回归测试》。本文从软件开发角度,讨论如何使用QtTesting快速实现可视化软件的自动化测试系统。

QtTesting是一款开源测试框架,协议友好,类似BSD3可以用于商业产品。实际应用于VTK, ParaView, Slider3D,WELSIM等大型可视化软件中。是被实践证明的有效且好用的测试框架。只要产品是使用QT作为可视化框架的软件,都可以使用QtTesting作为测试系统的基础组件。QtTesting的源代码可以从

虽然QtTesting官方定位其用于UI的测试,但在实际使用中,QtTesting不仅测试GUI,也可以通过GUI提供的属性,来测试产品的其他任何功能,如计算结果的精确性等。WELSIM中的大量数值结果都可以通过QtTesting的功能来验证。

QtTesting框架结构

QtTesting的测试模块含有录制与运行两大模块。两个模块都是通过与QT框架中的元器件(Widget)建立连接,来实现与可视化框架的互动。录制功能是通过捕捉元器件的事件或信号,运行是通过遍历的方式获取当前元器件的对象,实现对控件的控制。

录制测试

录制模块为用户提供了快速建立测试文件的方式,本质上是一种鼠标,键盘与窗口控件的宏命令。当用户在界面上进行某种低级 Qt 事件如“鼠标移动”,“按下按钮”,“释放按钮”等,所产生的信号将会被捕捉到,并转换为可以序列化和播放的高级事件,例如“按钮激活”。QtTesting中的pqWidgetEventTranslator类及其派生类从中承担的重要的工作。pqWidgetEventTranslator 的派生类会需要实现translateEvent()方法,用于处理Qt的事件,同时转换信号为由两个字符串组成的高级事件:一个命令和一个命令参数(参数可能为空)。最后,通过发射 recordEvent() 信号一次或多次将高级事件传递给其输出容器,并保存到XML文件上,完成一条宏命令的录制。

在程序运行时,pqEventTranslator 会接收到整个应用程序在运行时发生的每个 Qt 事件,并将 Qt 事件依次传递给其每个 pqWidgetEventTranslator 实例。由 pqEventTranslator 发射的高级事件可以被对应的观察者捕获。观察者可以将高级事件序列化打印输出,或者保存。目前,QtTesting包含两个观察者,pqEventObserverStdout 和 pqEventObserverXML,它们分别将高级事件序列化到标准屏幕输出和 XML 文件中。开发人员还可以创建自己的观察者来实现自定义功能,例如将事件序列化到日志文件、Python 脚本等。

录制模块也可以记录检验事件,如验证某个属性。在检查时,一个覆盖层会在鼠标悬停的小部件上绘制。如果覆盖层为绿色,则表示可以检查该小部件,如果为红色,则表示不可以。当点击小部件进行检查时,将记录一个检查事件,并输出一个相关的QString 值。此功能也是WELSIM自动化测试中验证数值计算准确性的重要部分。

运行测试

在运行自动化测试时,其本质就是播放录制好的宏命令。在QtTesting框架中,pqEventSource 提供了一个抽象接口,用于提供“高级事件”流的对象。pqXMLEventSource 继承pqEventSource ,并实现具体功能,它能够读取由 pqEventObserverXML 生成的 XML 文件。

pqEventPlayer 维护了一组 pqWidgetEventPlayer 对象,负责将高级事件转换为低级事件。pqEventDispatcher 从 pqEventSource 获取事件,并将其传递给 pqEventPlayer 的一个实例进行运行。运行时,每个高级事件都被编码为三个字符串(地址、命令和参数),这些字符串被传递给 pqEventPlayer::playEvent()。pqEventPlayer 解码地址字符串,并使用它查找相应的小部件。然后,高级事件和小部件依次传递给每个 pqWidgetEventPlayer,直到其中一个发出事件已被处理的信号。

创建新的录制器和运行器

一个新的录制器至少必须重新实现 translateEvent(QObject object, QEvent event, int eventType, bool& error) 方法。首先,它必须检查对象是否是正确的类。然后,它应该处理 pqEventTypes::ACTION_EVENT 情况,保存命令和相关参数。并且有时它还应该能够处理 pqEventTypes::CHECK_EVENT的情况。

类似的,一个新的运行器至少应重新实现 playEvent(QObject* object, const QString& command, const QString& arguments, int eventType, bool& error) 方法。首先,它应该处理 pqEventTypes::ACTION_EVENT,将读取的命令和参数转换为 Qt 指令,对于它能处理的事件返回 true。在检查命令时,它应该能够处理 pqEventTypes::CHECK_EVENT事件类型,使用提供的命令和参数检查 Qt 对象的当前值,在值不同的情况下将错误变量定位为 false,但对于所有处理的检查事件,甚至是失败的事件,都应返回 true。

有时录制器和运行器的类是一一对应的,开发者可以查看 pqLineEditEventTranslator 和 pqLineEditEventPlayer 以获取简单示例,以及 pqAbstractItemViewEventTranslatorBase/pqAbstractItemViewEventPlayerBase 以获取高级示例。

运行基于QtTesting的测试

QtTesting的源码包易于编译,提供的CMake程序,可以快速地将其编译成静态库或者动态库。由于测试模块在产品中调用的位置较少,编译成静态库来使用是个不错的选择。

QtTesting在VTK、ParaView等软件上已经成功的应用,但是并没有公开测试案例。幸运的是,通用工程仿真软件WELSIM不仅使用QtTesting作为可视化测试框架,同时开源了全部测试算例,用户可以下载WELSIM和测试算例,体验基于QtTesting的自动化测试。

WELSIM的自动化测试用户界面基本沿用了QtTesting的界面。同时增加了一些实用功能,如:

1. 支持读取*.wstb文件,此文件包含一组*.xml文件,实现更简单的一次性读取多个测试案例。

2. 保存测试失败的算例保存至*.wstb文件。用户无需手动选择测试案例保存。

3. 增加右键弹出菜单,用于选择或取消选择测试案例。

开发者也可以根据需要,增加其他的功能。

总结

QtTesting是一款免费的,用于Qt可视化框架的测试系统。不仅提供了核心的QT事件与信号捕捉功能,还提供了易于使用的可视化界面,对开发者和最终用户友好。QtTesting可以帮助软件开发者快速建立测试系统。自带控件捕捉与控制功能可以满足大多数产品的测试需求,同时易于拓展,开发者可以根据自己产品的控件增加新的测试模块。

我们将QtTesting实际应用于通用仿真软件WELSIM的自动化测试,取得了很好的效果。本文所讨论的内容不仅可以应用于CAE仿真软件,也可以用于任何使用QT框架建立的可视化软件。

WelSim与作者不隶属于Qt, QtTesting。和Qt, QtTesting开发团队与机构没有直接关系。这里引用Qt, QtTesting仅用作技术博客文章与软件使用的参考。


来源:WELSIM

附件

免费链接.txt
ACT通用WELSIMpythonUM控制ParaView
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-05-27
最近编辑:6月前
WELSIM
一枚搞仿真的老员工
获赞 24粉丝 63文章 253课程 0
点赞
收藏
作者推荐

WELSIM发布2024R2版本,支持更多的开源求解器

通用工程仿真分析软件WELSIM发布了最新的2024R2版本(内部版本号2.9)。相对于上一个版本,2024R2版本含有许多新的功能与增强,能够更好地支持各种类型的工程仿真CAE分析。新增支持开源求解器CalculiX新版本增加了CalculiX求解器的前处理模块,用户可以快速的生成CalculiX计算所需的输入文件,也可以直接通过WELSIM调用CalculiX进行求解。目前已经支持了60个命令,占CalculiX全部命令的42%,且全部为核心命令,能满足常用的分析。 新增支持开源求解器Elmer新版本增加了Elmer FEM的前处理支持,用户可以快速的生成Elmer FEM计算所需的输入文件。导出成功后,会生成名为elmer_welsim.sif的求解器输入文件,和由四个文件组成的网格文件,分别名为mesh.header, mesh.nodes, mesh.elements, mesh.boundary。用户也可以直接通过WELSIM调用Elmer FEM进行计算。目前已经支持的Elmer公式有:Coil Solver, Fluidic Force, Free Surface Reduced, Heat Equation, MagnetoDynamics, Mesh Update, Navier-Stokes, Poisson BEM, Save Line, Save Scalars, Static Electrical Solver, Static Current Solver, Stress Analysis, Stream Solver等。引入了新的Additional Solver节点,用于支持用户添加无限多个Elmer求解器设置。其他增强与升级 此外,新版本还有新的功能与提升。如增加求解器输出窗口的查找功能,支持表格窗口的导入导出csv格式数据文件。新增特殊气体常数材料属性。免费的材料编辑软件MatEditor增加了对CalculiX和Elmer格式的材料数据导出功能。自动化测试系统变得更加易用且丰富,支持了读取和保存测试组文件*.wstb,支持删除选中的测试案例。支持系统级别的操作,如删除本地文件,查找确认指定文件。同时增加了200多个测试案例。WelSim与作者不隶属于CalculiX、Elmer FEM。和CalculiX、Elmer FEM的开发团队与机构没有直接关系。这里的引用仅用作技术博客文章与软件使用的参考。来源:WELSIM

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈