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 req


class 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"))

        # 拿到这个角色的ID
        target_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 = None
        for role in data:
            if role.get("name") == role_name:
                role_id = role.get("id")
                break
        self.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_id
        resp = 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_id
        resp = req.delete(target_url)
        self.assertEqual(200, resp.status_code)
        data = resp.json()
        self.assertEqual(10000, data.get("code"))
        self.assertTrue(data.get("status"))

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

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

相关文章

通信技术振幅键控(ASK)调制与解调硬件实验

一、实验目的 1. 掌握用键控法产生ASK信号的方法; 2. 掌握ASK非相干解调的原理。 二、实验内容 1. 观察ASK已调信号的波形; 2. 观察ASK解调信号的波形。 三、实验器材 1. 双踪示波器; 2. 通信原理实验箱信号源模块、③、④、⑦号模块。…

输出流--6.6

代码以及解释: package java2;import java.io.File; import java.io.FileWriter; import java.io.IOException;public class Test02 {public static void main(String[] args) throws IOException {String str "flag{hello_ctf}";//1.封装File fnew Fil…

Locality-aware subgraphs for inductive link prediction in knowledge graphs

Locality-aware subgraphs for inductive link prediction in knowledge graphs a b s t r a c t 最近的知识图(KG)归纳推理方法将链接预测问题转化为图分类任务。 他们首先根据目标实体的 k 跳邻域提取每个目标链接周围的子图,使用图神经网…

鸿蒙轻内核M核源码分析系列六 任务及任务调度(2)任务模块

任务是操作系统一个重要的概念,是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源,并独立于其它任务运行。鸿蒙轻内核的任务模块可以给用户提供多个任务,实现任务间的切换,帮助用户管理业务程序流程。…

鸿蒙北向开发 IDE DevEco Studio 3.1 傻瓜式安装闭坑指南

首先下载 安装IDE 本体程序 DevEco Studio 下载链接 当前最新版本是3.1.1,下载windows版本的 下载下来后是一个压缩包, 解压解锁包后会出现一个exe安装程序 双击运行安装程序 一路 next ( 这里涉及安装文件目录,我因为C盘够大所以全部默认了,各位根据自己情况选择自己的文件…

我的创作纪念日--我和CSDN一起走过的1825天

机缘 第一次在CSDN写文章,是自己在记录学习Java8新特性中Lambda表达式的内容过程中收获的学习心得。之前也有记录工作和生活中的心得体会、难点的解决办法、bug的排查处理过程等等。一直都用的有道笔记,没有去和大家区分享的想法,是一起的朋…

MotionEditor_ 通过内容感知扩散编辑视频运动

图1. MotionEditor:一种基于扩散的视频编辑方法,旨在将参考视频的运动转移到源视频中。 摘要 现有的基于扩散的视频编辑模型在随时间编辑源视频的属性方面取得了显著进展,但在修改运动信息的同时保持原始主角的外观和背景方面存在困难。为…

WordPress 插件推荐:菜单缓存插件——Menu Caching

今天在缙哥哥博客上发现了一个 WordPress 速度优化插件的优化感觉很不错,明月自己装上也体验了一番, WordPress 菜单的载入速度无论是 PC 端和移动端都非常不错,并且这个叫 Menu Caching 的菜单缓存插件还完美的兼容 WPRocket,W3 …

三.一布局和布局切换的实践与探索

在前端开发中,灵活的布局切换是一项非常实用的功能。今天,我想和大家分享一下如何在主组件中通过更换 Layout 目录下的组件来实现布局切换。 首先,我们有一个主组件 index.vue,它承担着整个页面的主要逻辑和展示。 而在 Layout …

PHP序列化、反序列化

目录 一、PHP序列化:serialize() 1.对象序列化 2.pop链序列化 3.数组序列化 二、反序列化:unserialize() 三、魔术方法 ​四、NSSCTF相关简单题目 1.[SWPUCTF 2021 新生赛]ez_unserialize 2.[SWPUCTF 2021 新生赛]no_wakeup 学习参考&#xff1…

使用 Logback.xml 配置文件输出日志信息

官方链接:Chapter 3: Configurationhttps://logback.qos.ch/manual/configuration.html 配置使用 logback 的方式有很多种,而使用配置文件是较为简单的一种方式,下述就是简单描述一个 logback 配置文件基本的配置项: 由于 logba…

优化 mac 储存空间的方法 只需一招为你的苹果电脑提速

在职场中,许多人都对苹果电脑情有独钟。苹果电脑以其简洁美观的设计、流畅稳定的性能以及出色的用户体验,成为了众多职场人士的得力助手。无论是处理文档、制作演示文稿,还是进行创意设计等工作,苹果电脑都能展现出其独特的优势&a…

HCIP-Datacom-ARST自选题库__多种协议简答【11道题】

1.BGP/MPLSIP VPN的典型组网场景如图所示,PE1和PE2通过LoopbackO建立MP-IBGP,PE1和PE2之间只传递VPN路由,其中PE1BGP进程的部分配置已在图中标出,则编号为0的命令不是必须的。(填写阿拉伯数字) 3 2.在如图所示的Hub&Spok…

蒙层(css)

如何在 Vue 中实现一个包含图像和蒙层效果的组件?这个组件根据某个条件显示或隐藏蒙层,用于表示图像是否已读。 1. 创建基础模板 首先,我们在模板中使用 div 包裹我们的图像组件 GraphImage,并为最外层 div 设置 position: relat…

OTTO、亚马逊、Temu卖家如何运用测评补单来提高购买率?

在跨境电商的广阔舞台上,测评补单无疑是一股不可或缺的强劲动力。商家们深知,通过补单这一手段,能够快速为产品注入活力,使销量迅猛攀升,评论如潮涌至,进而在激烈的竞争中脱颖而出,勇攀销量之巅…

【Python数据预处理系列】Pandas 数据操作实战:掌握 .loc[] 方法进行高效数据选取

文章将详细介绍.loc[]方法的各种使用场景,帮助读者深入理解并掌握这一核心功能。 在Pandas库中,.loc[]方法是一种强大而灵活的数据选取工具。本文将通过详细的步骤和示例,手把手教您如何利用这一工具进行高效的数据操作。 首先,我…

【数据集划分】假如你有超百万条oracle数据库数据(成真版)

【数据集划分】假如你有接近百万条oracle数据库数据(成真版) 写在最前面小结 数据集划分原因注意事项 1. 留出法(Hold-out Method)原理算法复杂度代码示例Scikit-learn的train_test_split分布式计算框架(如Apache Spar…

信不信,马上教会你Purple Pi OH开发板之ADB常用命令

开源鸿蒙硬件方案领跑者 触觉智能 本文适用于在Purple Pi OH开发板进行分区镜像烧录。触觉智能的Purple Pi OH鸿蒙开源主板,是华为Laval官方社区主荐的一款鸿蒙开发主板。 该主板主要针对学生党,极客,工程师,极大降低了开源鸿蒙开…

【保姆级讲解Outlook邮箱的使用技巧】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

代码随想录第25天|回溯part5 通用的去重法:set

491.非递减子序列 中等题 这个题给出的实例很有陷阱性,之前的题是通过排序来对于相同树层的元素去重,而本题是求非递减子序列,如果排序了那就已经是自增子序列了,达不到题目的要求。 看图 可以看出,对于一个集合[4,…