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

相关推荐

  1. 如何一个栏位监听事件

    2024-06-06 00:34:03       55 阅读
  2. WordPress实现任意域名访问

    2024-06-06 00:34:03       50 阅读
  3. C# Winform实现数据双向

    2024-06-06 00:34:03       45 阅读
  4. WPF —— Menu数据实例

    2024-06-06 00:34:03       37 阅读
  5. vue实例与数据

    2024-06-06 00:34:03       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 00:34:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 00:34:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 00:34:03       87 阅读
  4. Python语言-面向对象

    2024-06-06 00:34:03       96 阅读

热门阅读

  1. 【第5章】SpringBoot实战篇之登录模式切换

    2024-06-06 00:34:03       31 阅读
  2. 游戏心理学Day02

    2024-06-06 00:34:03       26 阅读
  3. 枚举,typedef,位运算

    2024-06-06 00:34:03       24 阅读
  4. 如何在JVM中基于引用计数法实现GC

    2024-06-06 00:34:03       29 阅读
  5. 代码随想录leetcode200题之动态规划算法

    2024-06-06 00:34:03       25 阅读
  6. 裸机程序设计模式

    2024-06-06 00:34:03       30 阅读
  7. Leetcode-438-找到字符串中所有的字母异位词

    2024-06-06 00:34:03       30 阅读
  8. springboot请求中创建对象的被回收的过程

    2024-06-06 00:34:03       23 阅读
  9. 正缘画像 api数据接口

    2024-06-06 00:34:03       35 阅读
  10. 最大连续1 的个数Ⅲ(滑动窗口)

    2024-06-06 00:34:03       28 阅读
  11. 时间步和CLK之间的区别和联系

    2024-06-06 00:34:03       28 阅读
  12. Redis的非关系型数据库

    2024-06-06 00:34:03       30 阅读
  13. 深度学习之学习率调度器Scheduler介绍

    2024-06-06 00:34:03       30 阅读
  14. chap6 RNN

    2024-06-06 00:34:03       28 阅读
  15. FPGA编程与PLC编程的区别:深入解析与对比

    2024-06-06 00:34:03       31 阅读