天天看点

Django接口平台开发问题记录(五)(批量执行用例)Django接口平台开发问题记录(五)

Django接口平台开发问题记录(五)

Django框架下怎么处理批量执行用例

场景:点击批量执行后,对项目下所选的用例进行执行,得到的status_code值进行比对显示在前端

思路:点击批量执行后,对项目下所选的用例传到后台对数据库表中status_code字段赋值(update)得到的status_code值和预期结果值进行比对,如果相等前端则显示绿色,如不等则显示红色;

view.py:

def Batch_Perform_If(request):  # 批量执行功能
    if request.method == "POST":
        arr = request.POST.get('arr')
        data = json.loads(arr)
        for i in data:  # 获得列表中的每个字典
            if i['in_type'].upper() == 'POST':
                res = requests.post(url=i['in_url'], data=i['in_data'],
                                    json=json.dumps(i['in_data']))  # 接口执行方法 
                models.Interface_Data.objects.filter(id=i['id']).update(
                    in_actual_result=res.status_code)
                continue
            elif i['in_type'].upper() == 'GET':
                res = requests.get(url=i['in_url'], params=i['in_data'])
                models.Interface_Data.objects.filter(id=i['id']).update(in_actual_result=res.status_code)
                continue
        return render(request, 'Page/Perform_Result.html')
           

html文件:使用的是layui表格,监听事件等操作可以参考Layui官网

<button type="button" class="layui-btn layui-btn-primary layui-border-green" id="batchPerform"
          data-type="batchPerform"
          style="float: right; margin-right: 20px"><i class="layui-icon">&#xe605;</i>批量执行
  </button>

javascript:
			batchPerform: function () {
                var checkStatus = table.checkStatus('testReload')
                    , data = checkStatus.data;
                var arr = JSON.stringify(data);
                if (data.length === 0) {
                    layer.msg('请选择需要执行的数据!')
                } else {
                    $.ajax({
                        type: 'POST',
                        url: "{%url 'TestPlatform_User:Batch_Perform_If'%}",
                        data: {'arr': arr},
                        traditional: true,
                        async: false,
                    });
                    $.ajax({
                        type: 'POST',
                        url: "{%url 'Api:perform_data'%}",
                        data: {'arr': arr},
                        traditional: true,
                        async: false,
                    });
                    window.location = "http://localhost:8000/perform_result/";
                    // window.location.reload();
                }
            }
           

上述代码中使用了ajax传了两个数据,第一个传递到了Batch_Perform_If函数,也就是第一个代码片段,arr为当前页面用户获取到需要执行的数据的列表,第二个传递到了Api app中的view.py,本项目的接口我是放到了单独的一个app中,以下为perform_data代码:

def perform_data(request):
		    inter_data = models.Interface_Data.objects.all().values()
		    data_list = list(inter_data)
		    arr = request.POST.get('arr')
		    data_id = []
		    if arr != None:
		        global arr1
		        arr1 = json.loads(arr)
		    for i in arr1:
		        for j in data_list:
		            if i['id'] == j['id']:
		                data_id.append(j)
		                break
		        continue
		    data_list = {"code": 200, "msg": "ok!", "count": len(data_id), "data": data_id}
		    return HttpResponse(json.dumps(data_list))
           

将生成出来的数据接口,返回给需要展示信息的前端页面tbale进行渲染就可以了,在tbale中为了方便查看,将通过的用例需要用绿色显示,失败的用红色显示:在table.render加入以下代码:

done: function (res, curr, count) {
                var that = this.elem.next();
                res.data.forEach(function (item, index) {
                    if (parseInt(item.in_actual_result) !== parseInt(item.in_expected_result)) {
                        var tr = that.find(".layui-table-box tbody tr[data-index='" + index + "']");
                        tr.css("background-color", "#FF5722");
                        tr.css("color", "white");
                    }else {
                        var tr = that.find(".layui-table-box tbody tr[data-index='" + index + "']");
                        tr.css("background-color", "#00FF40");
                        tr.css("color", "white");
                    }
                });
            }
           

来看下最终效果:

Django接口平台开发问题记录(五)(批量执行用例)Django接口平台开发问题记录(五)

以上方式批量执行接口需要在数据库中查找并更新实际结果值,再进行比对,比较耗时间,这个结果只是在页面中展示出来,生成报告会好很多,之后会添加生成报告功能,通过unittest来管理用例,HTMLTestReportCN生成报告,文章写的比较乱,如有问题可私信我