`
Copperfield
  • 浏览: 260261 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
C407adc3-512e-3a03-a056-ce4607c3a3c0
java并发编程陷阱
浏览量:25137
社区版块
存档分类

java模拟并发操作进行压力测试

 
阅读更多
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;

import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;

import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

public class ConcurrentTest {

    private static int thread_num = 200;
    private static int client_num = 460;
    private static Map keywordMap = new HashMap();

    static {
        try {
            InputStreamReader isr = new InputStreamReader(new FileInputStream(
                    new File("clicks.txt")), "GBK");
            BufferedReader buffer = new BufferedReader(isr);
            String line = "";
            while ((line = buffer.readLine()) != null) {
                keywordMap.put(line.substring(0, line.lastIndexOf(":")), "");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    
    public static void main(String[] args) {

        int size = keywordMap.size();

        // TODO Auto-generated method stub
        ExecutorService exec = Executors.newCachedThreadPool();
        // 50个线程可以同时访问
        final Semaphore semp = new Semaphore(thread_num);
        // 模拟2000个客户端访问
        for (int index = 0; index < client_num; index++) {
            final int NO = index;
            Runnable run = new Runnable() {
                public void run() {
                    try {
                        // 获取许可
                        semp.acquire();
                        System.out.println("Thread:" + NO);
                        String host = "http://10.99.23.42:7001/KMQueryCenter/query.do?";
                        String para = "method=getQueryResult&pageNum=1&pageSize=5&"
                                + "queryKeyWord="
                                 + getRandomSearchKey(NO)
                                + "&questionID=-1&questionIdPath=-1&searchType=1"
                                + "&proLine=&proSeries=&proType=" + NO;
                        System.out.println(host + para);
                        URL url = new URL(host);// 此处填写供测试的url
                        HttpURLConnection connection = (HttpURLConnection) url
                                .openConnection();
                        // connection.setRequestMethod("POST");
                        // connection.setRequestProperty("Proxy-Connection",
                        // "Keep-Alive");
                        connection.setDoOutput(true);
                        connection.setDoInput(true);

                        PrintWriter out = new PrintWriter(connection
                                .getOutputStream());
                        out.print(para);
                        out.flush();
                        out.close();

                        BufferedReader in = new BufferedReader(
                                new InputStreamReader(connection
                                        .getInputStream()));

                        String line = "";
                        String result = "";
                        while ((line = in.readLine()) != null) {
                            result += line;
                        }

                        // System.out.println(result);
                        // Thread.sleep((long) (Math.random()) * 1000);
                        // 释放
                        System.out.println("第:" + NO + " 个");
                        semp.release();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            exec.execute(run);
        }
        // 退出线程池
        exec.shutdown();
    }

    private static String getRandomSearchKey(final int no) {
        String ret = "";
        int size = keywordMap.size();
        // int wanna = (int) (Math.random()) * (size - 1);
        ret = (keywordMap.entrySet().toArray())[no].toString();
        ret = ret.substring(0, ret.lastIndexOf("="));
        System.out.println("\t" + ret);
        return ret;
    }
}

 

分享到:
评论

相关推荐

    压力测试java模拟

    通过配置线程组(模拟并发用户)、采样器(定义请求类型)、监听器(收集和分析测试结果)等组件,我们可以定制出满足特定需求的压力测试计划。 在文件列表中的"stg~~"可能代表一个或多个与压力测试相关的文件,...

    JMeter 之TCP服务器并发压力测试

    本文将详细介绍如何使用JMeter进行TCP服务器的并发压力测试,包括环境搭建、软件下载与安装、以及具体的操作实例。 首先,要使用JMeter进行测试,需要确保你的环境中安装了JDK(Java开发工具包)。JMeter要求JDK...

    基于JAVA简单简洁的压力测试, QPS测试工具.zip

    Java中的压力测试通常涉及到多线程和并发控制,以模拟多个用户同时访问应用。在Java中,我们可以利用`java.util.concurrent`包中的类,如`ExecutorService`、`ThreadPoolExecutor`和`Future`来创建并管理线程池,...

    压力测试脚本

    9. **分布式测试**:对于大型系统,压力测试脚本可能需要在多台机器上并行运行,以模拟更大的并发量。这需要了解如何配置和管理分布式测试环境。 10. **持续集成**:压力测试脚本可与持续集成工具(如Jenkins、...

    网站压力测试程序----附带java源码

    通过研究这个Java压力测试程序的源码,我们可以学习到如何设计和实现一个高效的压力测试工具,以及如何利用Java进行并发编程和性能测试。这将对提升我们的系统架构设计能力和故障排查技能大有裨益。

    oracle压力测试工具 java版

    1. **并发执行**:Java版的Oracle压力测试工具应具备创建并管理多个并发线程的能力,这些线程模拟多个用户同时访问数据库,以测试系统在高并发情况下的响应速度和处理能力。 2. **SQL脚本支持**:工具应能接受SQL...

    模拟Loadrunner 压力测试 程序

    本篇文章将深入探讨LoadRunner的压力测试原理、操作流程以及如何通过编写脚本来模拟压力测试。 一、LoadRunner简介 LoadRunner是由HP公司开发的一款企业级负载和性能测试工具,它能够对多种应用服务器进行压力、...

    jmeter压力测试

    Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI ...

    LoadRunner_Java.zip_压力测试

    【压力测试】是一种重要的软件性能评估方法,主要目的是模拟大量用户并发访问或操作应用程序,以检测系统的稳定性和可扩展性。在本案例中,我们关注的是数据库的压力测试,即通过多线程技术来测试数据库管理系统...

    jakarta-jmeter-2.1.1(JAVA Web并发测试)

    3. **压力测试**:通过增加大量并发用户,测试服务器的极限处理能力,判断何时会出现服务崩溃或响应时间过长的情况。 4. **功能测试**:除了性能测试,JMeter还可以用于验证应用的功能,比如HTTP、FTP、SMTP、SOAP...

    Apache 压力测试工具ab 专注接口测试 并发测试

    Apache的ab(ApacheBench)是一款简单而强大的压力测试工具,专用于接口和并发测试。在Web服务性能优化和系统负载能力评估中,ab扮演着关键角色。它可以帮助开发者和运维人员了解服务器在高并发情况下的表现,以及...

    Jmeter-Java-Sampler.rar_jmeter_jmeter java_压力测试

    Java Sampler是JMeter框架的一部分,它允许开发者用Java语言编写测试脚本,从而实现对任何基于Java接口的服务进行压力测试。这种灵活性使得Java Sampler成为那些无法通过默认取样器实现测试需求的项目的理想选择。 ...

    高并发模拟多个用户同时访问

    高并发模拟多个用户同时访问所写接口,用于测试接口所需要的的并发,和接口的最多承受用户量,适用于一些简单的压力测试。

    C++单元测试、压力测试、快速测试工具

    压力测试,又称为负载测试,主要是为了测试系统在高负载或大量并发请求下的表现和稳定性。在C++中,我们可以使用Apache JMeter、LoadRunner等工具进行压力测试。Apache JMeter是一个开源的Java应用,可以模拟多个...

    压力测试模拟jmeter

    其中,压力测试尤为关键,它模拟真实环境中大量并发用户对系统进行访问,以此来检测系统的极限性能。在这个过程中,Apache JMeter是一款广泛使用的开源工具,尤其在压力测试和负载测试方面表现出色。 Apache JMeter...

    Jmeter WEB HTTP压力测试实例

    Jmeter 在 Windows XP/2003/W7/W8 等操作系统中都可以运行,前提是需要安装好 JDK 包,因为 JMeter 是基于 JAVA 开发的压力测试软件。在本次配置实例中,我们使用的是 W8-64 位系统。 安装步骤 安装步骤非常简单,...

    高并发测试亲测可用

    Apache JMeter是Apache软件基金会的一个开放源代码项目,它主要用于对Web应用进行压力和负载测试。通过模拟大量并发用户请求,JMeter可以分析服务器、网络、数据库等组件的性能。其功能强大,支持多种协议如HTTP、...

    简易压力测试器.rar

    【简易压力测试器】正是为这个目的而设计,它能够模拟不同场景下的并发负载,以便开发者优化代码和调整服务器配置,确保应用在真实环境中能够稳定运行。 在【描述】中提到,此工具禁止用于恶意的攻击行为。这是因为...

    jmeter配置、安装手册-多并发多线程进行服务器压力测试.rar

    本手册将详细介绍如何配置和安装JMeter,以及如何利用它来进行多并发多线程的服务器压力测试。 一、JMeter简介 JMeter由Apache软件基金会开发,支持多种协议,包括HTTP(S)、FTP、SMTP、SOAP/REST等,可测试静态和...

Global site tag (gtag.js) - Google Analytics