在自動化測試過程中,為了提高腳本的可讀性和降低維護成本,将一些通用資訊寫入配置檔案,将重複使用的方法寫成公共子產品進行封裝,使用時候直接調用即可。
一.簡介
.ini檔案是Initialization file的縮寫,即為初始化檔案,是Windows系統配置檔案所采用的存儲格式,統管Windows的各項配置,一般使用者就用Windows提供的各項圖形化管理界面就可以實作相同的配置了。但在某些情況,還是要直接編輯ini才友善,一般隻有很熟悉Windows才能去直接編輯。
除了windows2003很多其他作業系統下面的應用軟體也有*.ini檔案,用來配置應用軟體以實作不同使用者的要求。一般不用直接編輯這些ini檔案,應用程式的圖形界面即可操作以實作相同的功能。它可以用來存放軟體資訊、系統資料庫資訊等。
二.檔案擴充名
配置檔案.ini
請注意: 我們所讨論的是項目中的配置檔案,它是整個項目共用的,是以它要有一個項目使用的檔案名,其字尾是.ini。例如:
端口配置 port.ini。
當然ini配置檔案的字尾名也不一定必須是“.ini”,也可以是“.cfg”、“.conf”或者是“.txt”。
三.格式
ini配置檔案由節、鍵、值組成。
鍵值對
【參數】(鍵=值):
INI所包含的最基本的“元素”就是參數(parameter),每個參數都有一個name和一個value,name和value由等号“=”隔開,name在等号的左邊。如:
name=value
Section
所有的參數都是以節(section)為機關結合在一起的。所有的section名稱都是獨占一行,并且section名字都被方括号包圍着。在section聲明後的所有parameters都屬于該section。一個section沒有明顯的結束辨別符,一個section的開始就是上一個section的結束,或者是檔案結束。如:
注解
(comments)使用分号表示(;),在分号後面的文字,直到該行結尾都全部為注釋。
;comment textINI檔案的資料格式的例子(配置檔案的内容)
例子:
[ipport]
ip=127.0.0.1
port=4723
[user]
username=admin
password:po
四.configparser子產品
Python提供的configparser子產品主要用于讀取配置檔案:
#導入configparser子產品
import configparser
# 生成ConfigParser對象
config = configparser.ConfigParser()
# 讀取配置檔案
filename = 'config.ini'
config.read(filename, encoding='utf-8')
4.1 擷取節點sections
擷取方法:
以清單形式傳回configparser對象的所有節點資訊
# 擷取所有節點
all_sections = config.sections()
print('sections: ', all_sections)
輸出結果:
4.2 擷取指定節點的的所有配置資訊
擷取方法:
以清單形式傳回某個節點section對應的所有配置資訊.
# 擷取指定節點的配置資訊
items = config.items('user')
print(items)
輸出結果:
4.3 擷取指定節點的options(鍵)
擷取方法:
以清單形式傳回某個節點section的所有key值
# 擷取指定節點的options資訊
options = config.options('user')
print(options)
輸出結果:
4.4 擷取指定節點下指定option的值
擷取方法:
#傳回結果是字元串類型
ConfigParserObject.get(section, option)
#傳回結果是int類型
ConfigParserObject.getint(section, option)
#傳回結果是bool類型
ConfigParserObject.getboolean(section, option)
#傳回結果是float類型
ConfigParserObject.getfloat(section, option)
# 擷取指定節點指定option的值
name = config.get('user', 'username')
print(name)
輸出結果:
admin
4.5 檢查section或option是否存在
判讀方法:
#判讀是否存在section值
ConfigParserObject.has_section(section)
#判斷是否存在指定的option值
ConfigParserObject.has_option(section, option)
傳回bool值,若存在傳回True,不存在傳回False
is_username= config.has_option('user','username')
is_users= config.has_option('user','users')
is_section_user=config.has_section('user')
is_section_users=config.has_section('users')
print(is_username)
print(is_users)
print(is_section_user)
print(is_section_users)
輸出結果:
True
False
True
False
4.6 添加section
增加方法:
如果section不存在,則添加節點section;
若section已存在,再執行add操作會報錯:
configparser.DuplicateSectionError: Section XX already exists
# 添加section
if not config.has_section('remark'):
config.add_section('remark')
config.set('remark', 'info', 'ok')
config.write(open(filename, 'w'))
remark = config.items('remark')
print(remark) # 結果 [('info', 'ok')]
在檔案裡增加如下:
[remark]
info = ok
4.7 修改或添加指定節點下指定option的值
修改方法:
若option存在,則會替換之前option的值為value;
若option不存在,則會建立optiion并指派為value
# 修改指定option的值
config.set('user', 'username', 'test')
config.set('user', 'isRemember', 'True')
config.write(open('file.ini', 'w'))
# 重新檢視修改後節點資訊
items = config.items('user')
print(items)
輸出結果:
配置檔案内容顯示如下:
[user]
username = test
password = po
isremember = True
4.8 删除section或option
删除section方法:
若section存在,執行删除操作;
若section不存在,則不會執行任何操作
删除option方法:
若存在,執行删除操作;
若不存在,則不會執行任何操作;
# 删除section
config.remove_section('remark')# section存在
config.remove_section('no_section') # section不存在
# 删除option
config.remove_option('user', 'isremember')# option存在
config.remove_option('user', 'no_option')# option不存在
config.write(open('file.ini', 'w'))
all_sections = config.sections()
print(all_sections)
options = config.options('user')
print(options)
輸出結果:
['ipport', 'user']
['username', 'password']
4.9 寫入内容
寫入方法:
對configparser對象執行的一些修改操作,必須重新寫回到檔案才可生效
五.方法封裝
import configparser
class ConfigParser:
@classmethod
def __init__(cls,filename):
cls.cfg_dirt={}
cls.filename=filename
@classmethod
def get_ini_data(cls,sector,item):
value=None
try:
value=cls.cfg_dirt[item]
except KeyError:
cfg = configparser.ConfigParser()
cfg.read(cls.filename, encoding='UTF-8')
value = cfg.get(sector,item)
cls.cfg_dirt[item] = value
finally:
return value