pytest之fixture的詳細使用

2022-02-01 09:56:44 字數 1555 閱讀 9020

前言

1、首先要理解unittest中setup、teardown的作用,可以實現在執行用例前或結束後加入一些操作,但這種都是針對整個測試類全域性生效的

2、如果有以下場景:用例 1 需要先登入,用例 2 不需要登入,當每個測試用例的執行環境和條件都不一樣時,顯然無法用 setup 和 teardown 來實現

3、fixture可以使環境管理更靈活,每個測試用例可以有自己的fixture

1、命名方式靈活,不侷限於 setup 和teardown 這幾個命名

2、需要和conftest.py同時使用,可以實現資料共享,不需要 import 就能自動找到fixture

3、scope="module" 可以實現多個.py 跨檔案共享前置

4、scope="session" 以實現多個.py 跨檔案使用乙個 session 來完成多個用例

將fixture名稱作為測試用例函式的輸入引數

測試用例加上裝飾器:@pytest.mark.usefixtures(fixture_name)

注意:新增了 @pytest.fixture ,如果fixture還想依賴其他fixture,需要用函式傳參的方式,不能用 @pytest.mark.usefixtures() 的方式,否則不會生效

@pytest.fixture(scope="session")

def open():

print("===開啟瀏覽器===")

@pytest.fixture #

@pytest.mark.usefixtures("open") #不生效

def login(open): # 方法級別前置操作setup

print(f"輸入賬號,密碼先登入")

前面都是setup的操作,那麼現在就來講下teardown怎麼實現

用fixture實現teardown並不是乙個獨立的函式,而是用 yield 關鍵字來開啟teardown操作

注意:1、如果yield前面的**,即setup部分已經丟擲異常了,則不會執行yield後面的內容

2、如果測試用例丟擲異常,yield後面的內容還是會正常執行

3、帶有 yield 的函式在 python 中被稱之為 generator(生成器),生成器就是一邊迴圈一邊計算的機制,yield 的好處是顯而易見的,把乙個函式改寫為乙個 generator 就獲得了迭代能力

4、與return的區別:return後面的**不會執行,yield後面的**繼續執行

pytest 之 fixture引數化

pytest 之 fixture引數化 前面通過unittest框架介紹了ui自動化po模式,basepage封裝後,unittest框架搭建的ui自動化框架,基本就成型了。前面的幾篇pytest文章,也簡要介紹了pytest和unittest框架的相同與不同之處。將unittest框架替換為pyt...

pytest 之 fixture 的前置後置功能

一 fixture 之 conftest.py 檔案 二 建立 conftest.py 檔案,定義前置 後置 fixture 函式根據關鍵字 yield 作為前置和後置的分割線,並且 yield 也可以接收返回值,返回元祖,作用相當於return yield 譯 優特 分割線,返回前置結果 impo...

pytest框架之fixture前置和後置

fixture函式根據關鍵字yield作為前置和後置的分割線,並且yield也可以接收返回值,作用相當於return import pytest pytest.fixture definit demo print 這是測試用例的前置 a 1 yield a 分割線 yield 返回值 print 這...