亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

在 PyCharm 里執行測試

在實際工作學習中,在我們編寫代碼,經過調試與運行,完成預設的功能后,許多時候我們還需要編寫測試代碼去測試剛剛完成的功能。

測試代碼的編寫與執行一般都基于一些成熟的測試框架,在框架內調用待測代碼方法,進行斷言判斷來驗證待測代碼是否完成期望功能。

本節主要講述在 PyCharm 內創建測試與執行測試的步驟,以及其中提供的一些主要功能。

1. PyCharm 支持的測試框架

測試框架可以組織、管理和執行那些獨立的自動化測試用例,測試完成后統計測試結果。PyCharm 支持主流的測試框架,如圖所示:

前三種框架用的比較多,特別是 Pytest 近幾年是比較流行的,經常與 request + Allure 搭檔用于接口的自動化測試。另外,在基于業務驅動軟件公司, BDD 測試框架應用也越來越廣泛。大家可以根據自己的實際環境與需求所擇合適的測試框架,有關安裝及其它更詳細信息,請參閱對應的框架文檔。

圖片描述

圖片來源:https://www.jetbrains.com/help/pycharm/testing-frameworks.html

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 里運行測試的基本步驟,以及在測試過程中提供的相關功能。
相關的功能都不復雜,很容易上手。難點在于創建測試以后,如何根據選擇的測試框架寫測試用例代碼,這需要對選擇的測試框架、單元測試的理論知識都比較了解;另外,需要對待測代碼要足夠熟悉,才能寫出有效的測試用例。

圖片描述