一直使用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;
原文地址:https://blog.csdn.net/zhangyaoming2004/article/details/7619489

多线程测试工具groboutils的使用的更多相关文章

  1. Junit使用GroboUtils进行多线程测试

    写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...

  2. JUNIT4 GroboUtils多线程测试

    阅读更多 利用JUNIT4,GroboUtils进行多线程测试 多线程编程和测试一直是比较难搞的事情,特别是多线程测试.只用充分的测试,才可以发现多线程编码的潜在BUG.下面就介绍一下我自己在测试多线 ...

  3. 多线程的单元测试工具 - GroboUtils

    写过Junit单元测试的同学应该会有感觉,Junit本身是不支持普通的多线程测试的,这是因为Junit的底层实现上,是用System.exit退出用例执行的.JVM都终止了,在测试线程启动的其他线程自 ...

  4. Mysql多线程性能测试工具sysbench 安装、使用和测试

    From:http://www.cnblogs.com/zhoujinyi/archive/2013/04/19/3029134.html 摘要:      sysbench是一个开源的.模块化的.跨 ...

  5. sysbench测试工具

    sysbench简介 Sysbench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.它主要包括以下几种方式的测试:cpu性能,磁盘io性能,线程调度性 ...

  6. 开源多线程性能测试工具-sysbench

    导读 sysbench是一款开源的多线程性能测试工具,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.数据库目前支持MySQL/Oracle/PostgreSQL.本文主要演示Mysql测试 ...

  7. WEB压力测试工具Pylot试用

    Pylot介绍 转载自[http://www.freehao123.com/pylot-web/] 为了能够准确地评估网站服务器对网络流量的承受能力,我们一般会采取模拟网站用户访问,通过不断地增加并发 ...

  8. sysbench压力测试工具简介和使用(一)

    sysbench压力测试工具安装和参数介绍 一.sysbench压力测试工具简介: sysbench是一个开源的.模块化的.跨平台的多线程性能测试工具,可以用来进行CPU.内存.磁盘I/O.线程.数据 ...

  9. 十个免费的Web压力测试工具

    两天,jnj在本站发布了<如何在低速率网络中测试 Web 应用>,那是测试网络不好的情况.而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的W ...

随机推荐

  1. c++ STL map 用法

    map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...

  2. 【python学习之五】自定义函数实现用 Python 发送电子邮件

    前言 之前论坛里有人发过关于发送邮件的帖子,设计器也有关于发送邮件的控件.我这里再次重复,希望能有帮到大家的地方. 信息准备 发送邮件前必须准备好一些基本信息,例如发件人邮箱地址.发件人邮箱密码.收件 ...

  3. es之零停机重新索引数据

    实际生产,对于文档的操作,偶尔会遇到这种问题: 某一个字段的类型不符合后期的业务了,但是当前的索引已经创建了,我们知道es在字段的mapping建立后就不可再次修改mapping的值 比如: 1): ...

  4. Elasticsear搭建

    2.1:创建用户: (elasticsearch不能使用root用户) useradd angelpasswd angel 2.2:解压安装包 tar -zxvf elasticsearch-5.5. ...

  5. wannafly 挑战赛9 E 组一组 (差分约束)

    链接:https://www.nowcoder.com/acm/contest/71/E 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 65536K,其他语言131072K Spec ...

  6. c++中的类(构造函数,析构函数的执行顺序)

    类对象的初始化顺序 新对象的生成经历初始化阶段(初始化列表显式或者隐式的完成<这部分有点像java里面的初始化块>)——> 构造函数体赋值两个阶段 1,类对象初始化的顺序(对于没有父 ...

  7. 基于thinkphp开发的项目部署到由宝塔面板创建的LNMP服务器上解决路径出错问题

    一. 环境与版本: 主机:amazon aws EC2主机 系统:Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1039-aws x86_64) 面板:宝塔免费版 6.9. ...

  8. python基础之 数据格式化

    %还是format 皇城PK Python中格式化字符串目前有两种阵营:%和format,我们应该选择哪种呢? 自从Python2.6引入了format这个格式化字符串的方法之后,我认为%还是form ...

  9. python数据类型之 元祖、列表字典

    Python中元祖,列表,字典   Python中有3种內建的数据结构:列表.元祖和字典: 1.列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目. 列表中的项目应该包 ...

  10. HDU6534 Chika and Friendly Pairs(莫队,树状数组)

    HDU6534 Chika and Friendly Pairs 莫队,树状数组的简单题 #include<bits/stdc++.h> using namespace std; cons ...