Python自动化测试之获取配置文件信息

目录

  • 前言
    • 为什么使用配置文件
    • 配置文件的优点
  • 正文
    • .ini配置文件
      • 读取.ini配置文件信息的操作流程
      • 代码编写
        • 配置文件 :config.ini
        • 读取配置文件 :readConf.py
        • 用例编写
    • .yaml配置文件
      • 读取.yaml配置文件信息的操作流程
      • 代码示例
      • 具体实现
      • 封装读取配置文件的操作
  • 后话

前言

本篇教程以录制视频教学,需要的朋友可以点击这里进入群聊领取

为什么使用配置文件

在python自动化测试中,为了减轻测试脚本维护过程中工作量,我们可以将一些常用的变量或者参数值放置在配置文件中。
当我们需要修改某个变量的值时,只需修改配置文件中的选项值就可以实现这一目的,不在需要去改变代码中的每个变量
尤其是对页面需求经常变动的UI测试而言,掌握配置文件的读取方法,可以较大限度的减少代码修改量

配置文件的优点

除了可以减轻测试脚本在维护过程中的工作量,使用配置文件还有如下优点:

  1. 可以不用去修改源代码,配置文件的修改只会影响读取时的存在与否,不会影响到代码的正常运行,提高代码的容错率;
  2. 不管是在维护阶段还是搭建自动化阶段,我们只需要对配置文件进行读取,而不是重复地写冗余代码,从而提高工作效率。

正文

在自动化测试中,经常使用的配置文件类型包括如下两类,分别为:①.ini ②.yaml,这两个文件类型也分别应用在UI的自动化和接口的自动化中

.ini配置文件

.ini配置文件格式如下:

;这里是注释

[section0]

key0 = value0
key1 = value1

[section1]

key2 = value2
key3 = value3

section不能重复,里面数据通过section去查找,每个seletion下可以有多个key和vlaue的键值对,注释用英文分号( ; )

读取.ini配置文件信息的操作流程

针对.ini配置文件,直接使用python自带的configparser模块读写配置文件

  1. 导入configparser模块:from configparser import ConfigParser

  2. 实例化ConfigParser类:config = ConfigParser()

  3. 读取配置文件:config.read(“配置文件名称.ini”,encoding=“utf-8”)

  4. 获取配置文件中某一option的值:val = config.get(“section名称”,“option名称”)

  5. config.options(“section名称”)

  6. 获取当前配置文件中的所有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 ,然后编写代码…
Python自动化测试之获取配置文件信息_第1张图片

配置文件 :config.ini

以UI自动化中常用的url为例:配置文件中按照功能模块分为 risk 、rule 、term ;其下的url地址分别代表该模块下某个功能点的url

[risk]
;新建风险
url0 = www.baidu.com
;新建风险目录、导入风险模板
url1 = xxxx

[rule]
;新建制度目录
url1 = xxxxx
;制度审批任务模板
url2 = xxxxxxx


[term]
;新建术语
url1 = xxxxxx
;新建术语目录
url2 = xxxxxx

读取配置文件 :readConf.py

以下是封装好的读取配置文件的方法

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文件我们要注意其写法

  1. k: v 表示一对键值对
  2. 冒号后面是有一个空格的
  3. 以空格的缩进来代表层级关系,对齐代表的就是同一层级
  4. 属性和值也是大小写敏感

.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配置文件信息的操作流程

针对.yaml配置文件,需要手动安装pyyaml:pip install pyyaml

  1. 引入yaml模块:import yaml

  2. 打开yaml文件

  3. 调用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自动化测试中简单的读取配置文件,罗马不是一天就能建成的,企业中的自动化测试框架也是如此
去优化每个流程、每个模块,这样带来的效率提升,才是自动化测试的意义和技术所在
本篇文章如果对你有所帮助希望能点个小赞,今后会持续更新更多的自动化测试学习技术和方法
Python自动化测试之获取配置文件信息_第2张图片
上面是我收集的一些视频和面试题资料,对于软件测试的的朋友来说应该是最全面最完整的面试备战仓库

为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你

关注微信公众号【测试菜鸟小家洛】即可领取软件测试超硬核资源!也可以点击这里进入群聊领取

总之,学习如逆水行舟,不进则退。想要多高的薪资,就要付出多大的努力。

你可能感兴趣的:(Python自动化测试,软件测试,自动化测试,测试工程师,测试开发,经验分享)