「原創宣告:保留所有權利,禁止轉載」
3.7.3 超市結賬第三回合:人性化設計的進一步探索
當小八將最新的測試報告發給收銀員們後,本以為大家會為最佳化後的結果感到滿意,卻沒想到收銀員們紛紛反饋:“測試強度太高了,我們根本吃不消!” 在實際工作中,收銀員們需要適當的休息,即使是在崗位上。因此,大家對測試結果依然持懷疑態度,要求在設計測試用例時增加休息時間。
一位收銀員提議:“在現有的三個階段基礎上,增加一個休息階段。規則是:如果一個收銀員連續工作超過 30 分鐘,就休息 2 分鐘。” 然而,這個提議剛說完,就有人提出了反對意見:“這個休息時間只考慮了男性收銀員的需求,女性收銀員需要更多的休息時間,至少 5 分鐘。”
經過一番坦誠而友好的討論,小八決定採納員工的意見:男性收銀員每連續工作 30 分鐘,休息 2 分鐘;女性收銀員每連續工作 30 分鐘,休息 5 分鐘。小八超市共有 2 名男性收銀員和 6 名女性收銀員,這一調整充分考慮了員工的實際情況。
於是,測試用例需要再次調整,改動點包括:
- 增加收銀員的性別屬性,並設定對應的休息時間。
- 增加收銀員休息階段,根據需求實現休息功能。
首先,在多執行緒任務類中增加以下屬性:
/**
* 性別,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 自動化
理論、感悟、影片
如果覺得我的文章對您有用,請隨意打賞。您的支援將鼓勵我繼續創作!
打賞支援
暫無回覆。