背景:可能在做定義化的要求上,jmeter原有的jar包,已經不能滿足我們,就需要自己寫一個方法,以下就是寫入的一個模擬post的請求,在jmeter中使用的案例
一:寫代碼
1.代碼中的有兩個包,原諒我取名字取的cuo,第一個包名,com.databasecomputer這個包下有一個addcomputerinfo這個類,com.jmeter包下有httpcientPost這個類
com.jmeter.httpcientPost 一個post請求,是登錄請求,打印的是code碼和登錄后的信息
package com.jemeter; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; public class httpclientPost { public static int sendpost() throws ClientProtocolException, IOException { CloseableHttpClient httpclient = HttpClients.createDefault(); HttpPost post = new HttpPost("https://user.XXX.com/m-users-a-act_sign.htm?pipeline=xx"); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("email", "zhang1@qq.com")); params.add(new BasicNameValuePair("password", "zhangjun123")); post.setEntity(new UrlEncodedFormEntity(params)); CloseableHttpResponse response2 = httpclient.execute(post); int code = response2.getStatusLine().getStatusCode(); HttpEntity http = response2.getEntity(); InputStream instreams = http.getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(instreams)); StringBuffer buffer = new StringBuffer(); String line; while ((line = reader.readLine()) != null) { buffer.append(line + "br "); } reader.close(); System.out.println(code +" respones:"+buffer); return code; } }
com.databasecomputer.addcomputerinfo 以下就是調用,並且調用事務
package com.databasecomputer; import java.io.IOException; import org.apache.http.client.ClientProtocolException; 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; import com.jemeter.httpclientPost; public class addcomputerInfo extends AbstractJavaSamplerClient { public SampleResult runTest(JavaSamplerContext arg0) { // TODO Auto-generated method stub SampleResult result=new SampleResult(); result.sampleStart(); //事務啟動 try { int responeCode=httpclientPost.sendpost(); if (responeCode==200) { result.setSuccessful(true); }else { result.setSuccessful(false); } } catch (ClientProtocolException e) { result.setSuccessful(false); // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block result.setSuccessful(false); e.printStackTrace(); } result.sampleEnd();//事務關閉 return result; } public static void main(String[] args) { new addcomputerInfo().runTest(new JavaSamplerContext(new Arguments())); } }
運行打印code碼,返回登錄成功,注意:在運行時,要導入jmeter的jar包,不然運行會報錯,然后我就是不知道導入哪些包,出錯一個問題,就導入相應的包,但是發現效率很低,干脆全部導入了
導包的過程,導入的是jmeter下lib的所有jar文件
二、打包
代碼調試沒有問題,就打包生成jar文件,生成文件可以用maven命令生成,也可以使用項目自己生成
生成文件為postdemo,文件路徑是在jmeter下的lib/ext文件夾下
三、jmeter使用
注:如果生成jar成功,在啟動jmeter中會去查找到這個方法名,自己加載出來,我在線程組中設置了10次
點擊運行,控制台顯示
運行的次數
說明調用jar成功