- 浏览: 270433 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 987首先说下背景: 项目是一个物资计量系统,大致的1:ja ... -
JAVA多线程实现和应用总结
2012-09-13 08:09 1154最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟 ... -
navicat10.0.* 注册码
2012-09-06 21:17 1018NAVD-IO5R-4VGM-TIZD (试过英文版,有用) ... -
mysql error 1366
2012-09-06 20:56 897出现error1366,是字符集的问题,设置为gbk就好啦, -
Unbound classpath variable: 'M2_REPO/antlr/antlr/2.7.6/antlr-2.7.6.jar' in proje
2012-09-06 09:44 3788在用eclipse管理项目的时候,出现Unbound clas ... -
Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
2012-08-27 13:25 1811java.net.SocketException: Unrec ... -
第三方类库
2012-08-27 09:27 851工程构建的时候应该具备的一些组件 -
weblogic手册
2012-08-14 08:12 1234重启weblogic 1、查看weblogic启动进程(节点1 ... -
iBATIS中statement ID命名冲突
2012-08-14 08:14 1654在用iBaTIS开发软件时,需要写很多sqlmap X ... -
eclips加载
2011-12-22 16:23 876eclips加载 web插件http://download.e ... -
一个struts2+json+jquery的问题
2011-05-18 11:17 1138问题比较简单,但是错乱的神经让我浪费啦一早晨. 1:配置环境 ... -
ibatis数组参数的设置
2011-05-17 22:39 2830<delete id="delete" ... -
自定义类型
2011-05-17 09:09 1125public class JsonNodeType exten ... -
风雨20年:我所积累的20条编程经验
2011-05-15 20:18 777原文作者乔纳森·丹尼 ... -
rmi
2011-05-15 19:54 794RmiMonitorService.java package ... -
ajax + struts2 + xml
2011-05-15 19:36 1062Jquery 发送ajax请求,action 或servlet ... -
关于多线程
2011-05-14 22:26 1038多线程和单线程的我个人认为,就是一个顺序的问题,,因为 ... -
注解POJO比不上使用配置文件的地方
2011-05-14 08:55 9271、跨数据库,POJO将无法公用 使用注解方式的POJO,将 ... -
hibernate in
2011-05-08 02:20 1282一个学科表(Field), ... -
在struts 2.0中,如何让<s:textfield> 不要换行?
2011-05-05 20:18 1182只要你将它的这个theme属性设成simple那么它就不会用S ...
相关推荐
通用接口测试平台,支持http请求返回的json、xml、文本格式的验证。python代码编写。支持跑完脚本后,发邮件通知。
RESTClient-全能HTTP请求模拟器-HTTP请求测试工具
互联网开发工作中,经常需要一些辅助处理,例如:http接口访问测试,参数名排序/签名计算,加密解密,编码解码,替换短信验证的google验证器调试,js简单混淆,cmd指令程序运行,批量生成某种语句指令,生成RSA秘钥对,...
Hurl非常通用:可用于获取数据和测试HTTP会话。 # Get home: GET https://example.net HTTP/1.1 200 [Captures] csrf_token: xpath "string(//meta[@name='_csrf_token']/@content)" # Do login! POST ...
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试...
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试操作流程预览...
实现一个通用的kettle消息推送,于是想到通过钉钉机器人推送消息到钉钉群组,这样就可以方便配置封装成通用的消息推送的映射子转换,实现后面作业或转换的消息提醒或者异常告警通知。已完成测试源代码分析
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试操作流程预览...
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试操作流程预览...
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试...
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试...
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试...
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试...
2.5.3 HTTP请求 2.5.4 HTTP应答 2.5.5 HTTP捕获 2.5.6 HTTP回放 2.6 安装 2.6.1 在Windows下安装LoadRunner 2.6.2 安装Load Generator 2.6.3 附加组件 2.6.4 LoadRunner License 2.7 LoadRunner性能测试...
HyperPacer Pro 2016,简称HPP2016,是一款轻巧实用的免费软件性能测试工具类产品,基于请求响应模型,支持多用户应用软件(采用通用HTTP、JDBC、TCP、WebService等交互协议)的功能、性能、接口等测试工作的自动化
一个通用的基准测试工具依赖于tornado基于epoll模块、异步httpclient、多进程和python绘图包matplotlib、numpy为matlab 2D图形的高性能网络框架的特性。 当前版本支持get和post的http协议,项目还在为通用协议的...
用的库比较通用,各个平台和各个版本的gcc应该都可以用 ## 目前测试过可用平台 > x86_64 debian11 > arm(s3c2440) linux2.26 ## 目前测试过可用编译器 > gcc10(x86) > gcc4(x86) > gcc8(arm) > gcc3(arm)
在的顶部构建的用于具有BDD风格的HTTP测试的验收测试框架。 不适用于BDD纯粹主义者。 工作正在进行中 特征 具有表达能力和多个别名的通用且可重复使用的步骤 全面的HTTP协议功能支持,包括身份验证,标头,Cookie...
测试工具类 http请求类、DB资源加载、JsonSchemaByFge、常用数据加工方法、DNS配置等待处理方法 数据管理 基于properties的数据管理、基于Excel的数据管理、基于Yaml的数据管理等 告警通知 Email通知、企业微信群...
规则集中的每个规则都加载到YAML文件中,该文件发出发出将触发这些规则的HTTP请求。 目标/用例包括: 通过使用持续集成并向WAF发出可重复的攻击来查找WAF部署中的回归为ModSecurity中的新规则提供测试框架,如果...