• java模拟并发请求工具类(测试专用)


    1.背景

      实际生产中,我们开发好接口后可能会简单的压力测试一下,也就是说模拟并发测试,测试工具类如下:

    2.工具类

    package tentative.normal.other;
    
    import cn.hutool.http.HttpRequest;
    import cn.hutool.http.HttpUtil;
    import cn.hutool.http.Method;
    import com.alibaba.fastjson.JSON;
    
    import java.util.Map;
    import java.util.concurrent.CountDownLatch;
    
    /**
     * @Copyright (C) 四川XXXXXX有限公司
     * @Author: LI DONG PING
     * @Date: 2020-09-24 10:21
     * @Description: <p>
     * 并发请求工具类
     * </p>
     */
    public class HttpConcurrentUtil {
    
        //默认并发数
        private static int num = 10;
    
        private static CountDownLatch cdl = new CountDownLatch(num);
    
        /**
         * 执行并发请求
         *
         * @param url      请求url
         * @param paramMap 请求参数
         * @param n        并发数
         */
        public static void doPost(String url, Map<String, Object> paramMap, Integer n) {
            if (n != null) {
                num = n;
            }
            for (int i = 0; i < num; i++) {
                new Thread(new HttpConcurrentUtil.UserRequest(url, paramMap)).start();
                cdl.countDown();
            }
        }
    
        public static class UserRequest implements Runnable {
            private String url;
            private Map<String, Object> paramMap;
    
            public UserRequest(String url, Map<String, Object> paramMap) {
                this.url = url;
                this.paramMap = paramMap;
            }
    
            @Override
            public void run() {
                try {
                    cdl.await();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                //使用工具类发送http请求
                doPost(url, paramMap);
    
            }
    
            /**
             * 这里可以根据自己的实际情况修改具体请求方式
             *
             * @param url
             * @param paramMap
             */
            public void doPost(String url, Map<String, Object> paramMap) {
                System.out.println("当前线程名称:" + Thread.currentThread().getName());
                System.out.println("请求地址:" + url);
                HttpRequest request = HttpUtil.createRequest(Method.POST, url);
    
                String jsonString = JSON.toJSONString(paramMap);
                //json参数格式
                request.body(jsonString);
                //表单请求
                //request.form(paramMap);
    
                System.out.println("请求参数:" + jsonString);
                request.setConnectionTimeout(60 * 1000);
                String response = request.execute().body();
                System.out.println("响应结果:" + response);
            }
        }
    
    }

    完美! 

  • 相关阅读:
    Java基础——原码, 反码, 补码 详解
    为什么Java byte 类型的取值范围是-128~127
    JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
    JDK config
    为什么要设置Java环境变量(详解)
    什么是JAR包?
    如何用python将一个时间序列转化成有监督学习
    ImportError: numpy.core.multiarray failed to import
    搭建SDN网络——mininet
    回溯法解决最大团问题
  • 原文地址:https://www.cnblogs.com/newAndHui/p/13722904.html
Copyright © 2020-2023  润新知