摘要:文件引入請(qǐng)求工具工具發(fā)送請(qǐng)求,參數(shù)是開(kāi)始請(qǐng)求參數(shù)創(chuàng)建對(duì)象創(chuàng)建對(duì)象配置請(qǐng)求參數(shù)設(shè)置參數(shù)和請(qǐng)求方式解決中文亂碼問(wèn)題執(zhí)行請(qǐng)求異常請(qǐng)求參數(shù),異常信息結(jié)束請(qǐng)求參數(shù)返回?cái)?shù)據(jù)異步執(zhí)行請(qǐng)求和并發(fā)測(cè)試異步執(zhí)行請(qǐng)求執(zhí)行并返回結(jié)果模擬并發(fā)測(cè)試模擬并發(fā)
POM文件引入httpclient
http 請(qǐng)求工具org.apache.httpcomponents httpclient 4.5.3
package com.raytoo.common.toolbox.http; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * http 工具 */ public class HttpTool { private static Logger logger = LoggerFactory.getLogger(HttpTool.class); private static String ENCODING = "UTF-8"; private static String CONTENT_TYPE = "application/json"; /** * 發(fā)送POST請(qǐng)求,參數(shù)是JSON */ public static String requestPost(String url, String jsonParam){ logger.info("HttpTool.requestPost 開(kāi)始 請(qǐng)求url:" + url + ", 參數(shù):" + jsonParam); //創(chuàng)建HttpClient對(duì)象 CloseableHttpClient client = HttpClients.createDefault(); //創(chuàng)建HttpPost對(duì)象 HttpPost httpPost = new HttpPost(url); //配置請(qǐng)求參數(shù) RequestConfig requestConfig = RequestConfig.custom() .setCookieSpec(CookieSpecs.DEFAULT) .setExpectContinueEnabled(true) .setSocketTimeout(5000) .setConnectTimeout(5000) .setConnectionRequestTimeout(5000) .build(); httpPost.setConfig(requestConfig); String respContent = null; //設(shè)置參數(shù)和請(qǐng)求方式 StringEntity entity = new StringEntity(jsonParam,ENCODING);//解決中文亂碼問(wèn)題 entity.setContentEncoding(ENCODING); entity.setContentType(CONTENT_TYPE); httpPost.setEntity(entity); HttpResponse resp; try { //執(zhí)行請(qǐng)求 resp = client.execute(httpPost); if(resp.getStatusLine().getStatusCode() == 200) { HttpEntity responseObj = resp.getEntity(); respContent = EntityUtils.toString(responseObj,"UTF-8"); } } catch (IOException e) { e.printStackTrace(); logger.info("HttpTool.requestPost 異常 請(qǐng)求url:" + url + ", 參數(shù):" + jsonParam + ",異常信息:" + e); } logger.info("HttpTool.requestPost 結(jié)束 請(qǐng)求url:" + url + ", 參數(shù):" + jsonParam + ""); //返回?cái)?shù)據(jù) return respContent; } }異步執(zhí)行HTTP請(qǐng)求和并發(fā)測(cè)試demo
package com.raytoo.common.toolbox.http; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; /** * 異步執(zhí)行HTTP請(qǐng)求 */ public class HttpCallable implements Callable{ private String url; private String jsonParams; public HttpCallable(String url, String jsonParams){ this.url = url; this.jsonParams = jsonParams; } /** * 執(zhí)行并返回結(jié)果 */ @Override public String call() throws Exception { return HttpTool.requestPost(url, jsonParams); } /** * 模擬并發(fā)測(cè)試 */ public static void main(String[] args) throws InterruptedException, ExecutionException { //模擬并發(fā)數(shù) int concurrencyNumber = 1000; List resList = Lists.newArrayList(); //執(zhí)行線程池 ExecutorService ex = Executors.newFixedThreadPool(100); String url = "www.baidu.com"; Map mapPatam = new HashMap<>(); mapPatam.put("name", "測(cè)試"); for(int i =0 ; i< concurrencyNumber; i++){ Future callRes = ex.submit(new HttpCallable(url, JSON.toJSONString(mapPatam))); resList.add(i + ">>>" + callRes.get()); } for(String s : resList){ System.out.println("------>" + s); } } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/67305.html
摘要:最近在維護(hù)一個(gè)三年前的舊代碼,用的是框架。單元測(cè)試和語(yǔ)言并發(fā)控制實(shí)際上是個(gè)蛋疼的問(wèn)題,夸張一點(diǎn)說(shuō),當(dāng)時(shí)的并不能特別輕松地實(shí)現(xiàn)并發(fā),甚至不能實(shí)現(xiàn)并發(fā)。語(yǔ)言的功能之一就是自帶單元測(cè)試。用語(yǔ)言之前,我的習(xí)慣是不寫單元測(cè)試。 最近在維護(hù)一個(gè)三年前的舊代碼,用的是laravel框架。 從某些方面來(lái)講,這個(gè)代碼算是比較標(biāo)準(zhǔn)為了實(shí)現(xiàn)在規(guī)定的時(shí)間內(nèi)完成相關(guān)功能,同時(shí)程序員水平不高、經(jīng)過(guò)大量?jī)?yōu)化之后,變...
摘要:吞吐量一般結(jié)合業(yè)務(wù)需求而定服務(wù)器資源占用占用率內(nèi)存使用率命中率篇是一種預(yù)測(cè)系統(tǒng)行為和性能的負(fù)載測(cè)試工具。負(fù)載測(cè)試與壓力測(cè)試都是性能測(cè)試。通過(guò)平臺(tái)接口可進(jìn)行合理的性能測(cè)試。有利于測(cè)試人員及時(shí)定位問(wèn)題。 Part 1:性能測(cè)試 性能測(cè)試是通過(guò)自動(dòng)化的測(cè)試工具模擬多種正常、峰值以及異常負(fù)載條件來(lái)對(duì)系統(tǒng)的各項(xiàng)性能指標(biāo)進(jìn)行測(cè)試。 A. 類別 性能測(cè)試包括負(fù)載測(cè)試、壓力測(cè)試、基準(zhǔn)測(cè)試等。 i. 負(fù)...
摘要:我們公司某團(tuán)隊(duì)開(kāi)發(fā)了一個(gè)服務(wù),現(xiàn)在我接到任務(wù),要測(cè)試這個(gè)服務(wù)在高并發(fā)訪問(wèn)場(chǎng)景下的性能指標(biāo),比如萬(wàn)個(gè)請(qǐng)求同時(shí)到來(lái)后,每個(gè)請(qǐng)求的平均響應(yīng)時(shí)間,因此我選擇了這個(gè)好用的工具來(lái)模擬高并發(fā)請(qǐng)求。創(chuàng)建,主要用途當(dāng)然是顯示測(cè)試結(jié)果了。 For project reason I have to measure the performance of OData service being accessed...
摘要:可靠性測(cè)試或稱穩(wěn)定性測(cè)試,健壯性測(cè)試。分析診斷和調(diào)節(jié)階段主要測(cè)量系統(tǒng)性能并使負(fù)載測(cè)試進(jìn)入下一級(jí)別,重點(diǎn)查找問(wèn)題原因以幫助開(kāi)發(fā)工程師迅速解決問(wèn)題,并實(shí)時(shí)調(diào)節(jié)系統(tǒng)參數(shù)以提高性能。 ...
閱讀 1844·2021-10-13 09:39
閱讀 1397·2019-08-30 13:58
閱讀 1492·2019-08-29 16:42
閱讀 3628·2019-08-29 15:41
閱讀 3050·2019-08-29 15:11
閱讀 2670·2019-08-29 14:10
閱讀 3499·2019-08-29 13:29
閱讀 2156·2019-08-26 13:27