? 目前有兩種純測驗的測驗框架,就是unittest和pytest,
? unittest這個已經是老框架了并且廣為人知,很多人都是用它來做介面自動化或web自動化,它是python內嵌的測驗框架,是標準庫,即python自帶的,安裝python以后可以直接匯入,unittest提供了test cases、test suites、test fixtures、test runner相關的類,讓測驗更加明確、方便、可控,
? 而pytest則是python的第三方庫,是基于unittest開發的擴展框架,需要獨立安裝,但要注意兼容性,不是一定要安裝最新版,最新版如果會與你的python版本不兼容,可能會存在安裝不成功,或者是某些庫的功能使用不了,pytest比unittest更簡潔,更高效:
- ?? 不需要像unittest需要使用TestSuite去收集、加載用例添加到測驗套件再運行,它會自動發現用例自動執行
- ?? 使用assert斷言更簡潔:assert 運算式
- ?? 靈活運行指定的測驗用例,可以給用例打上各種各樣的標簽,如:回歸、正向、冒煙
- ?? 可以將某些用例跳過(skip),或者對某些預期失敗的case標記成失敗
- ?? fixture夾具靈活管理環境,可以指定哪些類、方法使用與否,功能相當于unittest的setup,teardown
- ?? 插件非常豐富,如returnfailures用例失敗重運行機制,allure更美觀的測驗報告等
- ?? 較好的兼容性,支持運行unittest/nose撰寫的測驗用例
安裝
? 安裝:pip install -U pytest
? 查看版本:pytest --version
用例命名規則
發現用例規則
? pytest是自動發現、收集、執行測驗用例的,當你在哪個目錄下執行pytest.main()指令,那么pytest就會自動發現當前目錄下所有符合規則的py檔案,將這些檔案當成測驗用例檔案,根據以下規則去發現用例:
? ?? 模塊名: test_*.py或者是 *_test.py(即以test_開頭或_test結尾的py檔案)
? ??類名:Test開頭,且類里沒有__init__函式(否則容易報錯)
? ??方法名:test_開頭
? 注意:pytest是以方法為單位發現用例的,因此,測驗用例并不一定要以類的形式存在,可以直接以函式方法的形式存在;并且它是根據規則按順序匹配先:模塊 > > 類名 > > 方法名,如果你的方法名符合規則,但方法寫在一個不符合規則的類名或者模塊名下,那么該方法是不會被發現也不會被執行的,
# test_search.py
def login_test():
print(11111)
def test_login():
print(22222)
class TestClass:
def test_one(self):
print(33333)
def test_two(self):
print(44444)
def test3(self):
print(44444)
? 如上,會查找到3個測驗用例,分別為test_login、test_one、test_two,
自定義查找規則
? 我們還可以自定義查找的規則,但自定義的規則組態檔要放在你要運行的專案的根目錄下(見上圖),且組態檔要嚴格以pytest.ini命名,pytest.ini檔案內容舉例如下:
[pytest] # 只能修改=右邊的值
python_files = demo_*.py # 模塊名以demo_開頭
python_functions = demo_* # 方法名以demo_開頭
python_classes = Demo* # 類名名以Demo開頭
運行方式
代碼形式
if __name__ == '__main__':
pytest.main() # 直接寫在py檔案中運行,()里可以填寫運行的引數,也可以不寫
命令列的形式
? 在pycharm中調出控制臺,輸入pytest,會自動去搜索當前目錄下所有符合規則的測驗用例,也可以指定運行某個檔案,如:pytest start.py ,
或者使用windows的cmd命令列,但要先切換到專案的目錄下
pycharm運行
? 右擊選擇以pytest運行,但一次只能運行單個py檔案,除非該檔案中有pytest.main()指令,才會去搜索所在目錄的所有測驗用例,
? 運行前在模塊中右擊可以查看運行是否是以pytest形式運行:
? 若顯示是以unittest形式則會以unittest框架去運行,可以在設定中修改運行方式:
執行代碼
? 以下均為命令列中執行的pytest命令
- 直接執行,在當前目錄即子目錄搜索用例:
pytest - 指定某個模塊:
pytest test_module.py - 指定某個目錄及子目錄下的所有測驗檔案:
pytest testcase - 指定某個模塊的某個方法,用兩個英文冒號分隔:
pytest test_module::test_function - 指定某個模塊的某個類中的某個用例,用兩個英文冒號分隔:
pytest test_model.py::test_class::test_method
? 一些執行引數:
-q:簡單列印執行日志,只列印測驗用例的執行結果-s:詳細列印執行日志-x:遇到錯誤時停止測驗--maxfail=num:當用例錯誤個數達到指定數量時,停止測驗-k:匹配用例名稱- 執行用例名稱包含http的所有用例:pytest -s -k http start.py
- 排除用例名稱包含http的用例:pytest -s -k "not http" start.py
- 同時匹配不同的用例名稱:pytest -s -k "method or weibo" start.py
用例執行順序
? unittest用例的執行順序是按照方法名的ASCII碼順序執行的,而pytest有自己內置的執行順序規則,一般是從上往下,即同一個py檔案中,從上往下執行測驗用例,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/274993.html
標籤:其他
上一篇:實在是沒法解決了,本地虛擬機里面安裝了docker,起了一個nginx,但是curl不通:curl: (56) Recv failure: Connection
下一篇:JVM學習筆記之類加載機制【八】
