• springboot项目中进行并发测试


    一 利用工具包:

      <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.databene</groupId>
                <artifactId>contiperf</artifactId>
                <version>2.3.4</version>
                <scope>test</scope>
            </dependency>

    引入者两个依赖:

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

    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());
           
        }
    }

    结果:

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

    第二种方式:

    利用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个,直接把我数据库搞炸了,

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

  • 相关阅读:
    Sublime Text shift+ctrl妙用(转载)
    编写一致的符合习惯的javascript
    Vue 部署单页应用,刷新页面 404/502 报错
    http 缓存策略浅析
    Vue 项目优化,持续更新...
    web安全之——XSS、CSRF
    javascript 易错知识点合集
    深入理解 js this 绑定机制
    javascript 模块依赖管理的本质
    VUE 项目刷新路由指向index.html
  • 原文地址:https://www.cnblogs.com/xiufengchen/p/10835040.html
Copyright © 2020-2023  润新知