如何使用Python开发Qt应用的自动化测试!

图片

随着软件开发领域持续进步,Qt桌面应用的测试方法也在逐渐演变。传统上,Qt应用的测试主要依赖于测试工程师手工执行用例,这种方法虽然在某些方面有效,但对于大型应用而言,手工测试的耗时过长,且在可靠性和覆盖率方面往往难以满足高标准的需求。尤其是在当前持续集成/交付/部署(CI/CD)概念日益普及的背景下,自动化测试成为提高效率、确保软件质量的关键手段。

Python在自动化测试中的优势

在这种背景下,使用Python编写测试用例有显著的优势。Python以其简洁的语法、强大的功能和丰富的生态系统,在自动化测试领域中占据了重要地位。Python不仅易于学习和使用,还拥有广泛的库和框架,这些都使得编写、执行和维护自动化测试变得更加高效和灵活。此外,Python的跨平台特性也使其成为构建自动化测试脚本的理想选择。

在这篇文章中,我们将探索如何利用CukeTest的Python功能来开发和实现Qt应用的自动化测试。从测试用例的设计到脚本的录制、整合,再到最终的测试执行和报告生成,我们将详细介绍每一步骤,帮助你有效地实施Qt应用的自动化测试。

下方的动图展示了自动化测试项目的实际运行效果。

图片

运行项目

设计测试用例

在开发Qt应用的自动化测试前,合理的测试用例设计是关键。我们以CukeTest自带的样例应用 standardDialogs 为例,设计了一个简单而具有代表性的功能场景:操作文本对话框。这个测试案例旨在验证用户交互的基本流程和应用的响应能力。包括以下步骤:

  1. 打开文本对话框:验证对话框能否正常打开。

  2. 修改文本框内容:模拟用户输入,检查应用对用户操作的响应。

  3. 检查修改生效:确认应用界面正确显示修改后的文本。

接下来,我们将介绍如何在CukeTest中实现这些操作的自动化测试。

创建项目

首先,我们需要创建一个新的CukeTest项目。打开CukeTest,选择“新建项目”,并填写项目名称。这里,我们将项目命名为QtAutoTest。另外,还需要设置脚本语言和项目模板,这里我们选择Python作为脚本语言,项目模板选择Pytest。

图片

创建项目

录制Qt应用操作

一旦项目创建完成,下一步是创建自动化测试脚本。在CukeTest中,这可以通过“录制”功能来完成。

开始录制

  1. 设置录制参数:在CukeTest的主界面中,打开录制设置。选择录制模式为 Qt。然后,填写应用程序路径。例如,对于样例应用 _standardDialogs_,其默认路径为 C:\Program Files\LeanPro\CukeTest\bin\standarddialogs.exe。其余设置可以保持默认。

  2. 启动录制:准备就绪后,点击 开始录制 按钮。CukeTest将自动启动指定的Qt应用程序。这时,所有的用户操作,包括点击、输入等,都会被CukeTest记录下来。

    图片

  3. 执行测试操作:接下来,根据之前设计的测试用例执行以下操作:

    • 点击应用中的QInputDialog::getText() 按钮,以打开文本对话框。

    • 在文本框中输入“Hello World”,然后点击“OK”。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

添加检查点

在自动化测试中,检查点(Checkpoint)是验证应用状态是否符合预期的关键部分。在CukeTest中,您可以在录制过程中快捷添加检查点。具体操作步骤如下:

  1. 快速打开检查点对话框:在录制时,通过按住Alt键并右击目标控件,您可以快速打开检查点对话框。这个功能让你能够在进行操作的同时,即时地添加验证步骤,提高测试脚本的编写效率。

  2. 添加属性检查点:对于本测试用例,我们将添加一个属性检查点来验证QInputDialog::getText()按钮旁的Label控件中的文本。在“属性检查点”列表中,选择“text”属性(其值应为“Hello World”),这就是我们要验证的目标属性。

  3. 确认和插入检查点脚本:选择需要验证的属性后,点击确认按钮。相应的检查点脚本就会被插入到我们的录制脚本中。

如果需要添加图像检查点,只需切换到图像检查点标签页,并勾选需要检查的图片。这种检查点用于验证应用界面上特定图像的出现,非常适合那些以视觉元素为核心的测试场景。

图片

检查点对话框

完成录制

当我们完成所有预定的操作步骤后,关闭目标应用程序,并在CukeTest的工具栏中点击停止按钮。这样我们的自动化测试脚本就算录制完成了。

可以看到CukeTest已经自动生成了相应的测试脚本。这大大减轻了测试脚本编写的负担,特别是对于那些不熟悉编程的测试人员来说,自动生成的脚本无疑是一个巨大的便利。

下面是CukeTest生成的Python脚本示例:

import os
from leanproAuto import RunSettings, QtAutodef recording():RunSettings.set({"slowMo": 1000, "reportSteps": True})modelQt = QtAuto.loadModel(os.path.dirname(os.path.realpath(__file__)) + "/recording.tmodel")#启动Qt应用文件"standarddialogs"QtAuto.launchQtProcessAsync("C:\\Program Files\\LeanPro\\CukeTest\\bin\\standarddialogs.exe")#等待Qt应用"standarddialogs"modelQt.getApplication("standarddialogs").exists(10)#点击 "QInputDialog::getText()"modelQt.getButton("QInputDialog::getText()").click()#设置控件值为"Hello World"modelQt.getEdit("QLineEdit").set("Hello World")#点击 "OK"modelQt.getButton("OK").click()#检查属性modelQt.getLabel("Hello_World").checkProperty("text", "Hello World")#close Window "Standard_Dialogs"modelQt.getWindow("Standard_Dialogs").close()#关闭Qt应用"standarddialogs"modelQt.getApplication("standarddialogs").quit()if __name__ == "__main__":recording()

验证脚本

有了录制的脚本,下一步就是验证这些脚本的准确性和有效性。

  • 执行脚本:点击运行脚本按钮,CukeTest会开始执行测试脚本。你可以观察到脚本是如何一步一步模拟之前的操作。

  • 观察操作回放:在回放过程中,CukeTest会准确地模拟我们之前的所有操作,确保测试用例中的每一个功能都得到了验证。

  • 调整操作速度:你可能注意到,脚本执行的速度并不是非常快。这是因为CukeTest在录制时默认启用了“慢动作”模式。在生成的脚本中,slowMo选项被设置为1000,意味着操作间隔被延长至1秒。为了加快测试速度,你可以将slowMo的值调整为0,这样自动化测试就可以以最快的速度运行。

图片

回放脚本

整合自动化测试用例与代码

在自动化测试中,录制生成的操作脚本往往只构成了整个测试流程的一部分。为了在更广泛的测试项目中应用这些脚本,我们需要对它们进行整合和优化。CukeTest提供了对pytest及pytest-bdd框架的支持,使得这一过程更加顺畅。以下是以pytest框架为例,展示如何将录制的脚本整合成一个完整的自动化测试项目。

1. 创建应用模型

录制生成的代码通常需要依赖于录制时使用的模型文件。因此,在将录制生成的脚本整合进自动化测试项目时,管理和优化这些模型文件是必不可少的。

  • 创建新模型文件:为了适应本次测试的特定需求,我们可以创建一个新的模型文件。可以简单地使用录制时生成的模型,将其重命名为model1.tmodel,用于本次测试。

  • 整合到已有模型:如果项目中已经存在模型文件,您可以打开这个已有模型文件和新录制的模型文件。然后,通过将新录制的模型的根节点拖拽到已有的模型树中,实现模型的复制。接下来,右击复制生成的节点,选择“合并到兄弟节点”,完成模型的合并。这样,就可以在已有模型中使用新录制时操作到的控件对象。

此外,您也可以在录制的时候选择“录制到已有模型”,这会直接将新的控件对象保存到现有模型中,进一步简化整合过程。

图片

模型文件

2. 配置测试环境

接下来,创建conftest.py文件。在Pytest中,这个文件扮演着配置角色,它可以用来定义全局的fixture,以及一些自定义的设置和插件。在做界面自动化测试时,我们通常将被测应用的启动和关闭,以及测试环境的初始化放在这里。

在这个项目中,conftest.py文件的内容如下:

from leanproAuto import QtAuto, Util
import pytest# 定义被测应用的路径
app_path = "C:\\Program Files\\LeanPro\\CukeTest\\bin\\standarddialogs.exe"
# 加载模型文件
modelQt = QtAuto.loadModel("./model1.tmodel")
# 初始化一个空的上下文字典
context = {}# 在所有测试之前运行的操作
def pytest_sessionstart(session):# 启动Qt应用进程,并保存进程IDcontext["pid"] = QtAuto.launchQtProcessAsync(app_path)# 等待Qt应用"standarddialogs"出现,设置超时为10秒modelQt.getApplication("standarddialogs").exists(10)# 在所有测试之后运行的操作
def pytest_sessionfinish(session):# 结束之前启动的进程Util.stopProcess(context["pid"])

这段代码主要完成以下几个任务:

  • 应用路径:定义了被测试Qt应用的路径。

  • 模型加载:加载了之前提到的模型文件,这对于界面自动化测试非常重要。

  • 测试会话开始和结束:定义了在所有测试开始之前和结束之后执行的操作。这包括启动和关闭被测应用,确保测试环境的正确初始化和清理。

通过以上配置,我们的测试环境将为执行自动化测试脚本做好充分准备。

3. 编写用例代码

在自动化测试项目中,编写和组织测试用例代码是实现测试自动化的核心步骤。接下来,我们将介绍如何将CukeTest中录制的脚本代码转换为符合Pytest格式的测试用例代码。这个过程主要涉及将录制的步骤整理和粘贴到Pytest的测试文件中,并确保遵循Pytest的命名和结构规范。

  • 测试文件命名:首先,确保你的测试文件名以“test_”为前缀,这是Pytest识别测试文件的标准命名规则。例如,可以命名为test_functionality.py

  • 创建测试类和方法:在项目模板中,通常会有一个test_class.py文件,你可以直接在这个文件中添加你的测试用例。测试方法也需要遵循Pytest的命名规范,即以test_为前缀。

  • 粘贴录制步骤:将CukeTest中录制的脚本步骤粘贴到对应的测试方法中。如果录制的操作很长,建议根据测试步骤将脚本分解,以保持代码的可读性和维护性。

下面是修改后的test_class.py文件:

import os
from leanproAuto import RunSettings, QtAuto# 设置运行参数,包括慢动作和步骤报告
RunSettings.set({"slowMo": 1000, "reportSteps": True})
# 加载模型文件
modelQt = QtAuto.loadModel("./model1.tmodel")def test_input_text():# 点击 "QInputDialog::getText()"modelQt.getButton("QInputDialog::getText()").click()# 设置控件值为"Hello World"modelQt.getEdit("QLineEdit").set("Hello World")# 点击 "OK"modelQt.getButton("OK").click()# 检查属性modelQt.getLabel("Hello_World").checkProperty("text", "Hello World")

通过这样的方式,我们可以将CukeTest录制的脚本无缝转换为Pytest的测试用例,并在Pytest环境下执行自动化测试。

运行项目并查看测试报告

在CukeTest中,你可以通过点击项目界面上的 运行项目 按钮来执行测试用例。这个过程会自动运行所有按Pytest规范编写的测试脚本。

图片

运行项目

执行完成后,CukeTest会生成一个详细的测试报告。这份报告会包括测试摘要、详细的测试结果等信息。测试报告会展示每个测试用例的执行状态,例如“通过”或“失败”,并提供足够的信息来帮助你理解测试结果。

通过修改脚本,你还可以在测试报告中插入自定义的截图,以提供更多的上下文信息和视觉证据,增强报告的信息丰富度。

图片

测试报告

总结

在本文中,我们介绍了如何使用CukeTest配合Python开发Qt应用的自动化测试。CukeTest不仅提供了一套强大的工具来录制和回放Qt应用的操作,还支持通过Python脚本来增强和定制测试流程,从而提高测试的灵活性和有效性。

行为驱动开发(BDD)支持

值得一提的是,CukeTest不限于支持传统的自动化测试脚本,还内置了对Python中诸如pytest-bdd这样的BDD框架的支持。这种方法使得测试用例的编写更接近于自然语言,极大地提高了测试用例的可读性和可维护性,使非技术人员也能轻松理解。

第三方编辑器支持

此外,CukeTest的自动化测试项目也支持在第三方编辑器中开发,例如Visual Studio Code(VSCode)。这意味着你可以在熟悉的开发环境中编写和管理测试脚本,利用这些编辑器强大的功能来提高开发效率。

跨平台支持

CukeTest还提供了对Linux环境的支持,使得跨平台的Python录制和开发Qt自动化测试成为现实。无论是在Windows还是Linux环境下,CukeTest都能提供一致的用户体验和强大的功能,从而确保测试过程的无缝对接。

结语

通过本文的介绍,我们展示了一种高效且可靠的方法来实现Qt应用的自动化测试。自动化测试不仅能有效减轻测试工程师的工作负担,还能显著提高整个软件开发流程的效率和质量保证,是现代软件开发不可或缺的重要组成部分。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/151979.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员导航站

探路者 hello.alluniverse.vip 开发者导航 - Pro Developer网站导航 探路者是一款极简导航工具,致力于收录的每个站点都有其独特的作用。同时支持自定义导航,让用户快速实现个性化的导航站点。 特性概述 免费ChatGPT 装机必备 开发工具 Git精选项目 …

LabVIEW编程开发NI-USRP

LabVIEW编程开发NI-USRP 可编程性是SDR的关键特性,它使人们能够将无线电外围设备转换为先进的无线系统。USRP是市场上最开放、最通用的SDR,可帮助工程师在主机和FPGA上使用各种软件开发工具构建系统。 有多种选项可用于对基于SDR的系统的主机进行编程。…

9 HDFS架构剖析

问题 100台服务器,存储空间单个200GB 20T 5T文件如何存储? 128MB一块 128MB81GB 1288*10241TB 5T数据分成的128MB的块数 8192 * 5 客户端(client)代表用户通过与namenode和datanode交互来访问整个文件系统。 HDFS集群有两类节点: 一个na…

Python武器库开发-flask篇之error404(二十七)

flask篇之error404(二十七) 首先&#xff0c;我们先进入模板的界面创建一个404的html页面 cd templates vim 404.html404.html的内容如下&#xff1a; <h1>error!!!</h1>在 Flask 应用程序中&#xff0c;当用户访问一个不存在的页面的时候&#xff0c;会出现 4…

MAC上修改mysql的密码(每一步都图文解释哦)

当你想要连接本机数据库时&#xff0c;是不是有可能突然忘记了自己的数据库密码? 在此文中&#xff0c;我们来详细解决一下如何去修改自己的数据库密码&#xff0c;并使用Navicat来连接测试 1.停止mysql服务 打开终端&#xff0c;键入命令,将mysql服务先停止掉&#xff0c;…

归并排序详解:递归实现+非递归实现(图文详解+代码)

文章目录 归并排序1.递归实现2.非递归实现3.海量数据的排序问题 归并排序 时间复杂度&#xff1a;O ( N * logzN ) 每一层都是N,有log2N层空间复杂度&#xff1a;O&#xff08;N&#xff09;&#xff0c;每个区间都会申请内存&#xff0c;最后申请的数组大小和array大小相同稳定…

智能指针面试题

智能指针被问到的概率还是很大的&#xff0c;特别是Shared_ptr&#xff0c;最好会手撕&#xff0c;亲身经历&#xff01; 基本概念 1. RAll RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一种利用对象生命周期来控制程序资源&#xff08;如内存、文…

Python如何实现原型设计模式?什么是原型设计模式?Python 原型设计模式示例代码

什么是原型&#xff08;ProtoType&#xff09;设计模式&#xff1f; 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在通过复制现有对象来创建新对象&#xff0c;而无需通过标准的构造方式。它允许我们基于现有对象创建新对象&#xf…

PHPmail 发送邮件错误 550 的原因是什么?

电子邮件错误消息链接到简单邮件传输协议 (SMTP)&#xff0c;这是一组发送和接收电子邮件的标准化规则。因此&#xff0c;它也称为 SMTP 550 错误代码。在某些情况下&#xff0c;电子邮件错误 550 是由收件人一方的问题引起的。 以下是电子邮件错误 550 的一些可能原因&#x…

外贸自建站什么意思?自建独立网站的好处?

外贸自建站的含义是什么&#xff1f;如何区分自建站和独立站&#xff1f; 随着全球贸易的不断发展&#xff0c;越来越多的企业开始关注外贸自建站。那么&#xff0c;“外贸自建站”到底是什么意思呢&#xff1f;海洋建站将为您详细解析这个问题&#xff0c;带您深入了解这一新…

Spring cloud负载均衡@LoadBalanced LoadBalancerClient

LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…

Win10 开始菜单、微软app和设置都打不开(未解决)

环境&#xff1a; Win10专业版 问题描述&#xff1a; Win10 开始菜单、微软app和设置都打不开,桌面个性话打开就报错&#xff0c;打开个性化该文件没有与之关联的程序来执行该操作 解决方案&#xff1a; 一般造成原因是MS-Settings文件系统错误 1.先重启电脑&#xff08;重…

【开源】基于Vue.js的高校宿舍调配管理系统

项目编号&#xff1a; S 051 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S051&#xff0c;文末获取源码。} 项目编号&#xff1a;S051&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能需求2.1 学生端2.2 宿管2.3 老师端 三、系统…

Pycharm中添加Python库指南

一、介绍 Pycharm是一款为Python开发者提供的集成开发环境&#xff08;IDE&#xff09;&#xff0c;支持执行、调试Python代码&#xff0c;并提供了许多有用的工具和功能&#xff0c;其中之一就是在Pycharm中添加Python库。 添加Python库有许多好处&#xff0c;比如能够增加开…

【云栖 2023】林伟:大数据 AI 一体化的解读

云布道师 本文根据 2023 云栖大会演讲实录整理而成&#xff0c;演讲信息如下&#xff1a; 演讲人&#xff1a;林伟 | 阿里云研究员&#xff0c;阿里云计算平台事业部首席架构师&#xff0c;阿里云人工智能平台 PAI 和大数据开发治理平台 DataWorks 负责人 演讲主题&#xff1a…

推荐10 本软件架构技术的好书【赠书活动|第11期《高并发架构实战》】

相信大家都对未来的职业发展有着憧憬和规划&#xff0c;要做架构师、要做技术总监、要做CTO。对于如何实现自己的职业规划也都信心满满&#xff0c;努力工作、好好学习、不断提升自己。 文章目录 《高并发架构实战&#xff1a;从需求分析到系统设计》《架构师的自我修炼&#x…

手写消息队列(基于RabbitMQ)

一、什么是消息队列&#xff1f; 提到消息队列是否唤醒了你脑海深处的记忆&#xff1f;回看前面的这篇文章&#xff1a;《Java 多线程系列Ⅳ&#xff08;单例模式阻塞式队列定时器线程池&#xff09;》&#xff0c;其中我们在介绍阻塞队列时说过&#xff0c;阻塞队列最大的用途…

在VSCode创建vue项目,出现“因为在此系统上禁止运行脚本”问题

问题&#xff1a;vue : 无法加载文件 C:\Users\***\***\Roaming\npm\vue.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 ht tps:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 解决&#xff…

目标检测标注工具AutoDistill

引言 在快速发展的机器学习领域&#xff0c;有一个方面一直保持不变&#xff1a;繁琐和耗时的数据标注任务。无论是用于图像分类、目标检测还是语义分割&#xff0c;长期以来人工标记的数据集一直是监督学习的基础。 然而&#xff0c;由于一个创新性的工具 AutoDistill&#x…

Linux shell编程学习笔记26:stty(set tty)

之前我们探讨了Linux中的tty&#xff0c;tty命令的主要功能是显示当前使用的终端名称。 如果我们想进一步对tty进行设置&#xff0c;就要用到stty。 stty的功能&#xff1a;显示和修改终端特性&#xff08;Print or change terminal characteristics&#xff09;。 1 stty -…