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