pytest-前后置及fixture運用

1.pytest中的xunit風格前后置處理

pytest中用例的前后置可以直接使用類似于unittest中的前后置處理,但是pytest中的前后置處理方式更

加豐富,分為模塊級、類級、方法級、函數級等不同等級的前后置處理,具體見下面的代碼:

test_demo_001.py文件

def setup_function():#類外使用
print('函數級的前置,每個函數級用例前均運行一次')
def teardown_function():#類外使用
print('函數級的前置,每個函數級用例后均運行一次')
def test_function_001():
print('測試:函數級的用例test_function_001')
def test_function_002():
print('測試:函數級的用例test_function_002')
def setup_module():
print('模塊級的前置,每個文件中所有用例執行前僅運行一次')
def teardown_module():
print('模塊級的后置,每個文件中所有用例執行后僅運行一次')
class TestDemo001:
@classmethod
def setup_class(cls):
print('類級的前置,TestDemo001類下的所有用例執行前運行一次')
@classmethod
def teardown_class(cls):
print('類級的后置,TestDemo001類下的所有用例執行后運行一次')
def setup_method(self): #類中使用
print('方法級的前置,每個方法級用例前均運行一次')
def teardown_method(self): #類中使用
print('方法級的后置,每個方法級用例后均運行一次')
def test_aaa_001(self):
print('測試:類下方法級的用例test_aaa_001')
def test_aaa_002(self):
print('測試:類下方法級的用例test_aaa_002')
class TestDemo002:
@classmethod
def setup_class(cls):
print('類級的前置,TestDemo002類下的所有用例執行前運行一次')
@classmethod
def teardown_class(cls):
print('類級的后置,TestDemo002類下的所有用例執行后運行一次')
def setup_method(self): #等價于def setup(self):
print('方法級的前置,每個方法級用例前均運行一次')
def teardown_method(self): #等價于def teardown(self):
print('方法級的后置,每個方法級用例后均運行一次')
def test_bbb_001(self):
print('測試:類下方法級的用例test_bbb_001')
def test_bbb_002(self):
print('測試:類下方法級的用例test_bbb_002')
'''
setup/teardown 等價于 setup_method/teardown_method;2者僅使用一種即可,如果同時時候,只使
用setup_method/teardown_method
整體運行過程:
setup_module
setup_function--->test_function_001--->teardown_function
setup_function--->test_function_002--->teardown_function
setup_class #TestDemo001的
setup_method--->test_aaa_001--->teardown_method
setup_method--->test_aaa_002--->teardown_method
teardown_class #TestDemo001的
setup_class #TestDemo002的
setup_method--->test_bbb_001--->teardown_method
setup_method--->test_bbb_002--->teardown_method
teardown_class #TestDemo002的
teardown_module
'''

2.使用fixture實現靈活的用例前后置處理

使用Xunit風格的前置后置的使用,我們發現這種前后置無法復用,在另外的一個.py文件或者.py文件中 的類使用時,需要重新再寫,相對不靈活。pytest結合fixture可以實現用例進行靈活的前后置處理。

2.1.@pytest.fixture進行用例的前置處理

import pytest
@pytest.fixture()
def aaa():
print('這是用例的前置操作')
def test_001(aaa):
print('用例test_001')
@pytest.fixture #fixture中不傳參數,可以不帶括號
def bbb():
print('用例前置操作,并給返回值')
return 100
def test_002(bbb):
print('用例test_002')
print('可以使用前置函數的名稱來作為其返回值使用:bbb={}'.format(bbb))
def test_003(bbb,aaa):
print('用例test_003')
print('可以同時做多個前置操作,操作順序按傳遞的參數順序來進行')
print('我們可以發現前置函數aaa,bbb一次定義,可以多次使用,體現了靈活性')
print(bbb,aaa)
if __name__ == '__main__':
pytest.main()

2.2.@pytest.fixture的嵌套使用

#fixture的嵌套,會先調用里層的fixture,在調用外層的fixture
@pytest.fixture()
def aaa():
print('111111111111')
return 'aaa'
@pytest.fixture()
def bbb(aaa):
print('22222222')
return ['bbb',aaa]
def test_001(bbb):
print('測試用例test_001')
print(bbb)
if __name__ == '__main__':
pytest.main()

2.3.@pytest.fixture結合@pytest.mark.parametrize()實現參數

import yaml,pytest

#讀取參數化數據的文件內容
def get_yaml_data(yaml_path):
with open(yaml_path,'r',encoding='utf-8') as f:
data = yaml.safe_load(f)
return data
#獲取yaml文件的數據
yaml_data = get_yaml_data('./login.yaml')
@pytest.fixture()
def case_data(request):
return request.param
#indirect=True時'case_data'當做函數運行,就是這里定義的fixture
#indirect=False時'case_data'當做普通變量使用,默認值為False
#工作中建議使用默認值:False,就當做普通變量使用即可,這時可以不使用fixture進行參數化
@pytest.mark.parametrize('case_data',yaml_data,indirect=True)
def test_002(case_data):
print(case_data)
if __name__ == '__main__':
pytest.mian(['-vs','demo1.py'])

2.4.直接使用@pytest.fixture()來進行參數化

#演示代碼時,需要先在當前目下新建login.yaml文件
#不使用@pytest.mark.parametrize()來參數化,直接利用@pytest.fixture()的傳參功能進行參數化
import yaml,pytest
#封裝讀取參數化數據的文件內容
def get_yaml_data(yaml_path):
with open(yaml_path,'r',encoding='utf-8') as f:
data = yaml.safe_load(f)
return data
#通過在fixture中使用parmas接受參數化的值,將值傳遞給固定的接受參數requests
#如果傳入的是列表,會將列表中的每個元素返回,如果傳入的是字典會將字的每個key返回
@pytest.fixture(params=get_yaml_data('./login.yaml')[0])
def case_data(request):
return request.param
#測試用例test_003使用fixture:case_data,case_data的值就是fixture函數中的返回值
def test_003(case_data):
print(case_data)

2.5.結合yield來進行前后置處理

import pytest,allure
from selenium import webdriver
@pytest.fixture()
def brower():
driver = webdriver.Chrome()
yield driver
driver.quit()

?

?

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

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

相關文章

使用scipy求解優化問題

一、求解二次規劃問題 min(X.T * P * X C.T * X) s.t. Xi > 0 ∑Xi 1 1.定義目標函數 def objective(x):return 0.5 * np.dot(x, np.dot(P, x)) np.dot(c, x)2. 定義等式約束 def equality_constraint(x):return np.sum(x) - 1 3.定義邊界約束:x # …

C++初階-STL簡介

目錄 1.什么是STL 2.STL的版本 3.STL的六大組件 4.STL的重要性 4.1在筆試中 4.2在面試中 4.3.在公司中 5.如何學習STL 6.總結和之后的規劃 1.什么是STL STL(standard template library-標準模板庫);是C標準庫的重要組成部分&#xf…

kivy android打包buildozer.spec GUI配置

這個適合剛剛學習kivyd的道友使用,后面看情況更新 代碼 import tkinter as tk from tkinter import ttk, filedialog, messagebox, simpledialog import configparser import os import json # 新增導入class BuildozerConfigTool:def __init__(self, master):se…

MOOS-ivp使用(一)——水下機器人系統的入門與使用

MOOS-ivp使用(一)——水下機器人系統的入門與使用 MOOS-ivp(Marine Operational Oceanographic System for Intelligent Vehicle Planning)是專為水下機器人(如AUV)設計的開源框架。類似于ROS,…

電子病歷高質量語料庫構建方法與架構項目(智能質控體系建設篇)

引言 隨著人工智能技術的迅猛發展,醫療信息化建設正經歷著前所未有的變革。電子病歷作為醫療機構的核心數據資產,其質量直接關系到臨床決策的準確性和醫療安全。傳統的病歷質控工作主要依賴人工審核,存在效率低下、主觀性強、覆蓋面有限等問題。近年來,基于人工智能技術的…

react學習筆記4——React UI組件庫與redux

流行的開源React UI組件庫 material-ui(國外) 官網: http://www.material-ui.com/#/github: GitHub - mui/material-ui: Material UI: Comprehensive React component library that implements Googles Material Design. Free forever. ant-design(國內螞蟻金服) 官網: Ant…

GPU集群搭建

1. 硬件規劃與采購 GPU 服務器:挑選契合需求的 GPU 服務器,像 NVIDIA DGX 系列就不錯,它集成了多個高性能 GPU。網絡設備:高速網絡設備不可或缺,例如萬兆以太網交換機或者 InfiniBand 交換機,以此保證節點…

ZYNQ 純PL端邏輯資源程序固化流程

ZYNQ 純PL端邏輯資源程序固化 ZYNQ的程序固化流程比傳統的FPGA固化流程復雜很多,Vivado生成的bit文件無法直接固化在ZYNQ芯片中。因為ZYNQ 非易失性存儲器的引腳(如 SD 卡、QSPI Flash)是 ZYNQ PS 部分的專用引腳。這些非易失性存儲器由 PS …

[計算機科學#6]:從鎖存器到內存,計算機存儲的構建與原理

【核知坊】:釋放青春想象,碼動全新視野。 我們希望使用精簡的信息傳達知識的骨架,啟發創造者開啟創造之路!!! 內容摘要:在上一篇文章中,我們深入了解了計算機如…

如何刪除Google Chrome中的所有歷史記錄【一鍵清除】

谷歌瀏覽器記錄了用戶訪問過的網站。這方便了查找,但有時也需要清理。刪除所有歷史記錄很簡單,只要按照以下步驟操作。 1. 打開谷歌瀏覽器 首先要啟動谷歌瀏覽器。點擊右上角的三個點,進入主菜單。 2. 進入歷史記錄界面 在菜單中找到“歷史…

關于瀏覽器對于HTML實體編碼,urlencode,Unicode解析

目錄 HTML實體編碼 URL編碼 Unicode編碼 解析層次邏輯 為什么<script></script>不可以編碼符號 為什么不能編碼JavaScript:協議 為什么RCDATA標簽中的都會被解析成文本 為什么HTML編碼了<>無法執行 HTML實體編碼 通過特殊語法&#xff08;<、>…

【數據分享】2020年中國高精度森林覆蓋數據集(免費獲取)

森林作為全球陸地生態系統的主體&#xff0c;分布面積廣、結構復雜&#xff0c;承擔著調節氣候、維護生態安全、改善環境等方面的重要作用。我國的森林資源豐富&#xff0c;據《中國森林資源報告&#xff1a;2014—2018》統計&#xff0c;我國森林覆蓋率已經達到23.04%。森林覆…

C語言學習之動態內存的管理

學完前面的C語言內容后&#xff0c;我們之前給內存開辟空間的方式是這樣的。 int val20; char arr[10]{0}; 我們發現這個方式有兩個弊端&#xff1a;空間是固定的&#xff1b;同時在聲明的時候必須指定數組的長度&#xff0c;一旦確定了大小就不能調整的。 而實際應用的過程中…

【深度學習-Day 2】圖解線性代數:從標量到張量,理解深度學習的數據表示與運算

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

首頁數據展示

排版 現在做首頁的排版&#xff0c;依舊是偷antd里面的東西 使用card包裹list的樣式 import React from react import axios import { Card, Col, Row, List } from antd import { EditOutlined, EllipsisOutlined, SettingOutlined } from ant-design/icons; import { Avat…

使用Set和Map解題思路

前言 Set和Map這兩種數據結構,在解決一些題上&#xff0c;效率很高。跟大家簡單分享一些題以及如何使用Set和Map去解決這些題目。 題目鏈接 136. 只出現一次的數字 - 力扣&#xff08;LeetCode&#xff09; 138. 隨機鏈表的復制 - 力扣&#xff08;LeetCode&#xff09; 舊…

嘗試leaflet+webassemly

前言 筆者在github發現rust版本的leaflet&#xff0c;發現是用wasm-bindgen包裝的&#xff0c;嘗試使用一下 Issues slowtec/leaflet-rshttps://github.com/slowtec/leaflet-rs 正文 準備 新建一個react項目&#xff0c;安裝rsw依賴 pnpm i -D vite-plugin-rsw cargo ins…

機器學習實戰,天貓雙十一銷量與中國人壽保費預測,使用多項式回歸,梯度下降,EDA數據探索,彈性網絡等技術

前言 很多同學學機器學習時總感覺&#xff1a;“公式推導我會&#xff0c;代碼也能看懂&#xff0c;但自己從頭做項目就懵”。 這次我們選了兩個小數據集&#xff0c;降低復雜度&#xff0c;帶大家從頭開始進行分析&#xff0c;建模&#xff0c;預測&#xff0c;可視化等&…

SQL數據庫系統全解析:從入門到實踐

一、數據庫世界入門指南 在數字時代&#xff0c;數據就像新時代的石油&#xff0c;而數據庫系統就是儲存和管理這些寶貴資源的倉庫。對于初學者來說&#xff0c;理解數據庫的基本概念是邁入這個領域的第一步。 數據庫本質上是一個有組織的數據集合&#xff0c;它允許我們高效…

【大模型】圖像生成:StyleGAN3:生成對抗網絡的革命性進化

深度解析StyleGAN3&#xff1a;生成對抗網絡的革命性進化 技術演進與架構創新代際技術對比StyleGAN3架構解析 環境配置與快速入門硬件要求安裝步驟預訓練模型下載 實戰全流程解析1. 圖像生成示例2. 自定義數據集訓練3. 潛在空間操作 核心技術深度解析1. 連續信號建模2. 傅里葉特…