springboot项目中进行并发测试
阅读原文时间:2022年04月03日阅读:1

一 利用工具包:

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

引入者两个依赖:

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

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 = ,threads = )  
public void test() {

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

}  

}

结果:

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

第二种方式:

利用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 = ,threads = )  
public void test() {

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

}  
@Test  
public  void  test2()throws Exception{  
    ExecutorService executorService = Executors.newCachedThreadPool();  
    final Semaphore semaphore = new Semaphore();  
    final CountDownLatch countDownLatch = new CountDownLatch();  
    long l = System.currentTimeMillis();  
    for (int i = ; i < ; i++) {  
        final int count = i;  
        executorService.execute(() -> {  
            try {  
                semaphore.acquire();  
                TUser load = userService.load();  
                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个,直接把我数据库搞炸了,

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