微信搜尋【大奇測試開】,關注這個堅持分享測試開發乾貨的傢伙。
本篇講解概要,快速瞭解內容關鍵點,也可先參照脈絡點先實現再對照。這樣的印象會更深刻。
TPMServer
狀態流轉介面
在提測功這個大功能涉及到狀態直接流轉的有兩處,一個是提測成功後,對應測試在計劃時間內需要點選 “開始測試” 將狀態標記為下個階段,即資料庫表中status=2(測試進行中),另一個就在測試報告提交的時候如果狀態為廢棄後,可以將將其資料刪除不展示(即軟刪除表欄位isDel=1),從這兩個動作來看都是同一個表的更新操作,所以可以合併一個介面實現,減少介面的冗餘。
@test_manager.route("/api/test/change", methods=['POST']) def changeStatus(): # 初始化返回物件 resp_success = format.resp_format_success resp_failed = format.resp_format_failed # 獲取請求引數Body reqbody = json.loads(request.get_data()) if 'id' not in reqbody: resp_failed['message'] = '提測ID不能為空' return resp_failed elif 'status' not in reqbody: resp_failed['message'] = '更改的狀態不能為空' return resp_failed # 重新連結資料庫 connection = pool.connection() with connection.cursor() as cursor: # 判斷狀態流轉的操作,如果status==start為開始測試,status==delete 軟刪除 if reqbody['status'] == 'start': sql = "UPDATE `request` SET `status`=2 WHERE id=%s" resp_success['message'] = '狀態流轉成功,進入測試階段。' elif reqbody['status'] == 'delete': sql = "UPDATE `request` SET `isDel`=1 WHERE id=%s" resp_success['message'] = '提測已被刪除!' else: resp_failed.message = '狀態標記錯誤' return resp_failed cursor.execute(sql, reqbody['id']) connection.commit() return resp_success
介面實現很簡單,通過一個額外的欄位標記做哪個欄位更新,參考程式碼如上。
依然不要忘了對後端介面的測試:
Case1:請求不給定id或者status引數驗證是否有引數錯誤提示返回
Case2:狀態操作status=start驗證是否將提測狀態改為2
Case3:狀態操作status=delete驗證是否對資料進行軟刪除標記isDel=1
其實還有一種嚴格情況就是如果更改的id不存在該怎麼處理,示例程式碼沒有給出,看看是你的話如何進行優化呢?也當作個小練習吧。
TPMWeb
狀態流轉功能實現
前端分別對之前操作欄中的“開始測試”和“刪除測試”新增 @click 方法,對後端狀態改變介面進行呼叫,步驟套用不變
1.test.js 定義介面請求
export function changeStatus(body) { return request({ url: '/api/test/change', method: 'post', data: body }) }
2. /src/views/test/index.vue的<template>新增觸發方法
3.同頁面vue的method中進行方法邏輯處理,此次對於請求的返回注意加了個$message 提示,在有正確的結果返回的時候給出服務端的訊息提示,另外不要忘記程式碼中在更新成功後要進行一次查詢請求,列表重新整理最新的資料。
startTest(row) { const reqBody = { id: row.id, status: 'start' } changeStatus(reqBody).then(resp => { this.$message({ message: resp.message, type: 'success' }) this.searchClick() }) }, deleteTest(row) { const reqBody = { id: row.id, status: 'delete' } changeStatus(reqBody).then(resp => { this.$message({ message: resp.message, type: 'success' }) this.searchClick() }) },
為了提升使用者感知度,這裡還對table增加了延遲loading的,參考圖的標記位置,即定義是否顯示載入動畫的動態變數,然後搜尋前操作開啟,有結果後關閉。
由於本地查詢可能比較快,特別設定300毫秒作為延遲,如果你在測試的過程中還是不是很明顯,可以加大時間到1000毫秒體驗一下。請注意圖中還有兩個變數宣告 requestInfoVisible 和 requestInfo 是要在接下來的實現提測詳情展示用到的。
提測詳情展示
在實際使用中,提測內容很多,是需要有在平臺檢視詳細的功能,這裡通過彈出對話方塊,並內嵌 "描述列表" 來進行展示,元件的使用方法參考官方 [ https://element.eleme.io/2.15/#/zh-CN/component/descriptions ],這裡就不再貼上了,點選操作”提測詳情“彈窗的實現Demo樣式相關片段程式碼如下:
1. template 部分,核心元件 dialog 和 descriptions
<el-link type="primary" @click="showRequestInfo(scope.row)">提測詳情</el-link>
<div> <el-dialog :title="requestInfo.title" :visible.sync="requestInfoVisible"> <el-descriptions title="提測資訊"> <el-descriptions-item label="使用者名稱">kooriookami</el-descriptions-item> <el-descriptions-item label="手機號">18100000000</el-descriptions-item> <el-descriptions-item label="居住地">蘇州市</el-descriptions-item> <el-descriptions-item label="備註"> <el-tag size="small">學校</el-tag> </el-descriptions-item> <el-descriptions-item label="聯絡地址">江蘇省蘇州市吳中區吳中大道 1188 號</el-descriptions-item> </el-descriptions> </el-dialog> </div>
2. js部分,行資料賦值,顯示無底角標按對話方塊
showRequestInfo(row) { this.requestInfo = row this.requestInfoVisible = true },
執行檢視效果卻發現沒有按照預期展示正常樣式
這是由於專案引用的element-ui是2.13.0版本,並沒有這個元件,需要升級到 "element-ui": "2.15.17"才可以,記得在package.json更改版本後要進行npm install 安裝最新依賴包。
然後一併修改下<el-descriptions-item>展示內容為專案的內容,最終實現的效果如下。
樣式還有點奇怪,注意到有一些欄位是會很長的,進行下處理,利用官方自定義分欄和合並列屬性進一步優化,最終效果如圖。
這部分的優化後的完整程式碼參考
到此為止,本篇要實現的兩個功能已經全部完成。
缺陷修復
在更新本次內容中,實際上發現兩個隱藏的問題,如果之前大家在認真實踐操作中應該早被發現了,我這裡也Mark下
問題1: 錯誤訊息體(字典/Json)變數賦值引用錯誤,正確應該是下角標的方式。
問題2: 列表查詢翻頁報錯,是因為統計總數不應該帶有limit條件,需要獨立處理語句。
兩個缺陷前後優化了什麼程式碼,可以通過git工具得到完整的詮釋。
最後說一下,如果你在跟著本系列分享教程中有任何的問題和想法建議,歡迎私信或者加我個人微信、群等進行交流,微信可以通過公眾號留言和選單兩種方法是獲取。真心希望公眾號部落格更新的原創實戰內容,能在茫茫氾濫網路文章帶來幫助和切實幹貨價值。
【程式碼更新】
-
地址:https://github.com/mrzcode/TestProjectManagement
-
TAG:TPMShare16
堅持原創,堅持實踐,堅持乾貨,如果你覺得有用,請點選推薦,也歡迎關注我部落格園和微信公眾號。