pytest教程-11-初識fixture

領取資料,咨詢答疑,請?wei:? June__Go

上一小節我們學習了使用allure生成html測試報告的方法,本小節我們講解一下pytest fixture測試夾具的使用方法。

前言

在做自動化的過程中,編寫用例時候需要用到用例的前置和用例的后置,其中pytest中有setup_class和teardown_class可以幫助我們完成這些,但是不夠完善而且靈活性不夠強。舉個簡單的例子,一個calss中有3條用例,其中2條需要登錄,1條不需要登錄,這個時候如果在用setup和teardown來做就有點不方便。這個時候就引入了新的知識點fixture。

fixture介紹

fixture是pytest精髓所在,就像unittest中的setup和teardown一樣,但相對之下它的功能更加強大和靈活。
fixture的作用

1.做測試前后的初始化設置,如測試數據準備,鏈接數據庫,打開瀏覽器等這些操作都可以使用fixture來實現

2.測試用例的前置條件可以使用fixture實現

3.支持經典的xunit fixture ,像unittest使用的setup和teardown

4.fixture可以實現unittest不能實現的功能,比如unittest中的測試用例和測試用例之間是無法傳遞參數和數據的,但是fixture卻可以解決這個問題

fixture的定義和源碼

我們使用@pytest.fixture()來定義fixture函數。fixture()即可無參數進行定義,也可以帶參數定義。

@pytest.fixture()無參數進行定義

import pytest
@pytest.fixture      #fixture()未帶任何參數,聲明一個fixture函數
def fixture_demo():print("這個是一個fixture的demo演示")
def test_demo(fixture_demo):  #調用fixture函數——fixture_demoprint("這是一個測試demo。") 

@pytest.fixture()有參數的進行定義

import pytest
@pytest.fixture(params=[1,2,3]) #fixture()帶著parmas對ids()進行fixture函數的聲明
def ids(request):data=request.paramprint(f'獲取測試數據{data}')return data
def test_ids(ids):  #調用fixture函數-ids()print(ids) 

fixture源碼如下

def fixture(  # noqa: F811fixture_function: Optional[_FixtureFunction] = None,*,scope: "Union[_Scope, Callable[[str, Config], _Scope]]" = "function",params: Optional[Iterable[object]] = None,autouse: bool = False,ids: Optional[Union[Iterable[Union[None, str, float, int, bool]],Callable[[Any], Optional[object]],]] = None,name: Optional[str] = None
) -> Union[FixtureFunctionMarker, _FixtureFunction]:fixture_marker = FixtureFunctionMarker(scope=scope, params=params, autouse=autouse, ids=ids, name=name,)# Direct decoration.if fixture_function:return fixture_marker(fixture_function)return fixture_marker

通過上述源碼可以看到,fixture中一共有5個參數分別是:

  • scope:fixture的作用域,默認為function;
  • params:fixture的參數
  • autouse:默認:False,需要用例手動調用該fixture;如果是True,所有作用域內的測試用例都會自動調用該fixture;
  • ids: fixture參數進行id化命名
  • name:裝飾器的名稱,同一模塊的fixture相互調用建議寫不同的name。

fixture調用

調用fixture有三種方式

1、在測試用例中直接調用

將fixture名稱作為參數傳入測試用例,如果fixture有返回值,那么測試用例將會接收返回值。

import pytest@pytest.fixture()
def fixtureFunc():return 'fixtureFunc'def test_fixture(fixtureFunc):print('我調用了{}'.format(fixtureFunc))class TestFixture(object):def test_fixture_class(self, fixtureFunc):print('在類中使用fixture "{}"'.format(fixtureFunc))if __name__=='__main__':pytest.main(['-s', 'test_fixture.py'])

2、使用@pytest.mark.usefixtures('fixture')裝飾器

每個函數或者類前使用@pytest.mark.usefixtures('fixture')裝飾器裝飾

import pytest@pytest.fixture()
def fixtureFunc():print('\n fixture->fixtureFunc')@pytest.mark.usefixtures('fixtureFunc')
def test_fixture():print('in test_fixture')@pytest.mark.usefixtures('fixtureFunc')
class TestFixture(object):def test_fixture_class(self):print('in class with text_fixture_class')if __name__=='__main__':pytest.main(['-s', 'test_fixture.py'])

3、 使用autouse參數

指定fixture的參數autouse=True這樣每個測試用例會自動調用fixture(其實這里說的不是很準確,因為還涉及到fixture的作用范圍,那么我們這里默認是函數級別的,后面會具體說fixture的作用范圍)

import pytest
@pytest.fixture(autouse=True)
def fixtureFunc():print('\n fixture->fixtureFunc')def test_fixture():print('in test_fixture')class TestFixture(object):def test_fixture_class(self):print('in class with text_fixture_class')if __name__=='__main__':pytest.main(['-v', 'test_fixture.py'])

最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走,希望可以幫助到大家!領取資料,咨詢答疑,請?wei:? June__Go

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696754.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2024年了,抖店還能做嗎?適合新手嗎?

我是電商珠珠 現在已經24年了,抖店也已經發展了四年了。其中有很多在門外觀望的人,還在猶豫不決。認為抖店發展到今天,所有的紅利早已在20年的時候就消失殆盡了,特別是沒有經驗的如果入駐了,既不能享受平臺紅利&#…

后端程序員入門react筆記(四)-綜合運用,寫一個小demo

樣式模塊化 有時候我們會遇到這樣的問題,有兩個css對一個class聲明了樣式,這樣的話后引入的css會覆蓋前面的css樣式,導致樣式沖突,那么我們怎么解決這種問題呢,我們可以使用樣式的模塊化,我們起名一個inde…

全棧筆記_瀏覽器擴展篇(插件開發 - chrome瀏覽器proxy代理)

代理類型 常用的包括http、https、socks代理 配置權限 要讓擴展使用代理接口,需要聲明proxy權限: // manifest.json "permissions": ["proxy" ]設置代理服務器 chrome.proxy.settings.set({ scope: ‘regular’, value: 代理配置},回調函數) 代理配…

【前端面經2】京東一面

題目來源:牛客網 自我介紹 動態參數解析的解決方案 對于動態部分使用…args進行接受,可以把動態部分提取成數組 前端安全問題 CDN劫持 內容安全策略CSP 安全沙箱 Iframe 跨站腳本攻擊XSS 攻擊者通過在目標網站上注入惡意腳本,使之在…

OpenHarmony驅動框架HDF中設備管理服務構建過程詳解

前言 如下圖,開源鴻蒙系統驅動框架HDF在內核中的實現,可以分為向用戶層提供設備服務的管理模塊(Manager),和實際管理硬件的Host模塊。 Manager分為DeviceManageService和 DeviceServiceManage,前者負責提供…

1.WEB滲透測試-前置基礎知識-ip地址

ip地址: ip地址指的是互聯網協議地址,是IP協議提供的一種統一的地址格式,以每一臺聯網的主機都有一個對應的ip地址,ip地址也可以理解為分配給用戶上網使用的網際協議的設備的數字標簽。通俗的來說就是你打電話時候的每個人都有自己…

AIGC 實戰:如何使用 Docker 在 Ollama 上離線運行大模型(LLM)

Ollama簡介 Ollama 是一個開源平臺,用于管理和運行各種大型語言模型 (LLM),例如 Llama 2、Mistral 和 Tinyllama。它提供命令行界面 (CLI) 用于安裝、模型管理和交互。您可以使用 Ollama 根據您的需求下載、加載和運行不同的 LLM 模型。 Docker簡介 D…

在Mac上搭建MongoDB環境

最近工作中需要裝MongoDB環境,搭建過程中遇到了一些問題,在這里記錄一下安裝MongoDB環境的方法以及問題的解決方法。有兩種安裝MongoDB的方法:brew安裝和手動安裝。 目錄 使用Homebrew安裝MongoDB 手動安裝MongoDB(不使用Homebr…

備戰藍橋杯 Day11(滾動數組優化+完全背包)

01背包的滾動數組優化 【題目描述】 經典0—1背包問題,有n個物品,編號為i的物品的重量為w[i],價值為c[i],現在要從這些物品中選一些物品裝到一個容量為m的背包中,使得背包內物體在總重量不超過m的前提下價值盡量大。 #include&…

python_數據分析_numpy庫

一、創建ndarray *ndarray是NumPy中表示數組的重要類型 1、使用np.array()創建 *參數列表:[1,2,3,4] 注:(1)、numpy默認ndarray的所有元素的類型是相同的 ? (2)、如果傳入的數據類型不同,會被按照優先級強制轉換為同一類型,其…

vue--兩種定時任務cron表達式組件比較選擇

背景&#xff1a; 使用vue頁面中cron表達式的組件&#xff0c;實現定時任務參數配置。 方案1 vue-cron 安裝插件 npm install vue-cron --save 全局引入&#xff0c;修改main.js import Vue from vue import VueCron from vue-cron Vue.use(VueCron);頁面配置 html<el-…

Java入門-可重入鎖

可重入鎖 什么是可重入鎖? 當線程獲取某個鎖后&#xff0c;還可以繼續獲取它&#xff0c;可以遞歸調用&#xff0c;而不會發生死鎖&#xff1b; 可重入鎖案例 程序可重入加鎖 A.class,沒有發生死鎖。 sychronized鎖 package com.wnhz.lock.reentrant;public class Sychroniz…

多普勒變化率的應用 與 FPGA

1.多普勒變化率是一個描述波源和觀察者相對速度變化的物理量&#xff0c;它與加速度有關。 多普勒效應是指當波源和觀察者之間存在相對運動時&#xff0c;觀察者接收到的波頻率與波源發射的頻率之間的差異。這種現象在聲波、電磁波等多種波動中都會出現。多普勒變化率通常用來…

linux系統內核升級

1.查看舊版本內核 2.導入密鑰 rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org 3.安裝yum源 rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm4.啟用elrepo-kernel倉庫并安裝最新內核版本 yum --enablerepoelrepo-kernel install …

一文弄明白KeyedProcessFunction函數

引言 KeyedProcessFunction是Flink用于處理KeyedStream的數據集合&#xff0c;它比ProcessFunction擁有更多特性&#xff0c;例如狀態處理和定時器功能等。接下來就一起來了解下這個函數吧 正文 了解一個函數怎么用最權威的地方就是 官方文檔 以及注解&#xff0c;KeyedProc…

c++實現棧和隊列類

c實現棧和隊列類 棧(Stack)Stack示意圖Stack.cpp 隊列(queue)queue 示意圖queue.cpp 棧(Stack) Stack示意圖 Stack.cpp #pragma once #include "ListStu.cpp"template<typename T> class Stack { public: /* * void push(T& tDate)* 參數一 &#xff1a;…

【OCR專題文章】

目錄 一、數據獲取及預處理方法篇 二、兩階段算法篇(檢測識別) 三、一階段算法篇(Enc-Dec) 四、拓新篇 本欄聚焦在OCR的相關算法&#xff0c;專欄內文章的代碼均已實現。 一、數據獲取及預處理方法篇 【數據獲取】 合同數據獲取&#xff1a;【OCR】【專題系列】二、數據獲取-…

解決windows無法訪問wsl下docker服務

筆者在初學使用wsl跑docker時,遇到了windows無法訪問的問題,并且瀏覽了大部分的文章,發現并沒有起效,在反復試錯終于成功之后,總結為以下幾點: 1.升級至wsl2 2.將.wslconfig文件(用戶文件夾下)中的如下鏡像服務關閉刪除 networkingModemirrored 3.打開wsl防火墻相應的端口 …

記錄解決uniapp使用uview-plus在vue3+vite+ts項目中打包后樣式不能顯示問題

一、背景 從 vue2uview1 升級到 vue3vitetsuview-plus ,uview組件樣式打包后不顯示&#xff0c;升級前uview 組件是可以正常顯示&#xff0c;升級后本地運行是可以正常顯示&#xff0c;但是打包發布成H5后uview的組件無法正常顯示&#xff0c;其他uniapp自己的組件可以正常顯示…

Vue 中 onclick和@click區別

文章目錄 一、直接上結論二、驗證代碼&#xff0c;可直接運行三、點擊結果 一、直接上結論 onclick 只能觸發 js的原生方法&#xff0c;不能觸發vue的封裝方法click 只能觸發vue的封裝方法&#xff0c;不能觸發js的原生方法 二、驗證代碼&#xff0c;可直接運行 <!DOCTYP…