晕要发到博客上频道的怎么发到了这里。。。管理员能帮忙移动一下吗
會議系統的优化有了改进,谢谢大家的建议,同时分享一下我写的http通用请求测试工具。保持session是这类测试工具的难点,因为你要进行一系列的操作,比如登录---建立会议---删除会议---登出,你每次请求都要保证你hold住前一次请求的sessionId,我这里是用cookie 携带上一次访问的sessionId, 分享一下我做的通用http请求测试工具,可以自己携带参数比如用户名,密码等等,封装到Map中。
以下可以模拟单线程请求。还可以改装一下,变成多线程的并发,可以分析每次的返回结果,测试时间和返回码(200or404?).
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import com.avonaco.testPojo.GeneralUrlResult;
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;
}
}