Jmeter自定義編寫Java代碼調用socket通信


 一、前言

最近需要測試一款手機游戲的性能,找不到啥錄制腳本的工具,然后,另外想辦法。性能測試實際上就是對服務器的承載能力的測試,和各種類型的手機客戶端沒有啥多大關系,手機再好,服務器負載不了,也不能夠運行,依照這個思路,測試該手游的性能就化為對服務器的性能測試,也就是服務器和手機客戶端所聯系的接口的測試。

如果是可以用HTTP調用的,那樣很好解決,直接帶上地址參數就OK,開始一兩個很順利,設計參數化了一下數據就很順利的解決,然后,遇到了一個切換場景的接口,用的是socket通信,再用上述方法貌似不可行,然后偶很懶,所以折騰了一天,結果,還是沒有找到好的辦法,無奈,想到了Jmeter可以調用java請求,只好到開發那邊拿到協議,通過自定義編寫java代碼來實現socket通信,連接成功,返回數據成功。順便說一句,Jmeter真是居家旅行必備~~~~

 首先,Jmeter使用自定義編寫代碼的步驟:http://www.cnblogs.com/linglingyuese/articles/linglingyuese-two.html

二、代碼

SocketClient.java類

package app;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;

public class SocketClient {
    
    public boolean sendMessage(String ipAddress,int port,String data){
        try {
            Socket socket=new Socket(ipAddress,port);
            DataInputStream  input=new DataInputStream(socket.getInputStream());
            DataOutputStream output = new DataOutputStream(socket.getOutputStream());
            
            byte[] message=data.getBytes("UTF-8");
            
            //獲得長度
            int length=message.length;
            
            message[0] = (byte) 0x00;
            message[length-1] = (byte) 0xff;
            
            output.write(message);
            output.flush();
            System.out.println(message);
            Thread.sleep(1000);
            if (!socket.isClosed() && socket.isConnected()) {
                byte[] cbuf=new byte[8096];
                input.read(cbuf);
                System.out.println("讀取到的是:"+cbuf);
                String responseLine=new String(cbuf);  
                System.out.println(responseLine+"===========");
            }
            output.close();
            input.close();
            
            socket.close();
            
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}

TestScence.java類

 

package app;

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;

public class TestScence extends AbstractJavaSamplerClient {
    
    private SampleResult results;
    
    private String ipAddress;
    
    private String port;
    
    private String data;

    /**
     * 初始化方法
     */
    public void setupTest(JavaSamplerContext jsc) {
        results = new SampleResult();
        
        ipAddress = jsc.getParameter("ipAddress", "");
        port = jsc.getParameter("port", "");
        data = jsc.getParameter("data", "");
        
        if (ipAddress != null && ipAddress.length() > 0){
            results.setSamplerData(ipAddress);
        }
        
        if (port != null && port.length() > 0){
            results.setSamplerData(port);
        }
        
        if (data != null && data.length() > 0){
            results.setSamplerData(data);
        }

    }
    
    /**
     * 設置傳入參數
     */
    public Arguments getDefaultParameters() {
        Arguments params = new Arguments();
        
        params.addArgument("ipAddress", "");
        params.addArgument("port", "");
        params.addArgument("data", "");
        
        
        return params;
    }

    /**
     * 線程運行體
     */
    public SampleResult runTest(JavaSamplerContext arg0) {
        SocketClient sc = new SocketClient();
        
        int port2 = 50001;
        
        if (port != null && port.length() > 0){
            port2 = Integer.parseInt(port);
        }
        
        results.sampleStart();
        
        boolean flag = sc.sendMessage(ipAddress, port2, data);
        
        results.sampleEnd();
        
        if (flag){
            results.setSuccessful(true);
        }else{
            results.setSuccessful(false);
        }
        
        return results;
    }

    /**
     * 結束方法
     */
    public void teardownTest(JavaSamplerContext arg0) {

    }

}

 

三、導出為可以使Jmeter讀取的jar包

在項目的根節點,右擊選擇【Export】,選擇java下面的【JAR file】 

然后一直點擊下一步即可。

將導出的jar包放到如下目錄:\apache-jmeter-2.9\lib\ext,然后重新啟動Jmeter啊,新建java請求,就可以看到你剛剛寫的java類啦,填寫上相關的參數就可以啦。

測試不到一年,對性能啥的理解還不是太深,各位大神不要較真~~~~


免責聲明!

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



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