前言
在目前互聯(lián)網(wǎng)公司中,都會存在多個測試環(huán)境,那么當(dāng)我們編寫的自動化想要在多套測試環(huán)境下進(jìn)行運行時,如何使用?
大多數(shù)人想到的可能是通過將我們自動化代碼中的地址修改成不同環(huán)境。
但是這時候就會增加一些工作量,每次運行不同的環(huán)境,都需要在配置文件中進(jìn)行地址修改,這樣很不方便。
今天小編介紹一種Pytest的鉤子函數(shù),這個函數(shù)可以幫助我們很容易的解決這個問題。
![]()
pytest_addoption
pytest_addoption是Pytest的鉤子函數(shù)之一,用于為Pytest添加自定義選項,并將這些選項傳遞給測試用例。
可以通過修改Pytest的配置文件(pytest.ini)或使用命令行參數(shù)來設(shè)置這些選項。
pytest_addoption該函數(shù)一般需要和pytest的fixture內(nèi)置函數(shù)request中的request.config.getoption(獲取命令行參數(shù)信息)進(jìn)行結(jié)合使用。
在上述問題中,我們可以通過在命令行參數(shù)中對測試環(huán)境地址進(jìn)行修改,這樣就可以在不修改配置文件的情況下,只通過命令行參數(shù)進(jìn)行在不同的測試環(huán)境中執(zhí)行相同的自動化代碼。
def pytest_addoption(parser):
parser.addoption(
"--anjing",
action="store",
default="dev",
help="通過'anjing'添加自定義命令行參數(shù)名稱"
參數(shù)介紹
pytest_addoption中常用到的一些參數(shù)介紹:
name:表示自定義命令行參數(shù)的名稱,一般通過“--xxx”來使用;
action:表示命令行中遇到此參數(shù)時要采取的存儲該參數(shù)對應(yīng)的參數(shù)值的基本操作類型,默認(rèn)為“store”;
default:表示如何命令行中沒有傳入該參數(shù)的值,則取默認(rèn)值;
help:對參數(shù)作用的簡介和說明。
使用方法
關(guān)于pytest_addoption的一些簡介和用途已經(jīng)介紹完畢了,接下來跟著小編一起查看如何使用pytest_addoption來解決我們的問題。
1、需要在conftest.py文件中進(jìn)行創(chuàng)建一個pytest_addoption函數(shù),對其進(jìn)行設(shè)置對應(yīng)參數(shù)類型。
2、通過pytest.fixture創(chuàng)建函數(shù),獲取命令行對應(yīng)參數(shù)值。
3、通過編寫測試用例中調(diào)用對應(yīng)的函數(shù)名稱。
4、命令行執(zhí)行時,添加對應(yīng)命令行參數(shù)。
小編先列舉下conftest.py文件中關(guān)于pytest_addoption的編寫:
#conftest.py文件
#coding:utf-8
import pytest
def pytest_addoption(parser):
parser.addoption(
"--anjing",action="store",default="anjing",help="將'anjing'添加到pytest的配置參數(shù)中"
parser.addoption(
"--env",action="store",default="dev",help="env:表示命令行參數(shù)內(nèi)容,不填寫默認(rèn)輸出default的值內(nèi)容"
@pytest.fixture()
def anjing(request):
return request.config.getoption("--anjing")
@pytest.fixture()
def env(request):
return request.config.getoption("--env")
再根據(jù)conftest.py文件中的內(nèi)容編寫對應(yīng)的測試用例:
#coding:utf-8
def test_01(anjing):
if anjing=='test':
print('命令行傳參成功!')
else:
print('命令行取默認(rèn)值!')
def test_02(env):
if env=='test':
print('傳參成功!')
else:
print('傳參失敗!')
![]()
通過cmd執(zhí)行時候,后續(xù)進(jìn)行添加了對應(yīng)的命令行參數(shù)值,這里小編是對兩個命令行參數(shù)都添加了值,那么如果不添加值會怎么樣呢?
![]()
通過執(zhí)行結(jié)果可以看出來,當(dāng)我們沒有添加參數(shù)時,這里小編忘記打印返回值了,其實會實際輸出默認(rèn)值,就是我們在函數(shù)中設(shè)置的default。
我們上面使用的方法是通過XXX=XXX的格式來輸出的,這里我們也可以通過--xxxx值,參數(shù)和值之間通過空格進(jìn)行輸入,結(jié)果都是一樣的。
![]()
案例展示
上述小編是介紹了如何使用,那么我們?nèi)绾卧诮涌陧椖恐惺褂媚兀啃【庍@里通過一個簡單的方法通過項目進(jìn)行展示,這里小編通過將默認(rèn)值值變成了請求成功的url地址,添加參數(shù)為錯誤的url地址。
#conftest.py文件
#coding:utf-8
import pytest
def pytest_addoption(parser):
parser.addoption(
"--url",
action="store",
default="http://apis.juhe.cn/simpleWeather/query",
help="將'anjing'添加到pytest的配置參數(shù)中"
@pytest.fixture()
def anjing(request):
return request.config.getoption("--url")
conftest.py文件中我們將默認(rèn)請求成功的地址寫入到默認(rèn)值中,然后繼續(xù)編寫接口請求地址,在添加一個命令行參數(shù)的函數(shù)。
#test_01.py文件
#coding:utf-8
import requests
def test_01(anjing):
data={
'city':"上海",
'key':'331eab8f3481f37868378fcdc76cb7cd'
r=requests.post(anjing,data=data)
result=r.json()['reason']
assert result=='查詢成功!'
通過cmd進(jìn)行運行程序,我們先不添加任何命令行參數(shù),讓其請求默認(rèn)參數(shù)值的內(nèi)容,發(fā)現(xiàn)測試用例請求成功了。
![]()
接下來我們通過隨便在命令行參數(shù)后跟一個不正確的url地址,去模擬請求,這里肯定是無法請求成功的,因為我們請求的百度,不能請求成功(主要模擬測試環(huán)境場景)。
![]()
總結(jié)
小編通過簡單的方法介紹了如何使用pytest_addoption進(jìn)行來模擬不同測試環(huán)境下,我們?nèi)绾芜M(jìn)行執(zhí)行我們的測試用例。
當(dāng)然pytest_addoption的用途不僅僅只有這么多,具體如何使用,大家可以根據(jù)自己公司內(nèi)容的項目進(jìn)行結(jié)合使用。
感謝您的閱讀,希望本篇文章對您有所幫助。
最后:在我的V:atstudy-js,可以免費領(lǐng)取一份10G軟件測試工程師面試寶典文檔資料。以及相對應(yīng)的視頻學(xué)習(xí)教程免費分享!其中包括了有基礎(chǔ)知識、Linux必備、Shell、互聯(lián)網(wǎng)程序原理、Mysql數(shù)據(jù)庫、抓包工具專題、接口測試工具、測試進(jìn)階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續(xù)集成、測試架構(gòu)開發(fā)測試框架、性能測試、安全測試等。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.