配置文件主要为了存储常用的常量,如数据库的信息,通用的账号和密码等。常见的配置文件格式有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)