天天看點

Appium + Python 自動化測試學習之十四:configparser子產品讀取ini配置檔案

在自動化測試過程中,為了提高腳本的可讀性和降低維護成本,将一些通用資訊寫入配置檔案,将重複使用的方法寫成公共子產品進行封裝,使用時候直接調用即可。

一.簡介

.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