全网最细,接口自动化测试-数据库操作与日志模块,一篇打通...

news2024/12/28 10:10:08

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

进行接口测试时,我们需要连接到数据库中,对数据源进行备份、还原、验证等操作。

Pymysql模块

Pymysql使用方法
安装:pip install pymysql

Pymsyql使用流程
获取连接;
获取游标 --游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作;
执行SQL语句;
关闭游标;
关闭连接;

21

22

代码实现:

# 创建数据库连接对象
connect =
 pymysql.Connect(
     host='xxxxx',
     port=3306,
     user='root',
     password='XXXX',
     charset='utf8mb4',
     cursorclass=pymysql.cursors.DictCursor
)

说明:
connect:接收Pymysql.connect方法返回的对象,建立连接对象
pymysql.Connect:建立连接方法
host=XXXX:连接数据库服务器
port=3306:连接数据库端口号
user=“root”:用户名
password=“xxxxx”:密码
charset=“utf8mb4”:建立连接的编码
cursorclass=pymysql.cursors.DictCursor:设置返回数据类型,返回字典

# 建立游标
cursor = conn.cursor()

# 执行核心SQL语句
cursor.execute("select version();")

# 关闭游标
cursor.close()

# 关闭连接
conn.close()

查询订单库

# 得到一个游标对象
cursor = connect.cursor()

# 查询库名加表名 
mtxshop_trade.es_order

cursor.execute("SELECT order_id,trade_sn FROM mtxshop_trade.es_order WHERE order_id=47050 OR order_id=47049")

data = cursor.fetchall() 	#得到查询的所有结果
cursor.close()	#关闭游标对象

自动化测试日志

提到日志,无论是写框架代码还是业务代码,都离不开日志的记录,他能给我们定位问题带来极大的帮助,最佳的做法是使用内置的logging模块, 因为 logging 模块给开发者提供了非常丰富的功能。

日志级别:
日志级别是为了控制打印日志的信息程度的
首先,配置日志模块时,需要先设置日志模块的日志等级
例如,如果设置为INFO级别,那么打印日志用DEBUG就不会输出日志。

DEBUG;INFO;WARNING;ERROR;CRITICAL

日志输出模式:
输出到控制台
输出到文件

日志格式:
指定输出的日志的格式和内容常见的格式有:
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息

logging使用流程:
第1步:实例化logging模块
第2步:设置日志等级
第3步:配置日志处理器、日志格式;日志处理器:控制日志的打印模式
第4步:打印日志

logging模块处理流程:
接口测试框架实现日志收集功能

编写日志配置函数代码
这个函数配置了输出日志到控制台和文件,并且设置了日志打印格式

def logging_init():
	# 初始化日志器
	logger = logging.getLogger()
	# 设置日志等级
	logger.setLevel(logging.INFO)
	# 添加控制器
	stream_handler = logging.StreamHandler()
	file_handler = logging.handlers.TimedRotatingFileHandler(config.BASE_DIR + "/logs/lagou_log.log", when='h',

	interval=1,backupCount=3, encoding="utf-8")
	# 设置日志格式
	fmt = "%(asctime)s %(levelname)s [%(name)s] [ %(filename)s %(funcName)s % (lineno)d ] %(message)s "

	formatter = logging.Formatter(fmt)
	# 将日志格式添加到控制器
	stream_handler.setFormatter(formatter)
	file_handler.setFormatter(formatter)
	# 将控制器添加到日志器
	logger.addHandler(stream_handler)
	logger.addHandler(file_handler) 

	return logger

然后在api. init .py 中调用这个函数,完成日志的初始化

from utils import logging_init


# 初始化日志配置函数
logging_init()
# 测试打印日志
import logging

logging.info(" 测 试 info 级 别 的 日 志 打 印 ")
logging.debug("测试debug级别的日志打印") #不会打印

在api. init .py 初始化日志配置的原因:
execute执行script中的用例,script中的用例是调用api 的接口实现接口测试,按照模块语法,调用模块时,会自动执行模块下的 init .py 代码

后续,只需要在需要打印日志的模块,导入logging安装包,就可以输出我们配置好日志格式和日志等级的日志信息了

23

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只要坚持不懈,追求卓越的道路就会越走越宽广,成功永远属于那些敢于拼搏、不怕困难的勇者。无论前路多么艰辛,只要心怀梦想,努力奋斗,成功将与你同行!

只有不断超越自己的勇气,才能在逆境中开创辉煌;只有坚毅不拔的信念,才能将梦想变为现实。奋斗吧,无畏艰难,争取属于自己的光辉人生!

只有奋斗不息,才能创造无限可能;只有努力拼搏,才能迎来辉煌时刻;只有付出汗水,才能收获辉煌人生。坚持信念,战胜困难,你就是属于成功的那一个。相信自己,勇往直前!

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

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

相关文章

Unity Shader - SV_POSITION 和 TEXCOORD[N] 的varying 在 fragment shader 中输出的区别

起因 因另一个TA同学问了一个问题 我抱着怀疑的心态,测试了一下 发现 varying 中的 sv_position 和 texcoord 的值再 fragment shader 阶段还真的不一样 而且 sv_position 还不是简单的 clipPos/clipPos.w 的操作 因此我自己做了一个试验: 结果还是不一…

Ext4文件系统介绍 - 实战篇

本文主要通过dd,hexdump和dumpe2fs工具分析ext4的磁盘二进制数据,加深对ext4文件系统的印象,要想理解本建议先阅读下Ext4文件系统介绍 - 理论篇_nginux的博客-CSDN博客。 磁盘超级块数据分析 根据理论篇我们知道ext4 layout中前1024字节是x…

Flask 使用Flask的session来保存用户登录状态例子

使用Python的Flask库实现的登录接口、查询金额接口和注销接口的示例。 当用户发送POST请求到/login接口时,代码会获取请求中的用户名和密码。如果用户名和密码匹配(在示例中是admin和admin123),则会将用户名保存在session中&…

Scratch 放置建筑

Scratch 放置建筑 本程序的功能是放置和删除建筑。点击鼠标时建筑会复制并从初始位置向鼠标指针移动,每次复制都更换外观,距离鼠标指针较近时停止移动并调至垂直方向,延时0.5秒。延时过后鼠标指针接触到建筑每隔0.1秒进行判断,3次…

HOT62-N皇后

leetcode原题链接:N皇后 题目描述 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返…

灵活用工服务平台是怎样的?

灵活用工服务平台是为企业提供灵活用工人员招募、管理和支付等服务的平台。这些平台通常会建立一套在线系统,帮助企业发布岗位需求,筛选和招募合适的灵活用工人员,管理他们的工作时间和报酬。 企业选择做灵活用工的原因有这些: 1…

虚幻插件Landscaping Landscaping Mapbox

虚幻插件Landscaping & Landscaping Mapbox Landscaping offers an easy way to import GIS data as single Landscape or World Composition (UE4) or World Partition (UE5) or Procedural/Static Mesh. 提供了一种非常简单的方式来导入GIS数据,可以生成Lands…

力扣C++|一题多解之数学题专场(1)

目录 7. 整数反转 9. 回文数 12. 整数转罗马数字 13. 罗马数字转整数 29. 两数相除 7. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 -如果反转后整数超过 32 位的有符号整数的范围 [2^31, 2^31 -1] ,就返回 0。…

springboot项目中添加自定义日志

文章目录 当前项目使用的springboot为 2.2.2.release。低版本的话logging下的子标签有可能不是这样的。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELE…

vue 项目优化

去除冗余的css 消除框架中未使用的CSS,初步达到按需引入的效果 使用背景&#xff1a;vue2.x, webpack3.x 使用插件&#xff1a;purifycss-webpack 安装&#xff1a; npm i purifycss-webpack purify-css glob-all -D安装后各个插件的版本&#xff1a; “glob-all”: “^3.3.…

基于linux下的高并发服务器开发(第一章)- GDB调试(3)1.15

04 / GDB命令&#xff1a;断点操作 其中num代表断点编号&#xff0c;Type&#xff08;类型&#xff09;为断点&#xff08;breakpoint&#xff09;&#xff0c;Disp为断点状态&#xff0c;Enb是yes代表为有效断点&#xff0c;adress为断点地址&#xff0c;What说明断点的在那个…

APACHE KAFKA本机Hello World教程

目标 最近想要简单了解一下Apache Kafka&#xff0c;故需要在本机简单打个Kafka弄一弄Hello World级别的步骤。 高手Kafka大佬们&#xff0c;请忽略这里的内容。 步骤 Apacha Kafka要求按照Javak8以上版本的环境。从官网下载kafka并解压。 启动 # 生产kafka集群随机ID KA…

游戏AI的崛起:腾讯、网易等企业引领行业变革

随着游戏AI技术的迅猛发展&#xff0c;游戏行业正在经历一场前所未有的变革。在这个数字化时代&#xff0c;腾讯、网易等行业领先企业正以惊人的步伐在游戏AI领域取得重要进展。他们已经进入了游戏AI的2.0阶段&#xff0c;实现了内容多元化和行为智能化。尤其引人瞩目的是&…

SOLIDWORKS PDM—文件类别的限定

SOLIDWORKS产品数据管理 (PDM) 解决方案可帮助您控制设计数据&#xff0c;并且从本质上改进您的团队就产品开发进行管理和协作的方式。使用 SOLIDWORKS PDM Professional&#xff0c;您的团队能够&#xff1a;1. 安全地存储和索引设计数据以实现快速检索&#xff1b;2. 打消关于…

【GUI】基于开关李雅普诺夫函数的非线性系统稳定(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

superset安装

1、拖动安装包 sh Miniconda3-latest-Linux-x86_64.sh安装路径&#xff1a; /usr/local/miniconda3 2、配置环境变量 在/etc/profile中添加两句 export CONDA_HOME/usr/local/miniconda3 export PATH$PATH:$CONDA_HOME/bin重新加载环境变量 source /etc/profile3、取消激活…

javascript循环数组有什么方法

javascript循环数组的方法 1、循环遍历数组 问题&#xff1a;想要很容易地访问数组的所有元素。 for循环可以用来访问数组的每一个元素。数组从0开始&#xff0c;而且数组属性length用来设定循环结束。 2、按顺序存储和访问值 问题&#xff1a;想要以这样一种方式来存储值&a…

怎么转发别人的朋友圈到自己朋友圈?

一键转发朋友 搜索指定好友&#xff0c;选择好友朋友圈内容&#xff0c;点击转发 2.转发后会跳到【发朋友圈】页面&#xff0c;可直接发送&#xff0c;也可二次编辑&#xff08;修改文案&#xff09;

SpringCloud——消息驱动Stream

屏蔽底层消息中间件MQ的差异&#xff0c;降低切换成本&#xff0c;统一消息的编程模型。 生产者 一、依赖 spring-cloud-starter-stream-rabbit &#xff08;rabbitMQ中间件&#xff09; 二、配置文件 server:port: 8801spring:application:name: cloud-stream-providercl…

从C语言到C++_26(set+map+multiset+multimap)力扣692+349+牛客_单词识别

目录 1. 关联式容器 1.1 树形结构的关联式容器 2. set的相关介绍 2.1 set的构造和迭代器 2.2 set的容量和操作函数 2.3 set使用代码 2.4 multiset使用 3. map的相关介绍 3.1 键值对 3.2 map的构造和迭代器 3.3 map的容量和操作函数 3.4 map使用代码 3.5 multimap使…