• 多线程测试工具groboutils的使用


            一直使用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. ", 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;
    原文地址:https://blog.csdn.net/zhangyaoming2004/article/details/7619489
  • 相关阅读:
    ECharts
    JSON(及其在ajax前后端交互的过程)小识
    fullpage.js全屏滚动插件使用小结
    php json_encode数据格式化
    jQuery的DOM操作实例(3)——创建节点&&编写一个弹窗
    jQuery的DOM操作实例(2)——拖拽效果&&拓展插件
    jQuery的DOM操作实例(1)——选项卡&&Tab切换
    日常css技巧小结(2)-- inline-block带来的迷惑
    日常css技巧小结(1)--背景透明度改变对内容无影响
    浅析JavaScript事件流——冒泡
  • 原文地址:https://www.cnblogs.com/jpfss/p/11582669.html
Copyright © 2020-2023  润新知