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