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