第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

PyCharm 編輯器教程

PyCharm 數(shù)據(jù)庫工具
PyCharm 的數(shù)據(jù)庫工具
首頁 慕課教程 PyCharm 編輯器教程 PyCharm 編輯器教程 在 PyCharm 里使用 Pytest 測(cè)試框架

在 PyCharm 里使用 Pytest 測(cè)試框架

在上一小節(jié)已經(jīng)介紹了基于 Python unittest 在 PyCharm 里執(zhí)行測(cè)試相關(guān)知識(shí),本節(jié)將繼續(xù)介紹另一個(gè)比較流行的測(cè)試框架 Pytest。

1. Pytest 介紹

Pytest 是 Python 語言中一款強(qiáng)大的單元測(cè)試框架,它是基于 unittest 開發(fā)的擴(kuò)展框架,用來管理和組織測(cè)試用例,可應(yīng)用在單元測(cè)試、自動(dòng)化測(cè)試工作中。

Pytest 主要特點(diǎn):

1. 兼容性好: 支持 Python 2.7,Python 3.4+。

2. 與 unittest 和 nose 測(cè)試框架兼容: 如果之前測(cè)試用例全部是基于 unittest 或者 nose 來編寫的,執(zhí)行 Pytest 命令同樣可以正常運(yùn)行并得到結(jié)果。因此無需擔(dān)心遷移測(cè)框架從而帶來額外的人工成本。

3. 豐富的插件支持: 大約有 300 多個(gè),像 Pytest-repeat, pytest-xdist,pytest-ordering,pytest-rerunfailures 以及 pytest-html 這些常用插件在測(cè)試重復(fù)執(zhí)行、并發(fā)與生成報(bào)告方面都提供了非常強(qiáng)大的支持。

4. 允許直接使用 assert 進(jìn)行斷言:相比 unittest 簡(jiǎn)單,unittest 定義了 assertEqual、assertIn、assertTrue、assertFalse 等一系列斷言。

5. 可以自動(dòng)尋找單測(cè)文件、類和函數(shù):Pytest 要求所有的單測(cè)文件名都需要滿足 test_.py 格式或_test.py 格式。在單測(cè)文件中,可以包含 test_ 開頭的函數(shù),也可以包含 Test 開頭的類。在單測(cè)類中,可以包含一個(gè)或多個(gè) test_ 開頭的函數(shù)。在執(zhí)行 Pytest 命令時(shí),會(huì)自動(dòng)從當(dāng)前目錄及子目錄中尋找符合上述約束的測(cè)試函數(shù)來執(zhí)行。

6. 提供應(yīng)用不同范圍前置/后置方法: Pytest 提供了模塊級(jí)、函數(shù)級(jí)、類級(jí)、方法級(jí)的setup/teardown,比 unittest 的 setUp/tearDown 更靈活。

7. 分類執(zhí)行與測(cè)試數(shù)據(jù)參數(shù)化簡(jiǎn)單 : unittest 需依賴 ddt 庫實(shí)現(xiàn)數(shù)據(jù)參數(shù)化,而 Pytest 直接使用@pytest.mark.parametrize 裝飾器。

總之, Pytest 因?yàn)槠涔δ軓?qiáng)大性及使用的方便性,已經(jīng)成為主流的測(cè)試框架之一,unittest 更適合入門級(jí)的測(cè)試,當(dāng)執(zhí)行比較復(fù)雜的測(cè)試 Pytest 就更適合一些,這也是為什么我們會(huì)單列一小節(jié)講 Pytest 的原因。更多關(guān)于 Pytest 使用請(qǐng)參考官網(wǎng)。

2. 使用 Pytest 執(zhí)行測(cè)試

在 PyCharm 里使用 Pytest 執(zhí)行測(cè)試的過程與 unittest 是一致的,所以對(duì)于步驟上的操作在本小節(jié)將不再過多說明,將把重點(diǎn)關(guān)注在 Pytest 一些特性上。

2.1 配置測(cè)試框架

主菜單: PyCharm/File -> Preference/Settings -> Tools -> Python Integrated Tools, 點(diǎn)擊 Default Test Runner 選擇 Pytest。
圖片描述

2.2 創(chuàng)建測(cè)試

創(chuàng)建一個(gè)新的 Python project,增加新文件 rectangle.py,添加下面的代碼到文件, 繼續(xù)沿用上一小節(jié)用到的待測(cè)代碼。

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è)試的列表。單擊"創(chuàng)建新測(cè)試"。在打開 Create test 對(duì)話框中進(jìn)行設(shè)置, 點(diǎn)擊 OK 會(huì)自動(dòng)生成測(cè)試文件 test_rectangle 與 測(cè)試方法模板。

圖片描述

生成的模板 如下圖所示: 沒有像 unittest 那樣創(chuàng)建同名測(cè)試類,無需像導(dǎo)入 unittest 一樣導(dǎo)入pytest , 斷言直接用 assert。使用pytest 寫測(cè)試用例看上去更簡(jiǎn)單一些。

圖片描述

2.3 修改代碼與執(zhí)行測(cè)試

根據(jù) Pytest 規(guī)則更新代碼:

from rectangle import Rectangle


def test_area():
    rect = Rectangle(30, 15)
    assert rect.area() == 450


def test_perimeter():
    rect = Rectangle(30, 15)
    assert rect.perimeter() == 90

在 編輯器的上下文菜單,選擇 Run pytest for Name,會(huì)默認(rèn)運(yùn)行當(dāng)前文件所有以 ‘test’ 開頭的所有方法。Run 窗口會(huì)自動(dòng)彈出,顯示測(cè)試結(jié)果。

圖片描述

3. Pytest 一些特性

從上面介紹可以看出,無論用哪種測(cè)試框架,基本流程都是一樣的。下面介紹一些Pytest 一些特性,這些特性都是使用頻率比較高,也是相對(duì)于unittest 測(cè)試功能更為便利與先進(jìn)的功能。

3.1 使用 fixture

fixture 是 Pytest 特有的功能,它用 pytest.fixture 標(biāo)識(shí),定義在函數(shù)前面。在你編寫測(cè)試函數(shù)的時(shí)候,你可以將此函數(shù)名稱做為傳入?yún)?shù),pytest將會(huì)以依賴注入方式,將該函數(shù)的返回值作為測(cè)試函數(shù)的傳入?yún)?shù)。

我們可以把fixture看做是資源,在你的測(cè)試用例執(zhí)行之前需要去配置這些資源,執(zhí)行完后需要去釋放資源。比如module類型的fixture,適合于那些許多測(cè)試用例都只需要執(zhí)行一次的操作。更多使用請(qǐng)參考這里

上面的兩個(gè)測(cè)試方法都有 rect = Rectangle(30, 15) 實(shí)例化類, 此時(shí)可以使用 fixture 簡(jiǎn)化代碼:

from rectangle import Rectangle
import pytest


@pytest.fixture()
def my_rect():
    rect = Rectangle(30, 15)
    return rect


def test_area(my_rect):
    assert my_rect.area() == 450


def test_perimeter(my_rect):
    assert my_rect.perimeter() == 90

3.2 標(biāo)記用例

pytest.mark 定義在函數(shù)前面??梢越o用例打標(biāo)簽,用于給用例分類與篩選用例。每個(gè)用例可以加多個(gè)標(biāo)簽。在執(zhí)行用例時(shí)根據(jù)標(biāo)簽名選擇執(zhí)行。相比unittest 通過 TestSuite 加載不同的測(cè)試用例要方便的多。

from rectangle import Rectangle
import pytest


@pytest.fixture()
def my_rect():
    rect = Rectangle(30, 15)
    return rect


@pytest.mark.smoke
@pytest.mark.p1
def test_area(my_rect):
    assert my_rect.area() == 450


@pytest.mark.regression
def test_perimeter(my_rect):
    assert my_rect.perimeter() == 90

在運(yùn)行之前, 需要先創(chuàng)建一個(gè)pytest.ini 文件在當(dāng)前項(xiàng)目下,注冊(cè)標(biāo)簽名。

[pytest]
markers=
    smoke
    p1
    regression

運(yùn)行的時(shí)候加參數(shù) -m 標(biāo)簽名, 就可以只執(zhí)行帶標(biāo)簽名的用例。

圖片描述

3.3 測(cè)試數(shù)據(jù)參數(shù)化

你可能希望在預(yù)定義的數(shù)據(jù)集上運(yùn)行測(cè)試。PyCharm 支持通過 @pytest.mark.parametrize 在 pytest 中實(shí)現(xiàn)的測(cè)試參數(shù)化。更多使用參考

增加下面的測(cè)試用例在 test_rectangle.py 文件中,傳遞三個(gè)參數(shù)兩組數(shù)據(jù)給測(cè)試用例。如果數(shù)據(jù)可以用于其它用例,也可以定義數(shù)據(jù)做為全局變量。

@pytest.mark.parametrize(("length", "width", "expected_diff"), [(30, 20, 10), (20, 20, 0)])
def test_diff(length, width, expected_diff):
    rect = Rectangle(length, width)
    assert rect.diff() == expected_diff

點(diǎn)擊編輯器側(cè)邊框綠色箭頭執(zhí)行上面的用例,可以看到用例執(zhí)行了兩次:

圖片描述

3.4 重復(fù)運(yùn)行用例

有時(shí)候需要重復(fù)運(yùn)行單個(gè)用例,Pytest也提供相應(yīng)的插件支持 。需要事先安裝包 pytest-repeat, Preference/Settings -> Project -> Python Interpreter

圖片描述

通過在函數(shù)前加 @pytest.mark.repeat(次數(shù)),指定函數(shù)重復(fù)的次數(shù),也可以通過命令行–count=次數(shù),為所有函數(shù)級(jí)別方法指定重復(fù)次數(shù)。

@pytest.mark.regression
@pytest.mark.repeat(5)
def test_perimeter(my_rect):
    assert my_rect.perimeter() == 90

執(zhí)行測(cè)試用例,可以看到用例被執(zhí)行了5 次:

圖片描述

3.5 并發(fā)執(zhí)行用例

有時(shí)候?yàn)榱斯?jié)省測(cè)試時(shí)間,需要并發(fā)執(zhí)行測(cè)試用例。Pytest 是支持并發(fā)測(cè)試的,需提前安裝包 pytest-xdist。運(yùn)行的時(shí)候加參數(shù) -n 并發(fā)進(jìn)程數(shù) 或者 -n auto (根據(jù)當(dāng)前cpu信息自動(dòng)分配合理的核數(shù)運(yùn)行用例。也可以在 pytest.ini 指定。

[pytest]
addopts = -n3

為了增強(qiáng)演示效果,在三個(gè)用例里都增加了10秒的延遲,并設(shè)置了三個(gè)并發(fā),可以觀察到三個(gè)用例是同時(shí)執(zhí)行的。

圖片描述

Tips:當(dāng)使用這個(gè)插件做并發(fā)測(cè)試時(shí),只能用于沒有依賴關(guān)系的測(cè)試用例。

4. 小結(jié)

本節(jié)主要介紹了在 PyCharm 里如何使用 Pytest 測(cè)試框架和一些測(cè)試過程中常用插件。Pytest 是功能非常強(qiáng)大的測(cè)試框架,在業(yè)內(nèi)也比較被推崇,如果想真正掌握,建議多參考官方文檔及相關(guān)的插件說明文檔,這將幫助我們?cè)陂_發(fā)單元測(cè)試與自動(dòng)化測(cè)試過程中事半功倍。
圖片描述