断言无忧!接口自动化框架封装,Mysql数据库断言

目录

 前言:

一、项目背景

二、框架封装

1. Mysql数据库连接

2. 查询功能

3. 断言功能

4. 使用示例

三、总结


 前言:

随着互联网行业的迅猛发展,接口自动化测试在软件开发过程中扮演着越来越重要的角色。而在进行接口测试的过程中,常常会涉及到对数据库的操作,如查询、修改、删除等。而要保证接口测试的准确性和可靠性,则需要对数据库的操作进行断言验证,确保接口返回的数据和数据库中存储的数据一致。

本文将结合实际项目案例,分享一个基于Python语言的接口自动化测试框架封装方法,通过封装Mysql数据库查询和断言功能,实现高效、准确的接口自动化测试。

一、项目背景

在进行接口自动化测试时,通常会面对以下几个问题:
- 频繁的数据库操作对测试性能影响较大,如何优化?
- 接口返回数据和数据库中数据不一致,如何进行自动化断言?

为解决以上问题,我们选择对接口自动化测试框架进行封装,封装数据库查询模块和断言模块。

二、框架封装

1. Mysql数据库连接

在Python中,我们可以通过pymysql模块进行数据库连接。具体实现代码如下:

import pymysql

class MysqlHandler(object):
    def __init__(self, host, port, user, passwd, db, charset='utf8'):
        self.host = host
        self.port = port
        self.user = user
        self.passwd = passwd
        self.db = db
        self.charset = charset
        self.conn = None
        self.cursor = None
        
    def connect(self):
        self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user,
                               passwd=self.passwd, db=self.db, charset=self.charset)
        self.cursor = self.conn.cursor()
        return self.cursor

    def close(self):
        self.cursor.close()
        self.conn.close()

2. 查询功能

针对数据库的查询操作,我们将其封装为MysqlHandler类的成员函数,具体实现代码如下:

def query(self, sql):
        try:
            self.connect()
            self.cursor.execute(sql)
            return self.cursor.fetchall()
        except Exception as e:
            print(e)
        finally:
            self.close()

3. 断言功能

针对接口返回数据和数据库中数据不一致的问题,我们将其封装为MysqlAssert类的成员函数,通过分别查询数据库和接口数据,然后比对两者返回结果是否一致,具体实现代码如下:

class MysqlAssert(object):

    def __init__(self, mysql_handler):
        self.mysql_handler = mysql_handler

    def assert_result(self, sql, result_dict_list):
        mysql_result = self.mysql_handler.query(sql)
        for i, result_dict in enumerate(result_dict_list):
            for key, value in result_dict.items():
                assert mysql_result[i][key] == value, f'assert fail, key={key}, expected={value}, sql={sql}'

4. 使用示例

在实际项目中,我们可以通过以下方式进行调用和使用:

mysql_handler = MysqlHandler(host='127.0.0.1', port=3306, user='root', passwd='123456', db='test')
mysql_handler.connect()

assert_handler = MysqlAssert(mysql_handler=mysql_handler)
sql = "SELECT * FROM user WHERE id='test'"
result_dict_list = [{'name': 'test', 'age': 18}]
assert_handler.assert_result(sql=sql, result_dict_list=result_dict_list)

mysql_handler.close()

三、总结

通过本文的分享,我们学习了如何针对接口自动化测试中的数据库查询和断言进行封装,借助Python语言的优势,实现了高效、准确的接口自动化测试。在实际项目中,我们还可以根据实际需求进行功能扩展,如增加数据插入、更新、删除等操作,以及批量查询等。

 作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试前进之路的必须品,如果你用得到的话可以直接拿走,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!

获取方式:留言【自动化测试】即可获取
【自动化测试交流】:574737577(进群备注ccc)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=kBejXNHnzeKNqwOzwf8uRo-EPmQUZ7wl&authKey=yTwGvzhroHT6GcHrdGUH7BAFUlC4RFn1POhNBRXhQGm3qkeBc4%2F7DGYk%2Byi9vymF&noverify=0&group_code=574737577

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

仙人掌之歌——权力的游戏(2)

他是特级战斗英雄 “那个李通,会不会看起来好吓人呀?” 云冰洁有些紧张的样子,几乎要让陈速笑出来。 “哪有,一个很 nice 的人好吧。就是看起来比较严肃而已,我也从没看他笑过倒是。” 陈速让云冰洁看菜单&#xff0…

WBS项目分解的7大基本原则

制定和分解WBS,需要遵循的基本原则: 1、唯一性 每一项工作任务在WBS中是唯一的。 WBS项目分解的7大基本原则 2、负责制 每一项任务都需要明确责任人,一人负责,其他人参与。 3、可测量性 每一项任务都应该是可以量化和测量的&#…

ASEMI代理韩景元可控硅C106M参数,C106M封装,C106M尺寸

编辑-Z 韩景元可控硅C106M参数: 型号:C106M 断态重复峰值电压VDRM:600V 通态电流IT(RMS):4A 通态浪涌电流ITSM:30A 平均栅极功耗PG(AV):0.2W 峰值门功率耗散PGM:1W 工作接点温度Tj&…

Springboot +spring security,使用过滤器方式实现验证码功能

一.简介 在前面文章章节通过自定义认证器实现了验证码功能,这篇文章使用过滤器来实现验证码功能。 二.思路分析 实现逻辑和通过过滤器实现json格式登录一样,需要继承UsernamePasswordAuthenticationFilter,所以文档这块主要记录下代码实现…

UNIX网络编程卷一 学习笔记 第十六章 非阻塞式IO

套接字的默认状态是阻塞的,当发出一个不能立即完成的套接字调用时,进程将被投入睡眠,等待相应操作完成。可能阻塞的套接字调用有以下四类: 1.输入操作:包括read、readv、recv、recvfrom、recvmsg函数。如果进程对一个阻…

java版企业工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…

嵌入式学习之Linux驱动(第九期_设备模型_教程更新了)_基于RK3568

驱动视频全新升级,并持续更新~更全,思路更科学,入门更简单。 迅为基于iTOP-RK3568开发板进行讲解,本次更新内容为第九期,主要讲解设备模型,共计29讲。视频选集 0.课程规划 06:35 1.抛砖引玉-设备模型…

vue 3.0使用 iframe 标签引入本地HTML页面,并实现数据交互

文章目录 1. 问题总结2. vue中引入html页面3. vue向html传递数据4. html向vue传递数据 1. 问题总结 最近在做vue的项目时候,需要引入本地html页面,中间遇到了很多问题,费时又费力,因此记录下来,以备不时之需&#xff…

win10微软Edge浏览器通过WeTab新标签页免费无限制使用ChatGPT的方法,操作简单,使用方便

目录 一、使用效果 二、注册使用教程 1.打开Edge浏览器扩展 2.选择Edge浏览器外接程序 3.搜索WeTab 4.进入管理扩展 5.启用扩展 ​编辑 6.进入WeTab新标签页 7.打开Chat AI 8.注册 9.使用 ChatGPT是OpenAI推出的人工智能语言模型,能够通过理解和学习人类…

多线性开发实例分享

一. 概述 首先,在这里有必要和大家复现一下我使用该技术的背景: 在使用若依框架的时候,由于实际开发的需要,我需要配置四个数据源,并且通过mapper轮流去查每个库的指定用户数据,从而去判断改库是否存在目标…

PyQt5实现父窗口内点击按钮显示子窗口(窗口嵌套功能)

摘要:在软件中,常会有点击某个按钮,显示一个新的子界面的需求,本文介绍如何在PyQt5中实现这一功能,主要涉及知识点是“信号与槽函数的自动绑定”。 程序说明: 1.开发环境:win10系统&#xff0c…

如何在 Linux 中创建非登录用户?

在 Linux 系统中,用户账户的管理是一个重要的任务。除了常规的登录用户,有时候我们需要创建一些非登录用户,这些用户通常用于运行服务、执行特定任务或限制访问权限。 本文将详细介绍如何在 Linux 中创建非登录用户,并提供一些相关…

基于Redis的Java分布式锁,接口并发处理,并发方案

Redis的分布式锁很多人都知道,比如使用Jedis的setNx、incr等方法都可以实现分布式锁的功能,但是Jedis需要自己管理连接池,就稍微麻烦一点。 今天介绍的是使用RedisTemplate切面编程自定义注解SPEL来实现分布式锁的功能,封装完成后…

(电脑硬件)台式机主板音频端口功能详解

当你想给你的主机插上音响或者耳机时,你会发现主板上有6个接口,同样都是3.5mm接口,你知道该插哪个吗? 一般情况下,后置输入输出端口面板中,大多数的主板音频部分是彩色的。这一类颜色跟功能基本是固定的。当…

代码随想录训练营Day53| 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划

目录 学习目标 学习内容 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划 学习目标 1143.最长公共子序列 1035.不相交的线 53. 最大子序和 动态规划 学习内容 1143.最长公共子序列 1143. 最长公共子序列 - 力扣(LeetCode)ht…

通过ChatGPT跟MetaHuman对话,Android/iOS兼容

一、申请ChatGPT的API-KEY 1.通过 openAI官网申请API-KEY 2.参考使用腾讯云函数一分钟搭建 OpenAI 免翻墙代理搭建openAI免翻墙代理 3.通过Postman测试一下openAI函数是否可被调用,传入BearerToken和Body参数,ChatGPT即可返回应答数据 二、启用必要的插件 1.启用文字转语…

文本三剑客-Sed

sed工作原理 sed的特点: sed基本语法 模式空间中的编辑操作---地址定界 常用编辑命令 增添(a) 追加(i) 删除(d) 读入文件(r) 固定长度替换(y&#xff0…

Segment Anything专题论文和代码汇总

文章目录 2023Scaling-up Remote Sensing Segmentation Dataset with Segment Anything ModelPersonalize Segment Anything Model with One ShotSegment Anything in Medical ImagesMatcher: Segment Anything with One Shot Using All-Purpose Feature MatchingCustomized Se…

程序员困局:去大城市进大厂却买不了房,回老家又没有高薪工作…

对于在外打拼的程序员来说,难的是进大厂,而不是买不起房。 进大厂的程序员,能不能买得起房? 进大厂的程序员的薪资,还是相当可观的。以阿里P6为例,年薪50万,到手40万左右,刨去10万…

C++小知识点(auto关键字)

🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…