接口测试平台开发之接口开发(用例集合)

接下来开发用例集合接口,在星瀚项目中点击用例集合,一直显示玩命加载中,检查看这个接口http://127.0.0.1:8000/api/case_collection一直报404,证明这个接口没有开发,首先配一下url,在urls.py里新增path('case_collection', views.CaseCollectionView.as_view()),然后在forms.py里新增如下图:

用例集合和用例管理接口基本一样,需要增删改查,因此也要继承NbView,CaseCollectionView里的代码如下图:

然后点击用例集合,还是显示玩命加载中,重写CaseView类里的get方法,根据接口文档去掉model_dict['interface_name'] = instance.interface.name,model_dict['interface_id'] = instance.interface.id,model_dict['rely_case'] = get_premise_case(instance)这三行,报TypeError: Object of type Case is not JSON serializable错误,还是显示加载中,于是去custom_views.py文件里BaseView类下复制exclude_fields = ['is_delete'],把case也加进来,再次刷新页面,没有报错,页面可以打开,CaseCollectionView里的代码如下图:

刷新,页面可以打开,但是用例数是空的,根据接口文档找到用例数是case_count,于是在get里配置一下,根据用例集合多对多的正向查询,添加一行model_dict['case_count'] = instance.case.all().count(),再次刷新页面可以看到用例数,接下来实现添加功能,点击添加按钮,在添加对话框里输入集合名称集合描述,选择一个归属项目,点击确定按钮,提示case字段是必填项,于是在CaseCollectionForm类的exclude里添加case,重启服务再次添加,成功了
接下来开发选择用例的功能,点击选择用例按钮,打开页面,在Network里的Preview中报错了,
http://127.0.0.1:8000/api/join_case?project_id=1&id=2报404,因为这个接口没有开发,于是开发一下这个接口,首先在views.py里新建一个JoinCaseView类,继承View,JoinCaseView类和RelyCaseView类一样,只有一个get方法,JoinCaseView类里新增代码如下图:

class JoinCaseView(View):
"""
GET /api/join_case?project_id=1&id=2,数据返回的格式如下:
{
"code": 0,
"msg": "操作成功",
"data":
{
"all_case": [
{
"id": 1,
"title": "测试平台登录接口"
},
{
"id": 2,
"title": "测试平台项目接口"
}
],
"join_case": [
1,
2
]
}
}
1、根据项目id,返回当前项目下所有没有被删除的用例
2、根据集合id,获取已经和集合创建关系的用例id
"""
def get(self, request):
project_id = request.GET.get('project_id')
all_case = models.Case.objects.filter(project_id=project_id, is_delete=1).values('id', 'title')
print(all_case) # 打印出该项目id下所有没有被删除的用例

再添加一行代码return NbResponse(data={"all_case": list(all_case), "join_case": []}),打印出来的QuerySet,不能被json序列化,all_case必须转成list,既能保证其序列化,也符合返回的数据格式,join_case是已选择的用例,暂时先置成空list,后面再修改,JoinCaseView类里的代码如下图:

刷新页面,点击选择用例按钮,在日志里打印出没有被删除的<QuerySet [{'title': '2345', 'id': 8}, {'title': '123', 'id': 7}, {'title': 'test', 'id': 6}, {'title': 'test0329', 'id': 5}, {'title': '注册', 'id': 4}, {'title': 'test哈哈哈', 'id': 3}, {'title': '测试项目', 'id': 1}]>,同时在未选择用例里看到打印出来的用例,如下图:

再次点击选择用例按钮,在Network里的Preview下看到请求的url成功了,返回的数据格式也符合要求,如下图:

all_case和join_case都返回了,格式也符合要求,接下来实现join_case,从未选择用例到已选择用例,然后点击确定按钮,点击确定时会调用一个接口,http://127.0.0.1:8000/api/join_casepost请求,携带join_case_list:[8,7,6,5,4,3,1]和id:1,join_case_list是用例的id,id是集合id,要通过集合,case_collection表中的case字段进行多对多的创建,传过来的join_case_list是一个列表,通过循环的方式.add来创建多对多映射关系,需要增加一个post方法,代码如下图:

在选择用例对话框,勾选所有的未选择用例,转移到已选择用例里,点击确定按钮会调用post方法,可以看到join_case接口操作成功,如下图:

去case_collection_case表里可以看到集合id为1对应的7条用例,如下图:

接下来如何获取绑定好的join_case,根据查询多对多的关系,可以获取集合下的用例,修改get里的代码如下图:

点击选择用例按钮,/join_case?project_id=2&id=1接口没有报错,Preview里返回的格式和需求完全一致,如下图:

已选择用例里看到集合id下所有用例,符合逻辑,如下图:

all_case是未选择用例,join_case是已选择用例,选择几条用例从已选择用例移动到未选择用例,点击确定按钮,再点击选择用例按钮,发现已选择用例里没有发生变化,接下来进行更新,新增的代码如下图:

json.loads(join_case_list)是一个list,这样把用例从已选择用例移到未选择用例,从未选择用例移到已选择用例都ok了,页面显示的用例数也是正确的

用例管理页面,打开已添加成功的用例,单击用例标题,弹出编辑对话框,点击获取接口,会把所有的依赖用例都列出来,勾选几个用例,点击确定按钮,没有报错,应该是修改成功了,再次单击用例标题,看到依赖用例还是添加时勾选的用例,这是个bug,添加时没问题,更新时走的是put方法,因此在CaseView类里新增put方法,去custom_views.py文件里找到PutView类下的put方法,复制并粘贴到views.py文件的CaseView类下面,如下图:

首先从上面的post方法里复制rely_case = request.POST.get('rely_case'),并将POST改成PUT通过当前用例,获取所有被依赖的用例并删除,然后在通过重新建立自关联绑定关系,实现了用例在更新时,建立了自关联,新增代码如下图:

json.loads(rely_case)是个list,里面放的当前用例依赖用例的id,item就是具体的依赖用例id,所以premise_case_id=item就ok
---单击有依赖用例的用例标题,直接点击确定按钮,实现了更新操作,就会把case_premise表里case_id和premise_case_id这一行记录清除(刚开始表里有case_id为9,premise_case_id为4的数据)

---单击有依赖用例的用例标题,点击获取接口,修改依赖用例,再点击确定按钮,实现了更新操作,在case_premise表里新增case_id为9,premise_case_id为3,5,6的数据,如下图:

接下来把全局参数项目管理接口管理用例管理用例集合之前添加的都删除,保证没有脏数据,再创建一下可以用的数据,每个模块新增的数据如下图:

登录里有默认参数,如下图:

项目接口里有默认header,如下图:

用例管理中依赖用例会先执行,然后再执行这个用例

选择用例时把用例都添加进来

原文地址:https://www.cnblogs.com/laosun0204/p/12580397.html