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;
}
}
分享到:
相关推荐
通过配置线程组(模拟并发用户)、采样器(定义请求类型)、监听器(收集和分析测试结果)等组件,我们可以定制出满足特定需求的压力测试计划。 在文件列表中的"stg~~"可能代表一个或多个与压力测试相关的文件,...
本文将详细介绍如何使用JMeter进行TCP服务器的并发压力测试,包括环境搭建、软件下载与安装、以及具体的操作实例。 首先,要使用JMeter进行测试,需要确保你的环境中安装了JDK(Java开发工具包)。JMeter要求JDK...
Java中的压力测试通常涉及到多线程和并发控制,以模拟多个用户同时访问应用。在Java中,我们可以利用`java.util.concurrent`包中的类,如`ExecutorService`、`ThreadPoolExecutor`和`Future`来创建并管理线程池,...
9. **分布式测试**:对于大型系统,压力测试脚本可能需要在多台机器上并行运行,以模拟更大的并发量。这需要了解如何配置和管理分布式测试环境。 10. **持续集成**:压力测试脚本可与持续集成工具(如Jenkins、...
通过研究这个Java压力测试程序的源码,我们可以学习到如何设计和实现一个高效的压力测试工具,以及如何利用Java进行并发编程和性能测试。这将对提升我们的系统架构设计能力和故障排查技能大有裨益。
1. **并发执行**:Java版的Oracle压力测试工具应具备创建并管理多个并发线程的能力,这些线程模拟多个用户同时访问数据库,以测试系统在高并发情况下的响应速度和处理能力。 2. **SQL脚本支持**:工具应能接受SQL...
本篇文章将深入探讨LoadRunner的压力测试原理、操作流程以及如何通过编写脚本来模拟压力测试。 一、LoadRunner简介 LoadRunner是由HP公司开发的一款企业级负载和性能测试工具,它能够对多种应用服务器进行压力、...
Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于Web应用测试,但后来扩展到其他测试领域。 它可以用于测试静态和动态资源,例如静态文件、Java 小服务程序、CGI ...
【压力测试】是一种重要的软件性能评估方法,主要目的是模拟大量用户并发访问或操作应用程序,以检测系统的稳定性和可扩展性。在本案例中,我们关注的是数据库的压力测试,即通过多线程技术来测试数据库管理系统...
3. **压力测试**:通过增加大量并发用户,测试服务器的极限处理能力,判断何时会出现服务崩溃或响应时间过长的情况。 4. **功能测试**:除了性能测试,JMeter还可以用于验证应用的功能,比如HTTP、FTP、SMTP、SOAP...
Apache的ab(ApacheBench)是一款简单而强大的压力测试工具,专用于接口和并发测试。在Web服务性能优化和系统负载能力评估中,ab扮演着关键角色。它可以帮助开发者和运维人员了解服务器在高并发情况下的表现,以及...
Java Sampler是JMeter框架的一部分,它允许开发者用Java语言编写测试脚本,从而实现对任何基于Java接口的服务进行压力测试。这种灵活性使得Java Sampler成为那些无法通过默认取样器实现测试需求的项目的理想选择。 ...
高并发模拟多个用户同时访问所写接口,用于测试接口所需要的的并发,和接口的最多承受用户量,适用于一些简单的压力测试。
压力测试,又称为负载测试,主要是为了测试系统在高负载或大量并发请求下的表现和稳定性。在C++中,我们可以使用Apache JMeter、LoadRunner等工具进行压力测试。Apache JMeter是一个开源的Java应用,可以模拟多个...
其中,压力测试尤为关键,它模拟真实环境中大量并发用户对系统进行访问,以此来检测系统的极限性能。在这个过程中,Apache JMeter是一款广泛使用的开源工具,尤其在压力测试和负载测试方面表现出色。 Apache JMeter...
Jmeter 在 Windows XP/2003/W7/W8 等操作系统中都可以运行,前提是需要安装好 JDK 包,因为 JMeter 是基于 JAVA 开发的压力测试软件。在本次配置实例中,我们使用的是 W8-64 位系统。 安装步骤 安装步骤非常简单,...
Apache JMeter是Apache软件基金会的一个开放源代码项目,它主要用于对Web应用进行压力和负载测试。通过模拟大量并发用户请求,JMeter可以分析服务器、网络、数据库等组件的性能。其功能强大,支持多种协议如HTTP、...
【简易压力测试器】正是为这个目的而设计,它能够模拟不同场景下的并发负载,以便开发者优化代码和调整服务器配置,确保应用在真实环境中能够稳定运行。 在【描述】中提到,此工具禁止用于恶意的攻击行为。这是因为...
本手册将详细介绍如何配置和安装JMeter,以及如何利用它来进行多并发多线程的服务器压力测试。 一、JMeter简介 JMeter由Apache软件基金会开发,支持多种协议,包括HTTP(S)、FTP、SMTP、SOAP/REST等,可测试静态和...