Java接口多線程並發測試 (一)


本文為作者原創,禁止轉載,違者必究法律責任!!!

本文為作者原創,禁止轉載,違者必究法律責任!!!

Java接口多線程並發測試

一,首先寫一個接口post 請求代碼:

import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.client.methods.CloseableHttpResponse;
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;


public class postRequest {
        
    public static void postRequestTest(String para1, String para2, String para3 ) throws Exception {
        long begaintime = System.currentTimeMillis();//開始系統時間
        CloseableHttpClient httpclient = HttpClients.createDefault();
        
        
        String url = "https://www.baidu.com";
        HttpPost httpPost = new HttpPost(url);// 創建httpPost   
        httpPost.setHeader("Authorization", "Bearer  qwertyu12345678zxcvbnm");
        httpPost.setHeader("Content-Type", "application/json");
        httpPost.setHeader("time", "11234567890");
        httpPost.setHeader("X-Accept-Locale", "zh_CN");

        //添加 body 參數
        String orderToken = postRequest1(para1);  //從上一個接口的返回數據里面獲取參數
        String body = String.format("{\"Name\":\"%s\",\"age\":\"%s\",\"address\":\"%s\"}", para2, para3,orderToken);
        
        httpPost.setEntity(new StringEntity(body));
        
        //設置 params 參數-------------設置了body就不能再設置params
        //String params = "";
        //String charSet = "UTF-8";
        //StringEntity entity = new StringEntity(params, charSet);
        //httpPost.setEntity(entity);  
        
        CloseableHttpResponse response = null;       
        try {            
            response = httpclient.execute(httpPost);
            StatusLine status = response.getStatusLine();
            int state = status.getStatusCode();
            if (state == HttpStatus.SC_OK) {
                HttpEntity responseEntity = response.getEntity();
                String jsonString = EntityUtils.toString(responseEntity);
                System.out.println("TakegoOrder 接口請求成功");
                //return jsonString;
                System.out.println(jsonString);
                if(jsonString.contains("\"success\":true")&&jsonString.contains("\"time\":\"2018")){
                    System.out.println("成功查詢!!!!");
                }else {
                    System.err.println("查詢失敗!!----"+body);
                }

            }
            else{
                 System.err.println("請求返回:"+state+"("+url+")");
            }
        }
        finally {
            if (response != null) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            try {
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            long endTime = System.currentTimeMillis(); //結束時間
            System.out.println("  接口請求耗時 : "+(endTime-begaintime));
        }
        //return null;
    }

二,再寫一個 MyThread 類 繼承Runnable 接口

import java.util.concurrent.CountDownLatch;

public class MyThread implements Runnable {
    
    private String para1;
    private String para2;
    private String para3;
    private CountDownLatch countDownLatch;  //多線程結束后,執行后面的代碼(計算時間、數量)
    
    public MyThread(String para1, String para2, String para3, CountDownLatch countDownLatch) {
        this.para1 = para1;
        this.para2 = para2;
        this.para3 = para3;
        this.countDownLatch = countDownLatch;
    }

    public void run() {
        
        try{            
            postRequest.postRequestTest(para1, para2, para3);          
        }catch(Exception e){
            e.printStackTrace();
        }finally {
            countDownLatch.countDown();
        }
    }
    

}

三,寫一個test 類的main方法來執行多線程並發

public class Test {
    
    
    public static void main(String[] args) throws InterruptedException {
        
        long begaintime = System.currentTimeMillis();//開始系統時間

        //線程池
        ExecutorService pool = Executors.newCachedThreadPool();
        //設置集合點為93
        final int count = 50; 
        CountDownLatch countDownLatch = new CountDownLatch(count);//與countDownLatch.await();實現運行完所有線程之后才執行后面的操作
        //final CyclicBarrier barrier = new CyclicBarrier(count);  //與barrier.await() 實現並發;
        //創建100個線程
        for(int i = 0; i < count; i++){

            MyThread target = new MyThread("para1", "para2", "para3", countDownLatch);
            //barrier.await();
            pool.execute(target);
        }
        
        pool.shutdown();
        try {
            countDownLatch.await();  //這一步是為了將全部線程任務執行完以后,開始執行后面的任務(計算時間,數量)
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        long endTime = System.currentTimeMillis(); //結束時間
        System.out.println(count + " 個  接口請求總耗時 : "+(endTime-begaintime)+"-----平均耗時為"+ ((endTime-begaintime)/count));
    }

}

本文為作者原創,禁止轉載,違者必究法律責任!!!

本文為作者原創,禁止轉載,違者必究法律責任!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM