本篇教程以录制视频教学,需要的朋友可以点击这里进入群聊领取
在python自动化测试中,为了减轻测试脚本维护过程中工作量,我们可以将一些常用的变量或者参数值放置在配置文件中。
当我们需要修改某个变量的值时,只需修改配置文件中的选项值就可以实现这一目的,不在需要去改变代码中的每个变量
尤其是对页面需求经常变动的UI测试而言,掌握配置文件的读取方法,可以较大限度的减少代码修改量
除了可以减轻测试脚本在维护过程中的工作量,使用配置文件还有如下优点:
在自动化测试中,经常使用的配置文件类型包括如下两类,分别为:①.ini ②.yaml,这两个文件类型也分别应用在UI的自动化和接口的自动化中
.ini配置文件格式如下:
;这里是注释
[section0]
key0 = value0
key1 = value1
[section1]
key2 = value2
key3 = value3
section不能重复,里面数据通过section去查找,每个seletion下可以有多个key和vlaue的键值对,注释用英文分号( ; )
针对.ini配置文件,直接使用python自带的configparser模块读写配置文件
导入configparser模块:from configparser import ConfigParser
实例化ConfigParser类:config = ConfigParser()
读取配置文件:config.read(“配置文件名称.ini”,encoding=“utf-8”)
获取配置文件中某一option的值:val = config.get(“section名称”,“option名称”)
config.options(“section名称”)
获取当前配置文件中的所有section:secs = config.sections()
在Python3中,我们一般使用configparser模块来读取ini文件
# python3
import configParser
和Python2不同的是,Python2里面直接conf.read(cfgpath)就可以了,Python3需要加个参数:encoding=“utf-8”
conf.read(cfgpath, encoding="utf-8")
分别在common文件夹下新建配置文件:config.ini 和 读取配置文件:readConf.py ,然后编写代码…
以UI自动化中常用的url为例:配置文件中按照功能模块分为 risk 、rule 、term ;其下的url地址分别代表该模块下某个功能点的url
[risk]
;新建风险
url0 = www.baidu.com
;新建风险目录、导入风险模板
url1 = xxxx
[rule]
;新建制度目录
url1 = xxxxx
;制度审批任务模板
url2 = xxxxxxx
[term]
;新建术语
url1 = xxxxxx
;新建术语目录
url2 = xxxxxx
以下是封装好的读取配置文件的方法
import configparser
import os
class ReadConf():
def __init__(self):
curpath = os.path.dirname(os.path.relpath(__file__))
#获取配置文件路径
cfgpath = os.path.join(curpath, "config.ini")
# 创建管理对象
self.conf = configparser.ConfigParser()
# 读ini文件
self.conf.read(cfgpath, encoding="utf-8")
def readConf(self,param):
#获取所有的section
# sections = self.conf.sections()
# print(sections)
#获取某个sections中的所有值,将其转化为字典
items = dict(self.conf.items(param))
return items
if __name__ == '__main__':
test = ReadConf()
t = test.readConf("risk") #传入sections的值
print('我取某个sections下所有值 ',t)
print(t['url1'])
优化前代码:
import unittest
from pages.risk.createRisk import CreateRisk
from selenium import webdriver
import time
base_url = "xxxx"
class TestCreateRisk(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.maximize_window()
cls.risk = CreateRisk(cls.driver)
def setUp(self):
self.driver.get(base_url)
def tearDown(self):
self.driver.delete_all_cookies()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def test_create_risk(self):
'''新建风险点'''
random = self.risk.get_random_chinese()
self.risk.createRisk(random)
time.sleep(3)
if __name__ == '__main__':
unittest.main()
优化后代码:
import unittest
from pages.risk.createRisk import CreateRisk
from selenium import webdriver
from common.readConf import ReadConf
import time
class TestCreateRisk(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.maximize_window()
cls.risk = CreateRisk(cls.driver)
# 读取配置文件,传入sections值,
cls.url = ReadConf()
cls.standard_url = cls.url.readConf('risk') #这里传入risk模块
# 获取配置文件中的url
cls.base_url = cls.standard_url['url0'] #这里传入risk模块中新建风险的url
print(cls.base_url)
def setUp(self):
self.driver.get(self.base_url)
def tearDown(self):
self.driver.delete_all_cookies()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def test_create_risk(self):
'''新建风险点'''
random = self.risk.get_random_chinese()
self.risk.createRisk(random)
time.sleep(3)
if __name__ == '__main__':
unittest.main()
经过修改后,每次更新url地址,只需在配置文件中修改就好了,是不是方便多了~~
接下来我们来看接口自动化中有关.yaml配置文件的使用方法
Yaml文件我们要注意其写法
.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之间需要有一个空格
针对.yaml配置文件,需要手动安装pyyaml:pip install pyyaml
引入yaml模块:import yaml
打开yaml文件
调用yaml.load函数加载文件对象,返回值为dict
import yaml
with open("log.yaml",encoding="utf-8") as fs:
datas = yaml.load(fs,yaml.FullLoader)
pass
for key,value in datas.items():
print(key)
print(value)
from configparser import ConfigParser
config = ConfigParser()
# 读取配置文件
config.read("log.ini",encoding="utf-8")
# 读取配置文件中的某一项值
val = config.get("log","name")
print(val)
# 获取当前的section
secs = config.sections()
print(secs)
# 获取指定section中的所有options
opts = config.options("log")
print(opts)
由于读取配置文件信息的操作流程相对比较固定,因此我们可以其封装成一个类。
当我们需要使用时,只需引入该模块即可
from configparser import ConfigParser
import os
class HandleConfig(ConfigParser):
def __init__(self,file_path):
super().__init__()
# 将配置文件读入内存
self.read(file_path,encoding="utf-8")
pass
pass
# 在实际调用时,log.ini可以根据个人喜好进行自定义
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"log.ini")
# 实例化配置类时,需要指定配置文件的名称
handleConfig = HandleConfig(file_path)
以上就是Python自动化测试中简单的读取配置文件,罗马不是一天就能建成的,企业中的自动化测试框架也是如此
去优化每个流程、每个模块,这样带来的效率提升,才是自动化测试的意义和技术所在
本篇文章如果对你有所帮助希望能点个小赞,今后会持续更新更多的自动化测试学习技术和方法
上面是我收集的一些视频和面试题资料,对于软件测试的的朋友来说应该是最全面最完整的面试备战仓库
为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你
关注微信公众号【测试菜鸟小家洛】即可领取软件测试超硬核资源!也可以点击这里进入群聊领取
总之,学习如逆水行舟,不进则退。想要多高的薪资,就要付出多大的努力。