1. 簡介
今天主要學習一下pytest的執行用例的規則。
2. 通過help幫助查看pytest如何使用
.查看pytest命令行參數,可以用pytest -h 或pytest --help查看
3. 用例設計原則
- 文件名以test_*.py文件和*_test.py
- 以test_開頭的函數
- 以Test開頭的類
- 以test_開頭的方法
- 所有的包pakege必須要有__init__.py文件
4.開始用例設計
4.1 用例設計目錄
為了不必要的麻煩,請按照我的目錄設計和寫測試用例
4.2?test_class.py參考代碼
# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
# content of test_class.py
class TestClass:def test_one(self):x = "this"assert 'h' in xdef test_two(self):x = "hello"assert hasattr(x, 'check')def test_three(self):a = "hello"b = "hello world"assert a in b
4.3?test_sample.py參考代碼
# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊# content of test_sample.py
def func(x):return x + 1def test_answer():assert func(3) == 5
5. 執行方式
cmd執行pytest用例有三種方法,以下三種方法都可以,一般推薦第一個。簡單、好記、好寫。
pytest
py.test
python -m pytest
如果不帶參數,在某個文件夾下執行時,它會查找該文件夾下所有的符合條件的用例(查看用例設計原則)
6. 執行規則
1.執行某個目錄下所有的用例
pytest 文件名/
2.執行某一個py文件下用例
pytest 腳本名稱.py
3.-k 按關鍵字匹配
pytest -k “MyClass and not method”
?這將運行包含與給定字符串表達式匹配的名稱的測試,其中包括Python使用文件名,類名和函數名作為變量的運算符。 上面的例子將運行TestMyClass.test_something但不運行TestMyClass.test_method_simple
4.按節點運行
每個收集的測試都分配了一個唯一的nodeid,它由模塊文件名和后跟說明符組成來自參數化的類名,函數名和參數,由:: characters分隔。
運行.py模塊里面的某個函數
pytest test_mod.py::test_func
運行.py模塊里面,測試類里面的某個方法
pytest test_mod.py::TestClass::test_method
5.標記表達式
pytest -m slow
將運行用@ pytest.mark.slow
裝飾器修飾的所有測試。
6.從包里面運行
pytest —pyargs pkg.testing
這將導入pkg.testing
并使用其文件系統位置來查找和運行測試。
7.pytest -x( 遇到錯誤時停止測試)
pytest -x test_class.py
從運行結果可以看出,本來有3個用例,第二個用例失敗后就沒繼續往下執行了
8.pytest -maxfail=num(當用例錯誤個數達到指定數量時,停止測試)
pytest --maxfail=1
7. pycharm配置pytest
以pytest方式運行,需要改該工程設置默認的運行器:file->Setting->Tools->Python Integrated Tools->項目名稱->Default test runner->選擇pytest
8. pycharm運行三種方式
上邊已經介紹了如何在cmd執行pytest用例,平常我們寫代碼在pycharm比較多,寫完用例之后,需要調試看看,是不是能正常運行,如果每次跑去cmd執行,太麻煩,所以很有必要學習如何在pycharm里面運行pytest用例
8.1xx.py腳本方式直接執行
1.以xx.py腳本方式直接執行,當寫的代碼里面沒用到unittest和pytest框架時,并且腳本名稱不是以test_開頭命名的,此時pycharm會以xx.py腳本方式運行
?2.參考代碼
# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
def hello():print("hello world !")if __name__=="__main__":hello()
8.2?以unittest方式運行
1.當腳本命名為test_xx.py時,用到unittest框架,此時運行代碼,pycharm會自動識別到以unittest方式運行
8.3?pytest方式運行
以pytest方式運行,需要改該工程設置默認的運行器:file->Setting->Tools->Python Integrated Tools->項目名稱->Default test runner->選擇pytest
備注:pytest是可以兼容unittest框架代碼的
9. 趁熱打鐵-pycharm寫pytest代碼
在pycharm里面寫pytest用例,先導入pytest
9.1 代碼實現:
9.2 參考代碼:
# coding=utf-8
# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行
# 1.導入模塊
# content of test.py
import pytestclass TestClass:def test_one(self):x = "this"assert 'h' in xdef test_two(self):x = "hello"assert hasattr(x, 'check')def test_three(self):a = "hello"b = "hello world"assert a in bif __name__ == "__main__":pytest.main('-q test.py')
9.3 運行結果:
1.運行代碼后,控制臺打印如下圖的結果
2.運行結果“.F. ” 點是代表測試通過,F是Fail的意思,1 warnings是用于pytest.main('-q test_class.py')里面參數需要傳list,多個參數放list就不會有警告了
pytest.main(['-q', 'test.py')
10. pycharm設置pytest
1.新建一個工程后,左上角file->Setting->Tools->Python Integrated Tools->項目名稱->Default test runner->選擇pytest
2.改完之后,再重新建個腳本(注意是先改項目運行方式,再寫代碼才能出來),接下來右鍵運行就能出來pytest運行了
3.pytest是可以兼容unittest腳本的,之前寫的unittest用例也能用pytest框架去運行