柚子快報(bào)邀請(qǐng)碼778899分享:pytest
柚子快報(bào)邀請(qǐng)碼778899分享:pytest
學(xué)習(xí)視頻
https://www.bilibili.com/video/BV1py4y1t7bJ/?spm_id_from=333.337.search-card.all.click&vd_source=5d1d6a8d64d590dd81191ca4c12bf2f2
pytest插件
pytest-html (生成html格式的測(cè)試報(bào)告) pytest-xdist 測(cè)試用例分布式執(zhí)行,多cpu分發(fā) pytest-ordering 用于改變用例執(zhí)行的順序 pytest-rerunfailures 用例失敗后重跑 allure-pytest 用于生成美觀的測(cè)試報(bào)告
使用規(guī)范
1、模塊名必須以test_開(kāi)頭或者_(dá)test結(jié)尾 2、測(cè)試必須以Test開(kāi)頭,并且不能有init方法 3、測(cè)試方法必須以test開(kāi)頭
運(yùn)行
指定運(yùn)行目錄: pytest -vs testcase 指定運(yùn)行方法: pytest -vs testcase/test_interface.py::test_04_func 多線程運(yùn)行: pytest -vs testcase -n 2 失敗重跑: pytest -vs testcase --reruns 2 跳過(guò)用例: pytest -vs testcase -k “ao” 只執(zhí)行包含ao字符串的測(cè)試用例
執(zhí)行順序: 默認(rèn)執(zhí)行順序從上往下,@pytest.mark.run(order=1) 指定執(zhí)行順序
配置運(yùn)行規(guī)則,pytest.ini放在根目錄下
[pytest]
addopts = -vs --html ./report/report.html # 命令行的參數(shù),用空格分隔
testpaths = ./testcase # 測(cè)試用例執(zhí)行的路徑
python_files = test_*.py # 模塊名的規(guī)則
python_classes = Test* # 配置執(zhí)行的測(cè)試類(lèi)名
python_functions = test # 配置執(zhí)行的函數(shù)名
markers =
smoke: smoke
usermanage: usermanage
如果報(bào)unicodeDecodeError: ‘gbk’ … 需要把注釋刪掉,然后用notepad++將文件編碼轉(zhuǎn)為ANSI
分組執(zhí)行:在對(duì)應(yīng)函數(shù)上加裝飾器@pytest.mark.smoke smoke自定義的,可以隨意編寫(xiě),跟配置文件中一致 執(zhí)行命令為:`pytest -m “smoke or usermanage” # 運(yùn)行smoke和usermanage裝飾器的函數(shù)
跳過(guò)用例: 有條件跳過(guò):@pytest.mark.skip(age<18, reason=“ad”) 無(wú)條件跳過(guò):@pytest.mark.skip(reason=“ad”)
生成報(bào)告:加載配置文件addopts中
前后置和固件
setup() 每條用例執(zhí)行之前都會(huì)執(zhí)行一遍 setup_class() 所有用例執(zhí)行之前只執(zhí)行一次,如創(chuàng)建日志對(duì)象,創(chuàng)建數(shù)據(jù)庫(kù)連接,創(chuàng)建接口的請(qǐng)求對(duì)象 teardown() 每條用例執(zhí)行之后都會(huì)執(zhí)行一遍 setup_class() 所有用例執(zhí)行之后只執(zhí)行一次,如銷(xiāo)毀日志對(duì)象,銷(xiāo)毀數(shù)據(jù)庫(kù)連接,銷(xiāo)毀接口的請(qǐng)求對(duì)象
class Test():
def setup(self):
print("aaaa")
def test_01(self):
print("111")
def test_02(self):
print("333")
def teardown(self):
print("bbbb")
# 執(zhí)行結(jié)果為 aaaa 111 bbbb aaaa 333 bbbb
針對(duì)部分用例的前后置:@pytest.fixture(scope=‘fuction’, params=[“”], autouse=Fasle, ids=“”, name=“”)
參數(shù)詳解: scope:表示作用域,默認(rèn)時(shí)fuction,可選class,module,package/session params:參數(shù)化,支持list,tulp, dict autouse:自動(dòng)使用,全部方法使用,默認(rèn)時(shí)False ids:當(dāng)使用params參數(shù)化時(shí),給每一個(gè)值設(shè)置一個(gè)變量名,意義不大 name:給裝飾的方法取別名
實(shí)例:
@pytest.fixture(scope="function")
def my_fixture():
print("這是前置")
yield
print("這是后置")
class TestA:
def test_01(self):
print("222")
def test_01(self, my_fixture):
print("3333")
## 傳參
@pytest.fixture(scope="function" params=["1", "2"])
def my_fixture(request):
print("這是前置")
yield request.param
print("這是后置")
class TestA:
def test_01(self):
print("222")
# 會(huì)被執(zhí)行兩次
def test_01(self, my_fixture):
print("3333")
通過(guò)conftest.py和@pytest.fixture() 實(shí)現(xiàn)全局前置應(yīng)用,如全局登錄
conftest.py文件時(shí)單獨(dú)存放的一個(gè)家具配置文件,名稱(chēng)不能更改。且要與運(yùn)行的測(cè)試用例放到同一層級(jí),不同層級(jí)都可以創(chuàng)建一個(gè)conftest.py
# conftest.py
@pytest.fixture(scope="function" params=["1", "2"])
def my_fixture(request):
print("這是前置")
yield request.param
print("這是后置")
添加好后,同一層級(jí)和下層級(jí)的測(cè)試用例就都可以使用該fixture了
斷言 assert
assert 1==2
pytest+allure
下載: https://github.com/allure-framework/allure2/releases
[pytest]
addopts = -vs --alluredir ./temp # 命令行的參數(shù),用空格分隔
testpaths = ./testcase # 測(cè)試用例執(zhí)行的路徑
python_files = test_*.py # 模塊名的規(guī)則
python_classes = Test* # 配置執(zhí)行的測(cè)試類(lèi)名
python_functions = test # 配置執(zhí)行的函數(shù)名
markers =
smoke: smoke
usermanage: usermanage
import os
import pytest
if __name__ == '__main__':
pytest.main()
os.system('allure generate ./temp -o ./report --clean')
數(shù)據(jù)驅(qū)動(dòng)
import pytest
data_set = [(1, 1), (2, 1), (3, 1)]
@pytest.mark.parametrize("test_input,expected", data_set)
def test_is_equal(test_input, expected):
assert is_equal(test_input, expected)
或者用方法返回參數(shù)
import pytest
def data_set():
return [(1, 1), (2, 1), (3, 1)]
@pytest.mark.parametrize("test_input,expected", data_set)
def test_is_equal(test_input, expected):
assert is_equal(test_input, expected)
柚子快報(bào)邀請(qǐng)碼778899分享:pytest
文章來(lái)源
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。