- 浏览: 275221 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
java老大爷:
技术扶持 技术交流 汇聚程序员精英 群里有马士兵2017 ...
大数据数据 -
yeruowei:
遇到同样的问题,特意登录点赞
导入数据库时出现ORA-01435: 用户不存在 -
1017974387:
特意登陆来给你赞。。。。。。
导入数据库时出现ORA-01435: 用户不存在 -
sgy1103:
您好:看了苯苯熊家庭记帐注册码破解很羡慕。我在用,不过换电脑后 ...
笨笨家庭记账本—破解 -
shellbye:
居然真是这个原因。。。哈哈
maven设置中ERROR: JAVA_HOME is set to an invalid directory
晕要发到博客上频道的怎么发到了这里。。。管理员能帮忙移动一下吗
會議系統的优化有了改进,谢谢大家的建议,同时分享一下我写的http通用请求测试工具。保持session是这类测试工具的难点,因为你要进行一系列的操作,比如登录---建立会议---删除会议---登出,你每次请求都要保证你hold住前一次请求的sessionId,我这里是用cookie 携带上一次访问的sessionId, 分享一下我做的通用http请求测试工具,可以自己携带参数比如用户名,密码等等,封装到Map中。
以下可以模拟单线程请求。还可以改装一下,变成多线程的并发,可以分析每次的返回结果,测试时间和返回码(200or404?).
public class HttpRequestProxy
{
private static int connectTimeOut = 15000;
private static int readTimeOut = 20000;
private static String requestEncoding = "UTF-8";
private static String JESSIONID;
public static GeneralUrlResult doPost(String reqUrl, Map parameters,
String recvEncoding){
//统计测试开始结束时间
Long begin=System.currentTimeMillis();
Long end=System.currentTimeMillis();
GeneralUrlResult gr=new GeneralUrlResult();
HttpURLConnection url_con = null;
String responseContent = null;
int code=0;
try
{
StringBuffer params = new StringBuffer();
for (Iterator iter = parameters.entrySet().iterator(); iter
.hasNext();)
{
Entry element = (Entry) iter.next();
params.append(element.getKey().toString());
params.append("=");
params.append(URLEncoder.encode(element.getValue().toString(),
HttpRequestProxy.requestEncoding));
params.append("&");
}
if (params.length() > 0)
{
params = params.deleteCharAt(params.length() - 1);
}
URL url = new URL(reqUrl);
url_con = (HttpURLConnection) url.openConnection();
url_con.setUseCaches(false);
url_con.setRequestMethod("GET");
if(JESSIONID==null)
{
//这里的requUrl可以写成网站的通用,比如登录的地址以后每次测试都用这个sessionId保持测试的连贯性
JESSIONID=testUrlConnection("http://192.168.9.225:8080/Conference/login.do?userName=luyi&&password=123456&&loginType=WEB");
}
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>123456"+JESSIONID);
url_con.setRequestProperty("Cookie",JESSIONID );
//
// System.setProperty("sun.net.client.defaultConnectTimeout", String
// .valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
// System.setProperty("sun.net.client.defaultReadTimeout", String
// .valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
url_con.setConnectTimeout(12000);//(单位:毫秒)jdk
// 1.5换成这个,连接超时
url_con.setReadTimeout(50000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
url_con.setDoOutput(true);
byte[] b = params.toString().getBytes();
url_con.getOutputStream().write(b, 0, b.length);
url_con.getOutputStream().flush();
url_con.getOutputStream().close();
code=url_con.getResponseCode();
String header;
for(int i=0;true;i++){
header=url_con.getHeaderField(i);
if(header==null)break;
System.out.println("header:"+header);
//System.out.println(c.getContentType());
}
InputStream in = url_con.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in,
recvEncoding));
String tempLine = rd.readLine();
StringBuffer tempStr = new StringBuffer();
String crlf=System.getProperty("line.separator");
while (tempLine != null)
{
tempStr.append(tempLine);
tempStr.append(crlf);
tempLine = rd.readLine();
}
//得到请求网站返回的内容
responseContent = tempStr.toString();
end=System.currentTimeMillis();
rd.close();
in.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
if (url_con != null)
{
url_con.disconnect();
}
}
//得到测试的每次响应时间
Long between=end-begin;
//gr是我写的一个简单的结果类,其中有测试时间,返回结果200?or404,还有返回内容
gr.setBetween(between);
gr.setCode(code);
gr.setResult(responseContent);
return gr;
}
public static int getConnectTimeOut()
{
return HttpRequestProxy.connectTimeOut;
}
public static int getReadTimeOut()
{
return HttpRequestProxy.readTimeOut;
}
public static String getRequestEncoding()
{
return requestEncoding;
}
public static void setConnectTimeOut(int connectTimeOut)
{
HttpRequestProxy.connectTimeOut = connectTimeOut;
}
public static void setReadTimeOut(int readTimeOut)
{
HttpRequestProxy.readTimeOut = readTimeOut;
}
public static void setRequestEncoding(String requestEncoding)
{
HttpRequestProxy.requestEncoding = requestEncoding;
}
public static String testUrlConnection(String Strurl){
String urlStr=Strurl;
OutputStream out=null;
InputStream in=null;
try {
URL url=new URL(urlStr);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
//打印请求头信息
Map hfs=con.getHeaderFields();
Set<String> keys=hfs.keySet();
for(String str:keys){
List<String> vs=(List)hfs.get(str);
System.out.print(str+":");
for(String v:vs){
System.out.print(v+"\t");
}
System.out.println();
}
System.out.println("-----------------------");
String cookieValue=con.getHeaderField("Set-Cookie");
System.out.println("cookie value:"+cookieValue);
String sessionId=cookieValue.substring(0, cookieValue.indexOf(";"));
return sessionId;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
try {
if(in!=null)
in.close();
if(out!=null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
Map map = new HashMap();
map.put("chart", "555555");
map.put("conId","727622");
GeneralUrlResult temp = HttpRequestProxy.doPost("http://192.168.9.225:8080/Conference/readChart.jsp", map, "UTF-8");
System.out.println("页面为:\n"+temp);
}
public static String getJESSIONID() {
return JESSIONID;
}
public static void setJESSIONID(String jessionid) {
JESSIONID = jessionid;
}
}
會議系統的优化有了改进,谢谢大家的建议,同时分享一下我写的http通用请求测试工具。保持session是这类测试工具的难点,因为你要进行一系列的操作,比如登录---建立会议---删除会议---登出,你每次请求都要保证你hold住前一次请求的sessionId,我这里是用cookie 携带上一次访问的sessionId, 分享一下我做的通用http请求测试工具,可以自己携带参数比如用户名,密码等等,封装到Map中。
以下可以模拟单线程请求。还可以改装一下,变成多线程的并发,可以分析每次的返回结果,测试时间和返回码(200or404?).
public class HttpRequestProxy
{
private static int connectTimeOut = 15000;
private static int readTimeOut = 20000;
private static String requestEncoding = "UTF-8";
private static String JESSIONID;
public static GeneralUrlResult doPost(String reqUrl, Map parameters,
String recvEncoding){
//统计测试开始结束时间
Long begin=System.currentTimeMillis();
Long end=System.currentTimeMillis();
GeneralUrlResult gr=new GeneralUrlResult();
HttpURLConnection url_con = null;
String responseContent = null;
int code=0;
try
{
StringBuffer params = new StringBuffer();
for (Iterator iter = parameters.entrySet().iterator(); iter
.hasNext();)
{
Entry element = (Entry) iter.next();
params.append(element.getKey().toString());
params.append("=");
params.append(URLEncoder.encode(element.getValue().toString(),
HttpRequestProxy.requestEncoding));
params.append("&");
}
if (params.length() > 0)
{
params = params.deleteCharAt(params.length() - 1);
}
URL url = new URL(reqUrl);
url_con = (HttpURLConnection) url.openConnection();
url_con.setUseCaches(false);
url_con.setRequestMethod("GET");
if(JESSIONID==null)
{
//这里的requUrl可以写成网站的通用,比如登录的地址以后每次测试都用这个sessionId保持测试的连贯性
JESSIONID=testUrlConnection("http://192.168.9.225:8080/Conference/login.do?userName=luyi&&password=123456&&loginType=WEB");
}
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>123456"+JESSIONID);
url_con.setRequestProperty("Cookie",JESSIONID );
//
// System.setProperty("sun.net.client.defaultConnectTimeout", String
// .valueOf(HttpRequestProxy.connectTimeOut));// (单位:毫秒)jdk1.4换成这个,连接超时
// System.setProperty("sun.net.client.defaultReadTimeout", String
// .valueOf(HttpRequestProxy.readTimeOut)); // (单位:毫秒)jdk1.4换成这个,读操作超时
url_con.setConnectTimeout(12000);//(单位:毫秒)jdk
// 1.5换成这个,连接超时
url_con.setReadTimeout(50000);//(单位:毫秒)jdk 1.5换成这个,读操作超时
url_con.setDoOutput(true);
byte[] b = params.toString().getBytes();
url_con.getOutputStream().write(b, 0, b.length);
url_con.getOutputStream().flush();
url_con.getOutputStream().close();
code=url_con.getResponseCode();
String header;
for(int i=0;true;i++){
header=url_con.getHeaderField(i);
if(header==null)break;
System.out.println("header:"+header);
//System.out.println(c.getContentType());
}
InputStream in = url_con.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(in,
recvEncoding));
String tempLine = rd.readLine();
StringBuffer tempStr = new StringBuffer();
String crlf=System.getProperty("line.separator");
while (tempLine != null)
{
tempStr.append(tempLine);
tempStr.append(crlf);
tempLine = rd.readLine();
}
//得到请求网站返回的内容
responseContent = tempStr.toString();
end=System.currentTimeMillis();
rd.close();
in.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally
{
if (url_con != null)
{
url_con.disconnect();
}
}
//得到测试的每次响应时间
Long between=end-begin;
//gr是我写的一个简单的结果类,其中有测试时间,返回结果200?or404,还有返回内容
gr.setBetween(between);
gr.setCode(code);
gr.setResult(responseContent);
return gr;
}
public static int getConnectTimeOut()
{
return HttpRequestProxy.connectTimeOut;
}
public static int getReadTimeOut()
{
return HttpRequestProxy.readTimeOut;
}
public static String getRequestEncoding()
{
return requestEncoding;
}
public static void setConnectTimeOut(int connectTimeOut)
{
HttpRequestProxy.connectTimeOut = connectTimeOut;
}
public static void setReadTimeOut(int readTimeOut)
{
HttpRequestProxy.readTimeOut = readTimeOut;
}
public static void setRequestEncoding(String requestEncoding)
{
HttpRequestProxy.requestEncoding = requestEncoding;
}
public static String testUrlConnection(String Strurl){
String urlStr=Strurl;
OutputStream out=null;
InputStream in=null;
try {
URL url=new URL(urlStr);
HttpURLConnection con=(HttpURLConnection)url.openConnection();
con.setRequestMethod("GET");
//打印请求头信息
Map hfs=con.getHeaderFields();
Set<String> keys=hfs.keySet();
for(String str:keys){
List<String> vs=(List)hfs.get(str);
System.out.print(str+":");
for(String v:vs){
System.out.print(v+"\t");
}
System.out.println();
}
System.out.println("-----------------------");
String cookieValue=con.getHeaderField("Set-Cookie");
System.out.println("cookie value:"+cookieValue);
String sessionId=cookieValue.substring(0, cookieValue.indexOf(";"));
return sessionId;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally{
try {
if(in!=null)
in.close();
if(out!=null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args)
{
Map map = new HashMap();
map.put("chart", "555555");
map.put("conId","727622");
GeneralUrlResult temp = HttpRequestProxy.doPost("http://192.168.9.225:8080/Conference/readChart.jsp", map, "UTF-8");
System.out.println("页面为:\n"+temp);
}
public static String getJESSIONID() {
return JESSIONID;
}
public static void setJESSIONID(String jessionid) {
JESSIONID = jessionid;
}
}
发表评论
-
java socket服务器端与其他语言的通讯
2013-05-15 17:20 1020首先说下背景: 项目是一个物资计量系统,大致的1:ja ... -
JAVA多线程实现和应用总结
2012-09-13 08:09 1191最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟 ... -
navicat10.0.* 注册码
2012-09-06 21:17 1056NAVD-IO5R-4VGM-TIZD (试过英文版,有用) ... -
mysql error 1366
2012-09-06 20:56 922出现error1366,是字符集的问题,设置为gbk就好啦, -
Unbound classpath variable: 'M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar' in proje
2012-09-06 09:44 3822在用eclipse管理项目的时候,出现Unbound clas ... -
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
2012-08-27 13:25 1852java.net.SocketException: Unrec ... -
第三方类库
2012-08-27 09:27 873工程构建的时候应该具备的一些组件 -
weblogic手册
2012-08-14 08:12 1263重启weblogic 1、查看weblogic启动进程(节点1 ... -
iBATIS中statement ID命名冲突
2012-08-14 08:14 1681在用iBaTIS开发软件时,需要写很多sqlmap X ... -
eclips加载
2011-12-22 16:23 901eclips加载 web插件http://download.e ... -
一个struts2+json+jquery的问题
2011-05-18 11:17 1189问题比较简单,但是错乱的神经让我浪费啦一早晨. 1:配置环境 ... -
ibatis数组参数的设置
2011-05-17 22:39 2867<delete id="delete" ... -
自定义类型
2011-05-17 09:09 1167public class JsonNodeType exten ... -
风雨20年:我所积累的20条编程经验
2011-05-15 20:18 805原文作者乔纳森·丹尼 ... -
rmi
2011-05-15 19:54 828RmiMonitorService.java package ... -
ajax + struts2 + xml
2011-05-15 19:36 1083Jquery 发送ajax请求,action 或servlet ... -
关于多线程
2011-05-14 22:26 1070多线程和单线程的我个人认为,就是一个顺序的问题,,因为 ... -
注解POJO比不上使用配置文件的地方
2011-05-14 08:55 9511、跨数据库,POJO将无法公用 使用注解方式的POJO,将 ... -
hibernate in
2011-05-08 02:20 1307一个学科表(Field), ... -
在struts 2.0中,如何让<s:textfield> 不要换行?
2011-05-05 20:18 1214只要你将它的这个theme属性设成simple那么它就不会用S ...
相关推荐
在使用这个通用接口测试平台时,用户可能需要编写测试用例,定义请求的URL、HTTP方法(GET、POST、PUT、DELETE等)、请求头、参数和期望的响应。测试脚本通常会以结构化的形式(如YAML或JSON)存储,便于管理和维护...
### JMeter接口测试详解:HTTP接口请求 #### 一、基本概念与原理 在软件开发过程中,接口测试是一项重要的质量保证活动,它主要用于验证不同系统或模块之间交互的数据正确性。JMeter是一款开源的压力测试工具,它...
本主题将深入探讨Web服务的通用客户端和测试工具,特别关注Java环境中的实现。 1. **Web服务客户端**:Web服务客户端是使用Web服务的程序,它可以请求并接收服务端提供的功能。在Java中,JAX-WS(Java API for XML ...
6. **调试和测试**:用户可以通过反复调整参数和请求,进行功能测试、性能测试、压力测试等,以确保Web服务的正确性和稳定性。 7. **保存和导出**:一些高级的测试工具还支持保存测试用例,方便重复执行和团队共享...
RESTClient-全能HTTP请求模拟器-HTTP请求测试工具
需要注意的是,在选择测试步骤类型时,某些情况下只能选择特定的类型(如RESTTestRequest),而非通用的HTTP测试请求(HTTPTestRequest)。 在进行接口测试时,通常会涉及到发送HTTP请求到服务器,并检查返回的响应...
Web服务通用客户端和测试工具是开发和调试Web服务不可或缺的一部分。这些工具使得开发者能够方便地访问、测试和验证Web服务接口的功能,确保它们按照预期工作。 在Web服务的世界里,XML(eXtensible Markup ...
- **跨平台支持**:考虑到不同操作系统和语言环境,通用工具应考虑跨平台兼容性,例如使用Python的`requests`库或Node.js的`axios`库可以方便地处理HTTP请求。 5. **调试与测试**: - **Debug模式**:在软件开发...
标题中的“httpclient测试请求方法”指的是使用Apache HttpClient库进行HTTP请求的方法。HttpClient是一个功能强大的客户端编程工具包,它允许开发者构建复杂的HTTP客户端应用程序。在本文中,我们将深入探讨...
Httprunner作为一个通用测试框架,不仅适用于功能测试,还能够胜任性能测试、在线监控和持续集成等任务,大大提升了开发效率和测试覆盖率。 Httprunner的核心特性包括: 1. **易读易写的测试脚本**:通过YAML或...
在Spring MVC中,可以使用`MockMvc` API来模拟HTTP请求并测试控制器行为,而无需实际运行服务器。 `SSH` 框架组合了三个组件:Struts2作为前端控制器,Spring作为依赖注入容器,Hibernate作为持久层解决方案。在SSH...
Java编写的Webservice通用测试工具是一种实用的软件应用程序,它允许开发者和系统管理员方便地测试和验证Web服务接口的功能和性能。这个工具基于Java Swing框架构建,提供了图形用户界面(GUI),使得非程序员也能...
**Go-FBender:通用网络协议的负载测试命令行工具** Go-FBender是一个由Go语言编写的高效、轻量级的命令行工具,专门设计用于执行通用网络协议的负载测试。它允许用户对各种网络服务进行压力测试,评估其在高并发...
互联网开发工作中,经常需要一些辅助处理,例如:http接口访问测试,参数名排序/签名计算,加密解密,编码解码,替换短信验证的google验证器调试,js简单混淆,cmd指令程序运行,批量生成某种语句指令,生成RSA秘钥对,...
8. **并发测试**:对于更复杂的测试,可以考虑并行执行多个测试请求,以模拟多用户同时访问的情况,这样可以更准确地评估服务器在高负载下的性能。 9. **性能优化**:在编写测试代码时,应考虑性能优化,例如减少...
**TMemter:通用服务器程序压力测试工具** TMemter是一款专门为C++开发的服务器程序压力测试工具,其设计目标是模拟大规模并发用户请求,以此评估服务器在高负载环境下的性能和稳定性。在进行系统优化或者上线前的...
另外,Postman是一款强大的API测试工具,支持创建复杂的HTTP请求,查看响应数据,甚至自动化测试。 至于参考的类文件与lib,这些通常包含实现特定功能的代码库或库文件。例如,如果你在处理HTTP请求时使用了Python...