自动化测试中如何编写配置文件 ? 该使用什么工具 ? 一文详解使用ConfigParser读写配置文件
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的所用配置信息
使用流程如下 :
-
导包 :
import configparser
-
初始化对象 :
config = configparser.ConfigParser()
-
读取配置文件 : config.read(配置文件)
-
根据需求读取某一个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"): # 检查是否存在resultconfig.add_section("result")
if not config.has_option("result", "report"): # 检查是否存在该optionconfig.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连接数据库,已经在第七篇博文中介绍了 。
第八,如何进行数据参数化 ,已经在第八篇博文中介绍了 。
第九,如何进行读取配置文件数据,就是也就是本篇博文了 。
相关文章:

自动化测试中如何编写配置文件 ? 该使用什么工具 ? 一文详解使用ConfigParser读写配置文件
1. 配置文件说明 只要是用编写项目,你就肯定离不开配置文件 。就以测试人员编写的自动化测试项目为例 ,如果你做连接数据库 、访问一些第三方接口、或者访问登录接口的用户名和密码。这些输入的信息最大特点就是都可能是变量,比如访问数据库…...

文件批量管理:轻松复制备份并删除原文件
在日常生活和工作中,我们经常需要处理大量的文件。为了确保文件的安全性和完整性,您需要一种高效的文件批量管理方法。本文将向您介绍如何一一复制备份并删除原文件里的文件,让您的文件管理变得轻松便捷。 首先,我们要进入文件批…...

Linux高性能服务器编程 学习笔记 第十七章 系统监测工具
tcpdump是一款经典的抓包工具,即使今天我们已经有了像Wireshark这样更易于使用和掌握的抓包工具,tcpdump仍是网络程序员的必备利器。 tcpdump提供了一些选项用以过滤数据包或定制输出格式,常见的选项如下: 1.-n:使用I…...
rabbitmq 消费者报错 ListenerExecutionFailedException NullPointerException
报错信息: org.springframework.amqp.rabbit.support.ListenerExecutionFailedException: Listener method private void com.xxx.service.impl.xxxServiceImpl.xxx(com.xxx.dto.XXX) threw exception at org.springframework.amqp.rabbit.listener.adapter.Mes…...

Java面试题:链表-合并两个排序的链表
描述 输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例 输入: {1,3,5}, {2,4,6}返回值: {1,2,3,4,5,6}原题地址:https://www.nowcoder.com/practice/d8b6b4358f7742…...

Springboot结合Mockito写单元测试实践和原理
文章目录 前言一、使用最佳实践使用场景SpyBean失效场景解决Mock失效的问题避免FactoryBean的实现方式使用MockBean,但是要指定name 个人推荐 二、原理1. MockBean2.SpyBean方法调用 总结 前言 相信看我博客的都是javaer,工作中一般都是使用Springboot框…...
操作系统之微内核架构
宏内核相反,微内核架构提倡功能尽可能少,只提供进程调度、处理中断、内存映射、进程间通信等功能。微内核架构是不能够提供什么实际功能的,而内存管理、进程管理、设备管理和文件管理服务等,都被做成一个个服务进程,它…...

24---WPF缓存
一、什么是缓存: 1.缓存指的是将需要频繁访问的网络内容存放在离用户较近、访问速度更快的系统中,以提高内容访问速度的一种技术。缓存服务器就是存放频繁访问内容的服务器。 2.缓存就是一个临时存放区域--离用户比较近 二、作用--意义---如果系统出现故…...

vite+vue3.0 使用tailwindcss
参考资料: 安装 - TailwindCSS中文文档 | TailwindCSS中文网 npm install -D tailwindcss npm install postcss npm install autoprefixer npx tailwindcss init -p 生成/src/tailwind.config.js和/src/postcss.config.js配置文件 在/src/tailwind.config.js配置文件…...

C++QT---QT-day3
使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是否为&…...
小程序如何搭建在服务器上
小程序可以通过搭建在服务器上,来实现跨平台的访问和使用。以下是搭建小程序在服务器上的步骤: 安装Node.js:首先,你需要在服务器上安装Node.js。你可以从Node.js的官方网站下载并安装。 安装微信开发者工具:然后&…...

JavaEE初阶学习:Servlet
1.Servlet 是什么 Servlet 是一种 Java 程序,用于在 Web 服务器上处理客户端请求和响应。Servlet 可以接收来自客户端(浏览器、移动应用等)的 HTTP 请求,并生成 HTML 页面或其他格式的数据,然后将响应发送回客户端。S…...

黑白二维码不好看,那么快学习改色的方法吧
现在经常会看到很多的二维码不是黑白图案,可以是其他纯色或者渐变色等样式的,那么怎么将黑白二维码改成其他鲜艳好看的颜色呢?一般想要修改普通样式的二维码可以用二维码美化生成器来处理,只需要上传二维码图片,就可以…...

coreldraw2024版本有哪些新增功能?
有小伙伴在用电脑查找软件程序的时候,看到了一款叫cdr软件的应用,自己之前没接触过,不知道cdr是什么软件?cdr软件是干什么的?十分好奇。其实它是一款平面设计软件,下面就给大家介绍下相关的cdr软件的知识。…...

2023最新Office2021专业增强版安装使用教程
Microsoft Office专业增强版2021是一套办公软件套装,包含了Word、Excel、PowerPoint、Outlook、Access、Publisher、OneNote、Teams等应用程序。这个版本是在Office 365的基础上推出的新版本,与之前的Office版本相比,增强了许多功能。也是目前…...

实时配送跟踪功能的实现:外卖跑腿小程序的技术挑战
在当今数字化时代,外卖和跑腿服务已经成为了生活中不可或缺的一部分。为了提供更好的用户体验,外卖跑腿小程序越来越注重实时配送跟踪功能的实现。这项技术挑战旨在确保顾客可以方便地跟踪他们的订单,以及配送员可以高效地完成送货任务。本文…...

react实现一维表格、键值对数据表格key value表格
UI画的需求很抽象,直接把数据铺开,不能直接用antd组件了 上一行是name,下一行是value,总数不定,最后前端还要显示求和 class OneDimensionTable extends React.Component { render() {const { data } this.props;le…...

个人微信CRM客户管理系统怎么选?功能介绍
现在市面上有许多种类的个人微信CRM客户管理系统可供选择,因此,我们需要选择最适合自己需求的微信管理系统CRM,最重要的是根据您的需求和期望的功能来进行筛选。 如何选择适合自己的微信CRM客户管理系统? 现在市面上的系统五花八…...

Mac Intellij Idea get/set方法快捷键
Control Retrun(回车键) Command n 参考: Mac Intellij Idea get/set方法快捷键-CSDN博客...

并发程序设计
一、进程的创建和回收 一、进程的概念 1、进程!程序 程序是静态的,而进程是动态的 2、进程和程序的区别 1)进程控制块中包含进程的属性 2)程序在磁盘里面,堆栈都是在内存中,程序运行起来都在内存中 3…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...