在 PyCharm 里執行測試
在實際工作學習中,在我們編寫代碼,經過調試與運行,完成預設的功能后,許多時候我們還需要編寫測試代碼去測試剛剛完成的功能。
測試代碼的編寫與執行一般都基于一些成熟的測試框架,在框架內調用待測代碼方法,進行斷言判斷來驗證待測代碼是否完成期望功能。
本節主要講述在 PyCharm 內創建測試與執行測試的步驟,以及其中提供的一些主要功能。
1. PyCharm 支持的測試框架
測試框架可以組織、管理和執行那些獨立的自動化測試用例,測試完成后統計測試結果。PyCharm 支持主流的測試框架,如圖所示:
前三種框架用的比較多,特別是 Pytest 近幾年是比較流行的,經常與 request + Allure 搭檔用于接口的自動化測試。另外,在基于業務驅動軟件公司, BDD 測試框架應用也越來越廣泛。大家可以根據自己的實際環境與需求所擇合適的測試框架,有關安裝及其它更詳細信息,請參閱對應的框架文檔。
Tips:在開始使用您選擇的測試框架之前,請確保在計算機上安裝了所需的框架。
2. 在 PyCharm 里執行測試的步驟
2.1 配置測試框架
主菜單: PyCharm/File -> Preference/Settings -> Tools -> Python Integrated Tools
, 點擊 Default Test Runner 選擇 runner。 默認值是 Unittests,下面的過程也會以 Unittests 為例。
2.2 創建測試
準備一個簡單的待測試類,創建新文件 rectangle.py
,添加下面的代碼到文件
import math
class Rectangle:
def __init__(self, length, width, size=(40, 20)):
self.length = length
self.width = width
self._size = size
def area(self):
area = self.length * self.width
return area
def perimeter(self):
perimeter = (self.length + self.width) * 2
return perimeter
def diff(self):
diff = math.fabs(self.length - self.width)
return diff
def resize(self, width, height):
if width <= 0 or height <= 0:
raise ValueError("illegal size")
self._size = (width, height)
def get_length(self):
return self.length
def get_width(self):
return self. width
在編輯器中,將光標放在類聲明或方法中的位置。
- 從主菜單中,選擇
Navigate -> Test
; - 編輯器內,右鍵上下文菜單中選擇
Go to -> Test (??T: Ctrl + Shift + T)
;
PyCharm 顯示可用測試的列表。如果所需的測試尚不存在,請單擊"創建新測試"。在打開 Create test 對話框中進行設置, 點擊 OK 會自動生成測試文件與測試類。
當你創建了測試后,在測試文件可以通過上下文菜單跳到源程序 Go To -> Test Subject
,完成測試文件到源文件切換,反之也可以的通過 Go To -> Test
跳回到測試程序。下面的過程演示了創建測試以及測試文件與源文件的切換過程。
2.3 為測試文件配置 運行/調試 配置
前面的創建測試只是幫助我們創建了測試文件結構,具體的測試代碼還是需要自己編寫的。在進行配置之前,我們需要根據選擇測試框架的規范編寫測試代碼。python unittest 文檔參考, 修改上面自動生成的 test_rectangle.py 文件。
from unittest import TestCase
from rectangle import Rectangle
class TestRectangle(TestCase):
def setUp(self):
self.rectangle = Rectangle(30, 15)
def test_area(self):
area = self.rectangle.area()
print(area)
self.assertEqual(area, 450)
def test_perimeter(self):
perimeter = self.rectangle.perimeter()
self.assertEqual(perimeter, 90)
def test_diff(self):
diff = self.rectangle.diff()
self.assertEqual(diff, 15)
def test_resize(self):
self.assertRaises(ValueError, self.rectangle.resize, 15, 0)
def tearDown(self):
self.rectangle = None
創建 運行/調試配置,有多種方式:
- 直接點擊 運行/配置 配置列表框打開對話框,類型選擇 Unittests;
- Project 窗口選擇文件, 右鍵上下文菜單選擇 Create Name;
- 在編輯器內,右鍵上下文菜單選擇 Create Name。
在配置過程中,可以指定測試范圍,是模塊、類甚至單個測試方法。
2.4 執行測試
通常,PyCharm 通過運行已創建的運行/調試配置,以與其他應用程序相同的方式運行和調試測試。在許多情況下,也可以從上下文菜單啟動測試會話,如果運行的測試沒有永久運行/調試配置,則創建臨時配置。然后,如果以后要重用,可以使用"運行/調試配置"對話框保存此類配置。
1. 下面演示了不同運行路徑,可運行整個模塊,也可以運行單個方法。在 Run 工具 窗口內可以看到運行結果。工具窗口與通用的 Run 窗口基本一致,但會多一些為測試所加的工具按鈕。
2. 可以通過 Run 工具欄中 Rerun 與 Rerun Failed Tests 重新運行用例:
3. PyCharm 可以設置自動重新運行測試的運行/調試配置(如果源代碼已更改)。點擊 Run 工具欄中的 Toggle auto-test 按鈕該功能生效。
下面只單獨運行 test_area 這個方法,按下 Toggle auto-test,然后簡單修改這個方法,會看到測試被自動執行了。
2.5 查看結果
1. 運行后,會在 Run 工具欄中顯示運行結果,具體顯示的信息分析如下:
2. 在 Run 工具欄頂部工具欄提供更多豐富的功能,幫助查看結果。還可以隨時查看以前的歷史測試記錄,也能把測試結果導入導出。
4. 點擊最后的設置齒輪按鈕,可以進行更多的設置。
- 監視當前測試的執行;
- 內聯顯示統計信息,顯示用例執行時間;
- 導航到堆棧跟蹤;
- 在異常發生的情況下打開相應的源代碼;
- 設置自動測試延遲的時間;
- 在完成測試后,自動選擇第一個失敗的測試。
5. 如果單元測試包含斷言條件失敗,右鍵單擊失敗的測試,然后選擇 View assertEquals Difference 專用的比較器對話框被顯示。
3. 小結
本小節主要講解了如何在 PyCharm 里運行測試的基本步驟,以及在測試過程中提供的相關功能。
相關的功能都不復雜,很容易上手。難點在于創建測試以后,如何根據選擇的測試框架寫測試用例代碼,這需要對選擇的測試框架、單元測試的理論知識都比較了解;另外,需要對待測代碼要足夠熟悉,才能寫出有效的測試用例。