接口测试平台开发之接口开发(用例集合)
接下来开发用例集合接口,在星瀚项目中点击用例集合,一直显示玩命加载中,检查看这个接口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,重启服务再次添加,成功了,编辑、查询和删除功能都ok
接下来开发选择用例的功能,点击选择用例按钮,打开页面,在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_case,post请求,携带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,如下图:
用例管理中依赖用例会先执行,然后再执行这个用例
选择用例时把用例都添加进来