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

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

想要对PYQT编写的GUI文件进行单元测试,咱们主要用到QTest
QTest里面包含了一些对窗体的各类控件进行模拟操做的函数,经过QTest对窗体进行操做后,利用程序的一些返回值和状态值进行断言,来判断各部分是否实现了预期的功能。python

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()

编写针对翻页按钮的测试ui

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同样完成单元测试框架就能够了。code

3.QTest的其余操做

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

  • 键盘相关
  • keyClick(...) 键盘按一个键
  • keyClicks(...) 键盘按多个键
  • keyEvent(...) 键盘事件
  • keyPress(...) 键盘按下
  • keyRelease(...) 键盘释放
    +鼠标相关
  • mouseClick(...) 鼠标单击
  • mouseDClick(...) 鼠标双击
  • mouseMove(...) 鼠标移动
  • mousePress(...) 鼠标按下
  • mouseRelease(...) 鼠标释放

具体参数能够在python中查看help(QTest)blog