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

news2024/11/15 8:36:46

1. 配置文件说明

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

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

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

2.ConfigParser介绍

1.下载安装

# 下载
pip install configparser

# 验证 :
pip show configparser

2.导包

import configparser		
from configparser import ConfigParser		# 直接导入这个类

# 说明 :以上两种方式都可以 ,

3.ConfigParser 格式

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

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

[db]
host = 127.0.0.1
port = 3306
user = root
password = root
database = 'school'

说明 :

  • 这里的db就可以称为section

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

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

3.ConfigParser功能

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

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

[db]
host = 127.0.0.1
port = 3306
user = root
password = root
database = 'school'

[user_info]
user_name = 'admin'
password = '123456'
3.1 读取配置信息
ConfigParser类里的一些方法:
​
read(文件) : 读取配置文件
sections() : 获取某配置文件下所有的section
options(section)    : 获取某一section下的所有的键名,以列表返回。
get(section,key)    : 获取某一section下某一options下的值
getint(section,key) : 获取到key对应的值转化为Int类型
getboolean(section,key) : 获取到key对应的值转化为boolean类型
getfloat(section,key)   : 将获取到key对应的值转化为float类型
items(section)  :   获取指定section的所用配置信息

使用流程如下 :

  1. 导包 :import configparser

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

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

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

案例1:获取所有section节点

import configparser
config = configparser.ConfigParser()
config.read("my.ini", encoding="utf-8")
print("返回所有的sections:",config.sections())

#运行结果
# ['db', 'user_info']

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

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

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

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

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

import configparser
config = configparser.ConfigParser()
config.read("my.ini", encoding="utf-8")
r = config.items("db")
print(r)
#运行结果
#[('host', '127.0.0.1'), ('port', '3306'), ('user', 'root'), ('password', 'root'), ('database', 'school')]
3.2 添加/修改配置信息
ConfigParser类里的一些方法:


has_section('section')	: 是否存在该section
has_option("section", "option")  : 是否存在该option
add_section('section')		: 添加section
config.set("section", key, value) : 添加section里下面key = value  ,若该key不存在 。
write(文件对象)		: 写入内容

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

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

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

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

import configparser
config = configparser.ConfigParser()
config.read("my.ini", encoding="utf-8")
config.set("db", "port", "3307")  #修改port的值为3307
config.write(open("my.ini", "w"))
3.3 删除配置信息
ConfigParser类里的一些方法:

remove_option('section','option')	: 删除section下的option
remove_section('section')	: 删除整个section下的所有内容

案例1 : 删除report这个section

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

案例2 : 删除user_info下的password

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

4.项目实践

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

4.项目总结

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

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

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

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1111096.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32标准外设库下载(下载地址与步骤详解)

文章目录 1. 概述2. 官方下载地址3. 步骤详解3.1 打开官网3.2 工具与软件 ➡ 嵌入式软件 ➡ MEMS软件3.3 微控制器软件 ➡ STM32微控制器软件 ➡ STM32标准外设软件库 ➡ 选择产品系列3.4 选择版本 ➡ 点击下载3.5 点击“接受” ➡ 填写邮箱信息 ➡ 点击“下载”3.6 点击接收到…

【Django 03】QuerySet 和 Instance应用

1. DRF QuerySet 和 Instance功能概述 1.1 QuerySet 从数据库中查询结果存放的集合称为 QuerySet。 Django ORM用到三个类:Manager、QuerySet、Model。每个Model都有一个默认的 manager实例,名为objects。Django的ORM通过Mode的objects属性提供各种数据…

【Typora】解决单词爆红问题

问题:写笔记时,有许多单词爆红,看着十分不舒服 解决方案: 点击文件 --> 偏好设置 编辑器 --> 检查拼写错误,修改为:不使用拼写检查 修改好后返回界面,效果如下:

基于springboot实现线上教学平台项目【项目源码+论文说明】计算机毕业设计

摘要 在社会快速发展的影响下,使线上教学平台的管理和运营比过去十年更加理性化。依照这一现实为基础,设计一个快捷而又方便的网上线上教学平台系统是一项十分重要并且有价值的事情。对于传统的线上教学平台控制模型来说,网上线上教学平台系…

蓝桥杯(路径 动态规划 C++)

思路: 1、利用动态规划的思想。 2、用f[i]来记录从第一个点到第i个点的最短距离。 3、f[i]赋值分两种情况,第一种:f[i]为0的时候,也就是第一种刚到i点的情况,记录其距离为最小公倍数;第二种:…

原生Android与uniapp开发的H5混合开发

1、uniapp项目打包 vue版本选择2.0 记住一点,打包H5前修改配置,否则在Android中打开会白屏,修改方式如下 打包成H5,打包后可以在浏览器打开确保有内容 2、将打包后的uniappH5拷贝到Android项目 assets文件夹没有就自己建 3、And…

06496基于PHP的在线考试系统设计与实现-计算机毕业设计源码

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算…

Leetcode.19 删除链表的倒数第 N 个结点

题目链接 Leetcode.19 删除链表的倒数第 N 个结点 mid 题目描述 给你一个链表,删除链表的倒数第 n n n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 示例 2: 输…

XAMPP、Apache搭建本地PHP服务器(全网最保姆级)

XAMPP搭建本地PHP服务器 用XAMPP搭建本地PHP服务器,运行php文件 启动服务 打开后进入如下界面:根据自己的需要启动服务 我这里打开的是Apache和MySQL 可以根据自己的习惯修改端口号 默认是8080 我这里修改为80端口 修改监听的端口号 Httpd.conf文件…

【小笔记】为什么文本相似度要用余弦相似度而不用欧式距离?

欧式距离 它计算的是高维空间中两个点之间的绝对距离,不考虑向量的方向性 余弦相似度 它计算的是两个向量夹角的cos值,只关注向量的方向,不考虑向量的绝对大小(因为不管长短,都会除以模变成单位向量)&am…

【面试经典150 | 区间】用最少数量的箭引爆气球

文章目录 Tag题目来源题目解读解题思路方法一:合并区间 其他语言python3 写在最后 Tag 【合并区间】【排序】【数组】 题目来源 452. 用最少数量的箭引爆气球 题目解读 每个气球都有一个占据x轴的一个范围,在这个范围里射出一只箭就会引爆该气球&…

03、MySQL-------数据库中间件MyCat实现读写分离

目录 八、数据库中间件MyCat实现读写分离1、克隆:2、配置分析:1、schema.xml2、启动mycat:3、关闭防火墙:4、代码测试:测试写入:测试读:强制读Master 八、数据库中间件MyCat实现读写分离 作用&…

gcc编译C语言

目录 文章目录 一、gcc编译C语言过程1. 预处理阶段2. 编译阶段3. 汇编阶段4. 链接阶段 二、示例1.预处理2.编译3.汇编4.链接5.执行命令 一、gcc编译C语言过程 gcc编译C语言程序的过程分成四个阶段:预处理、编译、汇编和链接。 编译流程命令作用解释预处理阶段gcc …

EasyRule源码:EasyRule框架源码分析

目录 1.简要介绍EasyRule 2.从实例入手看EasyRule使用方法 3.执行过程源码分析 3.1 Fact&Facts 3.2 规则定义和注册 3.2.1 Rule接口 3.2.2 规则注册管理 3.2.3 创建规则代理 3.3 规则引擎调度执行 1.简要介绍EasyRule 当下的规则引擎选择非常多,例如 …

PN8016 宽输出范围非隔离交直流转换芯片适用于非隔离的辅助电源

PN8016集成PFM控制器及800V高雪崩能力智能功率MOSFET,用于外围元器件极精简的小功率非隔离开关电源,输出电压可通过FB电阻调整。 PN8016内置800V高压启动与自供电模块,实现系统快速启动、超低待机、自供电功能。该芯片提供了完整的智能化保护…

Twitter正在测试年度订阅以进行推文和转推

导语:最近,Twitter(现更名为X)正在测试新的年度订阅服务,为未经验证的账户提供推文和转推等核心功能。这一举措是一个名为“Not A Bot”的测试计划的一部分,从本周二开始在新西兰和菲律宾用户中推出。通过设…

【MyBatis】mybatis工具类迭代

目录 MyBatis工具类的迭代 ThreadLocal使用 mybatis工具类终极版: MyBatis工具类的迭代 public class MyBatisUtil {//工具类构造方法私有化private void MyBatisUtil() {}//方法一public static SqlSession getSqlSession(){try {SqlSessionFactoryBuilder sql…

Xilinx DDR4 MIG 的调试

平台:Vivado2021.1 芯片:xcku115-flva1517-2-i (active) 语言:VerilogHDL 参考文件:pg150.下载地址 pg150-ultrascale-memory-ip.pdf • 查看器 • AMD 自适应计算文档门户 (xilinx.com) DDR4介绍 DDR4,即第四代…

隐藏Zotero批注图标(便利贴)

使用Zotero看文献做批注的时候,会出现图上类似于便利贴的图标,容易遮挡字体。 在"编辑"中选择"首选项","翻译"中去掉勾选"自动翻译批注"。 就好了

python二次开发Solidworks:扫描

在新零件文档中创建一个圆形草图和两条线段草图,并将它们插入到模型中。接着,选中圆形草图作为扫描轮廓,并选中两条线段草图并将它们分组为一个对象。最后,使用特征管理器的InsertProtrusionSwept4方法创建扫描特征。 import win…