• 自动化测试中如何编写配置文件 ? 该使用什么工具 ? 一文详解使用ConfigParser读写配置文件


    1. 配置文件说明

    只要是用编写项目,你就肯定离不开配置文件 。就以测试人员编写的自动化测试项目为例 ,如果你做连接数据库 、访问一些第三方接口、或者访问登录接口的用户名和密码。这些输入的信息最大特点就是都可能是变量,比如访问数据库时的信息在测试环境1上是一套、但是访问另外一套测试环境这些信息就已经发生变化了 。

    这个时候怎么办 ?通过的方式就是这些很可能发生变化的信息放在一个文件中去管理 ,这样发生变化时,只需要修改这个文件中的信息就可。

    如果你使用的是python编写的自动化项目 ,它有第一个第三方包就是专门做配置文件读取和写入的,这个包就是ConfigParser

    2.ConfigParser介绍

    1.下载安装

    1. # 下载
    2. pip install configparser
    3. # 验证 :
    4. pip show configparser

    2.导包

    1. import configparser
    2. from configparser import ConfigParser # 直接导入这个类
    3. # 说明 :以上两种方式都可以 ,

    3.ConfigParser 格式

    该模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。

    每一个section代表一类型的配置 ,然后其下面的键值对就属于该section .比如我要在my.ini文件中编写一个db的section,可以这样写:

    1. [db]
    2. host = 127.0.0.1
    3. port = 3306
    4. user = root
    5. password = root
    6. database = 'school'

    说明 :

    • 这里的db就可以称为section

    • 这里host,port等就可以称为options

    当然,这个文件可以编写多个section ,具体存放什么 ? 就看你项目的需求 。

    3.ConfigParser功能

    其实 ,对于ConfigParser类里的方法,其实基本都围绕着配置文件里section 增、删、改、查。

    我们先说查,也就是读取section及section里的键值对 。因为section可能有一个或者多个。就以下面的这个配置文件my.ini为例。

    1. [db]
    2. host = 127.0.0.1
    3. port = 3306
    4. user = root
    5. password = root
    6. database = 'school'
    7. [user_info]
    8. user_name = 'admin'
    9. password = '123456'
    3.1 读取配置信息
    ConfigParser类里的一些方法:
    
    1. read(文件) : 读取配置文件
    2. sections() : 获取某配置文件下所有的section
    3. options(section) : 获取某一section下的所有的键名,以列表返回。
    4. get(section,key) : 获取某一section下某一options下的值
    5. getint(section,key) : 获取到key对应的值转化为Int类型
    6. getboolean(section,key) : 获取到key对应的值转化为boolean类型
    7. getfloat(section,key) : 将获取到key对应的值转化为float类型
    8. items(section) : 获取指定section的所用配置信息

    使用流程如下 :

    1. 导包 :import configparser

    2. 初始化对象 : config = configparser.ConfigParser()

    3. 读取配置文件 : config.read(配置文件)

    4. 根据需求读取某一个section或者options 。

    案例1:获取所有section节点

    1. import configparser
    2. config = configparser.ConfigParser()
    3. config.read("my.ini", encoding="utf-8")
    4. print("返回所有的sections:",config.sections())
    5. #运行结果
    6. # ['db', 'user_info']

    案例2 : 获取指定section 的键名。即将配置文件某个section 所有的键:

    1. import configparser
    2. config = configparser.ConfigParser()
    3. config.read("my.ini", encoding="utf-8")
    4. r = config.options("db")
    5. print(r)
    6. #运行结果
    7. # ['host', 'port', 'user', 'password', 'database']

    案例3 : 获取指定section下指定option的值

    1. import configparser
    2. config = configparser.ConfigParser()
    3. config.read("my.ini", encoding="utf-8")
    4. r = config.get("db", "host") # 获取db下的host对应的值
    5. # r1 = config.getint("db", "post") #将获取到值转换为int型
    6. # r2 = config.getboolean("db", "k2" ) #将获取到值转换为bool型
    7. # r3 = config.getfloat("db", "k3" ) #将获取到值转换为浮点型
    8. print(r)
    9. #运行结果
    10. # 127.0.0.1

    案例4 : 获取指定section所有的配置信息,以列表返回

    1. import configparser
    2. config = configparser.ConfigParser()
    3. config.read("my.ini", encoding="utf-8")
    4. r = config.items("db")
    5. print(r)
    6. #运行结果
    7. #[('host', '127.0.0.1'), ('port', '3306'), ('user', 'root'), ('password', 'root'), ('database', 'school')]
    3.2 添加/修改配置信息
    1. ConfigParser类里的一些方法:
    2. has_section('section') : 是否存在该section
    3. has_option("section", "option") : 是否存在该option
    4. add_section('section') : 添加section
    5. config.set("section", key, value) : 添加section里下面key = value ,若该key不存在 。
    6. write(文件对象) : 写入内容

    案例1 : 添加section和option ,并且检查是否存在section和option

    1. import configparser
    2. config = configparser.ConfigParser()
    3. config.read("my.ini", encoding="utf-8")
    4. if not config.has_section("result"): # 检查是否存在result
    5. config.add_section("result")
    6. if not config.has_option("result", "report"): # 检查是否存在该option
    7. config.set("result", "report", "test_report.html")
    8. config.write(open("my.ini", "w"))

    说明,这里是因为在result下没有report这个option ,故使用set方法相当于添加 。

    案例2: 修改某个option下的值

    1. import configparser
    2. config = configparser.ConfigParser()
    3. config.read("my.ini", encoding="utf-8")
    4. config.set("db", "port", "3307") #修改port的值为3307
    5. config.write(open("my.ini", "w"))
    3.3 删除配置信息
    1. ConfigParser类里的一些方法:
    2. remove_option('section','option') : 删除section下的option
    3. remove_section('section') : 删除整个section下的所有内容

    案例1 : 删除report这个section

    1. import configparser
    2. config = configparser.ConfigParser()
    3. config.read("my.ini", encoding="utf-8")
    4. config.remove_section("default") #整个section下的所有内容都将删除
    5. config.write(open("my.ini", "w"))

    案例2 : 删除user_info下的password

    1. import configparser
    2. config = configparser.ConfigParser()
    3. config.read("my.ini", encoding="utf-8")
    4. config.remove_option("user_info","password") # 删除user_info下的password键值对
    5. config.write(open("my.ini", "w"))

    4.项目实践

    在自动化项目就可以这样配置 ,具体如下 :

    4.项目总结

    至此,我们已经实现了五步了 ,分别是 :

    第一 、如何编写一个接口自动化框架 ,在第一篇博文中介绍了 。

    第二、如何使用unittest编写测试用例 ,已经在第二篇博文中介绍了 。

    第三、如何使用requests实现接口请求 ,并和测试用例如何对接 ,已经在第三篇博文中介绍了。

    第四、如何使用yaml编写测试数据 ,已经在第四篇博文中介绍了 。

    第五,如何使用allure生成测试报告,已经在第五篇博文中介绍了 。

    第六 ,如何使用loguru记录日志 ,已经在第六篇博文中介绍了 。

    第七,如何使用pymysql连接数据库,已经在第七篇博文中介绍了 。

    第八,如何进行数据参数化 ,已经在第八篇博文中介绍了 。

    第九,如何进行读取配置文件数据,就是也就是本篇博文了 。

  • 相关阅读:
    FPS_AI编程
    Spring面试题22:Spring支持哪些ORM框架?优缺点分别是什么?Spring可以通过哪些方式访问Hibernate?
    【Redis系列】缓存击穿、穿透、雪崩解决方案详解
    彻底明白 js 中的 this 指向
    java中实体自动转化日期类
    SESSION详解
    Electron打包方式
    【docker】数据卷和数据卷容器
    Flutter Json解析工具
    Google Earth Engine(GEE)——如何创建一个属性给feature Collection使其图形加载过程中可以出现名称
  • 原文地址:https://blog.csdn.net/venustech0919/article/details/133929754