我們在做性能測試時,有時需要自己編寫測試腳本,很多測試工具都支持自定義編寫測試腳本,比如LoadRunner就有很多自定義腳本的協議,比如"C?Vuser","Java?Vuser"等協議.同樣,Jmeter也支持自定義編寫的測試代碼,不過與LoadRunner不同的是,Jmeter沒有自帶編譯器,需要借助第三方編譯器才能實現.下面舉一個簡單的Java自定義測試代碼例子,使用Java編譯器編寫測試代碼(Java編譯器可以用Eclipse,JBulider等),實現功能為:在測試前輸入任意一個字符串,然后判斷該字符串的長度是否大于5,如果大于則測試結果成功,否則測試結果位失敗,然后在放到Jmeter中模擬10個用戶測試,同時運行這段代碼,具體實現如下:
創新互聯建站專注于仙游企業網站建設,響應式網站,電子商務商城網站建設。仙游網站建設公司,為仙游等地區提供建站服務。全流程按需求定制制作,專業設計,全程項目跟蹤,創新互聯建站專業和態度為您提供的服務
1.打開Java編譯器,新建一個項目"TestLength",然后新建一個包"app".
2.從Jmeter的安裝目錄lib/ext中拷貝兩個文件"ApacheJMeter_core.jar"和"ApacheJMeter_java.jar"到"Tester"的項目中,然后引入這兩個JAR文件.(具體的引入方法參考各個Java編譯器的使用方法)
3.在"app"包中新建一個類,名字叫"TestLength",不過這個類要繼承"AbstractJavaSamplerClient"類,如果項目引入步驟二中的兩個文件,就可以找到"AbstractJavaSamplerClient"類了.
4."TestLength"類在繼承"AbstractJavaSamplerClient"類的同時也會繼承四個方法,分別是"getDefaultParameters","setupTest","runTest"和"teardownTest"方法."getDefaultParameters"方法主要用于設置傳入的參數;"setupTest"方法為初始化方法,用于初始化性能測試時的每個線程."runTest"方法為性能測試時的線程運行體;"teardownTest"方法為測試結束方法,用于結束性能測試中的每個線程.
5.具體實現代碼如下:
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;
//初始化方法,實際運行時每個線程僅執行一次,在測試方法運行前執行,類似于LoadRunner中的init方法
public?void?setupTest(JavaSamplerContext?arg0)?{
results?=?new?SampleResult();
testStr?=?arg0.getParameter("testString",?"");
if?(testStr?!=?null??testStr.length()??0)?{
results.setSamplerData(testStr);
}
}
//設置傳入的參數,可以設置多個,已設置的參數會顯示到Jmeter的參數列表中
public?Arguments?getDefaultParameters()?{
Arguments?params?=?new?Arguments();
params.addArgument("testStr",?"");???//定義一個參數,顯示到Jmeter的參數列表中,第一個參數為參數默認的顯示名稱,第二個參數為默認值
return?params;
}
//測試執行的循環體,根據線程數和循環次數的不同可執行多次,類似于LoadRunner中的Action方法
public?SampleResult?runTest(JavaSamplerContext?arg0)?{
int?len?=?0;
results.sampleStart();?????//定義一個事務,表示這是事務的起始點,類似于LoadRunner的lr.start_transaction
len?=?testStr.length();
results.sampleEnd();?????//定義一個事務,表示這是事務的結束點,類似于LoadRunner的lr.end_transaction
if(len??5){
System.out.println(testStr);
results.setSuccessful(false);???//用于設置運行結果的成功或失敗,如果是"false"則表示結果失敗,否則則表示成功
}else???
results.setSuccessful(true);
return?results;
}
//結束方法,實際運行時每個線程僅執行一次,在測試方法運行結束后執行,類似于LoadRunner中的end方法
public?void?teardownTest(JavaSamplerContext?arg0)?{
}
}
6.把上面的例子打包,然后把生成的"TestLength.jar"文件拷貝到Jmeter的安裝目錄lib/ext下.
7.運行Jmeter,添加一個線程組,然后在該線程組下面添加一個Java請求(在Sampler中),在Java請求的類名稱中選擇咱們剛創建的類"app.TestLength",在下面參數列表的"testStr"后面輸入要測試的字符串,然后添加一個監聽器(聚合報告),設置一下模擬的用戶數就可以測試了.如果測試不成功,Jmeter會在它自己個輸出框中拋出這個字符串.
通過上面的例子我們可以發現,使用Jmeter自定義Java測試代碼,配合Jmeter自帶的函數,就可以實現出LoadRunner中"Java?Vuser"協議的絕大多數功能,而且是沒有用戶數限制和完全免費的(嘿嘿).上面的例子非常簡單,而且沒有任何實際意義,只是一個簡單的Jmeter測試代碼示例,用于拋磚引玉,希望大家一起交流,共同?進步.
可以用main函數和JUnit來寫測試代碼。main是最早使用的,但是現在更流行的測試工具是JUnit。
JUnit是一個Java語言的單元測試框架。它由Kent Beck和Erich Gamma建立,逐漸成為源于Kent Beck的sUnit的xUnit家族中最為成功的一個。 JUnit有它自己的JUnit擴展生態圈。多數Java的開發環境都已經集成了JUnit作為單元測試的工具。
下面是一些具體的編寫測試代碼的技巧或較好的實踐方法:
1. 不要用TestCase的構造函數初始化Fixture,而要用setUp()和tearDown()方法。
2. 不要依賴或假定測試運行的順序,因為JUnit利用Vector保存測試方法。所以不同的平臺會按不同的順序從Vector中取出測試方法。
3. 避免編寫有副作用的TestCase。例如:如果隨后的測試依賴于某些特定的交易數據,就不要提交交易數據。簡單的回滾就可以了。
4. 當繼承一個測試類時,記得調用父類的setUp()和tearDown()方法。
5. 將測試代碼和工作代碼放在一起,一邊同步編譯和更新。(使用Ant中有支持junit的task.)
6. 測試類和測試方法應該有一致的命名方案。如在工作類名前加上test從而形成測試類名。
7. 確保測試與時間無關,不要依賴使用過期的數據進行測試。導致在隨后的維護過程中很難重現測試。
8. 如果你編寫的軟件面向國際市場,編寫測試時要考慮國際化的因素。不要僅用母語的Locale進行測試。
9. 盡可能地利用JUnit提供地assert/fail方法以及異常處理的方法,可以使代碼更為簡潔。
10.測試要盡可能地小,執行速度快。
11.不要硬性規定數據文件的路徑。
12.利用Junit 的自動異常處理書寫簡潔的測試代碼
事實上在Junit 中使用try-catch 來捕獲異常是沒有必要的,Junit 會自動捕獲異常。那些沒有被捕獲的異常就被當成錯誤處理。
13. 充分利用Junit 的assert/fail 方法
assertSame()用來測試兩個引用是否指向同一個對象
assertEquals()用來測試兩個對象是否相等
14. 確保測試代碼與時間無關
15. 使用文檔生成器做測試文檔。
單元測試是我們在軟件開發過程中經常用到的一種軟件測試的方法,而今天我們就一起來了解一下,一個好的單元測試都是如何來編輯完成的。
1.使用框架來用于單元測試
Java提供了若干用于單元測試的框架。TestNG和JUnit是流行的測試框架。JUnit和TestNG的一些重要功能:
易于設置和運行。
支持注釋。
允許忽略或分組并一起執行某些測試。
支持參數化測試,即通過在運行時指定不同的值來運行單元測試。
通過與構建工具,如Ant,Maven和Gradle集成來支持自動化的測試執行。
EasyMock是一個模擬框架,是單元測試框架,如JUnit和TestNG的補充。EasyMock本身不是一個完整的框架。它只是添加了創建模擬對象以便于測試的能力。例如,我們想要測試的一個方法可以調用從數據庫獲取數據的DAO類。在這種情況下,EasyMock可用于創建返回硬編碼數據的MockDAO。這使我們能夠輕松地測試我們意向的方法,而不必擔心數據庫訪問。
2.謹慎使用測試驅動開發!
測試驅動開發(TDD)是一個軟件開發過程,在這過程中,在開始任何編碼之前,我們基于需求來編寫測試。由于還沒有編碼,測試初會失敗。然后寫入小量的代碼以通過測試。然后重構代碼,直到被優化。
目標是編寫覆蓋所有需求的測試,而不是一開始就寫代碼,卻可能甚至都不能滿足需求。TDD是偉大的,因為它導致簡單的模塊化代碼,且易于維護。總體開發速度加快,容易發現缺陷。此外,單元測試被創建作為TDD方法的副產品。
然而,TDD可能不適合所有的情況。在設計復雜的項目中,專注于簡單的設計以便于通過測試用例,而不提前思考可能會導致巨大的代碼更改。此外,TDD方法難以用于與遺留系統,GUI應用程序或與數據庫一起工作的應用程序交互的系統。另外,測試需要隨著代碼的改變而更新。
因此,在決定采用TDD方法之前,應考慮上述因素,并應根據項目的性質采取措施。
3.測量代碼覆蓋率
代碼覆蓋率衡量(以百分比表示)了在運行單元測試時執行的代碼量。通常,高覆蓋率的代碼包含未檢測到的錯誤的幾率要低,因為其更多的源代碼在測試過程中被執行。云南電腦培訓發現測量代碼覆蓋率的一些佳做法包括:
使用代碼覆蓋工具,如Clover,Corbetura,JaCoCo或Sonar。使用工具可以提高測試質量,因為這些工具可以指出未經測試的代碼區域,讓你能夠開發開發額外的測試來覆蓋這些領域。
網站標題:用于測試的java代碼 測試開發和java開發
文章出自:http://m.kartarina.com/article4/hgsjie.html
成都網站建設公司_創新互聯,為您提供網站改版、Google、動態網站、網頁設計公司、品牌網站設計、標簽優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯