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生成報告,文章寫的比較亂,如有問題可私信我