今天我纪,我們要學(xué)習(xí)的是自動(dòng)化測(cè)試中的配置類封裝券犁,使得我們能夠更方便的獲取配置數(shù)據(jù)稚新。話不多說(shuō)笤妙,進(jìn)入正題膳音。
1.conf配置文件
首先我們要知道的是兵志,在一個(gè)項(xiàng)目中醇蝴,好多地方是可以進(jìn)行動(dòng)態(tài)配置的,那么我們會(huì)將配置數(shù)據(jù)寫到統(tǒng)一的文件中想罕,在我們的python項(xiàng)目中按价,我們會(huì)將配置文件寫在以“.conf”后綴結(jié)尾的文件中框产。
如上圖膝舅,我們直接右鍵-->New-->file一個(gè)文件,創(chuàng)建出一個(gè)以.conf結(jié)尾的文件就可以了窑多。那么在配置文件中我們要怎么寫配置數(shù)據(jù)呢仍稀?,直接見(jiàn)下圖:
如上圖千康,我們寫配置數(shù)據(jù)享幽,要注意三個(gè)概念:
箭頭1:是我們的“模塊名”,何為模塊名呢拾弃?就是我們的一個(gè)模塊值桩,比如說(shuō),對(duì)于測(cè)試用例結(jié)果相關(guān)的配置豪椿,我們的模塊名就是"[case_result]"奔坟,對(duì)于日志模塊相關(guān)的配置,我們的模塊名就是“[logging]”,除了這些搭盾,還有很多咳秉,比如和賬號(hào)相關(guān)的,我們就可以寫一個(gè)模塊名為“[accounts]”增蹭。這里要注意的是滴某,模塊名必須用中括號(hào)“[]”括起來(lái)。
寫完模塊名滋迈,我們就可以寫模塊下相關(guān)屬性了霎奢。
箭頭2:屬性都是以“屬性名 = 值”的形式出現(xiàn),如圖所示:測(cè)試用例結(jié)果配置中饼灿,我們想配置測(cè)試用例的兩個(gè)結(jié)果幕侠,一個(gè)為正確,一個(gè)為錯(cuò)誤碍彭,這邊成功用值“Pass”表示晤硕,失敗用“Fail”表示悼潭,如果下次想用1和0表示成功或者失敗,那么可以在這邊動(dòng)態(tài)的修改值舞箍。
箭頭3:在配置文件中舰褪,我們還可以添加注釋,和python文件一樣疏橄,用#來(lái)代表注釋占拍,這里要注意的是,我們的注釋只能單獨(dú)開(kāi)一行捎迫,不能夠?qū)懺谂渲脤傩灾档暮竺婊尉疲绻麑懺谂渲脤傩灾档暮竺妫诮馕瞿弥档臅r(shí)候會(huì)報(bào)錯(cuò)窄绒!
關(guān)于配置文件贝次,我們先簡(jiǎn)單的介紹到這里。
2.ConfigParser模塊
ConfigParser是python中的configparser庫(kù)下的類彰导,我們用來(lái)處理配置文件蛔翅。我們通過(guò)ConfigParser類的實(shí)例去讀取某個(gè)配置文件,然后通過(guò)get去獲取配置的相應(yīng)值螺戳,如下:
self.config = ConfigParser()
if self.file_name is None:
"""獲取默認(rèn)路徑下的配置文件"""
self.config.read(CONFIG_FILE_PATH, encoding="utf-8")
else:
"""獲取指定路徑下的配置文件"""
self.config.read(self.file_name, encoding="utf-8")
如上面代碼搁宾,我們通過(guò)ConfigParser實(shí)例的read方法,傳入配置文件地址倔幼,以及編碼類型盖腿,獲取配置信息對(duì)象config。獲取到configle對(duì)象以后损同,我們通過(guò)它就可以獲取配置信息的所有數(shù)據(jù)翩腐。比如我們獲取上上面所說(shuō)的測(cè)試結(jié)果模塊的success_result值,代碼如下:如圖膏燃,通過(guò)read方法獲取到配置文件對(duì)象后茂卦,我們可以通過(guò)get("模塊名",“屬性名”)獲取相應(yīng)配置屬性的值组哩,如果是get()方法等龙,那么獲取到的屬性值都是字符串類型,我們也可以根據(jù)不同的屬性值類型用不同的get方法伶贰。比如圖上我們獲取port屬性值用的是getInt()方法蛛砰,結(jié)果返回的就是int類型的值,如果屬性值是布爾型黍衙,我們就可以使用getboolean()方法泥畅,如果是float類型,就用getfloat()方法琅翻,依此類推位仁。
3.處理配置文件的代碼分裝
為了對(duì)配置文件進(jìn)行統(tǒng)一處理柑贞,我們進(jìn)行一個(gè)封裝,因?yàn)楸旧硖幚砼渲梦募牟僮饕脖容^簡(jiǎn)單聂抢,所以封裝起來(lái)也比較簡(jiǎn)單钧嘶,有需要的可以借鑒,代碼如下:
from configparser import ConfigParser
from scripts.constant_url import CONFIG_FILE_PATH
class ConfigLoader:
def __init__(self, file_name=None):
self.file_name = file_name
self.config = ConfigParser()
if self.file_name is None:
"""獲取默認(rèn)路徑下的配置文件"""
self.config.read(CONFIG_FILE_PATH, encoding="utf-8")
else:
"""獲取指定路徑下的配置文件"""
self.config.read(self.file_name, encoding="utf-8")
def get_value(self, section, option):
# 通過(guò)section涛浙,option 來(lái)取到配置項(xiàng)的值
return self.config.get(section, option)
def get_boolean(self, section, option):
return self.config.getboolean(section, option)
def get_int(self, section, option):
return self.config.getint(section, option)
def get_float(self, section, option):
return self.config.getfloat(section, option)
def get_eval_data(self, section, option):
"""
獲取列表形式的配置值
:param section:
:param option:
:return:
"""
return eval(self.get_value(section, option))
@staticmethod
def write_config_data(config_data, file_name):
"""
保存?zhèn)魅氲膬?nèi)容為字典的列表類型的配置數(shù)據(jù)
:param config_data: 容為字典的列表類型的配置數(shù)據(jù)
:param file_name: 文件名
"""
config = ConfigParser()
for key in config_data:
config[key] = config_data[key]
with open(file_name, "w") as file:
config.write(file)
總結(jié)
由于對(duì)于配置文件的操作比較簡(jiǎn)單康辑,在這里不多進(jìn)行闡述。打完收工=瘟痢!