zdppy_amauth 实现给角色批量绑定权限

新增接口

api.resp.post("/auth/role_auth", amauth.role.add_auths)

如何测试

如何测试能不能给指定的角色批量的添加权限呢?

  • 1、需要新建一个角色
  • 2、需要拿到这个角色的ID
  • 3、需要新增三个权限
  • 4、需要拿到新增的三个权限的ID
  • 5、拿着角色ID和权限ID列表,调用批量新增角色接口进行测试
  • 6、校验测试结果
  • 7、调用根据角色ID批量获取权限的接口
  • 8、校验查询结果是否符合预期

测试流程分析

需要新建一个角色

调用 POST:/auth/role 新增角色

需要拿到这个角色的ID

调用 GET:/auth/role 拿到所有的角色,然后根据角色名筛选ID。

需要新增三个权限

调用 POST:/auth/auth 新增三个权限。

需要拿到新增的三个权限的ID

调用 GET:/auth/auth 根据权限名筛选ID。

拿着角色ID和权限ID列表,调用批量新增角色接口进行测试

调用 POST:/auth/role_auth 进行新增。

校验测试结果

status_cod = 200
data[“code”] = 10000
data[“status”] = True

调用根据角色ID批量获取权限的接口

调用 GET:/auth/role_auth/{id} 进行查询

校验查询结果是否符合预期

status_cod = 200
data[“code”] = 10000
data[“status”] = True

data里面有很多个对象,每个对象都有ID。将所有的ID取出来,必须和我们新增时的ID列表相同。

怎么判断两个列表的元素完全相同?

有两种方案可以搞定:

  • 比较排序后的两个列表是否相同
  • 取交集,如果交集的元素个数和原本的两个集合的元素个数都相同,说明两个集合本身就是相同的。
    在这里插入图片描述

代码实现

import unittest
import reqclass TestRoleAuthAdd(unittest.TestCase):def test_add_role_auth(self):# 新建角色target_url = "http://127.0.0.1:8888/auth/role"role_name = "testrole"data = {"name": role_name,"nickname": role_name}resp = req.post(target_url, json=data)self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))# 拿到这个角色的IDtarget_url = "http://127.0.0.1:8888/auth/role"resp = req.get(target_url)self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))data = data.get("data")role_id = Nonefor role in data:if role.get("name") == role_name:role_id = role.get("id")breakself.assertIsNotNone(role_id)# 新增三个权限target_url = "http://127.0.0.1:8888/auth/auth"auth_name1 = "GET:/model"auth_name2 = "POST:/model"auth_name3 = "DELETE:/model"resp = req.post(target_url, json={"name": auth_name1, "nickname": auth_name1})self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))resp = req.post(target_url, json={"name": auth_name2, "nickname": auth_name2})self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))resp = req.post(target_url, json={"name": auth_name3, "nickname": auth_name3})self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))# 获取权限ID列表target_url = "http://127.0.0.1:8888/auth/auth"auth_ids = []resp = req.get(target_url)self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))data = data.get("data")for auth in data:if auth.get('name') in (auth_name1, auth_name2, auth_name3):auth_ids.append(auth.get("id"))self.assertEqual(3, len(auth_ids))# 核心:批量绑定target_url = "http://127.0.0.1:8888/auth/role_auth/" + role_idresp = req.post(target_url, json={"ids": auth_ids})self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))# 批量获取权限resp = req.get(target_url)self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))query_ids = []data = data.get("data")for auth in data:if auth.get('name') in (auth_name1, auth_name2, auth_name3):query_ids.append(auth.get("id"))self.assertEqual(3, len(auth_ids))auth_ids.sort()query_ids.sort()self.assertEqual(auth_ids, query_ids)# 删除权限target_url = "http://127.0.0.1:8888/auth/auth"resp = req.delete(target_url, json={"ids": auth_ids})self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))# 删除角色target_url = "http://127.0.0.1:8888/auth/role/" + role_idresp = req.delete(target_url)self.assertEqual(200, resp.status_code)data = resp.json()self.assertEqual(10000, data.get("code"))self.assertTrue(data.get("status"))

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

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

相关文章

SSL代码签名最佳实践

代码签名就是软件发布者使用全球可信的证书颁发机构CA颁发的代码签名证书对软件代码进行签名,由此来验证软件开发者的真实身份,确保软件代码的完整性和可信任性。然而,攻击者一直试图渗透代码签名,意将恶意软件嵌入可信代码中。由…

【二叉树】Leetcode 637. 二叉树的层平均值【简单】

二叉树的层平均值 给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释&#xff1a…

必应bing国内广告怎样开户投放呢?

企业都在寻找高效、精准的营销渠道以扩大品牌影响力,提升市场占有率,作为全球第二大搜索引擎,微软旗下的必应Bing凭借其卓越的搜索技术和庞大的用户基础,成为了众多企业拓展市场的首选广告平台。在中国,必应Bing广告以…

vuInhub靶场实战系列-DC-6实战

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置二、信息收集2.1 主机发现2.1.1 nmap扫描存活主机2.1.2 arp-scan扫描存活主机 2.2 端口扫描2.3 指纹识别2.3.1 尝试指纹识别2.3.…

解决Mac无法上网/网络异常的方法,重置网络

解放方法 1、前往文件夹:/Library/Preferences/SystemConfiguration 2 、在弹窗中输入上边的地址 3 、把文件夹中除了下图未选中的文件全部删掉,删除时需要输入密码 4 、重启mac 电脑就搞定了。

python的一种集成开发工具:PyCharm开发工具

一. 简介 本文简单了解两种 python语言所使用的 集成开发环境: PyCharm、vscode。 python语言学习中,可以任意选中这两个集成开发环境的一种就可以。本文先来简单学习 PyCharm开发工具安装与使用。 二. python的一种集成开发工具:PyChar…

【LeetCode】40. 组合总和 II

组合总和 II 题目描述: 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的每个数字在每个组合中只能使用 一次 。 注意:解集不能包含重复的组合。 示例…

Nginx的https功能

一.HTTPS功能简介 Web网站的登录页面都是使用https加密传输的,加密数据以保障数据的安全,HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用HTTPS协议,HTTPS其实…

Springboot框架开发与实用篇之热部署 2024详解

开发与实用 手动启动热部署 热部署(Hot Deployment)指的是在应用程序正在运行的情况下,对其进行更新或修改并将这些变更应用到正在运行的应用程序中的过程。通常情况下,传统的部署方式需要停止应用程序、部署更新,然…

基于51单片机的智能晾衣架设计资料

第三章:硬件单元电路 经过上述分析明确了本次设计的主要目标,为了实现晾衣自身能够完成对外界数据的采集与分析,集成控制环节我们采用了ATMEL公司生产的AT89C52单片机,与市面上的其他嵌入式控制单元相比较在体积与功耗方面都相当出色。此次设计主要突破在于设计合理的控制电…

最短路问题

最短路问题是图论里非常经典的一个考点 接下来着重讲述五种求最短路的算法:朴素版dijkstra算法、堆优化版的dijkstra算法、bellman-ford算法、spfa算法、floyd算法 总体思维导图: 总体思路: 最短路分为两大类 { 在以下给出的时间复杂度中n…

学习笔记——路由网络基础——静态路由(static)

三、静态路由(static) 1、静态路由 (1)定义 静态路由(Static):由管理员手动配置和维护的路由。静态路由配置简单,被广泛应用于网络中。此外还可以实现负载均衡和路由备份。 静态路由默认优先级为60,如果想在多条静态路由中让某条路由优选…

uniapp小程序开发 | 从零实现一款影视类app (后台接口实现,go-zero微服务的使用)

uniapp小程序开发实战系列,完整介绍从零实现一款影视类小程序。包含小程序前端和后台接口的全部完整实现。系列连载中,喜欢的可以点击收藏。 该篇着重介绍获取轮播图后台接口和获取正在热映电影的两个后台接口的实现。 后台服务使用golang,…

MySQL—多表查询—自连接

一、引言 自连接,顾名思义就是自己连接自己。 自连接的语法结构: 表 A 别名 A join 表 A 别名 B ON 条件 ...; 注意: 1、这种语法有一个关键字:join 2、自连接查询可以是内连接的语法,可以是外连接的语法&#xff08…

【游戏】Goc赚钱模拟器1.0版

Hello!大家好,我是学霸小羊,今天分享一个Goc游戏。 //注:以下代码为Goc原创代码。 大家可以在下面网址写入代码www.51goc.com慧通教育http://www.51goc.com注:Goc编辑器路径: www.51goc.com ➡ 登录 ➡ 游客登陆 ➡…

Three.js加入到可视化大屏,看看能否惊艳到你?

three.js 在可视化大屏上可以实现各种三维场景和动画效果,可以根据具体需求进行定制化开发,并结合其他技术,如数据可视化、交互设计等,实现更加丰富的可视化效果。 three.js 是一个基于 WebGL 的 JavaScript 3D 库,可…

循迹模块之循迹小车

1.TCRT5000传感器 TCRT5000传感器的红外发射二极管 不断发射红外线 1.1 当发射出的红外线没有被反射回来或被反射回来但强度不够大时, 红外接收管一直处于关断状态,此时模块的输出端为高电平,指示二极管一直处于熄灭状态 1.2 当被检测物体…

跳跃游戏二

方法一:(双指针法)此题参考跳台阶问题,题目要求求到达最后一个点的最小跳跃次数,那么我们就可以从最后一个往前推,先看谁能离得最远,并且能跳到最后一个。假设i位置是离最后一个位置最远&#x…

【新书上市】图像画质算法与底层视觉技术

图书主页:https://book.douban.com/subject/36895899/ 购买链接:https://item.jd.com/10105601481762.html 内容介绍 本书主要介绍了图像画质相关的各类底层视觉任务及其相关算法,重点讲解了去噪、超分辨率、去雾、高动态范围、图像合成与图…

Python语法详解module3(组合数据类型列表、元组、字典、集合详细用法)

目录 一、列表列表的创建多维列表列表的访问和修改列表的添加和删除列表的遍历使用 for 循环遍历使用 while 循环遍历同时遍历索引和元素列表推导式 常用的列表函数len()sort()reverse()index()count()extend()clear() 二、元组创建元组访问元组元素元组的不可变性元组的优点元…