1.Pytest用例發現規則
1.1 模塊名(python文件)名必須以 test_ 開頭或 _test 結尾,如 test_case,case_test,下劃線都不能少
1.2 模塊不能放在 . 開頭的隱藏目錄或者叫 venv的目錄下,virtual environment,叫venv1都可以,就是不能叫venv
1.3?測試類類名必須以Test開頭,并且不能帶有init
方法
1.4 測試類中的測試方法必須以 test 開頭,必須是小寫,建議使用 test_。
1.5 普通函數也必須以 test 開頭,建議使用 test_
1.6 除了類方法的self參數,測試用例函數不能有參數,不能有返回值(8.4新增)
1.7 必須為可調用的(函數,方法,類,對象)
2.配置Pytest框架
2.1 通過 pytest.ini 文件
2.2 添加參數
????????在終端使用 pytest -h 可以查看全部參數,其中 以下劃線開頭的是參數、以小寫字母開頭的是ini配置、全是大寫的是環境
3.標記mark
? ? ? ?作用:讓用例與眾不同,進而可以實現對單個用例的特殊處理
3.1 內置標記
? ? ? ? 包括skip,skipif,xfail,parameterize,usefixtures,fixture
3.1.1 skip
? ? ? ? 同unittest.skip,無條件跳過用例的執行
3.1.2?skipif
? ? ? ? 條件跳過,如果滿足條件就跳過
3.1.3 xfail
? ? ? ? 意料之內的失敗,相當于取反,斷言是錯誤的才能通過.
3.1.4?parameterize
? ? ? ? 參數化,和unittest.parameterized類似
? ? ? ??
3.2?用戶自定義標記
? ? ? ? 只能實現用例的篩選。使用步驟為:1.注冊、2.標記、3.篩選
更正:上圖makers改為markers
4.fixure
4.1 fixture基本定義語法
使用 @pytest.fixture() 定義一個夾具函數,函數中使用 yield 分隔前置操作和后置操作,一個夾具中只能有一個 yield。
使用時在把夾具函數名作為用例的參數或者使用 @pytest.usefixtures(夾具函數名) 使用夾具
4.2 fixture參數
我們看到上面的fixture函數在每次用例執行前/后都要執行,但是有些操作我們想讓所有用例只執行一次,或者用例太多,不想一個一個加參數,想讓夾具直接覆蓋所有用例的時候,我們就需要修改創建fixture時的默認參數
4.3 fixture返回值
跟在 yield 后的表達式會作為fixture的返回值
4.3 依賴(嵌套)fixture
一個fixture可以被另一個fixture使用,只要在參數中加上另一個fixture的名字即可
4.4 fixture跨文件使用
fixture默認不能跨文件使用:
首先需要滿足scope不為默認的function,其余值都可以,然后需要新建?`conftest.py`或者將模塊名改為conftest.py,然后將fixture放在其中,就能實現跨文件使用fixture。
5. 插件
插件分為兩類:不需要安裝的內置插件和需要安裝的第三方插件。
5.1 常用插件(都是python包)
5.1.1 pytest-html
? ? ? ? 作用:生成html報告,類似于unittest中的 htmltestreport?
? ? ? ? 使用方法(命令行參數):
或者使用配置文件
然后直接 pytest 文件名或者執行pytest.main()?都會生成測試報告。
5.1.2 pytest-xdist
? ? ? ? 作用:分布式執行,把測試用例任務分成n個進程同時執行,在用例自身需要花費很多時間的時候推薦使用。但是并發執行存在亂序和競爭資源的問題,不能在存在依賴關系和順序的情況中使用。
? ? ? ? 命令:pytest -n 進程數
def test1():print('test1', )sleep(5)def test2():print('test2')sleep(5)
如果我想要執行這兩個用例,在不使用 xdist的情況下至少需要10s,如果使用了xdist,那么時間會被縮短,大概是 總時間/進程數 + 進程啟動調度時間,所以這里使用xdist花費時間大概為6s。
這里因為我只有兩個用例但是分配了三個進程,導致有一個進程被浪費了,以此看出用例數和進程數不用一一對應,超過的進程會被浪費。
5.1.3 pytest -rerunfailures
? ? ? ? 作用:在用例執行失敗后重新執行,一般用在網絡較差的情況下
? ? ? ? 命令:--reruns 重新執行次數 --reruns-delay 秒數
5.1.4 pytest-result-log
? ? ? ? 作用:用日志文件記錄用例運行結果
? ? ? ? 用法:配置在 ini文件中。
5.1.5 allure-pytest
? ? ? ? 作用:生成企業級的測試報告
? ? ? ? 命令:
此命令只能生成對應的JSON文件,并不能生成HTML文件,要想生成HTML文件需要使用:
allure generate -o report -c temps
裝飾器
? ? ? ? 作用:對用例分層次管理,類似于文件夾或者樹,使用相同裝飾器的用例放在同一目錄下
? ? ? ? @allure.epic()項目? ? ? @allure.feature()模塊? ?@allure.story()功能? ? @allure.title()用例