使用loadrunner,進(jìn)行壓力測(cè)試,有比較詳細(xì)的測(cè)試結(jié)果,
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比鎮(zhèn)原網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式鎮(zhèn)原網(wǎng)站制作公司更省心,省錢(qián),快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋鎮(zhèn)原地區(qū)。費(fèi)用合理售后完善,十多年實(shí)體公司更值得信賴。
就是配置和使用loadrunner比較麻煩,不過(guò)網(wǎng)上有詳細(xì)的教程,去下載一個(gè)吧,
自己寫(xiě)循環(huán)去測(cè)試,極不準(zhǔn)確
Java編程下用JMeter Java Sampler進(jìn)行多接口性能測(cè)試,使用方法如下:
/**?
*JMeter?Java?Sampler介紹
*setupTest做些初始化的工作,每個(gè)線程只執(zhí)行一次
*teardownTest做些清理工作,每個(gè)線程只執(zhí)行一次
*runTest具體的測(cè)試執(zhí)行工作,每個(gè)并發(fā)每次循環(huán)都將執(zhí)行一次
**/
//繼承AbstractJavaSamplerClient
public?class?hessianTest?extends?AbstractJavaSamplerClient{
//hessian調(diào)用地址
private?static?String?url?=?"";
MyService?collect?=?null;
HessianProxyFactory?factory?=?new?HessianProxyFactory();
public?int?id;
@Override
public?void?setupTest(JavaSamplerContext?arg0)?{
//獲取jmeter傳入?yún)?shù)
id=arg0.getIntParameter("id");
try?{
collect?=?(MyService)?factory.create(
MyService.class,?url);
}?catch?(MalformedURLException?e)?{
e.printStackTrace();
}
}
@Override
public?SampleResult?runTest(JavaSamplerContext?arg0)?{
SampleResult?sp?=?new?SampleResult();
sp.sampleStart();
User?rt?=?null;
try?{
rt?=?collect.getUser(id);
}?catch?(Exception?e)?{
sp.sampleEnd();
sp.setSuccessful(false);
return?sp;
}
sp.sampleEnd();
if(rt.getId()==id)
sp.setSuccessful(true);
else
sp.setSuccessful(false);
return?sp;
}
@Override
public?void?teardownTest(JavaSamplerContext?context)?{
super.teardownTest(context);
}
}
我們?cè)谧鲂阅軠y(cè)試時(shí),有時(shí)需要自己編寫(xiě)測(cè)試腳本,很多測(cè)試工具都支持自定義編寫(xiě)測(cè)試腳本,比如LoadRunner就有很多自定義腳本的協(xié)議,比如"C Vuser","Java Vuser"等協(xié)議.同樣,Jmeter也支持自定義編寫(xiě)的測(cè)試代碼,不過(guò)與LoadRunner不同的是,Jmeter沒(méi)有自帶編譯器,需要借助第三方編譯器才能實(shí)現(xiàn).下面舉一個(gè)簡(jiǎn)單的Java自定義測(cè)試代碼例子,使用Java編譯器編寫(xiě)測(cè)試代碼(Java編譯器可以用Eclipse,JBulider等),實(shí)現(xiàn)功能為:在測(cè)試前輸入任意一個(gè)字符串,然后判斷該字符串的長(zhǎng)度是否大于5,如果大于則測(cè)試結(jié)果成功,否則測(cè)試結(jié)果位失敗,然后在放到Jmeter中模擬10個(gè)用戶測(cè)試,同時(shí)運(yùn)行這段代碼,具體實(shí)現(xiàn)如下:
1.打開(kāi)Java編譯器,新建一個(gè)項(xiàng)目"TestLength",然后新建一個(gè)包"app".
2.從Jmeter的安裝目錄lib/ext中拷貝兩個(gè)文件"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到"Tester"的項(xiàng)目中,然后引入這兩個(gè)JAR文件.(具體的引入方法參考各個(gè)Java編譯器的使用方法)
3.在"app"包中新建一個(gè)類,名字叫"TestLength",不過(guò)這個(gè)類要繼承"AbstractJavaSamplerClient"類,如果項(xiàng)目引入步驟二中的兩個(gè)文件,就可以找到"AbstractJavaSamplerClient"類了.
4."TestLength"類在繼承"AbstractJavaSamplerClient"類的同時(shí)也會(huì)繼承四個(gè)方法,分別是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于設(shè)置傳入的參數(shù);"setupTest"方法為初始化方法,用于初始化性能測(cè)試時(shí)的每個(gè)線程."runTest"方法為性能測(cè)試時(shí)的線程運(yùn)行體;"teardownTest"方法為測(cè)試結(jié)束方法,用于結(jié)束性能測(cè)試中的每個(gè)線程.
5.具體實(shí)現(xiàn)代碼如下:
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;
import com.passpod.core.t8.*;
/**
* @author樂(lè)以忘憂
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class TestLength extends AbstractJavaSamplerClient{
private SampleResult results;
private String testStr;
//初始化方法,實(shí)際運(yùn)行時(shí)每個(gè)線程僅執(zhí)行一次,在測(cè)試方法運(yùn)行前執(zhí)行,類似于LoadRunner中的init方法
public void setupTest(JavaSamplerContext arg0) {
results = new SampleResult();
testStr = arg0.getParameter("testString", "");
if (testStr != null testStr.length() 0) {
results.setSamplerData(testStr);
}
}
//設(shè)置傳入的參數(shù),可以設(shè)置多個(gè),已設(shè)置的參數(shù)會(huì)顯示到Jmeter的參數(shù)列表中
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("testStr", ""); //定義一個(gè)參數(shù),顯示到Jmeter的參數(shù)列表中,第一個(gè)參數(shù)為參數(shù)默認(rèn)的顯示名稱,第二個(gè)參數(shù)為默認(rèn)值
return params;
}
//測(cè)試執(zhí)行的循環(huán)體,根據(jù)線程數(shù)和循環(huán)次數(shù)的不同可執(zhí)行多次,類似于LoadRunner中的Action方法
public SampleResult runTest(JavaSamplerContext arg0) {
int len = 0;
results.sampleStart(); //定義一個(gè)事務(wù),表示這是事務(wù)的起始點(diǎn),類似于LoadRunner的lr.start_transaction
len = testStr.length();
results.sampleEnd(); //定義一個(gè)事務(wù),表示這是事務(wù)的結(jié)束點(diǎn),類似于LoadRunner的lr.end_transaction
if(len 5){
System.out.println(testStr);
results.setSuccessful(false); //用于設(shè)置運(yùn)行結(jié)果的成功或失敗,如果是"false"則表示結(jié)果失敗,否則則表示成功
}else
results.setSuccessful(true);
return results;
}
//結(jié)束方法,實(shí)際運(yùn)行時(shí)每個(gè)線程僅執(zhí)行一次,在測(cè)試方法運(yùn)行結(jié)束后執(zhí)行,類似于LoadRunner中的end方法
public void teardownTest(JavaSamplerContext arg0) {
}
}
6.把上面的例子打包,然后把生成的"TestLength.jar"文件拷貝到Jmeter的安裝目錄lib/ext下.
7.運(yùn)行Jmeter,添加一個(gè)線程組,然后在該線程組下面添加一個(gè)Java請(qǐng)求(在Sampler中),在Java請(qǐng)求的類名稱中選擇咱們剛創(chuàng)建的類"app.TestLength",在下面參數(shù)列表的"testStr"后面輸入要測(cè)試的字符串,然后添加一個(gè)監(jiān)聽(tīng)器(聚合報(bào)告),設(shè)置一下模擬的用戶數(shù)就可以測(cè)試了.如果測(cè)試不成功,Jmeter會(huì)在它自己個(gè)輸出框中拋出這個(gè)字符串.
通過(guò)上面的例子我們可以發(fā)現(xiàn),使用Jmeter自定義Java測(cè)試代碼,配合Jmeter自帶的函數(shù),就可以實(shí)現(xiàn)出LoadRunner中"Java Vuser"協(xié)議的絕大多數(shù)功能,而且是沒(méi)有用戶數(shù)限制和完全免費(fèi)的(嘿嘿).上面的例子非常簡(jiǎn)單,而且沒(méi)有任何實(shí)際意義,只是一個(gè)簡(jiǎn)單的Jmeter測(cè)試代碼示例,用于拋磚引玉,希望大家一起交流,共同 進(jìn)步.
是C接口還是java接口。
C接口:建一個(gè)純C的loadrunner腳本,然后寫(xiě)調(diào)用接口的程序(我也不會(huì),是讓開(kāi)發(fā)寫(xiě)的)?;蛘咴趌inux上安裝一個(gè)loadrunner agent,在上面新建一個(gè)腳本然后也是寫(xiě)C的腳本。
java接口:建一個(gè)java的loadrunner腳本,導(dǎo)入需要的jar包,然后寫(xiě)java代碼(也是讓開(kāi)發(fā)寫(xiě))。
最好的辦法是寫(xiě)個(gè)頁(yè)面,但是有風(fēng)險(xiǎn),就是web服務(wù)器不要成為瓶頸。