發(fā)布時間:2023-03-20 16:15:19
序言:寫作是分享個人見解和探索未知領(lǐng)域的橋梁,我們?yōu)槟x了8篇的軟件測試論文樣本,期待這些樣本能夠為您提供豐富的參考和啟發(fā),請盡情閱讀。
1Web應(yīng)用程序性能測試實(shí)驗
這部分實(shí)驗?zāi)康氖鞘箤W(xué)生熟練掌握使用Jmeter測試Web應(yīng)用程序的一般流程和方法。實(shí)驗任務(wù)測試績效考核子系統(tǒng)中的評分模塊。評分人登錄系統(tǒng)后進(jìn)入評分環(huán)節(jié),選擇其未完成的評分項目(若有多個未評分項,則需要全部對其評分)。每個評分項中包含對多個部門的評分,部門數(shù)大于等于3個時需符合正態(tài)分布,如可評出優(yōu)秀3個、良好6個、合格4個、基本合格2個,否則可任意評分。按照循序漸進(jìn)的原則,設(shè)計了3個步驟:一是Jmeter的基本應(yīng)用,包括腳本錄制、添加http請求、添加斷言以及查看測試結(jié)果等;二是Jmeter的邏輯控制結(jié)構(gòu),如分支和循環(huán)等;三是Jmeter的高級應(yīng)用,如參數(shù)值可變以及參數(shù)個數(shù)可變等。
1.1Jmeter的基本應(yīng)用
Jmeter可以手工添加腳本,但更方便的是使用腳本錄制軟件Badboy[9]。Badboy錄制的腳本可以保存為Jmeter格式,然后在Jmeter中直接打開和修改。腳本主要是一系列的http請求,其中可以設(shè)置請求的URL,請求方法(get/post)及請求參數(shù)等,如圖1所示。通過添加斷言(如是否含有特定字符串)檢查請求是否返回正確結(jié)果。添加查看結(jié)果樹并運(yùn)行測試腳本查看程序的測試結(jié)果。
1.2Jmeter的控制結(jié)構(gòu)
Jmeter具有豐富的邏輯控制結(jié)構(gòu),包括控制器,switch控制器,while控制器以及forEach控制器等。實(shí)驗重點(diǎn)練習(xí)控制器和forEach控制器??刂破髋袛郕meter變量是否滿足給定條件,若滿足則執(zhí)行其包含的測試元素,否則不執(zhí)行。ForEach控制器對Jmeter變量的每一個取值都執(zhí)行一遍其包含的測試元素。圖2是一個控制器,其條件為變量COUNT小于10且變量VAR等于字符串“abcd”。圖2Jmeter的控制器圖Jmeter的變量引用使用${變量名}的方式,變量一般提取自返回頁面中的某些信息,如滿足特定條件記錄的行數(shù)或某個特定位置的字符串取值等。變量提取可采用正則表達(dá)式或Xpath進(jìn)行匹配,講解其匹配原則并現(xiàn)場演示。圖3利用正則表達(dá)式提取需評選優(yōu)秀的單位個數(shù),其中引用名稱youxiu就是變量名。匹配失敗則取設(shè)置的缺省值0。如對于頁面中返回的html代碼“…您當(dāng)前可以評出優(yōu)秀<spanid="ltYSMsg">3</span>個…”可提取出優(yōu)秀個數(shù)為3。
1.3Jmeter的高級應(yīng)用
本部分著重解決實(shí)際測試過程中的一些常見問題,如參數(shù)內(nèi)容可變及參數(shù)個數(shù)可變等。測試登錄環(huán)節(jié)時需模擬不同的用戶登錄行為,即圖1的http請求中txtUserName一項的值應(yīng)是變化的。Jmeter提供的CSVDataSetConfig可解決這一問題,如圖4所示。將所有評分人的信息存儲在一個CSV文件中,把其中的列名填入VariableNames項,之后將圖1中的txtUserName值改為userAccount(即CSV文件的第1列)實(shí)現(xiàn)參數(shù)值的動態(tài)變化。進(jìn)入評分項后需根據(jù)情況選擇優(yōu)秀和良好等的個數(shù),且要反映在http請求的參數(shù)中。由于參評單位的個數(shù)因評分人和評分項各異,因此無法在GUI界面中一一添加。需動態(tài)添加的參數(shù)包括評分列表中的name及其value,value的取值從優(yōu)秀到基本合格依次為1234。為簡單起見,我們按順序?qū)挝贿M(jìn)行評分。如系統(tǒng)要求評出3個優(yōu)秀,則測試中前3個部門打優(yōu)秀,其余依次類推。由于同一部門的優(yōu)秀良好等單選按鈕的name值相同(如圖5所示),我們選擇提取該組唯一的ID號,然后將其轉(zhuǎn)換為name,其對應(yīng)關(guān)系是用$代替下劃線(如ID號為gbBSCExamList_ctl02_rbExamerLevel,name為gbBSCExamList$ctl02$rbExamerLevel)。Jmeter的Beanshellpreprocessor可在提交http請求前動態(tài)調(diào)整參數(shù)個數(shù)及參數(shù)值。下面給出了Beanshellpreprocessor的代碼。其中ExamerLevel_matchNr為Jmeter的系統(tǒng)變量,提供了正則表達(dá)式匹配項ExamerLevel匹配成功的個數(shù)(即參評單位的個數(shù))。如前所述匹配數(shù)量小于3時可任意評分,為簡單起見我們均將其評為優(yōu)秀。N=Integer.parseInt(vars.get("ExamerLevel_match-Nr"));(N>=3){YX=Integer.parseInt(vars.get("youxiu"));LH=Integer.parseInt(vars.get("lianghao"))+YX;HG=Integer.parseInt(vars.get("hege"))+LH;BHG=Integer.parseInt(vars.get("jibenhege"))+HG;for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");(i<=YX){sampler.a(chǎn)ddArgument(item,"1");}else(i<=LH){sampler.a(chǎn)ddArgument(item,"2");}else(i<=HG){sampler.a(chǎn)ddArgument(item,"3");}else(i<=BHG){sampler.a(chǎn)ddArgument(item,"4");}}}else{for(i=1;i<=N;i++){item=vars.get("ExamerLevel_"+i);item=item.replace("_","$");sampler.a(chǎn)ddArgument(item,"1");}}設(shè)計了含35個并發(fā)線程的線程組,模擬實(shí)際35個評分人的評分過程。全部線程在1秒鐘之內(nèi)啟動,比實(shí)際情況更嚴(yán)格。得到聚合報告如圖6所示,其中點(diǎn)擊考核評分頁面響應(yīng)時間最長,為335毫秒。且測試過程中無錯誤發(fā)生,說明系統(tǒng)評分模塊可靠。
2數(shù)據(jù)庫性能優(yōu)化實(shí)驗
除應(yīng)用程序外,數(shù)據(jù)庫設(shè)計的優(yōu)劣亦影響系統(tǒng)性能。這部分實(shí)驗?zāi)康氖鞘箤W(xué)生熟練掌握使用SQLServer測試數(shù)據(jù)庫性能的一般流程和方法,并進(jìn)行簡單的數(shù)據(jù)庫調(diào)優(yōu)。為減少復(fù)雜性,設(shè)計一個簡單的由三張表組成的人員組織結(jié)構(gòu)數(shù)據(jù)庫:user、or-gan及userorgan表。其中user表含4586條記錄,or-gan表含1722條記錄,userorgan表含6804條記錄(一人可在多部門任職)。實(shí)驗任務(wù)根據(jù)賬號查詢其姓名及所在單位信息。
2.1SQL語句執(zhí)行計劃對應(yīng)用程序中頻繁執(zhí)行的SQL語句檢查執(zhí)行計劃非常重要。初始時,三張表均未建立任何索引,下面SQL語句的執(zhí)行計劃如圖7所示。由圖7知,三張表均采用全表掃描的方式。對大表全表掃描可能涉及多次磁盤I/O,非常費(fèi)時,應(yīng)盡力避免此種情況。SQLServer報告由于缺少索引影響了查詢性能,并給出了相關(guān)建議。selectA.vcAccount,A.vcName,C.vcNamefromtest.dbo.[user]Ainnerjointest.dbo.[useror-gan]BonA.vcAccount=B.cnvcempidinnerjointest.dbo.organConB.cnvcorgid=C.nNodeIDwhereA.vcAccount='testuser'為表格建立以下索引:indexIND_USERACCOUNTontest.dbo.[user](vcAccount)clusteredindexPK_ORGANontest.dbo.[organ](nNodeID)indexIND_USERORGANontest.dbo.[userorgan](cnvcempid,cnvcorgid)再次運(yùn)行后顯示執(zhí)行計劃如圖8所示。可見所有表掃描均已替換為相應(yīng)的索引查找,且SQLServ-er未報告缺少索引影響查詢性能。兩次執(zhí)行查詢的磁盤I/O和CPU時間見表1,可見為表添加正確的索引可提高查詢性能。
2.2索引建立原則總結(jié)
建立索引的一般滿足原則如下[10](篇幅所限,未給出實(shí)例):(1)為主鍵所在的列創(chuàng)建索引。為經(jīng)常進(jìn)行連接但未指定為外鍵的字段建立索引。(2)在頻繁進(jìn)行排序或分組的字段上建立索引。(3)在條件表達(dá)式中經(jīng)常用到的不同值較多的字段上建立索引,在不同值較少的字段上不建立索引,如性別字段。不在查詢很少引用的列上創(chuàng)建索引。(4)若經(jīng)常同時使用多個字段排序,可在這些字段上建立復(fù)合索引。要盡量使關(guān)鍵查詢形成索引覆蓋,其前導(dǎo)字段一定是使用最頻繁的字段。(5)查看索引并刪除不使用的索引。需頻繁進(jìn)行數(shù)據(jù)查入操作的數(shù)據(jù)庫應(yīng)有較少的索引,需頻繁進(jìn)行讀取操作的數(shù)據(jù)庫應(yīng)有更多的索引。(6)在聚集索引中,避免包括不必要的列,盡可能使用較小的數(shù)據(jù)類型。(7)在支持排序和范圍查詢的字段上考慮使用聚集索引。(8)具有高選擇性的列是索引的好候選列,具有高密度的列是索引最糟糕的候選列。
3結(jié)語
1 關(guān)于計算機(jī)軟件測試的介紹
1.1 軟件測試的概念
軟件測試是指在軟件運(yùn)行之前,對軟件的產(chǎn)品介紹和代碼進(jìn)行審核,從而保障軟件的正常運(yùn)行。軟件測試不僅代表軟件系統(tǒng)出現(xiàn)問題的可能性,同時還表示軟件能夠完成預(yù)定功能的程度,這兩部分對于軟件測試都有重要的意義。
1.2 軟件測試的特點(diǎn)
1.2.1軟件測試的動態(tài)性
軟件測試是在規(guī)定輸入值的情況下運(yùn)行的,是一種動態(tài)的檢測軟件的運(yùn)行狀態(tài)的過程。
1.2.2軟件測試的有限性
在對軟件進(jìn)行測試的過程中,測試的次數(shù)是有限的,不可能無限制的測試下去,同時,整個測試過程還要具有可管理性,即在測試時需要平衡測試需求與測試資源之間的關(guān)系。
1.2.3軟件測試的預(yù)測性
進(jìn)行軟件測試之前,應(yīng)該判斷測試的結(jié)果是否妥當(dāng),常常采用預(yù)示程序來預(yù)測運(yùn)行的可能結(jié)果,但預(yù)測程序也是軟件測試技術(shù)的一大難點(diǎn)。
2 軟件測試技術(shù)的過程分析
2.1軟件測試的方案
在進(jìn)行軟件測試之前,都需要制定一個合適有效的軟件測試方案,以確定軟件測試的目的和過程,為軟件測試的完成提供一個清晰有效的目標(biāo)。
2.2 軟件測試的開發(fā)設(shè)計
軟件測試設(shè)計就是在軟件開發(fā)的過程中進(jìn)行的軟件質(zhì)量測試工作,在測試時需要提供規(guī)范的應(yīng)用說明、程序設(shè)計情況,同時,軟件測試設(shè)計在軟件測試過程中有著重要的作用。測試設(shè)計的基本步驟為:首先利用先進(jìn)的技術(shù)手段設(shè)計分析樣式,然后討論測試結(jié)果,并做成有效的測試方案,最后確定每一項測試任務(wù)都完成了,從而保障測試結(jié)果的有效性。
2.3 軟件測試的準(zhǔn)備
在測試方案開始前,需要先進(jìn)行測試準(zhǔn)備,列舉測試方案中所需要的重點(diǎn)問題,這些問題常常有測試數(shù)據(jù)集、驅(qū)動程序和實(shí)際執(zhí)行測試所需的軟件等,同時需要為整個測試過程尋找合適的測試環(huán)境和測試工具。
2.4 軟件測試的實(shí)施
參照之前設(shè)計的軟件測試方案,利用測試用例對軟件測試的項目進(jìn)行全面有效的測試,并將測試情況與實(shí)際運(yùn)行情況對比起來研究,從而判斷測試是否成功,并進(jìn)行下一步測試工序。在測試的過程中對軟件的質(zhì)量問題進(jìn)行記錄,并進(jìn)行有效的修改,修改之后再按照之前的測試步驟重新進(jìn)行測試,觀察問題是否會再次出現(xiàn),從而確保軟件的質(zhì)量。同時,應(yīng)制定合適的測試計劃,定期將軟件運(yùn)行測試,以保障之前測試的問題不會在出現(xiàn)。每完成一個測試部分,比較整個運(yùn)行結(jié)果與測試方案的不同之處,并針對不同之處進(jìn)行有效的調(diào)整。
2.5 軟件測試的報告
將軟件測試階段得到的運(yùn)行結(jié)果拿來觀察和處理,觀察測試觀點(diǎn)是否完整,確認(rèn)方法是否有效,并依次評定軟件測試過程中的測試用例和軟件質(zhì)量等級,并進(jìn)行測試報告總結(jié)。
3 軟件工程中存在的測試問題
軟件工程出現(xiàn)后,軟件的運(yùn)行質(zhì)量越來越受到人們的關(guān)注,軟件測試技術(shù)也開始慢慢發(fā)展,但在軟件工程中常常出現(xiàn)一些測試問題,導(dǎo)致軟件的質(zhì)量受到影響。下面筆者就軟件工程中常見的測試問題進(jìn)行闡述。
(1)目前很多軟件開發(fā)公司沒有比較正規(guī)的軟件開發(fā)手段,沒有產(chǎn)品說明書,因此,在進(jìn)行軟件測試時需要先利用試探性測試技術(shù)。而利用試探性測試技術(shù)需要先了解軟件的特性,并對軟件的運(yùn)行情況進(jìn)行有效的記錄,全面描述軟件的功能特點(diǎn),然后應(yīng)用常用的幾種軟件測試技術(shù)來找出軟件的質(zhì)量問題。但在這樣的情況下,一些錯誤、非法的沒有利用價值的數(shù)據(jù)容易被作為輸入數(shù)據(jù),這樣測試軟件的輸出結(jié)果存在較大問題,對于軟件測試的進(jìn)行有較大的影響。
(2)在進(jìn)行軟件測試時,首先要對軟件的邏輯流程進(jìn)行了解,描述軟件的詳細(xì)狀態(tài),但在一些規(guī)模很大、結(jié)構(gòu)復(fù)雜的軟件測試中,了解軟件的運(yùn)行情況是很困難的,這時,就需要降低軟件測試的狀態(tài)以及數(shù)量。但是在測試中,必須對每種狀態(tài)都進(jìn)行測試,但在實(shí)際測試中往往忽略這一問題,這將會大大影響到軟件測試的效果,并產(chǎn)生一定的后果。
4 計算機(jī)軟件測試的常用技術(shù)
軟件測試技術(shù)對于計算機(jī)軟件行業(yè)的發(fā)展有重要的促進(jìn)意義,關(guān)系到計算機(jī)軟件的運(yùn)行質(zhì)量,同時,還能方便人們的日常生活。計算機(jī)軟件測試主要有兩種手段,即白盒測試和黑盒測試,下文筆者將對此進(jìn)行闡述。
4.1 白盒測試
白盒測試即邏輯驅(qū)動測試或結(jié)構(gòu)測試,該方法是對系統(tǒng)的內(nèi)部構(gòu)造進(jìn)行測試,檢測整個應(yīng)用軟件內(nèi)部是否正常運(yùn)行的手段,在測試中,把待測系統(tǒng)當(dāng)作一開放的盒子,通過對系統(tǒng)的內(nèi)部程序結(jié)構(gòu)進(jìn)行測試來檢測它的邏輯路徑,從而根據(jù)在不同區(qū)域的檢測信息來測試軟件的實(shí)際運(yùn)行情況是否與預(yù)期結(jié)果相同。目前,采用白盒測試技術(shù)常用的方法有:基本路徑測試法、邏輯覆蓋法、靜態(tài)結(jié)構(gòu)分析法和代碼檢查法等。與其他的軟件測試技術(shù)相比,白盒測試技術(shù)需要充分了解到系統(tǒng)的內(nèi)部構(gòu)造,以便對系統(tǒng)的全部邏輯路徑進(jìn)行檢測。在應(yīng)用這種測試技術(shù)時,首先要檢查系統(tǒng)的內(nèi)部構(gòu)造,并從整個應(yīng)用的邏輯來
統(tǒng)計檢測數(shù)據(jù)。另外,白盒測試技術(shù)對于軟件測試人員快速發(fā)現(xiàn)軟件運(yùn)行異常情況,提高軟件的運(yùn)行效率有重要的現(xiàn)實(shí)意義。 4.2 黑盒測試
黑盒測試即功能測試,該方法是對軟件產(chǎn)品的功能進(jìn)行測試,從而觀察軟件能否正常運(yùn)行的手段,在測試中,把測試系統(tǒng)看成封閉的黑盒子,不需要考慮整個軟件系統(tǒng)的內(nèi)部特征,只需要依靠傳輸數(shù)據(jù)來得出檢測結(jié)果。黑盒測試主要對軟件的界面和功能進(jìn)行測試,僅僅只需要考慮系統(tǒng)的外部結(jié)構(gòu),從而達(dá)到有效進(jìn)行軟件測試的目的。同時,黑盒測試主要測試軟件的功能,常常用于檢測這樣幾種錯誤:運(yùn)行界面、程序初始化和終止、數(shù)據(jù)庫的訪問情況、軟件性能和功能等錯誤。在黑盒測試之前,需要采取合適有效的測試方案,以保障軟件測試有計劃的進(jìn)行。相比其他的軟件測試技術(shù),黑盒測試操作方便,設(shè)計代碼也很簡單,能夠從用戶的角度出發(fā)去解決問題,并實(shí)現(xiàn)軟件的功能。