介面測試平臺-88: 全域性請求頭之 新增+刪除+修改後的勾選和展示
1. 儲存選中請求頭
回到P_apis.py中,找到除錯彈層的儲存js函式,將要在這裡給使用者選中的公共請求頭的id獲取到,然後組成列表,在儲存js函式中傳給後端儲存起來。
var project_headers = document.getElementById('ts_project_header_li').children; var ts_project_headers = [] for (var i=0; i<project_headers.length; i++) { if (project_headers[i].children[0].checked === true) { ts_project_headers.push(project_headers[i].children[0].value) } }
簡單解釋下上面這段程式碼:
首先用project_headers獲取這li標籤下所有 label標籤,成為一個列表。
然後建立空列表 用於存放一會要傳給後端的欄位。
然後for迴圈遍歷,此時的project_headers[i]就是某個label,但是這個label內仍然有子元素,也就是要定位的input,所以還要再加.children方法來獲取它下面的所有子標籤,當然input是第一個,所以下標為[0]。然後再獲取它的選中狀態,為true就代表選中。那麼就給它的value,也就是這個請求頭的id,新增到空列表:ts_project_headers 中,等全部遍歷完,就把這個列表轉成字串,和其他介面欄位一起傳遞個後臺函式。
然後去找到後臺views.py找到儲存介面的函式 。
寫到這,重啟服務重新整理頁面,選中倆個請求頭儲存。然後進入後臺,找到這個介面,看看其中的欄位是否儲存成功:
看來是成功儲存了這倆個選中的請求頭的id。
2. 展示已儲存請求頭
一開啟這個介面除錯層,點選倒三角,就看到這個介面已經選擇了哪幾個請求頭。所以要回到P_apis.html中,修改顯示這個除錯彈層的js函式。
然後遍歷所有儲存選中的id的請求頭,給他們的id的input屬性改成checked狀態。
{# 公共請求頭 #} var project_headers = ret.public_header.split(','); for (var i=0; i<project_headers.length; i++) { document.getElementById('checkbox_' + project_headers[i]).checked = 'checked'; }
然後重新整理頁面,開啟這個介面的除錯層,點選倒三角,看看效果:
可以看到確實已經選中之前儲存的。現在改變內容儲存,再次開啟看看。發現儲存和開啟都成功了。
3. 新增新的請求頭並除錯選擇
去請求頭設定彈層,新新增測試:
然後再開啟發現出現了bug。
之前選中的都變成了未選中狀態,且首先開啟console皮膚,可以很直觀看到js報錯:錯誤說checked 設定時 出現了null空的元素標籤。
點開 看看具體哪行:(自動標綠)
從介面的資料來看,儲存好的請求頭id一點問題都沒有:那麼它為什麼說沒找到呢,答案就是這幾個請求頭的id都變了
如上圖可見到,修改了一次請求頭之後。發現所有請求頭的id都變了,所以才會出現這個bug。那麼為什麼會變呢?
那就是因在上兩三節中,設定的儲存請求頭程式碼有問題。是刪除了之前所有的,然後重新儲存了一遍。雖然name/key/value都沒變,但id是自增的,所以每次儲存都會導致id不同。為了避免這個bug,現在去修復這個views.py層的函式吧。
先來回顧下這個函式現在的樣子:
並沒有拿到這些請求頭的id,只傳給了後端這些name/key/value,所以去P_apis.html中,給這個傳遞加上id。
上圖中,請仔細修改紅線內。都增加了id的設定。那個input用來存放id的值,只是預設隱藏了。使用者不需要去看這個id。
然後是點選新增按鈕的那個js函式,新增上那個隱藏的記錄id的input。
這裡遇到了問題,這個input,不知道新的請求頭的id應該是多少,所以這裡沒用字串new代替,然後後臺函式進行更新時。遇到為new的,就去建立即可。
然後去views.py中繼續修改:提取到了ids的列表,然後拆分。利用它做個大迴圈。對資料庫請求頭表進行更新 或 遇到new就新增:
# 儲存專案公共請求頭 def save_project_header(request): project_id = request.GET['project_id'] req_names = request.GET['req_names'] req_keys = request.GET['req_keys'] req_values = request.GET['req_values'] req_ids = request.GET['req_ids'] names = req_names.split(',') keys = req_keys.split(',') values = req_values.split(',') ids = req_ids.split(',') for i in range(len(names)): if ids[i] == 'new': DB_project_header.objects.create(project_id=project_id, name=names[i], key=keys[i], value=values[i]) else: DB_project_header.objects.filter(id=ids[i]).update(name=names[i], key=keys[i], value=values[i]) return HttpResponse('')
然後重啟服務,重新整理頁面繼續詳細的測試。這裡為了避免有風險的髒資料,乾脆在後臺刪除了這個專案所有的已有請求頭。然後重新新增一些:
點選儲存後,再開啟,依然看得到,這說明儲存成功了。此時記下他們的id:
可以在html上看,也可以去後臺看。三個請求頭的id分別是92,94,95。然後點選儲存,再開啟,看看是否有變化:(修改)
可以看到,沒有變化,這說明儲存成功了。並且是原來上修改,而非新增新的。
這時候該去測試一下 除錯彈層中選中的 會不會有問題吧:
4. 補回刪除功能
之前是 如果name為空,儲存後就刪除。不過js程式碼中對這個空給過濾掉了,並沒有發給後端,後端也只顧著對其它3個請求頭進行更新,全程沒理這個name為空的。
所以這裡的改法是,把這個空前端不進行過濾,就放給後臺,然後後臺遇到name空的,就刪除即可。這麼改:
然後後臺:增加這個判斷。為什麼要用try呢?因為如果使用者是新建了一個空的,那就會走到刪除分支。但是這個新的空的請求頭的id"new" 在資料庫中肯定沒有,所以就會報錯,這種try掉,不理它就是了,也不刪除,也不儲存,就相當於沒有過。
# 儲存專案公共請求頭 def save_project_header(request): project_id = request.GET['project_id'] req_names = request.GET['req_names'] req_keys = request.GET['req_keys'] req_values = request.GET['req_values'] req_ids = request.GET['req_ids'] names = req_names.split(',') keys = req_keys.split(',') values = req_values.split(',') ids = req_ids.split(',') for i in range(len(names)): if names[i] != '': if ids[i] == 'new': DB_project_header.objects.create(project_id=project_id, name=names[i], key=keys[i], value=values[i]) else: DB_project_header.objects.filter(id=ids[i]).update(name=names[i], key=keys[i], value=values[i]) else: try: DB_project_header.objects.filter(id=ids[i]).delete() except: pass return HttpResponse('')
重啟服務,重新整理頁面。測試刪除3。發現3可以被刪除了:
5. 修復bug:刪除請求頭後除錯彈層展示報錯
這個介面已經選中了5這個請求頭,刪除後,js再給checked選中時,必然找不到這個5了,又要報錯了,試了一下:
果然又報錯了。所以js程式碼遇到這種情況,就乾脆跳過即可,不選這個已經被刪除的即可。
如上圖所示,前端js的try 接的是catch哦。不要寫錯。這回就沒問題了
測試結果如下:
沒有報錯,並且只有b被選中了。很nice。
儲存請求頭設定時,一個都沒有,為空。會不會引起錯誤呢?
刪除了所有請求頭的name 儲存,發現沒報錯。然後再開啟介面除錯層:
也沒報錯。
相關文章
- 介面測試平臺-90: 全域性請求頭之 多介面-介面庫選擇
- 介面測試平臺-89: 全域性請求頭之 單介面使用+UI優化UI優化
- 介面測試平臺-66: 多介面用例實現之 小用例:新增+刪除+關閉+排序排序
- 測試平臺系列(63) 軟刪除之殤
- 測試平臺之介面測試
- 請求結束後刪除檔案
- pytest + yaml 框架 -68.新增全域性請求引數配置verify和headersYAML框架Header
- 使用請求頭認證來測試需要授權的 API 介面API
- vue實現li列表的新增刪除和修改Vue
- python介面測試—get請求(一)Python
- python介面測試—post請求(二)Python
- 前端獲取不到後端新增的請求頭資訊前端後端
- class屬性的新增刪除
- 功能測試-登陸、新增、刪除、查詢測試要點
- 為 fastapi 新增全域性唯一請求id,用於日誌跟蹤ASTAPI
- 介面測試實戰--postman全域性變數和環境變數Postman變數
- vue webpack開發訪問後臺介面全域性配置VueWeb
- 搭建自己的直播平臺,修改cell刪除按鈕字型大小
- ajax中設定請求頭和自定義請求頭
- Vue 不能檢測到物件屬性的新增或刪除,注意!!!Vue物件
- 請求版主刪除本人 facebook 連結和 ins 的連結
- 在 Git 中怎樣克隆、修改、新增和刪除檔案?Git
- 表格核取方塊的勾選,翻頁後,表格頂部的刪除按鈕,是刪除當前頁的選中還是包括之前的選中?
- 新潮測試平臺之效能測試
- QListWidget項新增勾選框
- jQuery 新增和刪除classjQuery
- Go 單元測試之HTTP請求與API測試GoHTTPAPI
- fiddler 修改請求介面的返回結果
- 【編測編學】零基礎學python_07_列表(修改、新增和刪除元素)Python
- IoTDB SQL語法 建立、新增、修改、刪除 windowsSQLWindows
- 新增表單請求後鉤子
- Mysql資料庫值的新增、修改、刪除及清空MySql資料庫
- MDN新增“HTTP有條件請求”標頭HTTP
- 網站後臺模板前臺修改?網站後臺的介面如何修改?網站
- 有趣的請求引數/請求頭
- 介面測試平臺更新日記 20200926
- Django 介面自動化測試平臺Django
- 基於 Django 的 Dubbo 介面測試工具平臺Django