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