国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用HttpClient模擬并發請求 - 壓力測試

Charlie_Jade / 1602人閱讀

摘要:文件引入請求工具工具發送請求,參數是開始請求參數創建對象創建對象配置請求參數設置參數和請求方式解決中文亂碼問題執行請求異常請求參數,異常信息結束請求參數返回數據異步執行請求和并發測試異步執行請求執行并返回結果模擬并發測試模擬并發

POM文件引入httpclient

        
            org.apache.httpcomponents
            httpclient
            4.5.3
        
http 請求工具
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";
    
    /**
     * 發送POST請求,參數是JSON
     */
    public static String requestPost(String url, String jsonParam){
        logger.info("HttpTool.requestPost 開始 請求url:" + url + ", 參數:" + jsonParam);
        //創建HttpClient對象
        CloseableHttpClient client = HttpClients.createDefault();
        //創建HttpPost對象
        HttpPost httpPost = new HttpPost(url);
        
        //配置請求參數
        RequestConfig requestConfig = RequestConfig.custom()
                .setCookieSpec(CookieSpecs.DEFAULT)
                .setExpectContinueEnabled(true)
                .setSocketTimeout(5000)  
                .setConnectTimeout(5000)  
                .setConnectionRequestTimeout(5000)  
                .build();
        
        httpPost.setConfig(requestConfig);
        
        String respContent = null;
            
        //設置參數和請求方式
        StringEntity entity = new StringEntity(jsonParam,ENCODING);//解決中文亂碼問題    
        entity.setContentEncoding(ENCODING);    
        entity.setContentType(CONTENT_TYPE);  
        
        httpPost.setEntity(entity);
            
        HttpResponse resp;
        try {
            //執行請求
            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 異常 請求url:" + url + ", 參數:" + jsonParam + ",異常信息:" + e);
        }
        logger.info("HttpTool.requestPost 結束 請求url:" + url + ", 參數:" + jsonParam + "");
        //返回數據
        return respContent;
    }
}
異步執行HTTP請求和并發測試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;

/**
 * 異步執行HTTP請求
 */
public class HttpCallable implements Callable {
    
    private String url;
    
    private String jsonParams;
    
    public HttpCallable(String url, String jsonParams){
        this.url = url;
        this.jsonParams = jsonParams;
    }

    /**
     * 執行并返回結果
     */
    @Override
    public String call() throws Exception {
        return HttpTool.requestPost(url, jsonParams);
    }
    
    /**
     * 模擬并發測試
     */
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        //模擬并發數
        int concurrencyNumber = 1000;
        
        List  resList = Lists.newArrayList();
        
        //執行線程池
        ExecutorService ex = Executors.newFixedThreadPool(100);
        
        String url = "www.baidu.com";
        Map mapPatam = new HashMap<>();
        mapPatam.put("name", "測試");
        
        
        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);
        }
    }

}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67305.html

相關文章

  • 三年前舊代碼的重構、總結與反思

    摘要:最近在維護一個三年前的舊代碼,用的是框架。單元測試和語言并發控制實際上是個蛋疼的問題,夸張一點說,當時的并不能特別輕松地實現并發,甚至不能實現并發。語言的功能之一就是自帶單元測試。用語言之前,我的習慣是不寫單元測試。 最近在維護一個三年前的舊代碼,用的是laravel框架。 從某些方面來講,這個代碼算是比較標準為了實現在規定的時間內完成相關功能,同時程序員水平不高、經過大量優化之后,變...

    Shihira 評論0 收藏0
  • 論性能測試

    摘要:吞吐量一般結合業務需求而定服務器資源占用占用率內存使用率命中率篇是一種預測系統行為和性能的負載測試工具。負載測試與壓力測試都是性能測試。通過平臺接口可進行合理的性能測試。有利于測試人員及時定位問題。 Part 1:性能測試 性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。 A. 類別 性能測試包括負載測試、壓力測試、基準測試等。 i. 負...

    qpal 評論0 收藏0
  • 如何使用jMeter對某個OData服務進行高并發性能測試

    摘要:我們公司某團隊開發了一個服務,現在我接到任務,要測試這個服務在高并發訪問場景下的性能指標,比如萬個請求同時到來后,每個請求的平均響應時間,因此我選擇了這個好用的工具來模擬高并發請求。創建,主要用途當然是顯示測試結果了。 For project reason I have to measure the performance of OData service being accessed...

    qylost 評論0 收藏0
  • 軟件測試基礎——非功能測試入門

    摘要:可靠性測試或稱穩定性測試,健壯性測試。分析診斷和調節階段主要測量系統性能并使負載測試進入下一級別,重點查找問題原因以幫助開發工程師迅速解決問題,并實時調節系統參數以提高性能。 ...

    Zachary 評論0 收藏0

發表評論

0條評論

Charlie_Jade

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<