1. 将程序中不常变化的数据放在配置文件中,有什么好处?
将配置统一放在一起,进行统一管理,方便维护,方便修改
- 配置文件将存放测试数据比如:
- Excel文件名、
- 日志名、
- 用例执行的结果、
- 实际结果和用例执行结果写入到哪一行、
- HTML报告的名称、
- 报告的标题、
- 报告的详细程度、
- 报告的描述信息、
- 测试人员的名字、
- url的地址、
- 登录的账号密码
2. 结构
- 配置文件名以 .conf、.ini 为拓展名的文件叫做配置文件
- 配置文件中使用英文 # ; 进行注释,等号= 与冒号: 意思一样
- 区域名(区分大小写)
- 选项名 = 选项值
[file_path]
cases_path = cases.xlsx
3. 读取配置文件基本操作
# 读取配置文件需要导入一个类:configparser (译:康飞哥盘思)系统自带不需要安装 from configparser import ConfigParser # 1.创建配置解析器 config = ConfigParser() # 2.指定读取的配置文件.read(译:瑞德):指定读取的文件名,文件名可以是相对或绝对路径 config.read("testcase.conf", encoding="utf-8") # 3.读取数据-------读取的是哪个区域下的那个选项名 # 方法一:使用方括号["区域名"]["选项名"] one_value = config["file path"]["cases_path"] # 方法二:使用.get("区域名", "选项名") -----推荐使用这个 two_value = config.get("msg", "success_result") # 从配置文件中,使用方括号或者get读取的所有值都是字符串类型 # 可以使用getboolean方法获取bool类型的数据 config.getboolean("msg", "va1") # 可以使用getboolean方法获取bool类型的数据 # 1、yes、on、true、True ---> 都会读取为布尔类型True # 0、no、off、false、False ---> 都会读取为布尔类型False # 可以使用getfloat方法获取float类型的数据 config.getfloat("msg", "value2") # 可以使用getint方法获取int类型的数据 config.getint("msg", "value1") # 读取列表 one_list = config.get('msg', 'value7') # eval 函数能够将字符串转换为 python 中的内置类型 # 相当如把字符串的引号(单引号或者双引号)去掉之后的类型 # 也能够执行字符串类表达式 one_list = eval(one_list)
4. 写入配置文件基本操作
---不建议对已有文件进行写入,会覆盖掉源文件
from configparser import ConfigParser # 1.创建配置解析器 config = ConfigParser() # 2.写入配置的时候,不用使用read(read是读) # 构造要写入的数据,嵌套字典的字典 datas = { "file path": { "cases_path": "cases1.xlsx", "log_path": "record_run_result.txt" }, "msg1": { "success_result": "Pass", "fail_result": "Fail" } } # 读取配置写入----config['区域名']['选项名'] for key in datas: config[key] = datas[key] # config类似于一个空字典 # 3.保存到文件 a = 追加 with open("write_config.ini", "w") as file: config.write(file)
5. 配置文件读写数据的封装
# 封装配置文件 from configparser import ConfigParser class HandleConfig: """ 配置文件读写数据的封装 """ def __init__(self, filename): """ :param filename: 配置文件名 """ self.filename = filename self.config = ConfigParser() # 读取配置文件1.创建配置解析器 self.config.read(self.filename, encoding="utf-8") # 读取配置文件2.指定读取的配置文件 # get_value获取所有的字符串,section区域名, option选项名 def get_value(self, section, option): return self.config.get(section, option) # get_int获取整型,section区域名, option选项名 def get_int(self, section, option): return self.config.getint(section, option) # get_float获取浮点数类型,section区域名, option选项名 def get_float(self, section, option): return self.config.getfloat(section, option) # get_boolean获取布尔类型,section区域名, option选项名 def get_boolean(self, section, option): return self.config.getboolean(section, option) # get_eval_data获取列表,section区域名, option选项名 def get_eval_data(self, section, option): return eval(self.config.get(section, option)) @staticmethod def write_config(datas, filename): """ 写入配置操作 :param datas: 需要传入写入的数据 :param filename: 指定文件名 :return: """ # 做校验,为嵌套字典的字典才可以(意思.隐私.谈.ce) if isinstance(datas, dict): # 在外层判断是否为字典 # 再来判断内层的 values 是否为字典 for value in datas.values(): # 先取出value if not isinstance(value, dict): # 在判断 return "数据不合法, 应为嵌套字典的字典" config = ConfigParser() # 1.创建配置解析器---与写入配置操作一致 for key in datas: # 写入操作 config[key] = datas[key] with open(filename, "w") as file: # 保存到哪个文件filename=需要指定文件名 config.write(file) # return "写入成功" # do_config = HandleConfig('testcase.conf') if __name__ == '__main__': # 读取操作 do_config1 = HandleConfig('testcase.conf') # 读取那个文件 res = do_config1.get_value("msg", "success_result") # 读取什么内容 print(res) # 写入操作 do_config = HandleConfig('write_config.ini') datas = { "file path": { "cases_path": "cases.xlsx", "log_path": "record_run_result.txt" }, "msg": { "success_result": "Pass", "fail_result": "Fail" } } do_config.write_config(datas, "write_config.ini") pass
*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/ 谢谢!!*******