如何对使用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. 设计模式之(六)原型模式(ProtoType)

    认识原型模式 原型模式是比较简单的设计模式.废话不多说,直接看定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.通过实例指定种类,种类就是初始化的类,然后通过拷贝创建对象.先展示一个 ...

  2. 当前标识(IIS APPPOOL\DefaultAppPool)没有对“C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files”的写访问权限

    找到或增加这个目录,给他增加权限.

  3. 【转】Webpack 快速上手(中)

    由于文章篇幅较长,为了更好的阅读体验,本文分为上.中.下三篇: 上篇介绍了什么是 webpack,为什么需要 webpack,webpack 的文件输入和输出 中篇介绍了 webpack 在输入和输出 ...

  4. js如何保留两位小数,并进行四舍五入

    保留两位小数,并进行四舍五入使用js函数 toFixed() 函数传递一个参数(Number) Number就为需要保留小数的位数 具体实现代码 <script language="j ...

  5. 对Sql Server执行计划的浅显了解。

    一名大三的小学生,今天开始我的第一篇博客,最近随便做了一个简易的酒店管理系统,对sql执行计划有了初步的了解. 查看上面语句的预估执行计划,在工具栏中有这个按钮 聚集索引扫描被称为Index Scan ...

  6. 使用awk格式化输出文本

    注意:本文并不是一篇awk入门文章,而是偏重实例讲解 awk借鉴了c语法,因此awk在许多地方还保留有c语言的痕迹,比如printf语句:for,if的语法结构等 介绍 最简单地说,AWK 是一种用于 ...

  7. 详解CentOS6.7部署Tomcat及主配置文件

    Java程序实现部署及应用 POSIX :可移植操作系统,编程操作系统接口规范,实现跨平台编译运行. API:应用程序编程接口 ABI:应用程序二进制接口 描述了应用程序和操作系统之间,一个应用和它的 ...

  8. dfs 解决(隐式)图搜索问题

    132. 单词搜索 II 中文 English 给出一个由小写字母组成的矩阵和一个字典.找出所有同时在字典和矩阵中出现的单词.一个单词可以从矩阵中的任意位置开始,可以向左/右/上/下四个相邻方向移动. ...

  9. Java 执行

    java -cp****.jar ****.****.className [args] linux 下 -cp 参数使用 : 分割 一般都是 .:lib/* windows 下使用 ; 分割

  10. jmeter对接口测试入参进行MD5加密的5种方式

    在使用jmeter做测试的过程中,经常需要对请求的入参进行加密,下面列举几种常用的方法,以登录请求密码需要MD5加密为例. 虽然可以先把参数化的明文密码都先md5加密,而不是在登录前先执行加密,但是实 ...