天天看點

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