Tuesday, April 23, 2024

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

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

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

虽然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仅用作技术博客文章与软件使用的参考。

Tuesday, April 9, 2024

Generate Elmer FEM solver scripts using WELSIM

 Elmer FEM is an excellent open-source finite element software for general-purpose multi-physics simulations. It is being developed through collaboration between CSC, Finnish universities, research laboratories, and the industry. The Elmer solver is based on the GPL open-source license and is capable of computing various physical models including fluid dynamics, structural mechanics, electromagnetics, heat transfer, and acoustics. Elmer FEM can run on both Windows and Linux operating systems; has been widely used in academic and industrial settings. The latest version is 9.0, and the official release includes all the source code along with extensive examples and documentation. Installation packages are also provided for easy setup.

Elmer FEM solver files have a relatively independent format that is concise and easy to learn. These files typically consist of a single file with the extension *.sif. Mesh data is composed of four additional mesh files.

To better support the open-source and simulation community, WELSIM recently added pre-processing abilities for Elmer FEM, allowing users to quickly generate input scripts required for Elmer FEM computation. After defining the model, users can select the option to output Elmer FEM files from the Tools menu, resulting in solver files in the specified directory.

Upon successful export, a solver input script named elmer_welsim.sif is generated along with four mesh files named mesh.header, mesh.nodes, mesh.elements, and mesh.boundary.

Additionally, WELSIM can directly invoke Elmer FEM for computation. After downloading Elmer FEM solver files, users can configure the path to the solver directory through Preferences -> Solver -> Elmer FEM executable file. This enables direct invocation of Elmer FEM to solve the model and obtain result files.

Since Elmer FEM is not the default solver for WELSIM, when performing the connected computing, the solver property of the Study Settings object needs to be set to Elmer FEM. Considering the various equation types within Elmer FEM, additional Elmer Equation properties are provided to specify specific computational formulas. Currently, Elmer Equation options support common formulas such as 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, etc.

Elmer FEM supports multiple different types of solvers within a single analysis. To use this feature, a new Additional Solver object is introduced, allowing users to add an unlimited number of solver settings. The properties of the Additional Solver node are similar to the solver settings in Study Settings.

MatEditor outputs Elmer scripts

In addition to WELSIM, the standalone material editing software MatEditor supports the export of Elmer FEM material data. The generated material data can be directly used in Elmer solver input files.

Conclusion

This article introduces the generation of Elmer FEM solver scripts using WELSIM and how to set up combined simulations. Thanks to its excellent GUI, users can quickly generate high-quality Elmer FEM files.

Currently, WELSIM only supports Tet4, Tet10, Tri3, and Tri6 elements. WELSIM does not support multi-domain mesh with shared boundaries.

Elmer FEM is distributed under the GPL open-source license, and the installer of WELSIM does not include the Elmer FEM solver. Users need to download and install the solver themselves. With simple configuration, WELSIM can be used for calling Elmer FEM to run the generated scripts.

The functionality of Elmer FEM input files has been developed in the 2024R2 beta version, and it will be continuously enhanced in subsequent versions. For support of other open-source solvers, references can be made to articles such as “Generating CalculiX Solver Files with WELSIM”, “Generating SU2 Solver Files with WELSIM”, “Using WELSIM to Invoke OpenRadioss for Explicit Dynamics Analysis”, “Generating FrontISTR Mesh and Input Files with WELSIM”, “Generating Initial Mesh Files for MFEM with WELSIM”, and “Generating Solver Files for Electromagnetic Calculation Software Palace with WELSIM”.

WELSIM and the author are not affiliated with Elmer FEM. Elmer FEM is used only as a nominative reference to the open-source project and software developed and released by these teams or institutions.

Saturday, April 6, 2024

使用WELSIM生成Elmer FEM求解器输入文件

Elmer FEM是一款优秀的通用开源多物理场有限元软件,它由CSC与芬兰大学、研究实验室和工业界合作开发。Elmer求解器基于GPL开源协议,能够计算包括流体动力学、结构力学、电磁学、热传递和声学等物理模型。可以在Windows和Linux操作系统上运行,Elmer FEM已经广泛用于学术与工业界。目前最新的版本是9.0,官方开源了全部代码,同时提供了大量实例与文档。同时提供了安装包,可以直接安装使用。

Elmer FEM求解器文件有着相对独立的格式,但格式简洁明了,易于学习。文件通常是单个文件,后缀名为*.sif。网格数据是由另外4个网格文件组成。

为了更好的支持开源求解器与仿真社区,WELSIM近期支持了Elmer FEM的前处理,用户可以快速的生成Elmer FEM计算所需的输入文件。用户在定义完模型后,在菜单栏的工具(Tools)选项中,选择输出Elmer FEM文件,即可在指定目录得到求解器文件。

导出成功后,会生成名为elmer_welsim.sif的求解器输入文件,和由四个文件组成的网格文件,分别名为mesh.header, mesh.nodes, mesh.elements, mesh.boundary。

同时,WELSIM可以直接调用Elmer FEM进行计算。当下载Elmer FEM求解器文件后,可以通过首选项 – 求解器 - Elmer FEM可执行文件,来配置求解器目录的路径。通过这种方式,可以直接调用Elmer FEM,求解模型,得到结果文件。

由于Elmer FEM不是默认的求解器,当进行联合求解时,需要将分析设置节点(Study Settings)的求解器属性设定为Elmer FEM。Elmer FEM的求解器类型较多,因此提供了额外的Elmer Equation属性,用于指定具体计算公式。目前Elmer Equation选项已经支持常用的公式,如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等。

Elmer FEM在一个分析中支持多个不同类型的求解器,为支持这个特点,引入了新的Additional Solver节点,用于支持用户添加无限多个求解器设置。Additional Solver节点属性和Study Settings中的求解器设置类似。

MatEditor输出Elmer FEM材料命令

除WELSIM外,独立的材料编辑软件MatEditor也支持Elmer FEM材料数据的导出。生成的材料数据可以直接用于Elmer求解器输入文件。

总结

本文介绍了使用WELSIM生成Elmer FEM计算文件,和联合求解的设置。得益于优异的GUI,用户可以快速生成高质量的Elmer FEM文件。

目前WELSIM只支持Tet4, Tet10, Tri3, Tri6单元。尚不支持含有共享边界的多区域网格。

Elmer FEM使用GPL开源协议,WELSIM的安装包中不含Elmer FEM求解器。用户需要自行下载安装求解器。通过简单配置,即可使用WELSIM与Elmer FEM联合求解工程问题。

Elmer FEM输入文件的功能已经在2024R2中开发版中,会在正式版和以后的版本中不断维护与增强。其他开源求解器的支持,可以参考《使用WELSIM生成CalculiX求解器文件》、《使用WELSIM生成SU2求解器文件》,《使用WELSIM调用OpenRadioss进行显示动力学分析》,《使用WelSim生成FrontISTR网格与输入文件》,《使用WELSIM生成MFEM初始网格文件》,《使用WELSIM生成电磁计算软件Palace的求解器文件》。

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