




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
企業(yè)級(jí)軟件測(cè)試管理
之
性能測(cè)試工具操作技能(高級(jí))國(guó)家應(yīng)用軟件產(chǎn)品質(zhì)量監(jiān)督檢驗(yàn)中心戰(zhàn)略合作伙伴聯(lián)合實(shí)驗(yàn)室概述WEB基本概念復(fù)習(xí)目標(biāo)在高級(jí)課程里面,您可以學(xué)到:
復(fù)習(xí)WEB環(huán)境里的一些特性學(xué)習(xí)圖標(biāo)樹后面的一些理論學(xué)習(xí)處理來自于服務(wù)器端的不可預(yù)見的動(dòng)態(tài)數(shù)據(jù)學(xué)習(xí)定位互相依賴的數(shù)據(jù)并能根據(jù)這些數(shù)據(jù)更改腳本學(xué)習(xí)使用輸出更加有意義的日志來解決在調(diào)試虛擬用戶過程中產(chǎn)生的問題WEB環(huán)境
復(fù)習(xí)本課中的關(guān)鍵術(shù)語定義:Web頁(yè)面中的源碼,定義頁(yè)面布局和Web頁(yè)面中的其他元素的鏈接。HTML由瀏覽器來解釋并且顯示為一個(gè)WEB頁(yè)面。HTML(超文本)復(fù)習(xí)HTML<title>2002oftheMonth-August</title><palign="center"><fontsize="4”
face="Arial">August1998</font></p><palign="center"><img
src="../Pictures/car.jpg"width="360"height="240"></p><li><fontface="Arial">Owner:MinsooPak,
Atlanta,GA</font></li><li><fontface="Arial">Year:1973</font></li>
<tableborder="0"cellpadding="0”
cellspacing="0">本課中關(guān)鍵術(shù)語定義:Web頁(yè)面中的一系列HTML語句,用來創(chuàng)建交互的字段。這些字段能夠讓用戶和Web服務(wù)器進(jìn)行交互發(fā)送和接收數(shù)據(jù)。Form<FORM...>Form的例子<FORMACTION="scripts/login.pl"METHOD="POST”><INPUTTYPE="TEXT"NAME="username"><INPUTTYPE="PASSWORD"NAME="password"></FORM>Form開始的標(biāo)簽處理數(shù)據(jù)和返回結(jié)果頁(yè)的對(duì)象Object(CGI)Form結(jié)束的標(biāo)簽發(fā)往服務(wù)器對(duì)象的數(shù)據(jù)本課中關(guān)鍵術(shù)語定義:用于處理來自于瀏覽器的請(qǐng)求的程序,并且返回相應(yīng)的文檔或者隨機(jī)產(chǎn)生一個(gè)文檔通用網(wǎng)關(guān)接口(CGI)數(shù)據(jù)是如何在瀏覽器和服務(wù)器之間處理的1999MicrosoftCorporation.Allrightsreserved.瀏覽器
HTTPRequest數(shù)據(jù)庫(kù)服務(wù)器name=“steve”password=“buba”HTML2134“steve”“buba”steve****Web服務(wù)器OKHTMLCGIScript數(shù)據(jù)由VuGen圖標(biāo)到服務(wù)器的傳送數(shù)據(jù)庫(kù)服務(wù)器name=“steve”password=“buba”O(jiān)KHTML“steve”“buba”Web服務(wù)器HTTPRequestHTMLVuGenLogin.plCGIScriptLogin.pl圖標(biāo)背后隱藏著什么?VuGen通過LoadRunner的語句向后臺(tái)服務(wù)器發(fā)送數(shù)據(jù)web_submit_form("login.pl", ITEMDATA, "name=username","value=steve", ENDITEM, "name=password","value=buba", ENDITEM, LAST);腳本瀏覽方式腳本瀏覽例子web_add_cookie("ubid-main DOMAIN=");web_url("", "URL=http:///", "TargetFrame=", LAST);web_link("AHome", "Text=AHome", LAST);web_submit_form("SearchForMovie", "Ordinal=1", ITEMDATA, "name=mode","value=Video",ENDITEM, "name=keyword-query","value=starwars",ENDITEM, LAST);虛擬用戶腳本–
腳本方式腳本瀏覽顯示每個(gè)圖標(biāo)為一個(gè)語句語句是可以編輯的工具欄圖標(biāo)轉(zhuǎn)換圖標(biāo)樹和腳本瀏覽腳本瀏覽允許在回放時(shí)定位問題所在
LoadRunner語句
語句 定義 舉例用戶選定一個(gè)書簽web
_url
根據(jù)指定的URL裝入頁(yè)面用戶發(fā)送注冊(cè)所需的個(gè)人信息web
_submit_data
模擬一個(gè)form的提交用戶發(fā)送購(gòu)買所需的信用卡號(hào)碼web
_submit_form
模擬一個(gè)form的提交用戶點(diǎn)擊一個(gè)超文本web
_link
根據(jù)屬性定義,模擬在一個(gè)鏈接上面的鼠標(biāo)的點(diǎn)擊web
_image
根據(jù)屬性定義,模擬在一個(gè)圖片上面的鼠標(biāo)的點(diǎn)擊用戶點(diǎn)擊一個(gè)超鏈接的圖片手工捕獲動(dòng)態(tài)值第一課目標(biāo)本課中你將能學(xué)習(xí)到:動(dòng)態(tài)值被錄制成為靜態(tài)固定值引起的問題手工如何參數(shù)化動(dòng)態(tài)值和一些不可預(yù)知的數(shù)值虛擬用戶搜索可用的航班web_add_cookieexpress.ctlglbwhere.ctlInvokesTravelocityHomepageInputsflightinformationandclickstheSearchFlightsbuttonClicksontheCancelbutton虛擬用戶回放不成功問題:web_add_cookieexpress.ctlglbwhere.ctl回放過程中:錯(cuò)誤虛擬用戶回放不成功web_add_cookieexpress.ctlglbwhere.ctl錯(cuò)誤問題:服務(wù)器端返回一個(gè)動(dòng)態(tài)值web_add_cookieexpress.ctlglbwhere.ctl會(huì)話1會(huì)話2918851913278106原因:動(dòng)態(tài)值在腳本中是固定值web_add_cookieexpress.ctlglbwhere.ctl918851913278106在腳本中對(duì)動(dòng)態(tài)值進(jìn)行參數(shù)化1.決定要捕捉的值2.創(chuàng)建一個(gè)參數(shù)保存動(dòng)態(tài)數(shù)值3.在腳本中對(duì)固定數(shù)值進(jìn)行參數(shù)化4.驗(yàn)證腳本執(zhí)行的正確性glbwhere.ctl手工關(guān)聯(lián)
1.決定要捕捉的數(shù)值使用腳本視圖在腳本中搜索固定的可能的動(dòng)態(tài)值1.決定要捕捉的數(shù)值
1.1.創(chuàng)建兩個(gè)完全相同的虛擬用戶TEST(){
web_add_cookie("auto=DYESABEL|JOSEPHINE;DOMAIN=");
web_url("", "URL=http:///", "TargetFrame=_TOP", LAST);
web_add_cookie("auto=DYESABEL|JOSEPHINE;DOMAIN=");
web_submit_data(”express.ctl", "Action=/express.ctl?Service=SERVICE&expr" "_path=Y", "Method=POST", "TargetFrame=", "EncType=application/x-www-form-urlencoded", ITEMDATA, "name=Service","value=TRAVELOCITY",ENDITEM, "name=inp_es_alias","value=dyesabel",ENDITEM, "name=inp_es_passwd","value=dyesabel",ENDITEM, "name=inp_dep_arp_cd_1","value=sfo",ENDITEM, "name=leaveMonth","value=Nov",ENDITEM, "name=inp_dep_dt_dy_1","value=12",ENDITEM, "name=inp_dep_tm_1","value=6:00AM",ENDITEM, "name=inp_arr_arp_cd_1","value=dfw",ENDITEM, "name=returnMonth","value=Dec",ENDITEM, "name=inp_ret_dep_dt_dy","value=13",ENDITEM, "name=inp_ret_dep_tm","value=6:00AM",ENDITEM, "name=inp_pax_cnt","value=1",ENDITEM, "name=inp_dep_dt_mn_1","value=Nov",ENDITEM, "name=inp_ret_dep_dt_mn","value=Dec",ENDITEM, "name=inp_dep_day","value=5",ENDITEM, "name=inp_arr_day","value=1",ENDITEM, "name=inp_dep_year","value=1999",ENDITEM, "name=inp_arr_year","value=1999",ENDITEM, "name=tv_module","value=TR",ENDITEM, "name=expr_path","value=Y",ENDITEM, LAST);
web_submit_form(”glbwhere.ctl", "Action=/glblwhere.ctl?SEQ=918852039523443", ITEMDATA, "name=x","value=67",ENDITEM, "name=y","value=14",ENDITEM, LAST);Sample2.cTEST(){
web_add_cookie("auto=DYESABEL|JOSEPHINE;DOMAIN=");
web_url("", "URL=http:///", "TargetFrame=_TOP", LAST);
web_add_cookie("auto=DYESABEL|JOSEPHINE;DOMAIN=");
web_submit_data(”express.ctl", "Action=/express.ctl?Service=SERVICE&expr" "_path=Y", "Method=POST", "TargetFrame=", "EncType=application/x-www-form-urlencoded", ITEMDATA, "name=Service","value=TRAVELOCITY",ENDITEM, "name=inp_es_alias","value=dyesabel",ENDITEM, "name=inp_es_passwd","value=dyesabel",ENDITEM, "name=inp_dep_arp_cd_1","value=sfo",ENDITEM, "name=leaveMonth","value=Nov",ENDITEM, "name=inp_dep_dt_dy_1","value=12",ENDITEM, "name=inp_dep_tm_1","value=6:00AM",ENDITEM, "name=inp_arr_arp_cd_1","value=dfw",ENDITEM, "name=returnMonth","value=Dec",ENDITEM, "name=inp_ret_dep_dt_dy","value=13",ENDITEM, "name=inp_ret_dep_tm","value=6:00AM",ENDITEM, "name=inp_pax_cnt","value=1",ENDITEM, "name=inp_dep_dt_mn_1","value=Nov",ENDITEM, "name=inp_ret_dep_dt_mn","value=Dec",ENDITEM, "name=inp_dep_day","value=5",ENDITEM, "name=inp_arr_day","value=1",ENDITEM, "name=inp_dep_year","value=1999",ENDITEM, "name=inp_arr_year","value=1999",ENDITEM, "name=tv_module","value=TR",ENDITEM, "name=expr_path","value=Y",ENDITEM, LAST);
web_submit_form(”glbwhere.ctl", "Action=/glblwhere.ctl?SEQ=918851913278106", ITEMDATA, "name=x","value=50",ENDITEM, "name=y","value=17",ENDITEM, LAST);}Sample1.cglbwhere.ctl1.決定要捕捉的數(shù)值
比較腳本1.2.轉(zhuǎn)換到腳本視圖1.3.選擇
Tools>ComparewithVuser1.決定要捕捉的數(shù)值
1.4.比較腳本"Action=/glblwhere.ctl?SEQ=918851913278106", "Action=/glblwhere.ctl?SEQ=918852039523443","name=x","value=50",ENDITEM,"name=y","value=17",ENDITEM,"name=x","value=64",ENDITEM,"name=y","value=14",ENDITEM,glbwhere.ctl有三個(gè)值是不同的"Action=/glblwhere.ctl?SEQ=918851913278106", "Action=/glblwhere.ctl?SEQ=918852039523443","name=x","value=50",ENDITEM,"name=y","value=17",ENDITEM,"name=x","value=64",ENDITEM,"name=y","value=14",ENDITEM,1.決定要捕捉的數(shù)值
到底是哪個(gè)值呢?SEQ=918851913278106","name=x","value=50","name=y","value=17",SEQ=918852039523443","name=x","value=67","name=y","value=14",glbwhere.ctl這個(gè)數(shù)值在每個(gè)會(huì)話都會(huì)發(fā)生變化并且在一個(gè)會(huì)話中重復(fù)使用這些數(shù)值沒有關(guān)系–它們僅僅是鼠標(biāo)點(diǎn)擊的屏幕坐標(biāo),在一個(gè)范圍內(nèi)發(fā)生變化不會(huì)影響腳本的運(yùn)行手工關(guān)聯(lián)
2.創(chuàng)建一個(gè)參數(shù)用來保存動(dòng)態(tài)數(shù)值web_create_html_param(param_name,leftboundary,rightboundary);用戶定義的參數(shù)名稱圍繞捕捉數(shù)值的左邊的字符串圍繞捕捉數(shù)值右側(cè)的字符串這些字符串可以在VuGen的RecordingLog里面以及頁(yè)面的源HTML里面發(fā)現(xiàn)通過在虛擬用戶腳本中增加下面的語句來創(chuàng)建一個(gè)參數(shù):2.創(chuàng)建一個(gè)參數(shù)用來保存動(dòng)態(tài)數(shù)值
在哪個(gè)地方加入函數(shù)web_create_html_param?web_add_cookieweb_add_cookieexpress.ctlglbwhere.ctl2.1.把函數(shù)web_create_html_param()加在產(chǎn)生動(dòng)態(tài)值頁(yè)面的步驟之前這個(gè)步驟要使用動(dòng)態(tài)值這個(gè)步驟得到動(dòng)態(tài)值web_create_html_param()加在這兒2.創(chuàng)建一個(gè)參數(shù)用來保存動(dòng)態(tài)數(shù)值
如何獲得邊界值?web_create_html_param(“seq”,?,?);web_create_html_param(param_name,leftboundary,rightboundary);2.創(chuàng)建一個(gè)參數(shù)用來保存動(dòng)態(tài)數(shù)值
確定左邊界以及右邊界2.2.在腳本視圖,把動(dòng)態(tài)值拷貝到剪貼板
左邊界右邊界2.創(chuàng)建一個(gè)參數(shù)用來保存動(dòng)態(tài)數(shù)值
確定左邊界和右邊界2.3.在RecordingLog里面,按Ctrl+F,把剛才拷貝的字符串粘帖在FindWhat輸入框里,點(diǎn)擊Find2.創(chuàng)建一個(gè)參數(shù)用來保存動(dòng)態(tài)數(shù)值
確定左邊界和右邊界web_create_html_param(“seq”,“????????????”,“???????????”);web_create_html_param
(“seq”,
“glblwhere.ctl?SEQ=”,
“\“METHOD=POST>”);右邊界左邊界2.4.把左邊界和右邊界的文本拷貝到函數(shù)中的特定位置處sourceHTML2.創(chuàng)建一個(gè)參數(shù)用來保存動(dòng)態(tài)數(shù)值web_create_html_param(“seq”,“glblwhere.ctl?SEQ=”,“\“METHOD=POST>”);為什么?把函數(shù)web_create_html_param()加在產(chǎn)生動(dòng)態(tài)值頁(yè)面的步驟之前.web_add_cookieweb_add_cookieexpress.ctlglbwhere.ctlweb_create_html_param數(shù)值918854739725573在腳本回放過程中12L2R3手動(dòng)關(guān)聯(lián)
3.在腳本中參數(shù)化數(shù)值如何起作用的web_create_html_param
指定seq作為存儲(chǔ)動(dòng)態(tài)值的參數(shù)這個(gè)步驟用到了動(dòng)態(tài)值腳本回放完成后,VuGen
把捕捉到的值用來替代參數(shù)“seq”這個(gè)步驟產(chǎn)生了一個(gè)嵌在頁(yè)面里面的動(dòng)態(tài)值VuGen先把動(dòng)態(tài)值存在參數(shù)“seq”中4.確認(rèn)執(zhí)行是否正確
Run-TimeSettings-Log選擇Extendedlog,勾選Parametersubstitution項(xiàng)4.確認(rèn)執(zhí)行是否正確
檢查ExecutionLog小結(jié)為了發(fā)現(xiàn)和手工關(guān)聯(lián)動(dòng)態(tài)值:比較兩個(gè)完全相同的虛擬用戶的腳本內(nèi)容把函數(shù)web_create_html_param放在產(chǎn)生動(dòng)態(tài)值的頁(yè)面之前新版本的LoadRunner采用的是另外的動(dòng)態(tài)關(guān)聯(lián)的函數(shù),函數(shù)的表達(dá)式雖然有所不同可是意義卻一樣。Web_reg_save_param()。
練習(xí)時(shí)間第二課自動(dòng)捕捉動(dòng)態(tài)值目標(biāo)在本課中,你將能學(xué)習(xí)到:如何選擇關(guān)聯(lián)方法如何自動(dòng)化的關(guān)聯(lián)動(dòng)態(tài)值錄制過程中錄制完成后選擇關(guān)聯(lián)方法(1)下面情況下在錄制過程中關(guān)聯(lián):Web應(yīng)用服務(wù)器是BlueMartiniBroadVisionNetDynamics……會(huì)話值有一個(gè)清晰的上下文你可以自己決定關(guān)聯(lián)的規(guī)則錄制過程中關(guān)聯(lián)可以通過關(guān)聯(lián)錄制選項(xiàng)實(shí)現(xiàn)選擇關(guān)聯(lián)方法(2)下面情況下在錄制后進(jìn)行關(guān)聯(lián):上下文是不清晰的你自己不能夠決定關(guān)聯(lián)規(guī)則錄制后關(guān)聯(lián)可以這樣實(shí)現(xiàn):手工,使用參數(shù)化函數(shù)(前面章節(jié)已經(jīng)有講述)自動(dòng),使用關(guān)聯(lián)向?qū)т浿七^程中,自動(dòng)關(guān)聯(lián)的過程1.設(shè)置關(guān)聯(lián)錄制選項(xiàng)2.錄制3.檢查是否正確執(zhí)行錄制過程中自動(dòng)關(guān)聯(lián)
1.設(shè)置關(guān)聯(lián)錄制選項(xiàng)1.2.勾選Enablecorrelationduringrecording項(xiàng)1.1.打開錄制選項(xiàng)對(duì)話框,選擇關(guān)聯(lián)標(biāo)簽錄制過程中自動(dòng)關(guān)聯(lián)
創(chuàng)建關(guān)聯(lián)規(guī)則選擇要?jiǎng)?chuàng)建規(guī)則的應(yīng)用服務(wù)器B.用戶就可以自行命名此規(guī)則的名稱A.點(diǎn)擊右下角的NewRule在相應(yīng)的服務(wù)器下新增一個(gè)rule錄制過程中自動(dòng)關(guān)聯(lián)
創(chuàng)建關(guān)聯(lián)規(guī)則C.選擇一個(gè)行為(規(guī)則類型)Searchforparametersinallofthebodytext用戶自行定義左右邊界可以定義參數(shù)的前綴高級(jí)選項(xiàng)中可以定義發(fā)現(xiàn)的動(dòng)態(tài)值的偏移量和長(zhǎng)度Searchforparametersinlinksandformactions除可以自行定義左右邊界外,還可以定義替代的右邊界SearchforparametersincookieheadersTexttoenteraweb_reg_add_cookiefunctionby錄制過程中自動(dòng)關(guān)聯(lián)
創(chuàng)建關(guān)聯(lián)規(guī)則Rightof(boundary)Leftof(boundary)OR(alternateleftboundary)InstanceMatchCaseReverseSearchParameterPrefixAlwayscreatenewparameterD.選擇其他需要的選項(xiàng)錄制過程中自動(dòng)關(guān)聯(lián)
創(chuàng)建關(guān)聯(lián)規(guī)則E.測(cè)試規(guī)則被參數(shù)化的文本以參數(shù)化的格式出現(xiàn)在SubstitutionResult輸入框中如果替代出現(xiàn):再次點(diǎn)擊Test在Sourcestringforsubstitution輸入框中輸入一個(gè)字符串點(diǎn)擊Test創(chuàng)建的參數(shù)和被替代的值都會(huì)用顏色顯示在兩個(gè)窗口中采取的規(guī)則列表也會(huì)出現(xiàn)在AppliedRules框中錄制過程中自動(dòng)關(guān)聯(lián)
2.錄制2.2.勾選相應(yīng)的選項(xiàng):Createrule(s)Correlateinscript2.1.開始錄制第一次回放腳本,會(huì)出現(xiàn)提示,要求用戶作出選擇,是否需要關(guān)聯(lián)錄制過程中自動(dòng)關(guān)聯(lián)
錄制VuGen在相應(yīng)的步驟增加一個(gè)函數(shù)web_reg_save_param()
錄制過程中自動(dòng)關(guān)聯(lián)左右邊界及出現(xiàn)的順序均出現(xiàn)在腳本視圖中錄制過程中自動(dòng)關(guān)聯(lián)
3.檢查執(zhí)行是否正確確保:Generatereport...
和Displayreport...均被勾選勾選Savecorrelationinformation...duringreplay錄制過程中自動(dòng)關(guān)聯(lián)檢查運(yùn)行結(jié)果窗口錄制完成后自動(dòng)關(guān)聯(lián)1.在VuGen里面回放腳本2.如果出錯(cuò)則點(diǎn)擊工具欄上的FindCorrelations3.如果有動(dòng)態(tài)值,則會(huì)出現(xiàn)在腳本下方的一個(gè)單獨(dú)窗口中4.選取相應(yīng)的數(shù)值,點(diǎn)擊Correlate或者CorrelateAll5.檢查腳本運(yùn)行的正確性錄制完成后自動(dòng)關(guān)聯(lián)點(diǎn)擊Correlate或者CorrelateAll按鈕關(guān)聯(lián)成功關(guān)聯(lián)失敗錄制完成后自動(dòng)關(guān)聯(lián)兩種視圖表現(xiàn)關(guān)聯(lián)后的腳本錄制完成后自動(dòng)關(guān)聯(lián)
5.檢查腳本執(zhí)行是否正確檢查腳本執(zhí)行完成的結(jié)果窗口小結(jié)下面情況在錄制過程中進(jìn)行關(guān)聯(lián)動(dòng)態(tài)會(huì)話值是比較清晰的上下文自己能夠決定關(guān)聯(lián)規(guī)則通過關(guān)聯(lián)錄制選項(xiàng)完成錄制過程中的關(guān)聯(lián)下面情況在錄制完成后進(jìn)行關(guān)聯(lián):動(dòng)態(tài)值的上下文不是很清楚自己無法決定關(guān)聯(lián)規(guī)則通過VuGen里面的關(guān)聯(lián)向?qū)瓿射浿坪蟮淖詣?dòng)關(guān)聯(lián)
練習(xí)時(shí)間第三課理解錄制和回放目標(biāo)在本課中你將能學(xué)習(xí)到:瀏覽器和服務(wù)器之間的兩種數(shù)據(jù)傳輸方式一個(gè)HTTP請(qǐng)求是如何做到的VuGen捕捉HTTP請(qǐng)求的不同方法VuGen何時(shí)錄制成web_submit_form
以及
web_submit_data瀏覽器和服務(wù)器之間的兩種數(shù)據(jù)傳輸方式用戶定義–輸入的數(shù)據(jù)作為用戶下一步動(dòng)作的結(jié)果UserName:Timname=userNamevalue=Timname=next.xvalue=56name=next.yvalue=5Next...NormalDeliveryOvernightDeliveryname=DeliverTypevalue=41用戶輸入數(shù)據(jù)用戶點(diǎn)擊一個(gè)按鈕舉例瀏覽器和服務(wù)器之間的兩種數(shù)據(jù)傳輸方式舉例隱藏的–用戶看不到的數(shù)據(jù),被Web站點(diǎn)用來決定要返回什么2UserName:Timname=userNamevalue=Timname=sessionIDvalue=1439name=userTypevalue=goldname=next.xvalue=56name=next.yvalue=5name=InOutvalue=receivableNext...NormalDeliveryOvernightDeliveryname=DeliverTypevalue=4name=.cgiFieldsvalue=priority服務(wù)器創(chuàng)建并且賦值的數(shù)據(jù)HTTP請(qǐng)求本課中的關(guān)鍵術(shù)語定義:客戶端發(fā)起的一個(gè)請(qǐng)求,在服務(wù)器端執(zhí)行一個(gè)操作。HTTP請(qǐng)求HTTP請(qǐng)求中的主要操作POST方法通常包含用戶自定義數(shù)據(jù)
GET方法通常是從服務(wù)器端請(qǐng)求一個(gè)HTML鏈接或者一個(gè)圖片文件HTTP請(qǐng)求的POST方法調(diào)用1999MicrosoftCorporation.Allrightsreserved.Web瀏覽器steve****服務(wù)器HTTP請(qǐng)求Login.asp“steve”“buba”POST
Login.asp HTTP/1.1user=steve&password=buba&SID=15379HTTP例子方法(POST)對(duì)象(script,“Login.asp”)HTTP版本(1.1)用戶自定義數(shù)據(jù)(“steve”,“buba”)隱藏?cái)?shù)據(jù)(“15379”)HTTP請(qǐng)求的GET方法調(diào)用1999MicrosoftCorporation.Allrightsreserved.Web瀏覽器服務(wù)器HTTP請(qǐng)求Addresses.htmlGET
Addresses.html HTTP/1.1HTTP例子方法(GET)對(duì)象(HTMLpage,“Addresses.html”)HTTP版本(1.1)HTTP請(qǐng)求是如何產(chǎn)生的?HTMLJavaScriptJavaAppletActiveXThird-partyprogramsHTML產(chǎn)生HTTP請(qǐng)求<FORM Action=Login.asp Method=“POST”>user: <input name=userNamevalue=“”>password:<input name=passwordvalue=“” type=password> <input name=SessionIDvalue=15379 type=hidden><\FORM>POST login.aspHTTP/1.1user=stevepassword=bubasessionID=15379服務(wù)器舉例結(jié)果對(duì)象數(shù)據(jù)JavaScript產(chǎn)生HTTP請(qǐng)求<scriptlanguage=Javascript
…><FORMAction= onSubmit=’JSSubmitLogin(this)'method=“POST”>user:<input name=userNamevalue=“” type=text>password:<input name=passwordvalue=“” type=password> <input name=sessionIDvalue=15379type=hidden></FORM>???POST login.aspHTTP/1.1user=stevepassword=bubasessionID=15379服務(wù)器舉例舉例VuGen
腳本錄制過程VuGen如何錄制HTTP請(qǐng)求1.VuGen使用web_url請(qǐng)求啟動(dòng)瀏覽器捕捉傳送的HTTP請(qǐng)求。Web服務(wù)器VuGenRecordProxy1999MicrosoftCorporation.Allrightsreserved.http://VuGen錄制過程
瀏覽器啟動(dòng)和代理的設(shè)置1.VuGen使用web_url請(qǐng)求啟動(dòng)瀏覽器捕捉傳送的HTTP請(qǐng)求NativeProxyVuGen如何錄制HTTP請(qǐng)求2.VuGen把從服務(wù)器端返回的頁(yè)面保存在RecordProxy緩存區(qū)中。1.VuGen使用web_url請(qǐng)求啟動(dòng)瀏覽器捕捉傳送的HTTP請(qǐng)求。REGISTEREDUSERSEnterLoginNamePasswordFramesNoFramesMyDefaultVISITORSINFOcacheWebserverVuGenRecordProxyWebserverWebserverVuGen錄制過程
返回的頁(yè)面保存在緩存區(qū)中2.VuGen把從服務(wù)器端返回的頁(yè)面保存在RecordProxy緩存區(qū)中NativeProxy1999MicrosoftCorporation.Allrightsreserved.http://VuGen如何錄制HTTP請(qǐng)求2.VuGen把從服務(wù)器端返回的頁(yè)面保存在RecordProxy緩存區(qū)中。3.VuGen把下一個(gè)HTTP請(qǐng)求的屬性與緩存區(qū)中的進(jìn)行比較1.VuGen使用web_url請(qǐng)求啟動(dòng)瀏覽器捕捉傳送的HTTP請(qǐng)求。VuGen
錄制過程
新的請(qǐng)求與緩存進(jìn)行比較POST login.aspHTTP/1.1user=stevepassword=bubasessionID=15379HTTPRequestVuGenRecordProxy<FormAction=login.aspMethod=“POST”><inputname=uservalue=“”><inputname=passwordvalue=“”><inputname=sessionIDvalue=15379></Form>login.asplogin.asp1st-compareobjects2nd-comparedatafields3rd-comparevaluesofhiddenfields1537915379name=sessionIDsessionIDusername=username=passwordpasswordPASScache3.VuGen把下一個(gè)HTTP請(qǐng)求的屬性與緩存區(qū)中的進(jìn)行比較1st-compareobjects2nd-comparedatafields3rd-comparevaluesofhiddenfieldsFAIL比較由JavaScript產(chǎn)生的HTTP請(qǐng)求POST login.aspHTTP/1.1user=stevepassword=bubasessionID=15379HTTPRequestVuGenRecordProxy<scriptlanguage=Javascript…><FORMAction=onSubmit=’JSSubmitLogin(this)'><inputname=uservalue=“”><inputname=passwordvalue=“”><inputname=sessionIDvalue=15379></Form>login.asp?Xcache3.VuGen把下一個(gè)HTTP請(qǐng)求的屬性與緩存區(qū)中的進(jìn)行比較VuGen如何錄制HTTP請(qǐng)求4.VuGen基于用戶的動(dòng)作和比較的結(jié)果錄制相應(yīng)的語句2.VuGen把從服務(wù)器端返回的頁(yè)面保存在RecordProxy緩存區(qū)中。3.VuGen把下一個(gè)HTTP請(qǐng)求的屬性與緩存區(qū)中的進(jìn)行比較1.VuGen使用web_url請(qǐng)求啟動(dòng)瀏覽器捕捉傳送的HTTP請(qǐng)求。RecordProxy1999MicrosoftCorporation.Allrightsreserved.REGISTEREDUSERSEnterLoginNamePasswordFramesNoFramesMyDefaultVISITORSINFOsteve****web_submit_form(”start", ITEMDATA, "name=user","value=steve",ENDITEM, "name=password","value=bean",ENDITEM, LAST);VuGenVuGen錄制過程
4.基于比較的錄制1st-compareobjects2nd-comparedatafields3rd-comparevalues
ofhiddenfieldscache如果請(qǐng)求和緩存區(qū)的匹配,VuGen
記錄成web_submit_form
(上下文相關(guān))RecordProxy1999MicrosoftCorporation.Allrightsreserved.REGISTEREDUSERSEnterLoginNamePasswordFramesNoFramesMyDefaultVISITORSINFOsteve****web_submit_data(”start", “Action=login.asp”, “Method=POST” ITEMDATA, "name=user","value=steve",ENDITEM, "name=password","value=bean",ENDITEM, "name=sessionID","value=15379",ENDITEM, LAST);VuGenFAILVuGen錄制過程
4.基于比較的錄制1stcompareobjectsXcache如果請(qǐng)求不匹配緩存區(qū),VuGen
web_submit_data(analog)ContextSensitiveVSAnalogweb_submit_form("start", ITEMDATA, "name=user","value=steve",ENDITEM, "name=password","value=buba",ENDITEM, LAST);web_submit_data("start",
“Action=login.asp”,
“Method=POST” ITEMDATA, "name=user","value=steve",ENDITEM, "name=password","value=buba",ENDITEM,
"name=sessionID","value=15379",ENDITEM, LAST);ANALOGCONTEXTSENSITIVEContextSensitiveVSAnalogContextSensitive語句一些必要的信息沒有包含在新的請(qǐng)求中VuGen會(huì)在緩存區(qū)搜索最近的請(qǐng)求結(jié)果如果緩存信息匹配新的請(qǐng)求,VuGen記錄成web_submit_formAnalog語句包含完成新請(qǐng)求的所有信息不會(huì)搜索內(nèi)存區(qū)VuGen記錄成web_submit_dataContextSensitive語句ActionMethodHiddenDataweb
_submit_form
Action
(nameofthelink)web
_linkAction
(nameoftheimage)web
_image僅僅能夠在最近請(qǐng)求的上下文中執(zhí)行的語句STATEMENT CACHEDDATA由上一個(gè)HTTP請(qǐng)求產(chǎn)生的頁(yè)面VuGen
回放過程VuGen如何回放?web_url("", "URL=http:///", "TargetFrame=_TOP",LAST);web_submit_form(”start", ITEMDATA, "name=user","value=steve",ENDITEM, "name=password","value=buba",ENDITEM, LAST);VuGen'sCache服務(wù)器...<FormAction=login.aspMethod=“POST”><inputname=uservalue=“”><inputname=passwordvalue=“”><inputname=sessionIDvalue=15380></Form>...HTTPRequest1ResultofHTTPRequest2AnalogExample:
web_urlVuGen如何回放?web_submit_form(”start", ITEMDATA, "name=user","value=steve",ENDITEM, "name=password","value=buba",ENDITEM, LAST);服務(wù)器VuGen'sCache...<FormAction=login.aspMethod=“POST”><inputname=uservalue=“”><inputname=passwordvalue=“”><inputname=sessionIDvalue=15380></Form>...ResultofHTTPRequest4ContextSensitiveExample:
web_submit_form2login.aspPOSTsessionID=153801Action?Method?Hiddendata?POST
login.aspHTTP/1.1user=stevepassword=bubasessionID=153803
NEWPAGEREPLACESOLDPAGEVuGen如何回放?web_submit_data(”start", “Action=login.asp”, “Method=POST” ITEMDATA, "name=user","value=steve",ENDITEM, "name=password","value=buba",ENDITEM, "name=sessionID","value=15379",ENDITEM, LAST);服務(wù)器...<FormAction=login.aspMethod=“POST”><inputname=uservalue=“”><inputname=passwordvalue=“”><inputname=sessionIDvalue=15380></Form>...ResultofHTTPRequest2AnalogExample:
web_submit_dataPOSTlogin.aspHTTP/1.1user=stevepassword=bubasessionID=153791ERROR!SessionID’sdonotmatch!cacheisnotsearchedAction標(biāo)簽值和隱藏?cái)?shù)據(jù)不會(huì)是固定的代碼在回放的時(shí)候,從內(nèi)存里可以得到如果是動(dòng)態(tài)變化的值,虛擬用戶仍然能夠運(yùn)行上下文相關(guān)語句的好處無需捕捉動(dòng)態(tài)值小結(jié)HTTP請(qǐng)求的數(shù)據(jù)可以是隱藏的和動(dòng)態(tài)的VuGen把來自于服務(wù)器端的頁(yè)面儲(chǔ)存在它自己的緩存區(qū)中新的請(qǐng)求會(huì)與緩存中的數(shù)據(jù)進(jìn)行比較新的請(qǐng)求與緩存區(qū)的數(shù)據(jù)匹配則錄制成為contextsensitive請(qǐng)求與緩存區(qū)的數(shù)據(jù)不匹配則錄制成為analogContextsensitive語句從緩存區(qū)中得到數(shù)據(jù)如果數(shù)據(jù)是動(dòng)態(tài)的,虛擬用戶仍然可以回放很少需要捕捉動(dòng)態(tài)值
練習(xí)時(shí)間第四課數(shù)據(jù)約束問題目標(biāo)學(xué)習(xí)在腳本中如何找到依存的數(shù)據(jù)學(xué)習(xí)如何通過更改腳本處理依存數(shù)據(jù)什么是數(shù)據(jù)依存?舉例1:
登錄過程用戶名和密碼互相依存對(duì)于任何用戶來說,針對(duì)于登錄過程,一個(gè)用戶對(duì)應(yīng)一個(gè)口令。(一一對(duì)應(yīng)關(guān)系)
舉例2:
圖書檢索過程
(對(duì)于僅有一個(gè)作者的圖書來說)圖書題目和作者姓名互相依存對(duì)于任何一本書來說,只有一個(gè)作者是有效的(一一對(duì)應(yīng)關(guān)系)對(duì)于任意一個(gè)作者名字,一本或者多本圖書都是有效的(一對(duì)多的關(guān)系)復(fù)習(xí)數(shù)據(jù)約束的問題哪個(gè)字段的值受限于其他字段值的變化??復(fù)習(xí)數(shù)據(jù)相互約束字段–
未解決時(shí)數(shù)據(jù)庫(kù)服務(wù)器Web瀏覽器(客戶端)FindauthorShakespeare發(fā)現(xiàn)45個(gè)匹配的結(jié)果第一次運(yùn)行第二次運(yùn)行DisplaymatchMacBethDisplayMacBethFindauthorShakespeareFindauthorDickens發(fā)現(xiàn)19個(gè)匹配的結(jié)果DisplaymatchMacBethDisplayMacBethFindauthorDickensWeb
服務(wù)器OKMacBethnotfound復(fù)習(xí)相互約束字段的參數(shù)化數(shù)據(jù)庫(kù)服務(wù)器Web瀏覽器(客戶端)FindauthorShakespeare發(fā)現(xiàn)45個(gè)匹配的結(jié)果第一次運(yùn)行第二次運(yùn)行DisplaymatchMacBethDisplayMacBethFindauthorShakespeareFindauthorDickens發(fā)現(xiàn)19個(gè)匹配的結(jié)果DisplaymatchOliverTwistDisplayOliverTwistFindauthorDickensWeb
服務(wù)器OKOK復(fù)習(xí)問題數(shù)據(jù)相互依存方法參數(shù)化依存的字段?如果沒有意識(shí)到數(shù)據(jù)依賴的問題如何才能發(fā)現(xiàn)數(shù)據(jù)依賴的問題如果數(shù)據(jù)是不可預(yù)知的??復(fù)習(xí)?如果沒有意識(shí)到字段是存在相互約束的問題?虛擬用戶回放失敗如果所有的循環(huán),只有使用錄制時(shí)候的數(shù)據(jù)的那次循環(huán)能夠成功,通常會(huì)表示在錄制的腳本中存在相互約束的字段。虛擬用戶回放失敗
定位問題之前錄制的數(shù)據(jù)增加的數(shù)據(jù)增加的數(shù)據(jù)增加的數(shù)據(jù)ParameterValue:{item}SkiJacketSkiPantsGogglesGloves
參數(shù)文件中的數(shù)據(jù)引起動(dòng)態(tài)關(guān)聯(lián)數(shù)據(jù)如何才能發(fā)現(xiàn)相互約束的字段??找到相互約束的數(shù)據(jù)1.確定哪個(gè)步驟包含相互依存數(shù)據(jù)2.使用不同的數(shù)據(jù)錄制同一的過程3.使用WDiff比較兩個(gè)虛擬用戶的腳本找到相互約束的數(shù)據(jù)
1.確認(rèn)哪個(gè)步驟存在相互約束的數(shù)據(jù)skiJacket790342AddShoppingCart.x
37AddShoppingCart.y
37SubmitForm:HotDeals.pl展開失敗的循環(huán)查看失敗的步驟找到相互約束的字段
2.使用不同的數(shù)據(jù)重新錄制相同的業(yè)務(wù)過程SkiJacketSkiPantsGogglesGlovesRecordingProxyVuGen
web_submit_form("store.pl", ITEMDATA, "name=item","value=SkiPants
",ENDITEM, "name=availability.x","value=58",ENDITEM, "name=availability.y","value=19",ENDITEM, LAST);
web_submit_form("HotDeals.pl", ITEMDATA, "name=SkiPants","value=0147699",ENDITEM, "name=addcart.x","value=43",ENDITEM, "name=addcart.y","value=18",ENDITEM, LAST);找到相互約束的數(shù)據(jù)
3.使用WDiff比較兩次的虛擬用戶腳本"name={item}","value=0147699",ENDITEM,", "name=x","value=50",ENDITEM,"name=y","value=17",ENDITEM,"name=x","value=38",ENDITEM,"name=y","value=24",ENDITEM,"name=SkiPants","value=0153477",ENDITEM,",01476990153477M存在約束值的數(shù)據(jù)SubmitForm:HotDeals.pl如果數(shù)據(jù)是不可預(yù)知的??找到不可預(yù)知的數(shù)據(jù)1.找到存在依存關(guān)系數(shù)據(jù)的邊界值當(dāng)邊界值是唯一時(shí)使用web_create_html_param()要發(fā)現(xiàn)出現(xiàn)在特定位置的不唯一的邊界值時(shí)使用web_create_html_param_ex()
2.更改虛擬用戶腳本,捕捉、重用動(dòng)態(tài)數(shù)據(jù)3.確認(rèn)執(zhí)行是否正確web_create_html_param
("ItemValue"
PARAMETERNAME,
LEFTBOUNDARY,
RIGHTBOUNDARY);找到不可預(yù)知的數(shù)據(jù)
1.找到存在依存關(guān)系數(shù)據(jù)的邊界值"value="">SkiJacket"約束值的數(shù)據(jù)0247699找到不可預(yù)知的數(shù)據(jù)
當(dāng)邊界值不唯一時(shí)web_create_html_param
(“ItemValue”PARAMETERNAME,
_________
LEFTBOUNDARY,
_________
RIGHTBOUNDARY);“value=““>SkiJacket“_ex___________INSTANCE
);3“3”1232.更改虛擬用戶腳本web_create_html_param_ex
(“ItemValue
,
_____________,
_____________ _____________);“value=“
web_image("FindHotDeals", "Alt=SearchFlightsButton", LAST);
web_submit_form("store.pl", ITEMDATA, "name=item","value={item}",ENDITEM, "name=availability.x","value=58",ENDITEM, "name=availability.y","value=19",ENDITEM, LAST);
web_submit_form("HotDeals.pl", ITEMDATA, "name={item}","value={ItemValue}", ENDITEM, "name=addcart.x","value=43",ENDITEM, "name=addcart.y","value=18",ENDITEM, LAST);
web_create_html_param_ex(“ItemValue”,“value=”,“>SkiJacket”,“3”);“>SkiJacket“,“3”3.確認(rèn)執(zhí)行是否正確小結(jié)?如果沒有意識(shí)到是否有相互約束的數(shù)據(jù)?如何發(fā)現(xiàn)哪個(gè)數(shù)據(jù)存在相互依存的關(guān)系?如果數(shù)據(jù)是不可預(yù)知的??解決方法1)確定哪個(gè)步驟有相互約束的數(shù)據(jù)2)使用不同的數(shù)據(jù)錄制相同業(yè)務(wù)過程3)使用Wdiff找到相互約束的數(shù)據(jù)解決方法1)找到動(dòng)態(tài)值的邊界2)更改腳本,捕捉、使用動(dòng)態(tài)數(shù)據(jù)
練習(xí)時(shí)間第五課關(guān)于虛擬用戶的問題及處理方法目標(biāo)本課中你將能學(xué)習(xí)到:確定一個(gè)虛擬用戶失敗的原因在虛擬用戶腳本中增加邏輯判斷語句擴(kuò)展增強(qiáng)虛擬用戶的輸出日志向輸出窗口發(fā)送參數(shù)值在運(yùn)行設(shè)置中開啟Continueonerror選項(xiàng)為什么虛擬用戶會(huì)失敗?讓虛擬用戶告訴你.ItallstartedwhenIwasveryyoung...虛擬用戶能夠告訴你什么?檢查語句的返回值輸入?yún)?shù)的值錯(cuò)誤信息事務(wù)狀態(tài)擴(kuò)展增強(qiáng)虛擬用戶的輸出日志本課中關(guān)鍵術(shù)語定義:在服務(wù)器處理并發(fā)特性時(shí),確認(rèn)所有的業(yè)務(wù)過程均能夠正確的完成。壓力下的功能測(cè)試復(fù)習(xí)圖片搜索引擎能否返回期待結(jié)果新聞?wù)军c(diǎn)能否顯示出圖片使用方法舉例檢查類型
檢查復(fù)習(xí)文本確認(rèn)業(yè)務(wù)過程能正確執(zhí)行...Action1.c(15):TransactionLoginstarted....Action1.c(46):TransactionLoginendedwithPassstatus(Duration:1.7090).Action1.c(47):Theteststep:"SubmitForm:reservation.pl"succeeded.Action1.c(54):TransactionInsertSalesOrderstarted.Action1.c(55):StartingStep-"SubmitForm:SalesOrder".Action1.c(57)TransactionDB_InsertOrderstarted....Action1.c(65):TransactionDB_InsertOrderendedwithPassstatus(Duration:3.6320).Action1.c(66):Theteststep:"SubmitForm:reservation.pl"succeeded.Action1.c(68):ERROR:TextCheck:VerifyOrderNumber-Failed: Expected“1234”,butfound“”Startingiteration2.[MsgId:MMSG-15970]Action1.c(13):StartingStep-"URL:OrderEntryModule".Action1.c(15):TransactionLoginstarted....輸出日志
復(fù)習(xí)你想要立即知道什么信息?為什么檢查點(diǎn)會(huì)失敗(更加詳細(xì))?這次循環(huán)的輸入數(shù)據(jù)是什么?在這次循環(huán)過程中,捕獲到的動(dòng)態(tài)值是什么?Action1.c(15):ERROR:TextCheck:VerifyOrderNumber-Failed: Expected"1234",butfound""擴(kuò)展增強(qiáng)虛擬用戶輸出日志1.捕獲到檢查語句的返回值。web
_image_checkweb
_find
LR_PASS檢查狀態(tài)X檢查語句均有返回值LR_PASSLR_FAILLR_FAILLR_PASS返回值為
0LR_FAIL返回值為1
web_find("Verify_Order_Number", "RightOf=OrderNo.:,", "LeftOf=,hasbeenprocessed", "what=1234", LAST);1.捕獲檢查語句的返回值rc=
1.1
聲明一個(gè)整型的變量,獲取檢查語句的返回值int
rc;....1.2
把檢查語句的結(jié)果賦值給此變量擴(kuò)展增強(qiáng)虛擬用戶輸出日志1.捕獲到檢查語句的返回值。2.比較返回值與LR_FAIL是否相等2.比較返回值與LR_FAIL是否相等rc=
web_find("Verify_Order_Number", "RightOf=OrderNo.:,", "LeftOf=,hasbeenprocessed", "what=1234", LAST);if(rc==LR_FAIL)貼士:比較大小使用“==”,給某個(gè)變量賦值使用“=”。擴(kuò)展增強(qiáng)虛擬用戶輸出日志2.比較返回值與LR_FAIL是否相等3.如果返回值等于LR_FAIL,則傳送一個(gè)問題的描述到輸出的日志中去。1.捕獲到檢查語句的返回值。lr_error_message(string);3.如果返回值等于LR_FAIL,則傳送一個(gè)問題的描述到輸出的日志中去一個(gè)格式化的字符串,將要被傳送到輸出窗口使用也可以使用標(biāo)準(zhǔn)C語言提供的printf等語句lr_error_message(“沒有從服務(wù)器端取到訂單號(hào)碼。”);lr_error_message(“檢查供應(yīng)商是否正確。”);OrderClerk.c(3):ERROR:沒有從服務(wù)器端取到訂單號(hào)碼。3.如果返回值等于LR_FAIL,則傳送一個(gè)問題的描述到輸出的日志中去
舉例OrderClerk.c(4):ERROR:檢查供應(yīng)商是否正確。3.如果返回值等于LR_FAIL,則傳送一個(gè)問題的描述到輸出的日志中去lr_error_message(“檢查供應(yīng)商是否正確。”);
}lr_error_message(“沒有從服務(wù)器端取到訂單號(hào)碼。”);{if(rc==LR_FAIL)rc=
web_find("Verify_Order_Number", "RightOf=OrderNo.:,", "LeftOf=,hasbeenprocessed", "what=1234", LAST);舉例擴(kuò)展增強(qiáng)虛擬用戶輸出日志1.捕獲到檢查語句的返回值。2.比較返回值與LR_FAIL是否相等3.如果返回值等于LR_FAIL,則傳送一個(gè)問題的描述到輸出的日志中去。4.把輸入的參數(shù)轉(zhuǎn)換到輸出信息中。lr_eval_string({參數(shù)名});4.把輸入的參數(shù)轉(zhuǎn)換到輸出信息中想取得數(shù)值的參數(shù)名字使用OrderClerk.c(5):ERROR:
供應(yīng)商號(hào)碼:7832
lr_error_message(“供應(yīng)商號(hào)碼:%s”,);lr_error_message(“原材料號(hào)碼:%s”,
);lr_eval_string(“{Vendor}”)lr_eval_string(“{Material_Nm}”)4.把輸入的參數(shù)轉(zhuǎn)換到輸出信息中舉例OrderClerk.c(6):ERROR:
原材料號(hào)碼:ST-349224.把輸入的參數(shù)轉(zhuǎn)換到輸出信息中l(wèi)r_error_message(“沒有從服務(wù)器端取到訂單號(hào)碼。”);{if(rc==LR_FAIL)lr_error_message(“檢查供應(yīng)商是否正確。”);lr_error_message(“供應(yīng)商號(hào)碼:%s”,lr_eval_string(“{Vendor}”));lr_error_message(“原材料號(hào)碼:%s”,lr_eval_string(“{Material_Nm}”));擴(kuò)展增強(qiáng)虛擬用戶輸出日志1.捕獲到檢查語句的返回值。2.比較返回值與LR_FAIL是否相等3.如果返回值等于LR_FAIL,則傳送一個(gè)問題的描述到輸出的日志中去。4.把輸入的參數(shù)轉(zhuǎn)換到輸出信息中。5.停止執(zhí)行此虛擬用戶腳本。return(值);5.停止執(zhí)行此虛擬用戶腳本一個(gè)數(shù)字,指出VuGen如何停止執(zhí)行虛擬用戶。
使用(0) 停止執(zhí)行當(dāng)前的循環(huán)(-1)停止整個(gè)虛擬用用戶腳本的執(zhí)行應(yīng)該使用什么方法停止當(dāng)前虛擬用戶運(yùn)行return(0);使用return(0):如果虛擬用戶能夠通過執(zhí)行新的循環(huán)、使用不同的數(shù)據(jù)而從錯(cuò)誤中恢復(fù)過來的情況return(-1);使用return(-1);如果錯(cuò)誤是致命的,比如虛擬用戶不能繼續(xù)運(yùn)行的情況供應(yīng)商號(hào)碼和原材料號(hào)碼不匹配,因此這個(gè)業(yè)務(wù)過程不能繼續(xù)Web站點(diǎn)首頁(yè)不能正常顯示示例:示例:5.停止執(zhí)行此虛擬用戶腳本lr_error_message(“沒有從服務(wù)器端取到訂單號(hào)碼。”);{if(rc==LR_FAIL)lr_error_message(“檢查供應(yīng)商是否正確。”);lr_error_message(“供應(yīng)商號(hào)碼:%s”,lr_eval_string(“{Vendor}”));lr_error_message(“原材料號(hào)碼:%s”,lr_eval_string(“{Material_Nm}”));return(0);}擴(kuò)展增強(qiáng)虛擬用戶
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年澳門特別行政區(qū)衛(wèi)生類臨床醫(yī)學(xué)專業(yè)知識(shí)試卷
- 2025年消防執(zhí)業(yè)資格考試題庫(kù)(專業(yè)技能提升題)消防安全管理與控制案例分析試題
- 2025年CPE考試試卷模擬:聽力原文分析與2025年考試趨勢(shì)
- 2025年法語TEF考試試卷寫作模板與范文分析
- 2025年電梯司機(jī)(高級(jí))職業(yè)技能鑒定試卷:電梯智能化改造案例分析
- 2025年泡沫玻璃項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告模板
- 2025年鉆石彩寶項(xiàng)目立項(xiàng)申請(qǐng)報(bào)告
- 2025年澳門特別行政區(qū)事業(yè)單位招聘考試教師招聘政治學(xué)科專業(yè)知識(shí)試卷(政治學(xué)教學(xué)研究)
- 2025年保健按摩師職業(yè)技能鑒定試題集錦
- 藝術(shù)史論基礎(chǔ)知識(shí)試題庫(kù)
- 安徽省2023~2024學(xué)年新高一數(shù)學(xué)自主招生考試試題含答案
- 冠心病患者非心臟手術(shù)麻醉管理專家共識(shí)
- 高中生安全教育
- 嘉興市重點(diǎn)中學(xué)2025年初三沖刺押題(最后一卷)英語試題試卷含答案
- 嬰幼兒護(hù)理的重要知識(shí)點(diǎn)試題及答案
- 智能化綜合農(nóng)貿(mào)市場(chǎng)建設(shè)方案與可行性分析
- 餐飲門店打樣管理制度
- 檔案工作“三納入、四參加、四同步”制度
- 人防車位使用權(quán)轉(zhuǎn)讓協(xié)議一次性終
- 中醫(yī)養(yǎng)生茶飲文化分享
- 中醫(yī)知識(shí)與優(yōu)生優(yōu)育
評(píng)論
0/150
提交評(píng)論