亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統 1522 0

配置文件的類型

通常自動化測試中的配置文件是以.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分鐘嗎?

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


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧美综合一区二区三区四区 | 亚洲国产一成人久久精品 | 久久久久久久综合日本亚洲 | 国产日产欧美精品 | 国产91在线播放 | 天天拍夜夜添久久精品中文 | 日韩a一级欧美一级在线播放 | 亚洲视频一二三 | 成人黄色免费 | aaaa在线观看| 免费一级毛片免费播放 | 日本一级在线播放线观看视频 | 波多野结衣高清在线播放 | 欧美日韩中文字幕久久伊人 | 夜福利视频 | 青青青国产免费全部免费观看 | 成人毛片免费网站 | 99爱在线视频 | 婷婷四房综合激情五月在线 | 午夜精品久久久久久久 | 日日天天 | 欧美日本一区二区 | 天天操91 | 欧美成人久久 | 波多野结衣免费播放 | 日韩亚洲欧美综合一区二区三区 | 亚洲图欧美日韩色综合图 | 久久久青草 | 亚洲狠狠狠一区二区三区 | 久久www免费人成_看 | 亚洲综合色播 | 欧美日韩高清 | 亚洲第一视频在线播放 | 一区二区三区免费精品视频 | 亚洲社区在线观看 | 亚洲欧美综合乱码精品成人网 | 91在线中文字幕 | www.777奇米| 毛片大 | 国产欧美在线观看一区二区 | 2021国产在线视频 |