亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何解析配置文件并應用到項目中

發布時間:2020-08-22 20:15:07 來源:腳本之家 閱讀:182 作者:linux超 欄目:開發技術

配置文件的類型

通常自動化測試中的配置文件是以.ini 和 .conf 為后綴的文件

配置文件的組成

1.section

2.option

3.value

配置文件的格式

[section_name]
# =號可以使用:號代替
option_name=value

配置文件的注釋

通常使用#號或者;分號注釋,有一點一定要注意,注釋最好不要寫到option_name=value行的后面,否則你會遇到意想不到的錯誤

配置文件的作用

那么我們的配置文件主要來干些什么呢?

1.可以存儲測試中測試用例使用的測試數據

2.可以存儲測試中用到的資源數據,比如數據庫的地址,用戶,密碼等等

3.可以作為ui對象庫使用,存儲我們ui自動化測試項目中的頁面元素信息

4.可以存儲項目使用的全局變量,比如項目的根目錄,日志,報告的路徑等等

以上這些數據均可以存放在配置文件中,方便的我們讀取,當項目的一些配置信息改變時,我們只要修改配置文件即可,而不用修改具體代碼,大大減小項目的維護成本!

ok,既然我都標題黨了,那么現在就告訴你怎么1分鐘應用到項目中。有配置文件我們必定要先解析文件才行,我們現在有這樣一個配置文件,存放如下內容

[126mail_login]
loginPage.frame=xpath>//div[@id='loginDiv']/iframe
loginPage.username=xpath>//input[@name='email']
loginPage.password=xpath>//input[@name='password']
loginPage.loginBtn=xpath>//a[@id='dologin']
[126mail_homePage]
homePage.addressbook=id>_mail_tabitem_1_4text
[126mail_addContactPage]
addContactPage.newContact=xpath>//span[text()='新建聯系人']
addContactPage.newName=id>input_N
addContactPage.newMail=xpath>//div[@id='iaddress_MAIL_wrap']//input[@class='nui-ipt-input']
addContactPage.newMark=xpath>//span[@class='nui-chk-text']/preceding-sibling::span/b
addContactPage.newPhone=xpath>//div[@id='iaddress_TEL_wrap']//input[@class='nui-ipt-input']
addContactPage.newComment=id>input_DETAIL
addContactPage.newCommit=xpath>//span[text()='確 定']

封裝代碼

下面這個封裝是我之前寫的,不算是很通用的功能,但是如果你的配置文件和我上面的一樣用來存儲ui對象庫的話就完全適用了。

"""
------------------------------------
@Time : 2019/5/16 10:56
@Auth : linux超
@File : ParseConfigOld.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
------------------------------------
"""
from configparser import (
ConfigParser,
NoSectionError,
NoOptionError
)
filename = 'configfile.ini'
class ParseConfigFile(object):
"""
解析ini配置文件
"""
def __init__(self):
try:
self.cf = ConfigParser() # 獲取配置文件對象
self.cf.read(filename, encoding='utf-8') # 加載配置文件到內存中
except Exception as e:
raise e
def getItemsSection(self, section):
"""
獲取section下面所有section的鍵值
:param sectionName:
:return:
"""
try:
value = dict(self.cf.items(section))
except (NoSectionError, KeyError):
print('{} not exit'.format(section))
except Exception as e:
raise e
else:
return value
def getElementValue(self, section, option):
"""根據自己的需要修改這部分代碼"""
try:
# 我配置文件是用這個符號來分割的,所有解析的時候要使用這個符號分割,得到元素
locator = self.cf.get(section, option).split('>')
except (NoSectionError, NoOptionError, KeyError):
print('section:{} or option:{} not exit'.format(section, option))
except Exception as e:
raise e
else:
return locator # 獲取option鍵對應的value
def getAllSections(self):
try:
all_sections = self.cf.sections()
except Exception as e:
raise e
else:
return all_sections # 所有的sections返回值是個列表
if __name__=='__main__':
cf = ParseConfigFile()
locator = cf.getElementValue('126mail_login','loginPage.username')
print(locator)
print(cf.getItemsSection('126mail_login'))
print(cf.getAllSections())

封裝改進

下面的封裝幾乎可以完成任何自動化測試項目中配置文件存儲任何數據類型的數據解析

"""
------------------------------------
@Time : 2019/5/16 9:11
@Auth : linux超
@File : ParseConfigFile.py
@IDE : PyCharm
@Motto: Real warriors,dare to face the bleak warning,dare to face the incisive error!
------------------------------------
"""
from configparser import (
ConfigParser,
NoOptionError,
NoSectionError
)
class ParseConfigFile(ConfigParser):
def __init__(self, filename):
super().__init__()
try:
self.filename = filename
self.read(filename, encoding='utf-8')
except Exception as e:
raise e
def get_all_option(self, section='DEFAULT'):
"""獲取指定section下所有的option"""
try:
options = self.options(section)
return options
except NoSectionError:
print('NoSectionError : {} not exist'.format(section))
except Exception as e:
raise e
def get_value(self, section='DEFAULT'):
"""獲取指定section中所有的option和value,返回一個字典"""
try:
value = dict(self.items(section))
return value
except (NoSectionError, KeyError):
print('{} not exist'.format(section))
except Exception as e:
raise e
def get_option_value(self, section, option, flag=False):
"""
獲取指定section和option對應的數據
如果option對應數據為數字,則自動轉換為int或者float
如果option對應的數據是個可以使用eval轉換的類型,則傳遞flag為True時,自動轉換,否則輸出str
"""
try:
value = self.get(section, option)
if value.isdigit():
return int(value)
try:
return float(value)
except Exception:
pass
if isinstance(flag, bool) and flag:
return eval(value)
return value
except (NoSectionError, NoOptionError, KeyError):
print('no option "{}" or section "{}"'.format(option, section))
except Exception as e:
raise e
def __call__(self, section='DEFAULT', option=None, flag_eval=False, flag_bool=False):
"""
對象當成函數使用的時候會默認調用這個方法
這個方法可以實現上面多數功能
:param section:
:param option:
:param flag_eval: 如果為True 我們使用eval轉換類型
:param flag_bool: 如果為True 我們使用把數據轉換為bool
:return:
"""
if option is None:
return dict(self[section])
if isinstance(flag_bool, bool):
if flag_bool:
return self.getboolean(section, option)
else:
raise ValueError('{} must be type bool'.format(flag_bool))
data = self.get(section, option)
if data.isdigit():
return int(data)
try:
return float(data)
except Exception:
pass
if isinstance(flag_eval, bool):
if flag_eval:
return eval(data)
else:
raise ValueError('{} must be type bool'.format(flag_eval))
return data
if __name__ == '__main__':
conf = ParseConfigFile('configfile.ini')
print('所有的option', conf.get_all_option('FilePath'))
print('獲取section:{},option:{}對應的數據:{}'.
format('FilePath', 'TestCase', conf.get_option_value('FilePath', 'TestCase')))
print('獲取section:{}下所有的鍵值{}'.format('FilePath', conf.get_value('ExcelNum')))
print(conf())
print(conf(section='FilePath', option='TestCase'))
print(conf(option='a', flag_bool=True))
print(conf(section='ExcelNum', option='Actual_Column_Num', flag_eval=True))

1分鐘應用到項目中

啥? 你還不知道怎么一分鐘應用到項目中?

好吧,看來是逃不過去了。 我要說了..... 首先復制代碼,當然你已經知道上述代碼的含義, 在你的項目中新建py文件,拷貝代碼到你的文件中,ok接下來你可能已經知道怎么用了。這能有1分鐘嗎?

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

伊春市| 正定县| 纳雍县| 阿荣旗| 兰西县| 原平市| 高邑县| 牙克石市| 洪泽县| 利川市| 修文县| 万年县| 张家港市| 浑源县| 杂多县| 綦江县| 绥滨县| 合水县| 辉南县| 左贡县| 汾西县| 永吉县| 莒南县| 甘肃省| 平湖市| 栾川县| 民权县| 岳阳县| 社旗县| 壶关县| 乌拉特中旗| 漳平市| 鸡泽县| 临夏县| 韶山市| 茶陵县| 丹东市| 布拖县| 界首市| 布尔津县| 正安县|