背景:
1.團隊成員對質量意識逐漸提升;單元測試意識提升;
2.性能意識不足,往往到最后提交性能測試的時候,才發現性能問題;在開發階段忽視對性能的考慮.
尤其在做對外服務的需求中,危害特別明顯.
基于這兩個原因,希望有一個在單元測試下的性能測試工具.提供最簡單的性能指標報表.在開發階段讓開發對性能情況有個感性的認識.
設計思路:
概念說明:
類名 |
方法
|
說明
|
Statistics
說明:性能統計信息 |
tps() |
提供tps |
|
average() |
提供平均響應時間,單位毫秒 |
|
total() |
提供總耗時,單位毫秒 |
Job
說明:測試單元邏輯 |
execute() |
性能測試邏輯 |
Warn
說明:性能未達標警告 |
|
|
PerformanceTester (核心)
說明:性能測試工具,根據制定的并發數和單個并發循環次數,進行性能測試;根據提供的平均響應時間,分析是否達標 |
test(Job job) |
性能測試,打印性能報表,分析是否達標 |
JTesterxPerformance
說明:基于JTester的性能測試基類,統一執行性能測試計劃
備注:
JTester是我們公司同事編寫的一套單元測試框架.我們同樣可以提供基于JUnit的實現,比如JUnitPerformance
|
performance() |
根據提供的性能策略,指標 和 測試邏輯,進行性能測試 |
|
job() |
需要子類覆寫,提供測試邏輯 |
|
testers() |
需要子類覆寫,提供性能測試策略和指標要求 |
User Guide:
創建一個性能測試類,繼承com.alibaba.tpsc.common.test.jtesterx.JTesterxPerformance
在類名標注@Test (org.testng.annotations.Test),表明需要進行TestNG的單元測試
備注:如果是在其他單元測試框架下,請自行擴展類似JUnitPerformacne實現
覆寫public Job job()方法.提供 性能測試名 和 性能測試邏輯
@Override
public Job job() {
return new Job("SampleService.hello") {
@Override
public void execute() {
SampleService.hello();
}
};
}
覆寫public Collection<PerformanceTester> testers().提供一組性能測試策略(并發數,單個并發循環次數) 和 性 能測試指標(平均響應時間)
性能測試工具會根據提供策略和指標,依次進行性能測試.
public Collection<PerformanceTester> testers() {
Collection<PerformanceTester> testers = new ArrayList<PerformanceTester>();
// 20個并發,單個并發循環1000次,平均響應時間閥值10ms
testers.add(new PerformanceTester(20, 1000, 10));
// 10個并發,單個并發循環1000次,平均響應時間閥值5ms
testers.add(new PerformanceTester(10, 1000, 5));
return testers;
}
右鍵點擊Eclipse->Run As->TestNG Test.
如果測試通過,則顯示Green Bar
如果測試未通過,則在Red Bar中顯示:java.lang.AssertionError: performance expected is 1ms,but actual is 2.938ms.
工具代碼和演示代碼如下:
Demo下載