Jmeter 使用-JAVA請求


1.jmeter測試腳本,有兩種方式。

  • 實現JavaSamplerClient接口
  • 繼承AbstractJavaSamplerClient抽象類

本次使用實現JavaSamplerClient接口方式

2.如圖,需要重寫四個方法

@Override
    public void setupTest(JavaSamplerContext javaSamplerContext) {
        
    }

    @Override
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        return null;
    }

    @Override
    public void teardownTest(JavaSamplerContext javaSamplerContext) {

    }

    @Override
    public Arguments getDefaultParameters() {
        return null;
    }
setupTest 啟動時,需要做的處理
getDefaultParameters 傳參
runTest方法體
teardownTest結束時,需要做的處理

 3.因為需要在jmeter中進行參數化,所以需要getDefaultParameters 方法進行傳參

    // 這個方法是用來自定義java方法入參的。
    // params.addArgument("applyAmount", "966100000000");表示入參名字叫applyAmount,默認值為966100000000。
    //設置可用參數及它的默認值;
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        params.addArgument("applyAmount", "966100000000");
        return params;
    }

  左側是代碼中參數獲取,右側是jmeter頁面輸入參數

 

4.runTest中進行業務的代碼實現或者調用實現方法即可

 //開始測試,從javaSamplerContext參數可以獲得參數值;
    public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
        String applyAmount = javaSamplerContext.getParameter("applyAmount");
        String url = "http://172.28.38.81:40505/czCredit/v1/repaychargeplan/repayTrial";
        System.out.println("[Test Case] url = " + url);
        // 必填
        String productCode="A3";                                //產品編碼 信貸核心表product_term.loan_product_code
        String applyDate="2018-08-13";                            //申請日期
        //選填
        String buyInsurance="1";                                //是否購買保險 1是 0否
        String channelCode="O20170809100414";                   //渠道編碼

        Map<String,Object> paraMap = new HashMap<String, Object>();
        paraMap.put("productCode",productCode);
        paraMap.put("applyDate",applyDate);
        paraMap.put("applyAmount",applyAmount);
        paraMap.put("buyInsurance",buyInsurance);
        paraMap.put("channelCode",channelCode);
        System.out.println("[request Data]請求參數 paraMap = " + JSONObject.toJSONString(paraMap));

        Map<String, String> headers = new HashMap<String, String>();
        headers.put("appId", "100");
        headers.put("t",t);
        headers.put("X-Real-IP","127.0.0.1");

        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        // 構造 Header
        Iterator i$ = headers.keySet().iterator();
        while (i$.hasNext()) {
            String header = String.valueOf(i$.next());
            httpPost.setHeader(header, String.valueOf(headers.get(header)));
        }
        // 構造 Body
        Iterator t$ = paraMap.keySet().iterator();
        while (t$.hasNext()) {
            String body = String.valueOf(t$.next());
            httpPost.setHeader(body, String.valueOf(paraMap.get(body)));
        }
        String signBodyData = HttpUtils.getSignMap(t, paraMap);
        StringEntity requestEntity = new StringEntity(signBodyData, Consts.UTF_8);
        httpPost.setEntity(requestEntity);

        CloseableHttpResponse httpResponse = null;
        String responseString = null;
        String responseMessage = null;
        String status = null;
        String info = null;
        String result = null;
        SampleResult sampleResult = new SampleResult();

        try {
            httpResponse = httpClient.execute(httpPost);
            HttpEntity responseEntity = httpResponse.getEntity();
            if (responseEntity != null && SC_OK == httpResponse.getStatusLine().getStatusCode()) {
                responseString = EntityUtils.toString(responseEntity, Charset.forName("UTF-8"));
                System.out.println("[Test Case] responseString = " + responseString);
                responseMessage = String.valueOf(JSONPath.eval(JSON.parseObject(responseString),"$message"));
                System.out.println("[Test Case] responseMessage = " + responseMessage);
                info = String.valueOf(JSONPath.eval(JSON.parseObject(responseString),"$info"));
                System.out.println("[Test Case] responseMessage = " + info);
                status = String.valueOf(JSONPath.eval(JSON.parseObject(responseString),"$status"));
                System.out.println("[Test Case] status = " + status);
                result = String.valueOf(JSONPath.eval(JSON.parseObject(responseString),"$result"));
                System.out.println("[Test Case] result = " + result);
            }
            EntityUtils.consume(requestEntity);
            EntityUtils.consume(responseEntity);
            httpResponse.close();
            httpClient.close();

            sampleResult.setSampleLabel(getClass().getName());  //設置標簽
            sampleResult.sampleStart();
            sampleResult.setResponseCode(String.valueOf(httpResponse.getStatusLine().getStatusCode())); //設置響應碼
            sampleResult.setResponseMessage(responseMessage);   //設置響應信息
            sampleResult.setResponseData(responseString,"utf-8");//設置響應數據
            sampleResult.setSamplerData(paraMap.toString());//設置請求參數
            sampleResult.setDataType(SampleResult.TEXT);//設置數據類型
            if("0000".equals(status) && "success".equals(info) && null != result){
                sampleResult.setSuccessful(true);//設置結果成功
            }else{
                sampleResult.setSuccessful(false);//設置結果成功
            }
        }catch (Exception e){
            sampleResult.setSuccessful(false);
            sampleResult.setResponseMessage(e.toString());
            e.printStackTrace();
        }finally {
            sampleResult.sampleEnd();
            System.out.println("[Test Case] 接口 " + getClass().getName() + " 測試完畢.");
        }
        return sampleResult;
    }

  

5.代碼寫好后,將代碼進行打包操作,輸出jar包,具體操作如下:

1)右鍵點擊工程,選擇open Module Settings,進入頁面

 

 2)選擇Artifacts->JAR->From modules with dependencies

 3)彈出對話框,點擊OK,頁面顯示jar包的輸出路徑。點擊OK,配置完成

4)在idea菜單欄,點擊Build->BuildArtifacts->

5)到指定路徑 即可獲取jar包

6)jmeter添加java請求

 給jmeter指定jar包路徑:進入jmeter/bin下,找到jmeter.properties文件,修改search_paths參數,參數值為jar包所在路徑,可以配置多個,用;隔開,如圖

 創建線程組->創建Java請求->在jira請求中選擇類名稱,如圖,添加參數->生成腳本

7)linux上執行腳本

a.linux上安裝jmeter

   將windows上的zip包直接放到linux上

   進入bin目錄,chmod 777 jmeter

   修改環境變量:  

# vim /etc/profile
export PATH=/opt/apache-jmeter-3.3/bin/:$JAVA_HOME/bin:$PHP_HOME/bin:$PATH

# source /etc/profile 使改動生效 

b.在linux的jmeter中導入jar包,執行命令:

腳本執行命令:jmeter -n -t /opt/jmx/push5000.jmx -l log.jtl

-n 非 GUI 模式 -> 在非 GUI 模式下運行 JMeter

-t 測試文件 -> 要運行的 JMeter 測試腳本文件
-l 日志文件 -> 記錄結果的文件
注意:
jmeter需要jdk1.8以上版本,否則執行腳本命令時,會報錯:
Error: Java version is too low to run JMeter. Needs at least Java >= 1.8.0.
解決辦法:
升級即可

 


免責聲明!

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



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