# -*- coding: utf-8 -*-
# @Time : 2023/6/19 21:04
# @Author : yanfa
# @user : yanfa
# @File : pytest_for_fixture.py
# @remark: 測(cè)試用例全生命周期管理-fixture
""""""
import pytest
"""
包括fixture 作為參數(shù)使用勒魔、fixture 作用范圍、yield 用法在辆、conftest.py 配置文件的使用悲没、autouse 參數(shù)的用法暖庄、通過 fixture 實(shí)現(xiàn)參數(shù)化
一、fixture用法
fixture特點(diǎn)及優(yōu)勢(shì)
1/命令靈活:對(duì)于setup/teardown可以不起這2個(gè)名字
2/數(shù)據(jù)共享:在conftest.py配置里寫方法可以實(shí)現(xiàn)數(shù)據(jù)共享,不需要import導(dǎo)入张漂,可以跨文件共享
3/scope的層次及神奇的yield組合相當(dāng)于各種setup和teardown
4/實(shí)現(xiàn)參數(shù)化"""
"""1晴玖、fixture在自動(dòng)化中的應(yīng)用-基本用法
場(chǎng)景:測(cè)試用例執(zhí)行時(shí)读存,有的用例需要登錄才能執(zhí)行为流,有的不需要。setup和teardown無(wú)法滿足让簿,fixture可以敬察。默認(rèn)scope范圍為function
步驟:
1/導(dǎo)入pytest
2/在登錄函數(shù)上加@pytest.fixture()
3/在要使用的測(cè)試方法中傳入(登錄函數(shù)名稱),就先登錄
4/不傳入的就不登錄直接執(zhí)行測(cè)試方法"""
# 1.傳統(tǒng) 寫法冗余
# def login():
# print("登錄")
#
# def test_search():
# print("搜索")
#
# def test_cart():
# login()
# print("購(gòu)物車")
#
# def test_order():
# login()
# print("下單")
# 2.fixture 靈活 盡量避免test開頭尔当,以免與測(cè)試用例混淆
# @pytest.fixture()
# def login():
# print("登錄")
#
# def test_search():
# print("搜索")
#
# # 函數(shù)名字作為參數(shù)傳入
# def test_cart(login):
# print("購(gòu)物車")
#
# def test_order(login):
# print("下單")
"""2莲祸、fixture在自動(dòng)化中的應(yīng)用-作用域
取值 范圍 說明
function 函數(shù)級(jí) 每一個(gè)函數(shù)或方法都會(huì)調(diào)用,默認(rèn)函數(shù)級(jí)別
class 類級(jí) 每個(gè)測(cè)試類只執(zhí)行一次
module 模塊級(jí) 每一個(gè).py文件調(diào)用一次
package 包級(jí) 每一個(gè)python包只調(diào)用一次-暫不支持
session 會(huì)話級(jí) 每次會(huì)話只需要運(yùn)行一次,會(huì)話內(nèi)所有方法/類/模塊都共享這個(gè)方法
"""
# 如果設(shè)置為會(huì)話級(jí)別椭迎,那么整體只會(huì)執(zhí)行一次登錄
# @pytest.fixture(scope="session")
# 如果設(shè)置為模塊級(jí)別锐帜,那么整體只會(huì)執(zhí)行一次登錄
# @pytest.fixture(scope="module")
# 如果設(shè)置為類級(jí)別,那么TestDemo只會(huì)執(zhí)行一次登錄
# @pytest.fixture(scope="class")
# 如果設(shè)置為函數(shù)級(jí)別畜号,所有函數(shù)包括TestDemo下的都會(huì)執(zhí)行登錄
# @pytest.fixture(scope="function")
# def login():
# print("完成登錄")
#
# def test_search():
# print("搜索")
#
# # 函數(shù)名字作為參數(shù)傳入
# def test_cart(login):
# print("購(gòu)物車")
#
# def test_order(login):
# print("下單")
#
# class TestDemo:
# def test_demo1(self,login):
# print("case1")
# def test_demo2(self,login):
# print("case2")
"""3缴阎、fixture在自動(dòng)化中的應(yīng)用-yield關(guān)鍵字
場(chǎng)景:
你已經(jīng)可以將測(cè)試方法前要執(zhí)行的或依賴的解決了,測(cè)試方法之后銷毀清除數(shù)據(jù)要如何進(jìn)行呢简软?
解決:
通過在fixture函數(shù)中加入yield關(guān)鍵字蛮拔,yield是調(diào)用第一次返回結(jié)果,第二次執(zhí)行它后面的語(yǔ)句返回
步驟:
在@pytest.fixture(scope=module)
在登錄的方法中加yield,之后加銷毀清除的步驟
@pytest.fixture
def fixtute_name():
setup操作
yield 返回值1,返回值2
teardown操作
"""
# 1.最簡(jiǎn)單的用法
# @pytest.fixture(scope="class")
# def login():
# # setup操作
# print("完成登錄")
# yield #相當(dāng)于return,若無(wú)返回只默認(rèn)為None痹升,所以login=None
# # teardown操作
# print("完成登出")
#
#
# # 函數(shù)名字作為參數(shù)傳入
# def test_cart(login):
# print("購(gòu)物車")
# 2建炫、通過提取登錄的token
# @pytest.fixture(scope="class")
# def login():
# # setup操作
# print("完成登錄")
# token='hxnmma'
#
# yield token #同return指定返回值,login='hxnmma'
# # teardown操作
# print("完成登出")
#
#
# # 函數(shù)名字作為參數(shù)傳入
# def test_cart(login):
# print(f"token:{login}")
# print("購(gòu)物車")
# 、多個(gè)返回值
# @pytest.fixture(scope="class")
# def login():
# # setup操作
# print("完成登錄")
# name='zhangsan'
# token = 'hxxxxxauullnmma'
#
# yield name,token # 同return指定返回值,login='hxnmma'
# # teardown操作
# print("完成登出")
#
# # 函數(shù)名字作為參數(shù)傳入
# def test_cart(login):
# name, token=login
# print(f"name:{name}\ntoken:{token}")
# print("購(gòu)物車")
"""4视卢、fixture在自動(dòng)化中的應(yīng)用-數(shù)據(jù)共享
場(chǎng)景:
你和其他測(cè)試工程師合作一起開發(fā)時(shí)踱卵,公共的模塊要在不同文件中,要在大家都訪問得到的地方
解決:
使用conftest.py這個(gè)文件進(jìn)行數(shù)據(jù)共享据过,并且它可以放在不同的位置起著不同范圍的作用
前提:
1/conftest.py文件名是固定的
2/放在項(xiàng)目下是全局的數(shù)據(jù)共享的地方
執(zhí)行:
系統(tǒng)執(zhí)行到參數(shù)login時(shí)先從本地模塊中查找是否有這個(gè)名字的變量等
之后在conftest.py中查詢是否有
步驟:
將登錄模塊帶@pytest.fixture寫在conftest.py
"""
#本目錄下conftest.py
# def test_cart(login):
# name, token=login
# print(f"name:{name}\ntoken:{token}")
# print("購(gòu)物車")
# 輸出
# pytest_for_fixture.py::test_cart 完成登錄
# PASSED [100%]
# name:zhangsan
# token:hxxxxxauullnmma
# 購(gòu)物車
# 完成登出
"""5惋砂、fixture在自動(dòng)化中的應(yīng)用-自動(dòng)應(yīng)用autouse
場(chǎng)景:
不想原方法有任何改的,或者全部都自動(dòng)實(shí)現(xiàn)自動(dòng)應(yīng)用绳锅,沒特例西饵,也都不需要返回值時(shí)選擇自動(dòng)應(yīng)用
解決:
使用fixture中參數(shù)autouser=True實(shí)現(xiàn),默認(rèn)為false
步驟:
在方法上面加@pytest.fixture(autouse=True)
"""
#例子:本目錄下conftest.py中l(wèi)ogin的裝飾器@pytest.fixture(scope="session",autouse=True)
def test_search():
print("搜索")
# 不需要將登錄函數(shù)名字作為參數(shù)傳入
def test_cart():
print("購(gòu)物車")
def test_order():
print("下單")
#輸出
# thematic_courses/pytest_and_allure/pytest_L3/pytest_for_fixure/pytest_for_fixture.py::test_search
# 完成登錄
# 搜索
# PASSED
# thematic_courses/pytest_and_allure/pytest_L3/pytest_for_fixure/pytest_for_fixture.py::test_cart
# 購(gòu)物車
# PASSED
# thematic_courses/pytest_and_allure/pytest_L3/pytest_for_fixure/pytest_for_fixture.py::test_order
# 下單
# PASSED
# 完成登出
"""6、fixture在自動(dòng)化中的應(yīng)用-參數(shù)化params
場(chǎng)景:
測(cè)試離不開數(shù)據(jù)鳞芙,為了數(shù)據(jù)靈活眷柔,一般數(shù)據(jù)都是通過參數(shù)傳遞的
解決:
fixture通過固定參數(shù)request傳遞
步驟:
在fixture中增加@pytest.fixture(params=[1,2,3])
在方法參數(shù)寫request,方法體里面使用request.params接收參數(shù)
注意:request是fixture的內(nèi)置裝飾器
"""
@pytest.fixture(params=[["張三","123456"],["李四","666666"]])
def login(request):
print(f"登錄信息:{request.param}")
return request.param
# 笛卡爾積
def test_demo1(login):
print(f"登錄信息:{login}")
# 輸出
# 登錄信息:['張三', '123456']
# PASSED [ 50%]登錄信息:['張三', '123456']
# 登錄信息:['李四', '666666']
# PASSED [100%]登錄信息:['李四', '666666']
python接口自動(dòng)化-pytest-生命周期管理feature
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門聋涨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人负乡,你說我怎么就攤上這事牍白。” “怎么了抖棘?”我有些...
- 文/不壞的土叔 我叫張陵茂腥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我钉答,道長(zhǎng)础芍,這世上最難降的妖魔是什么杈抢? 我笑而不...
- 正文 為了忘掉前任数尿,我火速辦了婚禮,結(jié)果婚禮上惶楼,老公的妹妹穿的比我還像新娘右蹦。我一直安慰自己,他們只是感情好歼捐,可當(dāng)我...
- 文/花漫 我一把揭開白布何陆。 她就那樣靜靜地躺著,像睡著了一般豹储。 火紅的嫁衣襯著肌膚如雪贷盲。 梳的紋絲不亂的頭發(fā)上,一...
- 文/蒼蘭香墨 我猛地睜開眼鞠鲜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了断国?” 一聲冷哼從身側(cè)響起贤姆,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稳衬,沒想到半個(gè)月后霞捡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡宋彼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年弄砍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了仙畦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
- 正文 年R本政府宣布,位于F島的核電站碴卧,受9級(jí)特大地震影響弱卡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜住册,卻給世界環(huán)境...
- 文/蒙蒙 一婶博、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧荧飞,春花似錦凡人、人聲如沸。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至耳幢,卻和暖如春岸晦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背睛藻。 一陣腳步聲響...
- 正文 我出身青樓碧绞,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親吱窝。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讥邻,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 背景 為了更靈活控制用例執(zhí)行,我們給不同用例進(jìn)行標(biāo)記院峡,最常用的就是優(yōu)先級(jí)p0,p1,p2兴使。 一、用法 1照激、在項(xiàng)目根...
- 常用命令 1发魄、 pytest --collect-only --collect-only:表示把待執(zhí)行的用例全部展...
- ??用過這兩個(gè)的可能都知道它們會(huì)導(dǎo)致循環(huán)引用,即聲明并持有它的對(duì)象,例如一個(gè)UIViewController實(shí)例励幼,...