1坦胶、pytest.ini
全局配置文件
通過全局的配置文件運(yùn)行測試用例杨凑,這種方式才是在實(shí)際企業(yè)自動(dòng)化中的應(yīng)用方式滤奈。(前面三種方式是自己測試的時(shí)候使用)
pytest.ini
文件是Pytest的主配置文件,可以改變Pytest的運(yùn)行方式撩满,pytest.ini
文件的名字是固定的蜒程,不能改動(dòng)。
pytest.ini
文件可以改變Pytest測試框架默認(rèn)的行為(查找執(zhí)行測試用例的行為)伺帘,Pytest會(huì)讀取pytest.ini
文件中配置信息昭躺,按指定的方式去運(yùn)行測試用例。
pytest.ini
文件要注意:
- 存放位置:一般放在項(xiàng)目的根目錄(即當(dāng)前項(xiàng)目的頂級(jí)文件夾下)伪嫁。
- 編碼格式:必須是ANSI編碼格式领炫,可以使用notpad++修改編碼格式。
-
pytest.ini
文件中不能使用任何中文符號(hào)(也可以用张咳,最好少用)帝洪。 - 配置了
pytest.ini
文件后,不管是主函數(shù)模式運(yùn)行用例脚猾,還是命令行模式運(yùn)行用例葱峡,都會(huì)去讀取pytest.ini
配置文件中的內(nèi)容。 - CMD命令行中執(zhí)行
pytest -h
命令婚陪,可以查看pytest.ini
的設(shè)置選項(xiàng)族沃。
下面是最基礎(chǔ)的pytest.ini
文件的編寫,如下:
[pytest]
# 命令行的參數(shù)泌参,用空格分隔
addopts = -s --alluredir report
# 測試用例的路徑
testpaths = scripts
# 模塊名的規(guī)則
python_files = test_parametrize.py
# 類名的規(guī)則
python_classes = Test*
# 方法名的規(guī)則
python_functions = test*
提示:用的時(shí)候把中文全部刪除掉脆淹。
2、Pytest執(zhí)行測試用例的順序
Unittest
測試框架沽一,默認(rèn)是以用例名的ascll
大小盖溺,來決定測試用例的執(zhí)行的順序。
Pytest
測試框架:默認(rèn)從上到下順序執(zhí)行測試用例铣缠,也就是文件中先寫的誰烘嘱,誰就先執(zhí)行昆禽。
我們可以通過函數(shù)裝飾器的?式,標(biāo)記被測試函數(shù)來決定用例執(zhí)?的順序蝇庭。
需要使用pytest-ordering
插件醉鳖。
安裝?式:pip install pytest-ordering
使??法:
- 標(biāo)記于被測試函數(shù)之上,
@pytest.mark.run(order=x)
哮内。 - 根據(jù)order傳?的參數(shù)來解決運(yùn)?順序盗棵。
- order值全為正數(shù)或全為負(fù)數(shù)時(shí),運(yùn)?順序:值越?北发,優(yōu)先級(jí)越?纹因。
- 正數(shù)和負(fù)數(shù)同時(shí)存在:正數(shù)優(yōu)先級(jí)?。
示例:
"""
1.學(xué)習(xí)目標(biāo)
掌握pytest中用例執(zhí)行順序的控制
2.操作步驟
pytest框架下用例執(zhí)行的默認(rèn)順序: 是按照書寫順序從上到下執(zhí)行
控制測試用例執(zhí)行順序琳拨,需要安裝pytest-ordering庫(插件)
pip install pytest-ordering
控制用例執(zhí)行順序方法:
在測試用例前添加一個(gè)裝飾
@pytest.mark.run(order=數(shù)字)
執(zhí)行順序問題:order=數(shù)字
0 > 較小的正數(shù) > 較大正數(shù) > 不使用order > 較小負(fù)數(shù) > 較大負(fù)數(shù)
3.需求
"""
# 1.導(dǎo)入pytest
import pytest
# 2.編寫測試用例
@pytest.mark.run(order=2)
def test_login():
"""登錄用例"""
print("登錄步驟")
assert "abcd" in "abcdefg"
@pytest.mark.run(order=1)
def test_register():
"""注冊(cè)用例"""
print("注冊(cè)步驟")
assert True
@pytest.mark.run(order=4)
def test_shopping():
"""購物下單"""
print("購物流程")
assert True
@pytest.mark.run(order=3)
def test_cart():
"""購物車用例"""
print("購物車流程")
assert True
if __name__ == '__main__':
pytest.main()
"""
執(zhí)行結(jié)果:
test_order.py::test_register PASSED [ 25%]注冊(cè)步驟
test_order.py::test_login PASSED [ 50%]登錄步驟
test_order.py::test_cart PASSED [ 75%]購物車流程
test_order.py::test_shopping PASSED [100%]購物流程
============================== 4 passed in 0.06s ==============================
Process finished with exit code 0
"""