pytest.ini:pytest的主配置文件,可以改變pytest的默認行為,有很多可配置的選項。
conftest.py:是本地的插件庫,其中的hook函數和fixture將作用於該文件所在的目錄以及所有子目錄。
init.py:每個測試子目錄都包含該文件時,那么在多個測試目錄中可以出現同名測試文件。
pytest.ini位置:放在項目根目錄下 ,名字固定, 運行時程序自動解析:
常用配置:
1、addopts
作用:addopts參數可以更改默認命令行選項,當我們在cmd或Terminal輸入一堆指令去執行用例的時候,就可以用該參數代替了,省去重復性的敲命令工作。命令行只需要輸入pytest即可
--reruns=1:用例失敗重跑一次
-p no:warnings, :不在結果中輸出用例的告警信息
2、配置項testpaths
testpaths指示pytest去哪里訪問。testpaths是相對於根目錄的路徑,限定測試用例的搜索范圍。只有在命令行執行pytest未指定文件目錄參數或測試用例標識符時,該選項才生效。
3、xfail_strict = true
由@pytest.mark.xfail裝飾,但實際通過的測試用例結果為xpassed的用例被報告為失敗,如下test_5所示:
@pytest.mark.run(order=5)
@pytest.mark.xfail(condition=True,reason='test_s預期失敗結果也失敗,就是預期失敗成功了,結果xfailed')
def test_2(self):
print("*****test_2******")
assert 2==1
@pytest.mark.xfail(condition=True,reason='test_s預期失敗卻通過,就是預期失敗失敗了xpassed')
def test_5(self):
print("*****test_5******")
assert 2==2
4、log_cli 是否開啟打印日志
格式:log_cli=True 或False(默認),或者log_cli=1 或 0 ;log_cli=1 可以看到哪個package下的哪個module下的哪個測試用例是否passed還是failed;
log_cli = 1 log_cli_level = INFO log_cli_format = %(asctime)s [%(levelname)8s] %(message)s (%(filename)s:%(lineno)s) log_cli_date_format=%Y-%m-%d %H:%M:%S
************************************pytest 知識點匯總************************************
單元測試框unittest,pytest
unittest是官方的,不需要單獨安裝,pytest是在unittest上擴展的,是需要安裝的
pip install pytest
如何批量運行測試用例
如何斷言
怎樣生成測試報告(可以是html,或aller集成)
基於上面的3個問題,引入了單元測試框架unittest、pytest
- 一、pytest特點如下(比unittest更簡潔更高效):
1、測試文件必須“test_”開頭或“_test”結尾
2、測試方法必須以“test_”開頭
3、測試類命名以"Test"開頭
區別:
unittest必須寫到類里,類繼承unittest.testcases,pytest的類直接Test開頭即可,還可以直接寫函數
- 二、fixture函數
1、setup_function() 函數執行前的操作
2、setup_module() 模塊之前,python文件之前
3、setup_method() 在方法之前執行
4、setup_class() 在每個類之前執行
如果是unittest的話,需要裝飾器 如下所示:
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("start!")
#初始化環境 開始執行腳本
@classmethod
def tearDownClass(cls):
time.sleep(1)
print("end!")
#結束
def test01(self):
print(u"執行測試用例01")
#開始執行測試用例...
def test03(self):
print(u"執行測試用例03")
def test02(self):
print(u"執行測試用例02")
def addtest(self):
print(u"add方法")
if __name__ == "__main__":
unittest.main()
- 三、命令行參數
pytest -sv test_study.py -s會把print打印出來,v打印的更詳細
- 四、失敗重試
pip install pytest-rerunfailures
命令行加參數即可 --reruns 3 (重試3次)
pytest -sv test_study.py --reruns 2 斷言失敗重試2次
- 五、跳過測試函數
加裝飾器
@pytest.mark.skipif(condition,reason=None) 有條件跳過
@pytest.mark.skip 無條件跳過
- 六、預期失敗
@pytest.mark.xfail(condition,reason=None)
2 passed, 1 skipped, 1 xpassed, 1 xfailed, 1 warning in 0.04s 運行結果中的xpassed是預期失敗卻斷言成功了; xfailed預期失敗卻斷言失敗了,
- 七、調整測試用例執行的順序(正常執行順序是按asc碼雲運行的,)
pip install pytest-ordering
加裝飾器 @pytest.mark.run(order=x)
order值全正或全負時,值越小,優先級越高
正負數都有時,正數優先級高