新增接口
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"))