溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Pytest中conftest.py怎么用

發(fā)布時(shí)間:2021-06-28 10:42:39 來(lái)源:億速云 閱讀:181 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)Pytest中conftest.py怎么用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

什么是conftest.py

我們之前了解了fixture,fixture可以直接定義在測(cè)試腳本中,但是有些時(shí)候,我們希望一個(gè)fixture可以被復(fù)用,這就需要對(duì)fixture進(jìn)行集中管理,Pytest使用文件conftest.py集中管理固件.在復(fù)雜的項(xiàng)目中,可以在不同的目錄層級(jí)定義conftest.py,其作用域?yàn)槠渌诘哪夸浐妥幽夸?,通常情況下,conftest.py@pytest.fixture()會(huì)結(jié)合使用,來(lái)實(shí)現(xiàn)全局的前后置處理。

conftest.py特點(diǎn)

  • conftest.py文件的名稱(chēng)是固定的,不能修改

  • conftest.py與運(yùn)行的用例要在同一個(gè)pakage下,并且有__init__.py文件

  • 不需要import導(dǎo)入conftest.py文件,pytest用例會(huì)自動(dòng)識(shí)別該文件,放到根目錄下可以全局目錄調(diào)用,放在某個(gè)package下,那就在該package內(nèi)有效

  • 不同目錄可以有自己的conftest.py,一個(gè)項(xiàng)目中可以有多個(gè)conftest.py

  • pytest會(huì)默認(rèn)讀取conftest.py里面的所有fixture,所有同目錄測(cè)試文件運(yùn)行前都會(huì)執(zhí)行conftest.py文件

conftest.py用法

在我們實(shí)際的測(cè)試中,conftest.py文件需要結(jié)合fixture來(lái)使用,所以fixture中參數(shù)scope也適用conftest.py中fixture的特性,這里再說(shuō)明一下

  • conftest中fixture的scope參數(shù)為session,所有的測(cè)試文件執(zhí)行前(后)執(zhí)行一次conftest.py文件中的fixture。

  • conftest中fixture的scope參數(shù)為module,每一個(gè)測(cè)試.py文件執(zhí)行前(后)都會(huì)執(zhí)行一次conftest.py文件中的fixture

  • conftest中fixture的scope參數(shù)為class,每一個(gè)測(cè)試文件中的測(cè)試類(lèi)執(zhí)行前(后)都會(huì)執(zhí)行一次conftest.py文件中的fixture

  • conftest中fixture的scope參數(shù)為function,所有文件的測(cè)試用例執(zhí)行前(后)都會(huì)執(zhí)行一次conftest.py文件中的fixture

conftest.py實(shí)際案例

我們按照這樣的目錄新建一個(gè)項(xiàng)目

Pytest中conftest.py怎么用

在根目錄conftestdemo下

根目錄中的conftest.py文件中,一般寫(xiě)全局的fixture,比如登錄

conftest.py

import pytest


@pytest.fixture(scope="session")
def login():
    print("***登錄成功,返回用戶名***")
    name = "rockche"
    yield name
    print("***退出登錄***")


@pytest.fixture(autouse=True)
def get_name(login):
    name = login
    print(f"--每個(gè)用例都調(diào)用外層fixiture:打印用戶name:{name}--")

根目錄下的測(cè)試用例

test_1.py

def test_get_name(login):
    name = login
    print("***基礎(chǔ)用例:獲取用戶name***")
    print(f"用戶名:{name}")

運(yùn)行conftestdemo下的所有用例

run.py

import pytest

if __name__ == '__main__':
    pytest.main(["-s", "../conftestdemo/"])

test_baidu目錄下

配置針對(duì)baidu網(wǎng)站的測(cè)試用例獨(dú)有的fixture

conftest.py

import pytest


@pytest.fixture(scope="module")
def open_baidu(login):
    name = login
    print(f"用戶 {name} 打開(kāi)baidu")

test_case1.py

def test_case2_01(open_baidu):
    print("搜索pytest")


def test_case2_02(open_baidu):
    print("搜索博客園")

test_cnblogs目錄下

沒(méi)有__init__.py文件也沒(méi)有conftest.py文件

test_case1.py

def test_no_fixture(login):
    print("沒(méi)有__init__文件,直接進(jìn)入cnblogs", login)

test_taobao目錄下

配置針對(duì)taobao網(wǎng)站的測(cè)試用例獨(dú)有的fixture

conftest.py

import pytest


@pytest.fixture(scope="function")
def open_taobao(login):
    name = login
    print(f"用戶 {name} 進(jìn)入淘寶")

test_case1.py

class TestTaobao:
    def test_case1_01(self, open_taobao):
        print("選購(gòu)商品")

    def test_case1_02(self, open_taobao):
        print("進(jìn)入結(jié)算界面")

運(yùn)行run.py

Pytest中conftest.py怎么用

關(guān)于“Pytest中conftest.py怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI