一、配置文件的类型
在python自动化测试中,为了减轻测试脚本维护过程中工作量,我们可以将一些常用的变量或者参数值放置在配置文件中。当我们需要修改某个变量的值时,只需修改配置文件中的选项值就可以实现这一目的。
除了可以减轻测试脚本在维护过程中的工作量,使用配置文件还有如下优点:
(1)减少对源代码的改动点,提高代码的容错率;
(2)提高了工作效率。
在自动化测试中,经常使用的配置文件类型包括如下两类,分别为:
①.ini ②.yaml
其中.ini配置文件的书写格式如下:
[section1] option1=value1 option2=value2
...... [section2] option3=value3 option4=value4
......
【示例】
1 [log] 2 name=login_test 3 level=INFO 4 file_ok=True 5 file_name=login_test.log
.yaml配置文件的书写格式如下(一般使用字典的方式进行书写):
section1:
option1: value1
option2: value2
......
section2:
option3: value3
option4: value4
......
【示例】
1 log: 2 name: login_test 3 level: WARNING 4 file_ok: False 5 file_name: mylog.log
【说明】在使用.yaml配置文件时,option与value之间需要有一个空格
二、读取配置文件信息的操作流程
1、针对.ini配置文件,直接使用python自带的configparser模块读写配置文件
1.1、导入configparser模块:from configparser import ConfigParser
1.2、实例化ConfigParser类:config = ConfigParser()
1.3、读取配置文件:config.read("配置文件名称.ini",encoding="utf-8")
1.4、获取配置文件中某一option的值:val = config.get("section名称","option名称")
1.5、获取指定section中的所有option:opts = config.options("section名称")
1.6、获取当前配置文件中的所有section:secs = config.sections()
【说明】
支持读取出的数据为bool、int和float,需要将get()函数变更为:
getboolean(section,option)
getint(section,option)
getfloat(section,option)
2、针对.yaml配置文件,需要手动安装pyyaml:pip install pyyaml
2.1、引入yaml模块:import yaml
2.2、打开yaml文件
2.3、调用yaml.load函数加载文件对象,返回值为dict
【示例】
1 import yaml 2 3 with open("log.yaml",encoding="utf-8") as fs: 4 datas = yaml.load(fs,yaml.FullLoader) 5 pass 6 7 for key,value in datas.items(): 8 print(key) 9 print(value)
三、代码实现
1 from configparser import ConfigParser 2 3 config = ConfigParser() 4 # 读取配置文件 5 config.read("log.ini",encoding="utf-8") 6 # 读取配置文件中的某一项值 7 val = config.get("log","name") 8 print(val) 9 10 # 获取当前的section 11 secs = config.sections() 12 print(secs) 13 14 # 获取指定section中的所有options 15 opts = config.options("log") 16 print(opts)
四、封装读取配置文件的操作
由于读取配置文件信息的操作流程相对比较固定,因此我们可以其封装成一个类。当我们需要使用时,只需引入该模块即可。
1 from configparser import ConfigParser 2 import os 3 4 class HandleConfig(ConfigParser): 5 6 def __init__(self,file_path): 7 super().__init__() 8 # 将配置文件读入内存 9 self.read(file_path,encoding="utf-8") 10 pass 11 pass 12 13 # 在实际调用时,log.ini可以根据个人喜好进行自定义 14 file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"log.ini") 15 16 # 实例化配置类时,需要指定配置文件的名称 17 handleConfig = HandleConfig(file_path)