在文章可能這就是我應(yīng)用pytest搭建的第一個(gè)測試框架吧中,已經(jīng)建立了一個(gè)小小的測試框架,但其中根url以及測試數(shù)據(jù)是直接在代碼中寫死的。如果想測試不同的數(shù)據(jù),或者在不同的測試腳本中均可以調(diào)用框架的類,則需要進(jìn)行讀參(這會(huì)讓這個(gè)框架看起來高級(jí)一些,而且更像一個(gè)框架,我可真是個(gè)虛榮的孩子)。
根url的讀取
查資料發(fā)現(xiàn)有很多種方法,比如存儲(chǔ)在環(huán)境變量、ini文件或者yaml文件,我目前的做法是把諸多根url均存儲(chǔ)在一個(gè)yaml文件中。
#config.yaml
host:
test_01: https://www.****.com/test_01
test_02: https://www.****.com/test_02
對于原來寫死根目錄的類,需要改寫成以參數(shù)的形式傳入。
#bridge.py
from interface import demand
class params():
def __init__(self,api_root_url,**kwargs):
self.api_root_url=api_root_url
self.demand=demand(self.api_root_url,**kwargs)
改寫完成后,下一步需要做到的是從config.yaml中拿出對應(yīng)的url并且傳遞給params()類,在這里,新建立一個(gè)文件env.py,目的是存儲(chǔ)以及傳遞url。
#env.py
from birdge import params
class env:
def __init__(self,api_root_url,**kwargs):
self.transit = params(api_root_url["test01"],**kwargs)
為了能讓env類拿到url,在conftest.py這個(gè)配置文件中建立一個(gè)會(huì)話級(jí)的配置,讀取想要進(jìn)行測試的根url,并存儲(chǔ)在返回值當(dāng)中。
#conftest.py
import pytest
import os
import yaml
from env.py import env
@pytest.fixture(scope="session")
def url(request):
config_path=os.path.join(request.config.rootdir,'config','config.yaml')
with open(config_path) as f:
data=yaml.safe_load(f)
api_root_url=data["host"]
return env(api_root_url)
在上方代碼中,需要注意的是api_root_url=data["host"],獲取yaml文件中host下方的全部url,在env.py文件中會(huì)獲取具體的url值。
接下來則是改寫測試腳本,引用fixture拿到url發(fā)起請求,完成參數(shù)獲取的過程。
#test_project.py
import pytest
#from birdge import params
#test_data=params().demand
def test_name(url):
name_res=url.transit.demand.name()
assert name_res.status_code==200
def test_age(url):
age_res=url.transit.demand.age("18")
assert age_res.status_code==201
參數(shù)化后,整個(gè)框架的調(diào)用過程如下所示,與此前相比主要變化的是前兩個(gè)步驟。

測試數(shù)據(jù)的獲取
測試數(shù)據(jù)如果很少,其實(shí)可以直接在腳本中列舉,但如果過多,則可以存儲(chǔ)在excel中,然后通過讀取,在其中隨機(jī)或全部取值。
建立一個(gè)讀取excel的文件。
#read_excel.py
import os
import xlrd
path=os.path.abspath(os.path.pardir)
class readExcel():
def get_xls(self,xls_name):
xls_path = os.path.join(path,"data",xls_name)
file = xlrd.open_workbook(xls_path)
sheet = file.sheet_by_index(0)
rows = sheet.nrows
cls = []
for i in range(rows):
if sheet.row_values(i)[0] != 'age':
cls.append(sheet.row_values(rowx=i, start_colx=0, end_colx=None))
return cls
然后,改寫測試腳本,從excel中錄入age接口的測試數(shù)據(jù)。
#test_project.py
import pytest
import random
from read_excel import readExcel
age=readExcel().get_xls('age.xls')
test_age_data=random.choice(age)
#from birdge import params
#test_data=params().demand
def test_name(url):
name_res=url.transit.demand.name()
assert name_res.status_code==200
def test_age(url):
age_res=url.transit.demand.age(test_age_data[0])
assert age_res.status_code==201
至此,參數(shù)化及測試數(shù)據(jù)的讀取優(yōu)化完成,還是有很多不完美的地方等待去完善,接下來盡量努力學(xué)習(xí)吧,也有可能是看緣分~
下面是搭建框架用到的一部分細(xì)節(jié)知識(shí)集結(jié),有一步步用到自己之前學(xué)習(xí)到的東西,十分開心。
這兩天的更新讓自己這個(gè)小白非常滿意,導(dǎo)致會(huì)頻繁的打開看看閱讀量或者有沒有點(diǎn)贊呀漲粉呀,非常容易讓自己心浮氣躁了。但是有一個(gè)好處是,原來是為了記錄學(xué)習(xí)日常來這里,現(xiàn)在變成了為了有更好的數(shù)據(jù)就要更新有用的東西然后促進(jìn)自己去學(xué)習(xí),也是一種進(jìn)步。
不過還是不在意那些比較好,容易有些小失落,日子艱難,還是快樂比較重要~~
希望看到這里的你天天開心,天天向上哦~~
自我記錄,有錯(cuò)誤歡迎指正~