『德不孤』Pytest框架 — 2.Pytest的基本使用(一)

1袁辈、Pytest安裝

CMD命令窗口執(zhí)行Pytest測試框架安裝命令:pip install -U pytest

(意思是如果沒有安裝,就進(jìn)行安裝,如果已安裝就升級到最新版)

檢查Pytest測試框架是否安裝成功:pytest –-version

C:\Users\L>pytest --version
pytest 6.1.2

2、Pytest常用插件

Pytest有很多非常強(qiáng)大的第三方插件,并且這些插件能夠?qū)崿F(xiàn)很多實用的操作叁征,并且還可以自定義Pytest插件。

比較好用的例如:

  • pytest-selenium:集成Selenium逛薇。
  • pytest-html:生成html格式的自動化測試報告捺疼。
  • pytest-rerunfailures:失敗case重復(fù)執(zhí)行。
  • pytest-xdist:測試用例分布式執(zhí)行永罚,也可以說是多CPU分發(fā)啤呼。
  • pytest-ordering:用于改變測試用例的執(zhí)行順序。
  • allure-pytest:用于生成美觀的測試報告呢袱。

Pytest插件列表網(wǎng)址: https://plugincompat.herokuapp.com官扣,里面包含很多插件包,?家可依據(jù)?作的需求選擇使?羞福。

說明:我常用安裝Python工具包的方式惕蹄。

一個Python項目中可能會安裝很多安裝包,再次創(chuàng)建虛擬環(huán)境(新項目)是需要重新安裝的治专,這很麻煩也費時間卖陵,或者項目部署的時候避免重裝。

可以將現(xiàn)有項目的所有安裝包記錄在requirements.txt文件张峰,再另一個環(huán)境下一鍵安裝所有安裝包泪蔫。

requirements.txt文件,用于記錄所有依賴包及其精確的版本號喘批,以便在新環(huán)境中進(jìn)行部署操作撩荣。

  • 使用以下命令將當(dāng)前虛擬環(huán)境中的依賴包以版本號生成至文件中:

    pip freeze > requirements.txt

  • 當(dāng)需要創(chuàng)建這個虛擬環(huán)境的完全副本铣揉,可以創(chuàng)建一個新的虛擬環(huán)境,并在其上運行以下命令:

    pip install -r requirements.txt

如上所說:

我們可以把所有插件的模塊名都寫入一個.txt文件夾中餐曹。

pytest-html
pytest-rerunfailures
pytest-xdist
pytest-ordering
allure-pytest

然后在CMD命令行中執(zhí)行pip install -r requirements.txt命令即可逛拱。(全局安裝)

也可以在PyCharm中的命令行執(zhí)行,但只針對于該項目台猴。

提示:可以安裝指定版本的模塊

通過使用==朽合、>=<=卿吐、> <來指定版本旁舰,不寫則安裝最新版锋华。

例如:pip install pytest-xdist==2.2.0

將安裝pytest-xdist模塊2.2.0版本嗡官。

3、Pytest運行的第一個例子

我們直接在Pycharm例編寫代碼就可以毯焕。

"""
1.學(xué)習(xí)目標(biāo)
    掌握pytest編寫測試用例的基本方法
2.操作步驟
    2.1 導(dǎo)入pytest
    2.2 直接編寫測試用例
        默認(rèn)必須以test開頭衍腥,你也可以到Pytest中修改測試?yán)募_頭。
    2.3 執(zhí)行用例
        pytest.main("-s 文件名")
3.python assert斷言
    assert 條件,"異常信息"
3.需求
"""

# 1.導(dǎo)入pytest
import pytest


# 2.編寫所需的測試用例
# 此類方法表示一個函數(shù)
def test_login():
    print("登錄步驟")
    # pytest所用的斷言是Python自身斷言assert關(guān)鍵字
    assert "abcd" in "abcdefg"


def test_register():
    print("注冊步驟")
    assert False


# 3.setup和teardown
# def setup_function():
#     print("打開瀏覽器/打開APP")
#
# def teardown_function():
#     print("關(guān)閉瀏覽器/關(guān)閉APP")

# 3.執(zhí)行測試用例
if __name__ == '__main__':
    # 注意過格式纳猫,main參數(shù)是一個列表
    pytest.main(["-s", "test_pytest_01.py"])


"""
執(zhí)行結(jié)果:
============================= test session starts =============================
platform win32 -- Python 3.7.7, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
rootdir: J:\PyCharmWorkSpace\Pytest_d\pytest_demo
collected 2 items

test_pytest_01.py 
登錄步驟.
注冊步驟F
(. 表示成功 婆咸,F(xiàn) 表示失敗)
================================== FAILURES ===================================
________________________________ test_register ________________________________
(下面是失敗的具體說明)
    def test_register():
        print("注冊步驟")
>       assert False
E       assert False

test_pytest_01.py:28: AssertionError
=========================== short test summary info ===========================
FAILED test_pytest_01.py::test_register - assert False
========================= 1 failed, 1 passed in 0.09s =========================

Process finished with exit code 0
"""

4芜辕、Pytest框架的運行方式

(1)Pytest主函數(shù)模式

  • 運行所有測試用例:pytest.main()

    也可以加上參數(shù):pytest.main(['-vs'])

    提示:注意是所用測試用例尚骄,包括不同文件上的測試用例,都會執(zhí)行侵续。

  • 執(zhí)行指定文件的測試用例:

    pytest.main(['-s','-v','test_a.py'])

    也可以pytest.main(['-vs','test_a.py'])

  • 執(zhí)行指定包下的所有測試用例:

    pytest.main(['-vs','./interface_testcase'])

提示:main函數(shù)的參數(shù)是一個列表數(shù)據(jù)類型倔丈。

(2)命令行模式

  • 運行所有測試用例:pytest

  • 執(zhí)行指定文件的測試用例:pytest 文件路徑/文件名

    例如:pytest -vs ./test_a.py

  • 執(zhí)行指定包下的所有測試用例:pytest 包路徑/包名

    例如:pytest -vs ./interface_testcase

(3)通過node id執(zhí)行指定測試用例

nodeid由包名+模塊文件名、分隔符状蜗、類名需五、方法名、函數(shù)名轧坎、參數(shù)構(gòu)成宏邮,之間使用::進(jìn)行分割,舉例如下:

  • 運行模塊中的指定用例類

    pytest -vs ./interface_testcase/test_interface.py::test_01_func

    或者

    pytest.main(['-vs' ./interface_testcase/test_interface.py::test_01_func)

  • 運行模塊中的指定用例方法

    pytest -vs test_interface.py::test_01_func::test_method

    或者

    pytest.main(['-vs' test_interface.py::test_01_func::test_method)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缸血,一起剝皮案震驚了整個濱河市蜜氨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捎泻,老刑警劉巖记劝,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異族扰,居然都是意外死亡厌丑,警方通過查閱死者的電腦和手機(jī)定欧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怒竿,“玉大人砍鸠,你說我怎么就攤上這事「郏” “怎么了爷辱?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長朦肘。 經(jīng)常有香客問我饭弓,道長,這世上最難降的妖魔是什么媒抠? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任弟断,我火速辦了婚禮,結(jié)果婚禮上趴生,老公的妹妹穿的比我還像新娘阀趴。我一直安慰自己,他們只是感情好苍匆,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布刘急。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叹坦,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音据块,去河邊找鬼。 笑死后裸,一個胖子當(dāng)著我的面吹牛瑰钮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播微驶,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浪谴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了因苹?” 一聲冷哼從身側(cè)響起苟耻,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扶檐,沒想到半個月后凶杖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡款筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年智蝠,在試婚紗的時候發(fā)現(xiàn)自己被綠了腾么。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡杈湾,死狀恐怖解虱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情漆撞,我是刑警寧澤殴泰,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站浮驳,受9級特大地震影響悍汛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜至会,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一离咐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧奋献,春花似錦健霹、人聲如沸旺上。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宣吱。三九已至窃这,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間征候,已是汗流浹背杭攻。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留疤坝,地道東北人兆解。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像跑揉,于是被迫代替她去往敵國和親锅睛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容