zoukankan      html  css  js  c++  java
  • 【Python】[技术博客] 如何对使用PYQT编写的GUI文件进行单元测试

    如何对使用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)

  • 相关阅读:
    MySQL中的用户与授权
    Vim安装使用和配置
    Mysql中的explain和desc
    array_map、array_walk、array_reduce
    PHP二维数组去重(指定键名)
    git配置ssh秘钥(公钥以及私钥)windows
    在nginx上用FastCGI解析PHP
    关于token登录逻辑分析
    公有云 私有云 混合云 的区别
    使用Docker在服务器上部署Ubuntu,本地传文件到docker
  • 原文地址:https://www.cnblogs.com/bhlt1998/p/10908219.html
Copyright © 2011-2022 走看看