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