背景:
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下载