3.4 重定向
當某請求的響應代碼為 301,302,303,307 時,RPT 會自動將響應頭中的 location 的真實路徑作為引用,搜索后續請求的完整 URL,當發現匹配時進行自動關聯,如圖 5 示例:
圖 5. 重定向 URL 自動數據關聯
3.5 請求內容
如果請求內容中出現由 & 符號連接的“name=value”字段,則同 3.3 節,搜索最近出現的響應頭或響應內容中的 name=value,進行自動關聯,如圖 6 示例:
圖 6. 請求內容自動數據關聯
如果請求內容為 XML 文檔格式,即以“
圖 7. XML 請求內容自動數據關聯
4. 基于 Jazz 產品的數據關聯算法
IBM 基于 Jazz 平臺的軟件應用產品是 Jazz Foundation Services 的擴展實現,其基于 REST(Representational State Transfer)規范,以 REST API 的形式提供數據和服務的訪問,也就是說可以通過 HTTP 的 POST/GET/PUT/DETELTE 方法來實現數據的 CREAT/READ/UPDATE/DELETE。
圖 8. 基于 Jazz 產品的數據關聯
RPT8.1 針對 Jazz 協議提供了在 HTTP 協議基礎上的默認的數據關聯規則支持,如圖 2。
對于完整的請求 URL,除了自動實施上述 HTTP 協議的通用關聯規則外,還要搜索最近的響應內容中出現的符合正則表達式 (?s)
.*?src=\"(.*?)\",將 src 字段的值作為引用,從而實現自動關聯,如圖 9 所示:圖 9. Jazz URL 自動數據關聯一
對于請求頭或請求內容中出現由 & 符號連接的“name=value”字段,除了自動實施上述 HTTP 協議的通用關聯規則外,還要對 name 匹配,如果 name 以“id”(不區分大小寫),“Area”,“uuid_versionable”,“Values”結尾,則向前在響應中搜索最近出現的 value 字段作為引用,實現自動關聯,如圖:
圖 10. Jazz URL 自動數據關聯二
5. 數據關聯規則擴展
然而在 Jazz 產品性能測試的實踐過程中,我們發現,由于采用了 web2.0 等新技術,腳本的請求變得愈加復雜,使得目前的數據關聯規則不能滿足需要,數據關聯成為測試腳本編輯和調試的瓶頸。因此在實際測試項目實踐的基礎上,借助 RPT 提供的數據關聯擴展功能,我們在測試生成過程中實現了針對需求的 RPT 數據關聯擴展規則。
首先需要了解測試生成階段的數據關聯原理。自動數據關聯的實現類為 DataCorrelator 類。在測試生成階段,RPT 數據關聯引擎調用其方法 CorrelateAll(),該方法將遍歷每個數據關聯插件,調用插件中的 findSubs() 方法,找到需要替換的變量和位置,并將其加入列表 subSites 返回。之后擴展插件的 findReference() 方法搜索關聯源并生成引用,默認從被替換的位置開始,向上搜索,直到找到最近的相匹配的引用。如圖 11。
圖 11. RPT 自動數據關聯原理圖
因此,如果需要實現數據關聯的擴展規則,則需要開發處符合自身被測試的應用需求的數據關聯插件。本節將以自定義的插件 com.ibm.rational.test.lt.datacorrelation.testgen.rta(簡稱 rta)為例進行闡述,該插件應用于基于 Jazz 產品的性能測試,主要功能是按照用戶定制需求,將 RPT 自動生成的某些數據關聯去掉,同時生成一些測試需要的關聯。
RPT 提供了與數據關聯相關的擴展點:
com.ibm.rational.test.lt.datacorrelation.testgen.DCTestgenProto |
<extension point="com.ibm.rational.test.lt.datacorrelation.testgen.DCTestgenProto"> <dcProtoAdapter class="com.ibm.rational.test.lt.datacorrelation.testgen.rta.RTAProtoAdapter" generic="false" protoType="com.ibm.rational.test.lt.models.behavior.http.HTTPRequest" uniqueID="rtaProtoAdapter"> </extension> |
其中,point 為擴展點;protoType 為插件將要處理的協議的類型,例如 HTTP 協議為 com.ibm.rational.test.lt.models.behavior.http.HTTPRequest,因為基于 Jazz 的產品的性能測試是在 HTTP 協議的基礎上處理的,所以該 rta 插件的協議類型亦聲明為與 HTTP 協議相同;generic 是一個 boolean 型變量,如果取值為 True,在有多個插件共同處理同一協議類型時,此插件將會最后被調用;uniqueID 為該插件的唯一標識。
原文轉自:http://www.anti-gravitydesign.com