百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

python自动化测试框架之如何编写配置文件?使用ConfigParser试试

ccwgpt 2024-10-04 14:02 25 浏览 0 评论

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.项目总结

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

第一 、如何编写一个接口自动化框架 ,在第一篇博文中介绍了 。https://www.toutiao.com/item/7223778665283404323/

第二、如何使用unittest编写测试用例 ,已经在第二篇博文中介绍了 。https://www.toutiao.com/item/7225986414469825024/

第三、如何使用requests实现接口请求 ,并和测试用例如何对接 ,已经在第三篇博文中介绍了。https://www.toutiao.com/item/7231485629643997748/

第四、如何使用yaml编写测试数据 ,已经在第四篇博文中介绍了 。https://www.toutiao.com/item/7236369710286733861/

第五,如何使用allure生成测试报告,已经在第五篇博文中介绍了 。https://www.toutiao.com/item/7243783682144944697/

第六 ,如何使用loguru记录日志 ,已经在第六篇博文中介绍了 。https://www.toutiao.com/item/7253833815246815796/

第七,如何使用pymysql连接数据库,已经在第七篇博文中介绍了 。https://www.toutiao.com/item/7256573953278214668/

第八,如何进行数据参数化 ,已经在第八篇博文中介绍了 。https://www.toutiao.com/item/7264358637693354553/

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

相关推荐

十分钟让你学会LNMP架构负载均衡(impala负载均衡)

业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...

AGV仓储机器人调度系统架构(agv物流机器人)

系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...

远程热部署在美团的落地实践(远程热点是什么意思)

Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...

springboot搭建xxl-job(分布式任务调度系统)

一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...

大模型:使用vLLM和Ray分布式部署推理应用

一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...

国产开源之光【分布式工作流调度系统】:DolphinScheduler

DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...

简单可靠高效的分布式任务队列系统

#记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...

虚拟服务器之间如何分布式运行?(虚拟服务器部署)

  在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...

一文掌握 XXL-Job 的 6 大核心组件

XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...

京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?

京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...

企业级项目组件选型(一)分布式任务调度平台

官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...

python多进程的分布式任务调度应用场景及示例

多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...

SpringBoot整合ElasticJob实现分布式任务调度

介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...

分布式可视化 DAG 任务调度系统 Taier 的整体流程分析

Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...

SpringBoot任务调度:@Scheduled与TaskExecutor全面解析

一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...

取消回复欢迎 发表评论: