多线程测试工具groboutils的使用

来源:互联网 发布:javascript 清空对象 编辑:程序博客网 时间:2024/05/01 04:58

http://blog.csdn.net/zhangyaoming2004/article/details/7619489

   一直使用junit做为服务测试框架,感觉不错。最近有人反映在高并发的情况下,存在服务调不到。无奈再次打开单元测试模拟高并发的
情况,却发现junit不支持并发测试
     引入groboutils jar包,其实我主要使用MultiThreadedTestRunner类和TestRunnable类。
     原有的junit框架不做改变,导入GroboTestingJUnit-1.2.1-core.jar包
     代码如下
public class FaultServiceTest extends TestCase {

    /**
     * @param args
     * @throws FaultException
     * @throws ExpParamNotFoundException
     * @throws ParseException
     */
    private IFaultService faultService;
    private static final int NUM_THREAD = 100; // 测试线程总数

    public FaultServiceTest() {
        super();
        IInitService initService = (IInitService) CustomBeanFactory
                .getBean("initService");
        initService.initSiteDatabase();
        this.faultService = (IFaultService) CustomBeanFactory
                .getBean("faultService");
    }

    public FaultServiceTest(String name) {
        super(name);
        IInitService initService = (IInitService) CustomBeanFactory
                .getBean("initService");
        initService.initSiteDatabase();
        this.faultService = (IFaultService) CustomBeanFactory
                .getBean("faultService");
    }
    // 高并发测试
    public void testGetEquipEventAlertListByPage() throws Throwable {
        EquipmentQueryBean equipmentQueryBean = new EquipmentQueryBean();
        // 生成所有测试线程
        TestRunnable[] test = new TestRunnable[NUM_THREAD];
        long start = System.currentTimeMillis();
        for (int i = 0; i < test.length; i++) {
            test[i] = new FaultServiceThread(faultService, equipmentQueryBean);
        }
        // 生成测试线程运行器
        MultiThreadedTestRunner mttr = new MultiThreadedTestRunner(test);
        // 运行测试线程
        mttr.runTestRunnables();
        long used = System.currentTimeMillis() - start;
        System.out.printf("%s 调用花费 %s milli-seconds.\n", NUM_THREAD, used);
    }
    public static Test suite() {
        TestSuite test = new TestSuite("HealthService接口类测试");
        test.addTest(new FaultServiceTest("testGetEquipEventAlertListByPage"));
        return test;
    }
    /*
     * 测试线程类定义
     */
    private static class FaultServiceThread extends TestRunnable {
        private IFaultService faultService;
        private EquipmentQueryBean equipmentQueryBean;

        public FaultServiceThread(IFaultService faultService,
                EquipmentQueryBean equipmentQueryBean) {
            super();
            this.faultService = faultService;
            this.equipmentQueryBean = equipmentQueryBean;
        }

        @Override
        public void runTest() throws Throwable {
            faultService.getEquipEventAlertListByPage(equipmentQueryBean);
        }
    }

运行代码,并发数开到100个后观察运行时间发现运行运行时间到了12秒了,看来问题出在DAO。需要进行sql代码优化了

导入的测试包有:
import net.sourceforge.groboutils.junit.v1.MultiThreadedTestRunner;
import net.sourceforge.groboutils.junit.v1.TestRunnable;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

原创粉丝点击