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的结束,或者是文件结束。如:

[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

获取方法:

ConfigParserObject.sections()

以列表形式返回configparser对象的所有节点信息

# 获取所有节点 
all_sections = config.sections() 
print('sections: ', all_sections) 

输出结果:

sections: ['ipport', 'user'] 
4.2 获取指定节点的的所有配置信息

获取方法:

ConfigParserObject.items(section)

以列表形式返回某个节点section对应的所有配置信息.

# 获取指定节点的配置信息
items = config.items('user')
print(items)  

输出结果:

[('username', 'admin'), ('password', 'po')]
4.3 获取指定节点的options(键)

获取方法:

ConfigParserObject.options(section)

以列表形式返回某个节点section的所有key值

# 获取指定节点的options信息
options = config.options('user')
print(options)  

输出结果:

['username', 'password']
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

增加方法:

ConfigParserObject.add_section(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的值

修改方法:

ConfigParserObject.set(section, option, value)

若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)

输出结果:

[('username', 'test'), ('password', 'po'), ('isremember', 'True')]

配置文件内容显示如下:

[user]
username = test
password = po
isremember = True
4.8 删除section或option

删除section方法:

ConfigParserObject.remove_section(section)

若section存在,执行删除操作;
若section不存在,则不会执行任何操作

删除option方法:

ConfigParserObject.remove_option(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 写入内容

写入方法:

ConfigParserObject.write(open(filename, 'w'))

对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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值