如何对使用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. 【转载】C#中AddRange方法往ArrayList集合末尾添加另一个集合

    ArrayList集合是C#中的一个非泛型的集合类,是弱数据类型的集合类,可以使用ArrayList集合变量来存储集合元素信息,任何数据类型的变量都可加入到同一个ArrayList集合中,如果需要往一 ...

  2. ios、安卓前端兼容性

    1.日期兼容性 解决方法(请看我上一篇文章)安卓.ios时间转换成时间戳的形式 2.input框聚焦,ios出现outline或者阴影,安卓显示正常 解决方法 input:focus{outline: ...

  3. webpack 入门和常用插件的使用

    常用配置参数 module.exports = { context: path.resolve(__dirname, '../'), entry: { app: './src/main.js' }, ...

  4. Springboot自动化部署到docker以及logback按天生成日志

    Dockerfile FROM java:8 VOLUME /tmp ADD maven/sms-0.0.1-SNAPSHOT.jar app.jar RUN sh -c 'touch /app.ja ...

  5. Springboot jpa多数据源

    1.SpringBootApplication package com.xx.xxx; import org.springframework.beans.factory.annotation.Auto ...

  6. Cheat Engine 人造指针

    打开游戏 查看内存区域 查看游戏当前使用的内存区域 下面这一段是游戏当前使用的内存区域,选择一片可以读写的内存区域 跳转到这片内存 查看是否有空余内存可以使用 使用空闲内存 我们选择0075DFD0开 ...

  7. HashMap的源码分析与实现 伸缩性角度看hashmap的不足

    本文介绍 1.hashmap的概念 2.hashmap的源码分析 3.hashmap的手写实现 4.伸缩性角度看hashmap的不足 一.HashMap的概念 HashMap可以将其拆分为Hash散列 ...

  8. sql 使用条件

    group by 1.在属性中出现相同内容的时候可以使用 2.也可以用来排序desc   asc 批量插入数据 INSERT into 表(属性)(select *from 表) INSERT int ...

  9. echarts设置横坐标的信息竖向排放

    需要在xAxis 中添加 axisLabel , demo案例如下: 设置成每行两个文字竖向排放. xAxis : [ { type : 'category', data : this.xAxis, ...

  10. pt-online-schema-change 最佳实践(转)

    pt的详细步骤 Step 1: Create the new table. Step 2: Alter the new, empty table. This should be very quick, ...