一、前言
最近需要測試一款手機游戲的性能,找不到啥錄制腳本的工具,然后,另外想辦法。性能測試實際上就是對服務器的承載能力的測試,和各種類型的手機客戶端沒有啥多大關系,手機再好,服務器負載不了,也不能夠運行,依照這個思路,測試該手游的性能就化為對服務器的性能測試,也就是服務器和手機客戶端所聯系的接口的測試。
如果是可以用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類啦,填寫上相關的參數就可以啦。
測試不到一年,對性能啥的理解還不是太深,各位大神不要較真~~~~
