测试开发实战[提测平台]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的