【連載 23】效能測試實踐——超時結賬第三回合

FunTester發表於2025-03-16

3.7.3 超市結賬第三回合:人性化設計的進一步探索

當小八將最新的測試報告發給收銀員們後,本以為大家會為最佳化後的結果感到滿意,卻沒想到收銀員們紛紛反饋:“測試強度太高了,我們根本吃不消!” 在實際工作中,收銀員們需要適當的休息,即使是在崗位上。因此,大家對測試結果依然持懷疑態度,要求在設計測試用例時增加休息時間。

一位收銀員提議:“在現有的三個階段基礎上,增加一個休息階段。規則是:如果一個收銀員連續工作超過 30 分鐘,就休息 2 分鐘。” 然而,這個提議剛說完,就有人提出了反對意見:“這個休息時間只考慮了男性收銀員的需求,女性收銀員需要更多的休息時間,至少 5 分鐘。”

經過一番坦誠而友好的討論,小八決定採納員工的意見:男性收銀員每連續工作 30 分鐘,休息 2 分鐘;女性收銀員每連續工作 30 分鐘,休息 5 分鐘。小八超市共有 2 名男性收銀員和 6 名女性收銀員,這一調整充分考慮了員工的實際情況。

於是,測試用例需要再次調整,改動點包括:

  1. 增加收銀員的性別屬性,並設定對應的休息時間。
  2. 增加收銀員休息階段,根據需求實現休息功能。

首先,在多執行緒任務類中增加以下屬性:

/**
 * 性別,1:男,2:女
 */
public int sex;

/**
 * 單次休息時間,單位分鐘
 * 男性員工:2分鐘;女性員工5分鐘
 */
public int restTime;

/**
 * 最大工作時間,單位分鐘
 */
public int maxWorkTime;

/**
 * 上一次開始工作時間,毫秒時間戳
 */
public long lastStartWorkTime;

然後,修改構造方法以初始化這些屬性:

/**
 * 構造方法
 * @param totalNum 執行的總次數
 * @param sex 性別
 */
public SupermarketCheckoutTaskThird(int totalNum, int sex) {
    this.totalNum = totalNum;// 設定執行的總次數
    this.costTime = new ArrayList<>(totalNum);// 初始化耗時收集集合類容量
    this.sex = sex;// 設定性別
    this.maxWorkTime = 30;// 設定最大工作時間
    this.restTime = sex == 1 ? 2 : 5;// 設定單次休息時間
    priceCostTime = new AtomicLong();// 初始化計價耗時統計
    payCostTime = new AtomicLong();// 初始化支付耗時統計
    packCostTime = new AtomicLong();// 初始化打包耗時統計
}

before() 方法中設定最近一次工作時間:

/**
 * 前置處理
 */
@Override
public void before() {
    super.before();
    lastStartWorkTime = System.currentTimeMillis();// 設定開始工作時間
}

接下來,設計收銀員休息階段的 rest() 方法:

/**
 * 休息
 */
public void rest() {
    long timeMillis = System.currentTimeMillis();// 當前時間
    if (timeMillis - lastStartWorkTime > maxWorkTime * 60 * 1000) {
        ThreadTool.sleep(restTime * 60 * 1000);// 休息
        lastStartWorkTime = System.currentTimeMillis();// 設定開始工作時間
    }
}

最後,將 rest() 方法嵌入到 test() 方法中,確保收銀員在工作過程中能夠按時休息。

透過這次改進,小八不僅最佳化了測試用例,還進一步體現了對員工的關懷。技術測試的最終目的是為了提升效率和使用者體驗,但在這個過程中,絕不能忽視人的需求。只有讓員工在舒適的狀態下工作,才能真正實現效率與人性化的雙贏。

FunTester 原創精華
【連載】從 Java 開始效能測試
故障測試與 Web 前端
服務端功能測試
效能測試專題
Java、Groovy、Go
白盒、工具、爬蟲、UI 自動化
理論、感悟、影片
如果覺得我的文章對您有用,請隨意打賞。您的支援將鼓勵我繼續創作!
打賞支援
暫無回覆。

相關文章