用于測(cè)試的java代碼 測(cè)試開發(fā)和java開發(fā)

jmeter用java代碼怎樣編寫接口測(cè)試源碼

我們?cè)谧鲂阅軠y(cè)試時(shí),有時(shí)需要自己編寫測(cè)試腳本,很多測(cè)試工具都支持自定義編寫測(cè)試腳本,比如LoadRunner就有很多自定義腳本的協(xié)議,比如"C?Vuser","Java?Vuser"等協(xié)議.同樣,Jmeter也支持自定義編寫的測(cè)試代碼,不過與LoadRunner不同的是,Jmeter沒有自帶編譯器,需要借助第三方編譯器才能實(shí)現(xiàn).下面舉一個(gè)簡(jiǎn)單的Java自定義測(cè)試代碼例子,使用Java編譯器編寫測(cè)試代碼(Java編譯器可以用Eclipse,JBulider等),實(shí)現(xiàn)功能為:在測(cè)試前輸入任意一個(gè)字符串,然后判斷該字符串的長度是否大于5,如果大于則測(cè)試結(jié)果成功,否則測(cè)試結(jié)果位失敗,然后在放到Jmeter中模擬10個(gè)用戶測(cè)試,同時(shí)運(yùn)行這段代碼,具體實(shí)現(xiàn)如下:

創(chuàng)新互聯(lián)建站專注于仙游企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,電子商務(wù)商城網(wǎng)站建設(shè)。仙游網(wǎng)站建設(shè)公司,為仙游等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)

1.打開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",不過這個(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樂以忘憂

*

*?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)聽器(聚合報(bào)告),設(shè)置一下模擬的用戶數(shù)就可以測(cè)試了.如果測(cè)試不成功,Jmeter會(huì)在它自己個(gè)輸出框中拋出這個(gè)字符串.

通過上面的例子我們可以發(fā)現(xiàn),使用Jmeter自定義Java測(cè)試代碼,配合Jmeter自帶的函數(shù),就可以實(shí)現(xiàn)出LoadRunner中"Java?Vuser"協(xié)議的絕大多數(shù)功能,而且是沒有用戶數(shù)限制和完全免費(fèi)的(嘿嘿).上面的例子非常簡(jiǎn)單,而且沒有任何實(shí)際意義,只是一個(gè)簡(jiǎn)單的Jmeter測(cè)試代碼示例,用于拋磚引玉,希望大家一起交流,共同?進(jìn)步.

怎么寫Java測(cè)試代碼?

可以用main函數(shù)和JUnit來寫測(cè)試代碼。main是最早使用的,但是現(xiàn)在更流行的測(cè)試工具是JUnit。

JUnit是一個(gè)Java語言的單元測(cè)試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個(gè)。 JUnit有它自己的JUnit擴(kuò)展生態(tài)圈。多數(shù)Java的開發(fā)環(huán)境都已經(jīng)集成了JUnit作為單元測(cè)試的工具。

下面是一些具體的編寫測(cè)試代碼的技巧或較好的實(shí)踐方法:

1. 不要用TestCase的構(gòu)造函數(shù)初始化Fixture,而要用setUp()和tearDown()方法。

2. 不要依賴或假定測(cè)試運(yùn)行的順序,因?yàn)镴Unit利用Vector保存測(cè)試方法。所以不同的平臺(tái)會(huì)按不同的順序從Vector中取出測(cè)試方法。

3. 避免編寫有副作用的TestCase。例如:如果隨后的測(cè)試依賴于某些特定的交易數(shù)據(jù),就不要提交交易數(shù)據(jù)。簡(jiǎn)單的回滾就可以了。

4. 當(dāng)繼承一個(gè)測(cè)試類時(shí),記得調(diào)用父類的setUp()和tearDown()方法。

5. 將測(cè)試代碼和工作代碼放在一起,一邊同步編譯和更新。(使用Ant中有支持junit的task.)

6. 測(cè)試類和測(cè)試方法應(yīng)該有一致的命名方案。如在工作類名前加上test從而形成測(cè)試類名。

7. 確保測(cè)試與時(shí)間無關(guān),不要依賴使用過期的數(shù)據(jù)進(jìn)行測(cè)試。導(dǎo)致在隨后的維護(hù)過程中很難重現(xiàn)測(cè)試。

8. 如果你編寫的軟件面向國際市場(chǎng),編寫測(cè)試時(shí)要考慮國際化的因素。不要僅用母語的Locale進(jìn)行測(cè)試。

9. 盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡(jiǎn)潔。

10.測(cè)試要盡可能地小,執(zhí)行速度快。

11.不要硬性規(guī)定數(shù)據(jù)文件的路徑。

12.利用Junit 的自動(dòng)異常處理書寫簡(jiǎn)潔的測(cè)試代碼

事實(shí)上在Junit 中使用try-catch 來捕獲異常是沒有必要的,Junit 會(huì)自動(dòng)捕獲異常。那些沒有被捕獲的異常就被當(dāng)成錯(cuò)誤處理。

13. 充分利用Junit 的assert/fail 方法

assertSame()用來測(cè)試兩個(gè)引用是否指向同一個(gè)對(duì)象

assertEquals()用來測(cè)試兩個(gè)對(duì)象是否相等

14. 確保測(cè)試代碼與時(shí)間無關(guān)

15. 使用文檔生成器做測(cè)試文檔。

五個(gè)方法讓你做更好的java單元測(cè)試?

單元測(cè)試是我們?cè)谲浖_發(fā)過程中經(jīng)常用到的一種軟件測(cè)試的方法,而今天我們就一起來了解一下,一個(gè)好的單元測(cè)試都是如何來編輯完成的。

1.使用框架來用于單元測(cè)試

Java提供了若干用于單元測(cè)試的框架。TestNG和JUnit是流行的測(cè)試框架。JUnit和TestNG的一些重要功能:

易于設(shè)置和運(yùn)行。

支持注釋。

允許忽略或分組并一起執(zhí)行某些測(cè)試。

支持參數(shù)化測(cè)試,即通過在運(yùn)行時(shí)指定不同的值來運(yùn)行單元測(cè)試。

通過與構(gòu)建工具,如Ant,Maven和Gradle集成來支持自動(dòng)化的測(cè)試執(zhí)行。

EasyMock是一個(gè)模擬框架,是單元測(cè)試框架,如JUnit和TestNG的補(bǔ)充。EasyMock本身不是一個(gè)完整的框架。它只是添加了創(chuàng)建模擬對(duì)象以便于測(cè)試的能力。例如,我們想要測(cè)試的一個(gè)方法可以調(diào)用從數(shù)據(jù)庫獲取數(shù)據(jù)的DAO類。在這種情況下,EasyMock可用于創(chuàng)建返回硬編碼數(shù)據(jù)的MockDAO。這使我們能夠輕松地測(cè)試我們意向的方法,而不必?fù)?dān)心數(shù)據(jù)庫訪問。

2.謹(jǐn)慎使用測(cè)試驅(qū)動(dòng)開發(fā)!

測(cè)試驅(qū)動(dòng)開發(fā)(TDD)是一個(gè)軟件開發(fā)過程,在這過程中,在開始任何編碼之前,我們基于需求來編寫測(cè)試。由于還沒有編碼,測(cè)試初會(huì)失敗。然后寫入小量的代碼以通過測(cè)試。然后重構(gòu)代碼,直到被優(yōu)化。

目標(biāo)是編寫覆蓋所有需求的測(cè)試,而不是一開始就寫代碼,卻可能甚至都不能滿足需求。TDD是偉大的,因?yàn)樗鼘?dǎo)致簡(jiǎn)單的模塊化代碼,且易于維護(hù)。總體開發(fā)速度加快,容易發(fā)現(xiàn)缺陷。此外,單元測(cè)試被創(chuàng)建作為TDD方法的副產(chǎn)品。

然而,TDD可能不適合所有的情況。在設(shè)計(jì)復(fù)雜的項(xiàng)目中,專注于簡(jiǎn)單的設(shè)計(jì)以便于通過測(cè)試用例,而不提前思考可能會(huì)導(dǎo)致巨大的代碼更改。此外,TDD方法難以用于與遺留系統(tǒng),GUI應(yīng)用程序或與數(shù)據(jù)庫一起工作的應(yīng)用程序交互的系統(tǒng)。另外,測(cè)試需要隨著代碼的改變而更新。

因此,在決定采用TDD方法之前,應(yīng)考慮上述因素,并應(yīng)根據(jù)項(xiàng)目的性質(zhì)采取措施。

3.測(cè)量代碼覆蓋率

代碼覆蓋率衡量(以百分比表示)了在運(yùn)行單元測(cè)試時(shí)執(zhí)行的代碼量。通常,高覆蓋率的代碼包含未檢測(cè)到的錯(cuò)誤的幾率要低,因?yàn)槠涓嗟脑创a在測(cè)試過程中被執(zhí)行。云南電腦培訓(xùn)發(fā)現(xiàn)測(cè)量代碼覆蓋率的一些佳做法包括:

使用代碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高測(cè)試質(zhì)量,因?yàn)檫@些工具可以指出未經(jīng)測(cè)試的代碼區(qū)域,讓你能夠開發(fā)開發(fā)額外的測(cè)試來覆蓋這些領(lǐng)域。

網(wǎng)站標(biāo)題:用于測(cè)試的java代碼 測(cè)試開發(fā)和java開發(fā)
文章出自:http://muchs.cn/article4/hgsjie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、Google、動(dòng)態(tài)網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、品牌網(wǎng)站設(shè)計(jì)、標(biāo)簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司