測試開發實戰[提測平台]16-狀態流轉和提測詳情展示


微信搜索【大奇測試開】,關注這個堅持分享測試開發干貨的家伙。

本篇講解概要,快速了解內容關鍵點,也可先參照脈絡點先實現再對照。這樣的印象會更深刻。

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

堅持原創,堅持實踐,堅持干貨,如果你覺得有用,請點擊推薦,也歡迎關注我博客園和微信公眾號。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM