如何对使用PYQT编写的GUI文件进行单元测试

想要对PYQT编写的GUI文件进行单元测试,我们主要用到QTest

QTest里面包含了一些对窗体的各种控件进行模拟操作的函数,通过QTest对窗体进行操作后,利用程序的一些返回值和状态值进行断言,来判断各部分是否实现了预期的功能。

1.需要导入的模块

与PYQT相关的模块如下

from PyQt5.QtWidgets import QApplication
from PyQt5.QtTest import QTest
from PyQt5.QtCore import Qt

同时需要使用unittest模块的单元测试框架

import unittest

另外需要导入待测试的窗口的py文件,例如

import mainwindow #自己的GUI

2.编写具体的测试

我以一个简单的窗体为例子,窗体如下



左右两个按钮的功能是翻页,具体的实现就是切换中间显示的图片,程序中有一个值来记录当前是第几页,我们就用它来进行判断。

首先在setUp中实例化窗口

def setUp(self):
""" Create GUI"""
self.form = mainwindow.g_window()

编写针对翻页按钮的测试

def test_pushButton_right(self):
"""Test button pushButton_right"""
widget = self.form.pushButton_2 #将要点击的按钮
QTest.mouseClick(widget, Qt.LeftButton) #点击向右翻页按钮
self.assertEqual(2, self.now_page) #判断页面是否为2 QTest.mouseClick(widget, Qt.LeftButton) #点击向右翻页按钮
self.assertEqual(3, self.now_page) #判断页面是否为3 QTest.mouseClick(widget, Qt.LeftButton) #点击向右翻页按钮
self.assertEqual(1, self.now_page) #判断页面是否为1 ,一共有3页,第3页的下一页回到第1页 def test_pushButton_left(self):
"""Test button pushButton_left"""
widget = self.form.pushButton_1
QTest.mouseClick(widget, Qt.LeftButton) #点击向左翻页按钮
self.assertEqual(3, self.now_page) #判断页面是否为3,第1页向左翻页到最后一页 QTest.mouseClick(widget, Qt.LeftButton) #点击向左翻页按钮
self.assertEqual(2, self.now_page) #判断页面是否为2 QTest.mouseClick(widget, Qt.LeftButton) #点击向左翻页按钮
self.assertEqual(1, self.now_page) #判断页面是否为1

然后与编写普通代码的unittest一样完成单元测试框架就可以了。

3.QTest的其他操作

QTest包含了模拟键盘、鼠标的一系列操作的方法

  • 键盘相关
  • keyClick(...) 键盘按一个键
  • keyClicks(...) 键盘按多个键
  • keyEvent(...) 键盘事件
  • keyPress(...) 键盘按下
  • keyRelease(...) 键盘释放

    +鼠标相关
  • mouseClick(...) 鼠标单击
  • mouseDClick(...) 鼠标双击
  • mouseMove(...) 鼠标移动
  • mousePress(...) 鼠标按下
  • mouseRelease(...) 鼠标释放

具体参数可以在python中查看help(QTest)

【Python】[技术博客] 如何对使用PYQT编写的GUI文件进行单元测试的更多相关文章

  1. 原创翻译-值得关注的10个python语言博客

    原文链接 原文链接的网页感觉网络不是很好,不容易上.我在这里就给大家做个翻译吧. 大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少.这也是我建 ...

  2. IT技术博客收藏

    1. coolshell.cn 特点: 每篇都是精品 2. 云风 特点: 3. 阮一峰的博客 特点:高精深 3. offbye涛声依旧-全端技术博客 特点: android的开发技术比较多,非常值得一 ...

  3. [转]有哪些值得关注的技术博客(Java篇)

    有哪些值得关注的技术博客(Java篇)   大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...

  4. 值得关注的10个python语言博客(转)

    大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少.这也是我建立这个博客的原因,向大家分享我自己学到的新知识.今天我向大家推荐10个值得我们关注 ...

  5. 一文搞定scrapy爬取众多知名技术博客文章保存到本地数据库,包含:cnblog、csdn、51cto、itpub、jobbole、oschina等

    本文旨在通过爬取一系列博客网站技术文章的实践,介绍一下scrapy这个python语言中强大的整站爬虫框架的使用.各位童鞋可不要用来干坏事哦,这些技术博客平台也是为了让我们大家更方便的交流.学习.提高 ...

  6. 值得关注的10个python语言博客

    大家好,还记得我当时学习python的时候,我一直努力地寻找关于python的博客,但我发现它们的数量很少.这也是我建立这个博客的原因,向大家分享我自己学到的新知识.今天我向大家推荐10个值得我们关注 ...

  7. Atitit.如何文章写好 论文 文章 如何写好论文 技术博客 v4

    Atitit.如何文章写好 论文  文章  如何写好论文 技术博客 1. 原则 2 1.1. 有深度, 有广度 2 1.2. 业务通用性有通用性 尽可能向上抽象一俩层..业务通用性与语言通用性. 2 ...

  8. Atitit.如何文章写好 论文 文章 如何写好论文 技术博客

    Atitit.如何文章写好 论文  文章  如何写好论文 技术博客 1. 原则 1 1.1. 有深度, 有广度 1 1.2. 业务通用性有通用性 尽可能向上抽象一俩层..业务通用性与语言通用性. 2 ...

  9. 【技术博客】Django中文件下载的实现

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. Django中文件下载的实现 1.背景 在VisualPy ...

随机推荐

  1. vue打包后页面显示空白但是不报错

    在使用vue打包的时候页面显示空白,并且控制台不报错 设置vue-router的时候mode设置为history模式了,这种模式要有后台的配合,一般还是使用哈希模式就不会出现页面空白了.

  2. Java 流程控制 之 分支结构——条件判断语句

    一.判断语句 1.判断语句1-- 单 if 语句(单分支结构) 语法格式: if(条件表达式){ 语句体; }  执行流程: 首先判断条件表达式看其结果是 true 还是 false: 如果是 tru ...

  3. 模块化规范:CMD和AMD的区别

    https://www.zhihu.com/question/20351507/answer/14859415 AMD(异步模块定义) 是 RequireJS 在推广过程中对模块定义的规范化产出.CM ...

  4. Django之 RESTful规范

    RESTful 规范 一.什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为"表征 ...

  5. Linux操作系统之用户权限,重定向,文件管理

    文件的权限 ls -al  ----->隐藏文件会以 .号开头 ls -ld :显示目录自身属性 ls -i 显示文件的索引号----每个文件都有一个对应的号码 ls -r 逆序显示 dr-xr ...

  6. Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项

    Httpd服务入门知识-Httpd服务常见配置案例之ServerSignature指令选项 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.ServerSignature指令概述 ...

  7. 1.2 管理 NetBackup 许可证

    关于管理 NetBackup 许可证 NetBackup许可证密钥是在安装软件时添加的.对于需要单独购买的选件,可以稍 后在"许可证密钥"对话框中添加许可证. 注意:在进行任何许可 ...

  8. Spring Boot 2.0 整合携程Apollo配置中心

    原文:https://www.jianshu.com/p/23d695af7e80 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够 ...

  9. 关于__int 128 的读入与输出

    inline __int128 read() { ,w=; ; while(!isdigit(ch)) {w|=ch=='-';ch=getchar();} )+(X<<)+(ch^),c ...

  10. mysql-mysqldump

    备份(导出)所有数据库的数据和结构(注意:这种方式备份,还原时,无需先创建数据库,可直接导入) mysqldump -u root -p 'password' --all-databases > ...