常见配置文件在Python中的使用
配置文件主要为了存储常用的常量,如数据库的信息,通用的账号和密码等。常见的配置文件格式有ini,yaml,toml,json,env等,在做自动化测试的时候,它们都起什么样的作用?在什么样的场合下应用哪些配置文件?
一、ini配置文件
简介:
ini配置文件是最直接的配置文件,也是最简单的配置文件,将变量值通过键值对的方式存储。
特点:
(1)支持注释,可使用#或;注释
(2)便于管理,[标签]将变量分组
(3)便于阅读,键值对的方式,使用冒号或等号均可
(4)支持字符串及数值数据类型,适用于简单的字符串和数值的键值对
(5)读写ini配置文件使用内置模块configparser,无需依赖第三方模块
缺点:
(1)读取ini配置字段值的时候,需频繁通过标签和键Kev获取Value值。
(2)支持的数据类型有限,仅支持1个层级的数据结构,如多层级的字典将被理解为1个字符串。
即不论存储的是字典还是列表,读取的值是字符出格式,需要通过解析转换,比较麻烦。
创建ini文件
# default [default] username = "张三" password = "123456" #Database [Database] host = "127.0.0.1" user = "root" pwd = "123456" port = 3306 db = "test" [test] nums = {"one":1,"two":2} l = ['1','2','3','4']
读取ini配置文件
from configparser import ConfigParser config = ConfigParser() config.read('config.ini', encoding='utf-8') # 获取全部标签 sections = config.sections() print(sections) # 获取某个标签 Database = config['Database'] print(Database) # 获取某个Key的值 # 方法1,通过获取标签后再获取对应的键值 host = Database['host'] print(host) # 方法2:使用get方法 user = config.get('Database','user') print(user) # 方法3:直接获取 pwd = config['Database']['pwd'] print(pwd)
写入ini配置文件
from configparser import ConfigParser config = ConfigParser() # 方法1:一次性将标签的所有值写入 config['Database'] = { "host": "127.0.0.1", "user": "root", "pwd": "123456", "port": 22, "db": "test" } # 方法2:单独写入 config['default'] = {} default = config['default'] default['username'] = 'zhangsan' default['password'] = '123456' # 打开配置文件,写入标签值 with open('config.ini', 'w') as f: config.write(f)
二、yaml配置文件
简介:
yaml配置文件刚好可以弥补下ini配置文件支持数据类型较少的缺点,yaml文件的特点是支持结构化的数据,如字典和列表,所以,如果层级结构较多的数据场景还是建议使用yaml配置文件。
特点:
(1)支持注释,#表示注释
(2)空格缩进区分层级,且空格数量不要求,对齐即可
(3)适用于有层次结构的数据,如字典
(4)大小写敏感
(5)依赖第三方PyYAML模块
(6)方便重复内容的引用
缺点:
(1)文件内容较多时,难以阅读和编辑。 主要也是空格不可见,使用空格相同个数表示同一层级,难以阅读,容易耗费时间在数空格对齐层级上,且存在制表符Tab键可能被使用,但很难排查
下载
pip install PyYAML
创建yaml配置文件
code: 200 students: - name: 张三 age: 12 hobby: - 打篮球 - 跑步 - name: 李四 age: 17 hobby: - 打羽毛球 - 看书
读取yaml配置文件
import yaml def read_yaml(path): with open(path, 'r') as f: data = yaml.safe_load(f.read(), Loader=yaml.FullLoader) print(data) if __name__ == '__main__': yaml_path = "y.yml" read_yaml(yaml_path)
写入yaml配置文件
import yaml def write_yaml(path): d1 = {"code":200,"students":[{"name":"张三","age":12,"hobby":["打篮球","跑步"]},{"name":"李四","age":17,"hobby":["打羽毛球","看书"]}]} with open(yaml_path ,'a') as f: yaml.dump(d1,f,allow_unicode=True) if __name__ == '__main__': yaml_path = "y.yml" write_yaml(yaml_path)
三、json配置文件
简介
json是常见的一种数据格式,而json配置文件主要是针对json格式的数据。
特点:
(1)支持多层级数据结构
(2)Key和字符串必须使用双引号
创建config.json配置文件
{ "Database":{ "host": "127.0.0.1", "user": "root", "pwd": "123456", "port": 22, "db": "test" } }
读取json配置文件
import json with open('config.json') as f: config = json.load(f)['Database'] print(config)
写入json配置文件
import json db_json = { "Database":{ "host": "127.0.0.1", "user": "root", "pwd": "123456", "port": 22, "db": "test" } } with open('config.json', 'w') as f: json.dump(db_json,f)
四、toml配置文件
简介:
toml是前GitHub CEO, Tom Preston-Werner,于2013年创建的语言,其目标是成为一个小规模的易于使用的语义化配置文件格式。toml配置文件可读性强,并且易于编辑
特点:
(1)支持注释,#表示注释
(2)大小写敏感
(3)便于管理,使用[标签]将变量分组
(4)字符串必须使用单引号或双引号
(5)布尔值必须存储为true和false
(6)支持数据类型较多,如字符串,数值,日期,数组,字典
(7)使用键=值的方式存储
(8)支持“嵌套表”概念
创建config.toml配置文件
[Database] host = "127.0.0.1" user = "root" pwd = "123456" port = 3306 db = "test" [Database.One] l1 = [ "1", "2", "3", "4"] [Database.Two] a = 1
下载
pip install toml
读取toml配置文件
import toml config = toml.load('config.toml') # 获取标签内容方式1: Database1 = config['Database'] print(Database1) # 获取标签内容方式2: Database2 = config.get('Database') print(Database2) # 获取键值方式1: host1 = config['Database']['host'] print(host1) # 获取键值方式2: host2 = config.get('Database').get('host') print(host2)
写入toml配置文件
import toml Database = {'host': '127.0.0.1', 'user': 'root', 'pwd': '123456', 'port': 3306, 'db': 'test', 'One': {'l1': ['1', '2', '3', '4']}, 'Two': {'a': 1}} with open('config.toml', 'w') as f: toml.dump(Database, f)
五、.env配置文件
简介:
.env主要是将变量值通过环境配置的方式存储。
特点:
(1)键值对key=value方式存储
(2)Key一般使用大写
缺点:
(1)仅支持字符串,不支持其他类型数据
读写.env配置文件
import os # 设置变量方式1 os.environ.setdefault('MYENV','zhangsan') # 设置变量方式2 os.environ['MYENV2'] = 'lisi' # 方式1 user1 = os.environ['MYENV'] print(user1) # 方式2 user2 = os.environ.get('MYENV2') print(user2)