springboot项目中进行并发测试

springboot项目中进行并发测试

一 利用工具包:

  
            org.springframework.boot
            spring-boot-starter-test
            test
        
        
            org.databene
            contiperf
            2.3.4
            test
        

引入者两个依赖:

就可以进行测试了,看测试代码:

springboot项目中进行并发测试_第1张图片

package com.cxy.springs;

import com.cxy.springs.entity.TUser;
import com.cxy.springs.service.TUserService;
import org.databene.contiperf.PerfTest;
import org.databene.contiperf.junit.ContiPerfRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringsApplicationTests {
    @Autowired
    public TUserService userService;
    @Test
    public void contextLoads() {
    }
    //引入 ContiPerf 进行性能测试
    @Rule
    public ContiPerfRule contiPerfRule = new ContiPerfRule();

    @Test
    //10个线程 执行10次
    @PerfTest(invocations = 100,threads = 10)
    public void test() {

        TUser load = userService.load(1);
        System.out.println(load.getPhone());
       
    }
}

结果:

springboot项目中进行并发测试_第2张图片

springboot项目中进行并发测试_第3张图片

不知道为什么我的图片挂了

第二种方式:

利用concurrent包下列进行测试,不过他们没有具体的相应时间:

 

package com.cxy.springs;

import com.cxy.springs.entity.TUser;
import com.cxy.springs.service.TUserService;
import org.databene.contiperf.PerfTest;
import org.databene.contiperf.junit.ContiPerfRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringsApplicationTests {
    @Autowired
    public TUserService userService;
    @Test
    public void contextLoads() {
    }
    //引入 ContiPerf 进行性能测试
    @Rule
    public ContiPerfRule contiPerfRule = new ContiPerfRule();

    @Test
    //10个线程 执行10次
    @PerfTest(invocations = 100,threads = 10)
    public void test() {

        TUser load = userService.load(1);
        System.out.println(load.getPhone());

    }
    @Test
    public  void  test2()throws Exception{
        ExecutorService executorService = Executors.newCachedThreadPool();
        final Semaphore semaphore = new Semaphore(200);
        final CountDownLatch countDownLatch = new CountDownLatch(500);
        long l = System.currentTimeMillis();
        for (int i = 0; i < 200; i++) {
            final int count = i;
            executorService.execute(() -> {
                try {
                    semaphore.acquire();
                    TUser load = userService.load(1);
                    System.out.println(load.getPhone());
                    semaphore.release();
                } catch (Exception e) {
                    // log.error("exception" , e);
                }
                countDownLatch.countDown();
            });
        }
        countDownLatch.await();
        long a = System.currentTimeMillis();
        System.out.println(a-l);

        executorService.shutdown();

        //log.info("size:{}" , map.size());
    }
}

这个开始时候给了5000个,直接把我数据库搞炸了,

后来改了,也还是可以测试的,如果需要使用这个那么需要整合线程池了,不然那么多的连接夯在那里会一直不走

posted @ 2019-05-08 22:05 动手的程序员 阅读( ...) 评论( ...) 编辑 收藏

你可能感兴趣的:(springboot项目中进行并发测试)