接口自动化测试总结,接口鉴权+加密与解密+数据库操作/断言...

前言

1、接口鉴权的多种方式

1)后端接口鉴权常用方法

cookie: 携带身份信息请求认证 之后的每次请求都携带cookie信息,cookie记录在请求头中

token: 携带身份信息请求认证 之后的每次请求都携带token认证信息 可能记录在请求头,可能记录在url参数中

auth: 每次请求携带用户的username和password,并对其信息加密

oauth2(选修): 携带身份信息请求认证 服务端向指定回调地址回传code 通过code获取token 之后的请求信息都携带token。

2)cookie 鉴权

cookie 的获取(根据接口文档获取)

发送携带 cookie 的请求 直接通过 cookies 参数 通过 Session() 对象

class TestWithSession:proxy = {"http": "http://127.0.0.1:8888", "https": "https://127.0.0.1:8888"}req = requests.Session()def setup_class(self):url = "http://train-manage.atstudy.com/login"data = {"username": "199****9999", "password": "a1***56"}resp = self.req.request("post", url, data=data, proxies=self.proxy)print(self.req.headers)def test_get_userinfo(self):url = "http://train-manage.atstudy.com/api/manage/User/Info"resp = self.req.request("get", url, proxies=self.proxy)print(resp.text)def test_manage_tag(self):url = "http://train-manage.atstudy.com/api/manage/Tag?type=1"resp = self.req.request("get", url, proxies=self.proxy)print(resp.text)

3)token 鉴权

token 的获取(根据接口文档获取) 发送携带 token 的请求(根据接口文档获取)

class TestWithToken:proxy = {"http": "http://127.0.0.1:8888", "https": "http://127.0.0.1:8888"}headers = {}def setup_class(self):token = self.login().json()["data"]["token"]print(token)self.headers["x-litemall-admin-token"] = token@classmethoddef login(cls):url = "https://litemall.hogwarts.ceshiren.com/admin/auth/login"data = {"username": "hogwarts", "password": "test12345", "code": ""}resp = requests.request("post", url, json=data, proxies=cls.proxy, verify=False)return respdef test_get_dashboard(self):url = "https://litemall.hogwarts.ceshiren.com/admin/dashboard"resp = requests.request("get", url, headers=self.headers, proxies=self.proxy, verify=False)print(resp.text)# print(1)def test_category_list(self):url = "https://litemall.hogwarts.ceshiren.com/admin/category/list"resp = requests.request("get", url, headers=self.headers, proxies=self.proxy, verify=False)print(resp.text)
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:310357728【暗号:csdn999】

2、加密与解密

1)原理

在得到响应后对响应做解密处理:

如果知道使用的是哪个通用加密算法的话,可以自行解决。 如果不了解对应的加密算法的话,可以让研发提供加解密的lib。

如果既不是通用加密算法、研发也无法提供加解密的lib的话,可以让加密方提供远程解析服务,这样算法仍然是保密的。

2)实战练习

调用python自带的base64,直接对返回的响应做解密,即可得到解密后的响应。 封装对于不同算法的处理方法。

class TestEncode:def test_decode(self):url = "http://127.0.0.1:9999/demo.txt"res = requests.request("get",url)print(res.content)de_res = base64.b64decode(res.content)print(json.loads(de_res))

3、数据库操作与断言

1)接口测试响应验证

如何在测试过程中验证接口没有 Bug?

通过接口响应值; 通过查询数据库信息辅助验证;

2)接口测试数据清理

自动化测试中会产生大量的脏数据,该如何清理?

通过调用delete接口删除 自动化测试使用干净的测试环境,每次自动化测试完成后,还原数据。

3)数据库操作注意事项

直接对数据库操作是非常危险的行为 权限管理严格的公司对数据库权限给的很低 表结构复杂,随便删除数据会影响功能异常,甚至会出现系统异常。

4)接口自动化测试常用的数据库操作

连接与配置 查询数据与断言

数据库封装(Python):

封装数据库配置 封装 sql 查询操作 调用方法执行 sql 语句

class Mysql:@classmethoddef connect(cls):mysql_info = {"host": "litemall.hogwarts.ceshiren.com","port": 13306,"user": "test","password": "test123456","database": "litemall","charset": "utf8mb4"}conn = pymysql.Connect(**mysql_info)return conn@classmethoddef execute(cls, sql):cnn = cls.connect()sor = cnn.cursor()sor.execute(sql)res = sor.fetchall()sor.close()cnn.close()return res

数据库断言

def test_cart_add(self, good_sn='CC102101'):"""测试添加购物车功能"""with allure.step("获取商品的id"):ids = self.good.id(good_sn)with allure.step("获取商品的good_id和product_id"):good_id = ids[0]product_id = ids[1]sql = f"""                 SELECT number FROM litemall_cart where goods_sn='{good_sn}' and goods_id='{good_id}'"""good_num1 = Mysql.execute(sql)[0][0]print(good_num1)with allure.step("添加商品到购物车"):print(self.cart.add(good_id, product_id))good_num2 = Mysql.execute(sql)[0][0]print(good_num2)assert good_num2 - good_num1 == 1

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

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

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

相关文章

Java随记

Java java保留两位小数 1、使用String.format()方法: public static void stringFormatdecimalFormatKeepTwoDecimalPlaces(){double number 3.1415926;String result String.format("%.2f", number);System.out.println(result);}输出:3…

Large Language Models areVisual Reasoning Coordinators

目录 一、论文速读 1.1 摘要 1.2 论文概要总结 二、论文精度 2.1 论文试图解决什么问题? 2.2 论文中提到的解决方案之关键是什么? 2.3 用于定量评估的数据集是什么?代码有没有开源? 2.4 这篇论文到底有什么贡献&#xff1…

振弦采集仪助力岩土工程质量控制

振弦采集仪助力岩土工程质量控制 随着工程建设规模越来越大,建筑结构的安全性和稳定性越来越成为人们所关注的焦点。岩土工程在工程建设中占据着非常重要的地位,岩土工程质量控制更是至关重要。而振弦采集仪作为一种先进的检测设备,正得到越…

[PyTorch][chapter 5][李宏毅深度学习][Classification]

前言: 这章节主要讲解常用的分类器原理.分类主要是要找到一个映射函数 比如垃圾邮件分类 : c0, 垃圾邮件 c1 正常邮件 主要应用场景: 垃圾邮件分类,手写数字识别,金融信用评估. 这里面简单了解一下,很少用 目录: 1: …

离线数仓构建案例一

数据采集 日志数据(文件)到Kafka 自己写个程序模拟一些用户的行为数据,这些数据存在一个文件夹中。 接着使用flume监控采集这些文件,然后发送给kafka中待消费。 1、flume采集配置文件 监控文件将数据发给kafka的flume配置文件…

STM32——定时器Timer

定时器工作原理 软件定时 缺点:不精确、占用 CPU 资源 void Delay500ms() //11.0592MHz {unsigned char i, j, k;_nop_();i 4;j 129;k 119;do{do{while (--k);} while (--j);} while (--i); } 使用精准的时基,通过硬件的方式,实现定时功…

Linux---访问NFS存储及自动挂载

本章主要介绍NFS客户端的使用 创建NFS服务器并通过NFS共享一个目录在客户端上访问NFS共享的目录自动挂载的配置和使用 访问NFS存储 前面介绍了本地存储,本章就来介绍如何使用网络上的存储设备。NFS即网络文件系统, 所实现的是 Linux 和 Linux 之间的共…

易点易动:颠覆固定资产用量管理,实现高效精准的企业固定资产管理

固定资产用量管理是企业日常运营中不可或缺的一环。然而,传统的人工管理方式面临着时间成本高、数据不准确、难以监控等问题。为了解决这些挑战,易点易动应运而生,它是一款先进的资产管理系统,能够帮助企业实现高效精准的固定资产…

案例054:基于微信的追星小程序

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

linux的权限741

741权限 在 Linux 中,文件和目录的权限由三组权限来定义,分别是所有者(Owner)、所属组(Group)和其他用户(Others)。每一组权限又分为读(Read)、写&#xff0…

c++函数模板STL详解

函数模板 函数模板语法 所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表。这个通用函数就称为函数模板。 凡是函数体相同的函数都可以用这个模板来代替,不必定义多个函数&#xf…

Java安全之Commons Collections5

CC5分析 import org.apache.commons.collections.Transformer; import org.apache.commons.collections.functors.ChainedTransformer; import org.apache.commons.collections.functors.ConstantTransformer; import org.apache.commons.collections.functors.InvokerTransfo…

基于ssm绿色农产品推广应用网站论文

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

Cloudways和SiteGround哪个更好?

当提及WordPress托管服务提供商时,人们常常会拿Cloudways和SiteGround做比较。Cloudways作为备受欢迎的品牌,而SiteGround则是业界的老牌巨头。它们之间主要的区别在于服务范围。SiteGround提供广泛的托管服务,包括Web托管、WordPress托管、W…

『VUE3后台—硅谷甄选』

一、准备前期 pnpm create vite

【【RGB LCD 彩条显示实验 ---1】】

RGB LCD 彩条显示实验 —1 TFT-LCD 的全称是 Thin Film Transistor-Liquid Crystal Display,即薄膜晶体管液晶显示屏,它显示的每个像素点都是由集成在液晶后面的薄膜晶体管独立驱动,因此 TFT-LCD 具有较高的响应速度以及较好的图像质量。 我…

一对一单聊

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector;…

19、XSS——HTTP协议安全

文章目录 一、Weak Session IDs(弱会话IDs)二、HTTP协议存在的安全问题三、HTTPS协议3.1 HTTP和HTTPS的区别3.2 SSL协议组成 一、Weak Session IDs(弱会话IDs) 当用户登录后,在服务器就会创建一个会话(Session),叫做会话控制&…

【JavaScript手撕代码】flat、push、filter、map、repeat

flat 借助上面递归concat扁平化即可 Array.prototype.myflat function(deep1) {let res []deep--for(const element of this) {if(Array.isArray(element) && deep) {res res.concat(element.myflat(deep))}else{res.push(element)}}return res }push 根据我们对…

urllib爬虫 应用实例(三)

目录 一、 ajax的get请求豆瓣电影第一页 二、ajax的get请求豆瓣电影前十页 三、ajax的post请求肯德基官网 一、 ajax的get请求豆瓣电影第一页 目标:获取豆瓣电影第一页的数据,并保存为json文件 设置url,检查 --> 网络 --> 全部 -…