Rational Robot可被用來對包含數據關聯的復雜Web應用進行性能測試。這里所謂數據關聯,是指Web頁面之間存在的數據相關性,例如一個動態的頁面URL或者個別輸入參數需要從前一個頁面中抽取出來,有時候還需要在抽取得到的結果的基礎上做進一步處理。這就使得測試開發員通常必須對Robot自動生成的VU腳本進行修改從而保證其能正確運行。簡單情形下,VU語言庫提供的一些庫函數可以支持常見的抽取需求。但在很多更復雜的情形中,往往需要通過更多的編程來處理頁面之間的數據關聯,包括進行模式匹配、模擬Java Script或者Java Applet的行為等。本文將介紹處理最常見的幾種數據關聯的方法,并提供了一系列很有用的功能函數,幫助測試開發員編寫更具靈活性的VU腳本。
簡介
隨著越來越多的企業應用被移植到Web上,Web應用正變得日益復雜。它們被用來實現復雜的業務流程例如交易甚至工作流。一個業務流程通常包含若干步驟。這些步驟間自然地需要共享某些數據以完成一次連續的“計算”。例如,某一個步驟的輸出可能是下一個步驟所需的輸入。在一個典型的Web應用實現中,業務流程的每個步驟對應為一個HTML頁面,因而最終用戶將與一系列連續的頁面依次交互以完成一個完整的業務流程。由于Web的無狀態特性,這些頁面中通常需要存儲一些信息來實現它們之間所需的數據共享,例如下一個頁面的URL以及其他可能的輸入參數等。這些信息常常是由服務器動態生成,因此每次的值都可能不同。但是,當Robot錄制一個HTTP會話時,它只能記錄這些數據在這個會話中的一個快照。盡管Robot采用了一種稱為“動態數據關聯”(Dynamic data correlation)的技術使得它能夠關聯部分動態的值,但還是無法找出所有需要關聯的值并據此產生具備完善功能和足夠靈活性的VU腳本。即使Robot可以簡單地認為所有的數據都是動態的,如何在可用的HTML頁面中抽取甚至構造這些數據的值則是一個更加復雜和困難的問題,因為Robot對這些數據后隱含的邏輯一無所知。因此,在Robot不能產生令人滿意的VU腳本時,就需要手工修改進行完善。
下面將首先對Web應用中的數據關聯作更進一步的剖析,接著介紹如何使用Robot的“動態數據關聯”技術,然后詳細討論當Robot不能產生滿意的腳本時一些可能的解決方案,包括動態數據值的定制抽取和客戶端數據構造的模擬等。
Web應用中數據關聯的分析
在Web應用中,當一個特定的HTML頁面的URL或者個別輸入參數的值是動態產生因而必須從先于它返回的頁面包含的數據中抽取或者構造出來時,就發生了數據關聯。動態輸入參數的一個很好的例子就是當前很普遍的“Session ID”,它由服務器生成并返回給用戶的瀏覽器,在訪問下一個頁面時這個ID需要被發送回去以獲取存儲在服務器端的會話上下文。輸入參數通常以四種方式提交:HTTP頭參數、Cookie、URL參數和FORM參數。由于URL參數可被認為是URL的一部分,因此可以認為有四種可能發生關聯的動態數據:HTTP頭參數、Cookie、URL、FORM參數。在Robot的VU語言中,一個HTTP請求是通過調用庫函數“http_request”發出的,列表1是給出了一個典型的用例。請注意列表1中各粗體部分,它們分別代表了四種可能發生關聯的動態數據的形式中的一種。
列表1. 函數http_request的典型用例
http_request ["t3079"]
"POST /pkmslogin.form HTTP/1.1\r\n"
"Accept: image/gif, image/x-xbitmap, image/jpeg,image/pjpeg, applicat"
"ion/vnd.ms-excel, application/vnd.ms-powerpoint,application/msword, ap"
"plication/x-shockwave-flash, */*\r\n"
"Referer: " SgenURI_009 "\r\n"
/* "Referer: http://gclgtod.cn.ibm.com/wps/myportal?lang=en_US" */
"Accept-Language: en-us,zh-cn;q=0.5\r\n"
"Content-Type: application/x-www-form-urlencoded\r\n"
"Accept-Encoding: gzip, deflate\r\n"
"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;Windows NT 5.1)\r\n"
"Host: gclgtod.cn.ibm.com\r\n"
"Content-Length: 55\r\n"
"Connection: Keep-Alive\r\n"
"Cache-Control: no-cache\r\n"
"Cookie: w3sauid=d002000000001363710753854620000923482.0009B551AB;PBC_N LSP"
"=en_US; msp=alreadyOffered;JSESSIONID=0000fRBw1aq9nolhnP9ZMKhaw2B:- 1; "
"PD-H-SESSION-ID=4_oxjUZgfvY4ToFOhh9cFnnAg54o4sndHOA6rRkqpxbT2NAAAA\r"
"\n"
"\r\n"
"username=admin