pytest測試框架系列 - 快速入門和簡單使用

前言

  • python常用測試框架有Unittest损谦、Doctest岖免、Nose及Pytest

  • unittest大部分人都非常清楚,都用來做自動化照捡,無論是UI還是接口自動化

  • Nose是對unittest的擴展颅湘,使得python的測試更加簡單。nose自動發(fā)現(xiàn)測試代碼并執(zhí)行栗精,nose提供了大量的插件栅炒,但是很多插件不支持python3

  • doctest是python自帶的一個模塊,你可以把它叫做“文檔測試”(doctest)模塊,使用起來不太方面赢赊,被大家放棄使用

  • pytest是基于unittest開發(fā)的另一款更高級更好用的單元測試框架,提供了豐富的插件且容易使用级历,二次開發(fā)也比較簡單

那大家為什么都推薦使用Pytest

pytest 的官方網(wǎng)站對Pytest說明如下特點:

  • 非常容易上手释移,入門簡單,文檔豐富寥殖,文檔中有很多實例可以參考

  • 能夠支持簡單的單元測試和復雜的功能測試

  • 支持用簡單的assert語句實現(xiàn)豐富的斷言

  • 自動識別測試模塊和測試函數(shù)

  • 安裝插件即可支持參數(shù)化玩讳,使用非常簡單

  • 模塊化夾具用以管理各類測試資源

  • 執(zhí)行測試過程中可以將某些測試跳過(skip),或者對某些預期失敗的case標記成失敗

  • 支持重復執(zhí)行(rerun)失敗的 case

  • 支持運行由 nose, unittest 編寫的測試 case

  • 可生成 html 報告嚼贡,特別有allure報告插件

  • 方便的和持續(xù)集成工具 jenkins 集成

  • 支持用例篩選熏纯,支持執(zhí)行部分用例

  • 具有很多第三方插件,并且可以自定義擴展粤策,截止目前已有800多個各式各樣的插件

pytest和Unittest區(qū)別

類型 Unittest Pytest
用例編寫規(guī)則 測試文件必須先import unittest
測試類必須繼承unittest.TestCase
測試方法必須以“test_”開頭
測試類必須要有unittest.main()方法
測試文件名必須以“test_”開頭或者"test"結(jié)尾
測試方法必須以“test
”開頭
測試類命名以"Test"開頭
用例執(zhí)行 默認執(zhí)行全部用例樟澜,也可以通過加載testsuit,執(zhí)行部分用例 可以通過@pytest.mark來標記類和方法叮盘,pytest.main加入?yún)?shù)("-m")可以只運行標記的類和方法
用例前置和后置 提供了setUp/tearDown秩贰,只能針對所有用例 提供模塊級、函數(shù)級柔吼、類級毒费、方法級等不同級別
更有fixture更加靈活
參數(shù)化 需依賴第三方庫如ddt、paramunittest庫 使用@pytest.mark.parametrize裝飾器
斷言 很多斷言格式(assertEqual愈魏、assertIn觅玻、assertTrue、assertFalse) 使用python自帶的assert即可培漏,比較自由方便
報告 使用HTMLTestRunner.py庫 有pytest-HTML溪厘、allure插件
失敗重跑 無此功能 使用插件pytest-rerunfailures即可完成,不需要編寫多余代碼
并發(fā)測試 無此功能 使用插件pytest-xdist即可完成北苟,不需要編寫多余代碼

安裝Pytest

  • 在編輯器或者cmd命令窗口輸入: pip install pytest 或者 pip install pytest -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com桩匪,安裝的是最新版
cmd窗口
  • 在編譯器安裝模塊界面安裝(pycharm為例):`File -> Settings->Project->Project Interpreter

->點擊"+"號->搜索框輸入 pytest,選擇pytest,點擊Install Package`

pycharm安裝

查看版本

cmd輸入框輸入:pytest --version

pytest版本

快速開始


# _*_coding:utf-8 _*_

# @Time  :2021/7/1 22:18

# @Author  : king

# @File    :test_01.py

# @Software  :PyCharm

# @blog    :https://blog.csdn.net/u010454117

# @WeChat Official Account: 【測試開發(fā)知識庫】

def func(x):

    return x + 1

def test_answer():

    assert func(3) == 5

class TestClass:

    def test_one(self):

        x = "king"

        assert "k" in x

    def test_two(self):

        assert func(2) == 3

然后,cmd進入當前文件目錄友鼻,直接執(zhí)行 pytest

執(zhí)行結(jié)果

需掌握的知識點

  • 如果只輸入 pytest 傻昙,就會開始從當前目錄及其子目錄下以 test_*.py 或 *_test.py 文件,找到文件后彩扔,在文件中找到以 test 開頭函數(shù)并執(zhí)行

  • 如果只想執(zhí)行某個文件妆档,可以 pytest test_01.py

  • 加上-q,就是顯示簡單的執(zhí)行結(jié)果: pytest -q test_01.py

  • 加上 -v虫碉,就是顯示詳細的執(zhí)行結(jié)果: pytest -v test_01.py

Pytest用例的編寫遵循原則

默認情況下贾惦,使用Pytest編寫用例時候,需要按照下面的規(guī)則去寫,否則不符合規(guī)則的測試用例不會執(zhí)行(后續(xù)會講解如果更改用例搜索執(zhí)行規(guī)則)

  • 文件名以 test_*.py 文件和*_test.py

  • test_ 開頭的函數(shù)

  • Test 開頭的類须板,不能包含 __init__ 方法

  • test_ 開頭的類里面的方法

  • 所有的包 pakege 必須要有__init__.py 文件

Pytest cmd命令行窗口里面執(zhí)行用例搜索規(guī)則

  1. 某個目錄下所有的用例 cmd命令行輸入:pytest
pytest
  1. 執(zhí)行某一個 py 文件下用例 pytest 腳本名稱.py
在這里插入圖片描述
  1. 運行模塊里面的某個函數(shù)碰镜,或者某個類,某個類里面的方法

pytest test_01.py::TestClass::test_one

pytest test_01.py::TestClass

pytest test_01.py::test_answer

執(zhí)行結(jié)果
  1. -m 標記表達式(后面詳細講解)

pytest -m smoke

將運行用 @pytest.mark.smoke 裝飾器裝飾的所有測試用例习瑰,后面再詳細講解標記相關(guān)內(nèi)容

  1. -q 簡單打印绪颖,只打印測試用例的執(zhí)行結(jié)果

pytest -q test_01.py

執(zhí)行結(jié)果
  1. -v 詳細打印

pytest -v test_01.py

-v 詳細打印
  1. -s 打印print 調(diào)式相關(guān)信息

pytest -s test_01.py

-s
  1. -x 遇到錯誤時停止測試

作用調(diào)式用例時使用,遇見失敗就停止

pytest test_01.py -x

-x
  1. —maxfail=num甜奄,當用例錯誤個數(shù)達到指定數(shù)量時柠横,停止測試

pytest test_01.py --maxfail=1

—maxfail=num,當用例錯誤個數(shù)達到指定數(shù)量時课兄,停止測試
  1. -k 匹配用例名稱牍氛、根據(jù)用例名稱排除某些用例、同時匹配不同的用例名稱

pytest -s -k xkw test_01.py
pytest -s -k "not xkw" test_01.py
pytest -s -k "test_answer or test_two" test_01.py

注意

pytest 是可以兼容 unittest 腳本的烟阐,前面寫的 unittest 用例稍微做下修改就能用 pytest 框架去運行

歡迎您給我留言搬俊,我們一起討論。

*如果覺得文章不錯曲饱,歡迎關(guān)注微信公眾號

微信公眾號

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末悠抹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扩淀,更是在濱河造成了極大的恐慌楔敌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驻谆,死亡現(xiàn)場離奇詭異卵凑,居然都是意外死亡,警方通過查閱死者的電腦和手機胜臊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門勺卢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人象对,你說我怎么就攤上這事黑忱。” “怎么了勒魔?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵甫煞,是天一觀的道長。 經(jīng)常有香客問我冠绢,道長抚吠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任弟胀,我火速辦了婚禮楷力,結(jié)果婚禮上喊式,老公的妹妹穿的比我還像新娘。我一直安慰自己萧朝,他們只是感情好岔留,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著剪勿,像睡著了一般贸诚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厕吉,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音械念,去河邊找鬼头朱。 笑死,一個胖子當著我的面吹牛龄减,可吹牛的內(nèi)容都是我干的项钮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼希停,長吁一口氣:“原來是場噩夢啊……” “哼烁巫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起宠能,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤亚隙,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后违崇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阿弃,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年羞延,在試婚紗的時候發(fā)現(xiàn)自己被綠了渣淳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡伴箩,死狀恐怖入愧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情嗤谚,我是刑警寧澤棺蛛,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站呵恢,受9級特大地震影響鞠值,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜渗钉,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一彤恶、第九天 我趴在偏房一處隱蔽的房頂上張望钞钙。 院中可真熱鬧,春花似錦声离、人聲如沸芒炼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽本刽。三九已至,卻和暖如春赠涮,著一層夾襖步出監(jiān)牢的瞬間子寓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工笋除, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斜友,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓垃它,卻偏偏與公主長得像鲜屏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子国拇,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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