在構(gòu)建Web應(yīng)用程序負(fù)載壓力測(cè)試時(shí),您可能需要模擬一組用戶(hù)“抓取”網(wǎng)站并隨機(jī)單擊鏈接。 特別是對(duì)于動(dòng)態(tài)網(wǎng)站,如博客,新聞門(mén)戶(hù),社交網(wǎng)絡(luò)等,新內(nèi)容被頻繁添加或甚至實(shí)時(shí)添加。 這種形式的測(cè)試能確保用戶(hù)將獲得流暢的瀏覽體驗(yàn),并檢查斷開(kāi)的鏈接或任何意外錯(cuò)誤。
本文介紹了模擬網(wǎng)站“爬網(wǎng)”的3種常用的方法:點(diǎn)擊網(wǎng)頁(yè)中找到的所有鏈接、使用HTML鏈接解析器和高級(jí)spidering測(cè)試計(jì)劃。
1.單擊網(wǎng)頁(yè)中找到的所有鏈接
使用正則表達(dá)式提取得到的鏈接的過(guò)程在 JMeter的使用正則表達(dá)式 一文被描述。算法如下:
1a。 從響應(yīng)中提取的所有鏈接 正則表達(dá)式提取 并將它們存儲(chǔ)到JMeter的變量。 相關(guān)的正則表達(dá)式將是:
<a [^>] * href =“([^”] *)“
不要忘記設(shè)置 匹配編號(hào)No. 為 -1 提取所有的鏈接。 如果將其留空,則只返回第一個(gè)匹配項(xiàng)。
1b。 使用 的ForEach控制器 迭代提取的鏈接。
1c。 使用HTTP請(qǐng)求取樣器點(diǎn)擊選擇URL,在 Output Variable 輸出變量名中 。
演示
優(yōu)點(diǎn)
配置簡(jiǎn)單。
穩(wěn)定性。
故障轉(zhuǎn)移和恢復(fù)能力。
缺點(diǎn)
正則表達(dá)式很難開(kāi)發(fā),對(duì)標(biāo)記變化敏感,因此很脆弱。
實(shí)際上不是“爬蟲(chóng)”或“蜘蛛”,只是對(duì)鏈接進(jìn)行請(qǐng)求。
2.使用HTML鏈接解析器
JMeter的提供了一個(gè)特殊的測(cè)試元件, HTML解析器的鏈接 。 此元素設(shè)計(jì)用于提取HTML鏈接和表單,并使用提取的值替換匹配的HTTP請(qǐng)求采樣器相關(guān)字段。 因此,HTML鏈接解析器可用于模擬使用少配置抓取網(wǎng)站。 方法如下:
2a。 把HTML解析器鏈接放入 Logic Controller 邏輯控制器 下
2b。 把HTTP請(qǐng)求取樣器放入邏輯控制器下,配置 服務(wù)器名稱(chēng)或IP地址 和 路徑 字段提取值限制在一個(gè)“有趣”的范圍。 您可能希望專(zhuān)注于屬于被測(cè)試應(yīng)用程序的域,并且不希望它在Internet上爬網(wǎng),因?yàn)槿绻膽?yīng)用程序有任何鏈接到外部資源; JMeter會(huì)去外面抓爬。 Perl5風(fēng)格的正則表達(dá)式可以用來(lái)設(shè)置提取的鏈接范圍。
演示
優(yōu)點(diǎn)
易于配置和使用。
行為像一個(gè)“蜘蛛”。
缺點(diǎn)
零誤差公差; 任何從響應(yīng)中提取鏈接的失敗將導(dǎo)致后續(xù)請(qǐng)求的級(jí)聯(lián)失敗。
3.高級(jí)“Spidering”測(cè)試計(jì)劃
假設(shè)上述方法的局限性,您可能想要一個(gè)解決方案,它不會(huì)因?yàn)殄e(cuò)誤而崩潰,并且將爬行整個(gè)被測(cè)試的應(yīng)用程序。 下面你可以找到一個(gè)參考測(cè)試計(jì)劃大綱,可以用作你的“蜘蛛”的骨架:
3a。 打開(kāi)主頁(yè)面。
從中提取所有鏈接。
點(diǎn)擊隨機(jī)鏈接。
如果返回值有“good”的 MIME類(lèi)型 (如果圖片或PDF文件或任何鏈接提取鏈路結(jié)果將被跳過(guò)); 從響應(yīng)中提取所有鏈接
所用元素的說(shuō)明:
While Controller 是用來(lái)設(shè)置請(qǐng)求的大額,所以測(cè)試不會(huì)永遠(yuǎn)持續(xù)下去。 如果您透過(guò)排程scheduling限制,可以略過(guò)。
Once Only Controller 用于執(zhí)行調(diào)用的主網(wǎng)頁(yè)只有一次。
XPath Extractor 用于過(guò)濾掉不屬于該應(yīng)用程序下測(cè)試不感興趣例如 mailto, callto ,等等。一個(gè)示例XPath查詢(xún)將看起來(lái)像網(wǎng)址等各個(gè)環(huán)節(jié):
//a[starts-with(@href,'/') or starts-with(@href,'.') or contains(@href,'${SITE}') and not(contains(@href,'mailto'))]/@href
使用XPath不是必須的,在某些情況下,它可能是非常內(nèi)存密集型。 您可能需要考慮從響應(yīng)中提取鏈接的其他方法。 它用于演示目的,因?yàn)橥ǔPath查詢(xún)比CSS / JQuery,特別是正則表達(dá)式更加人性化。
__javaScript() function 實(shí)際上做了三件事:
從XPath提取器提取的選擇一個(gè)隨機(jī)鏈接。
從URL的開(kāi)始刪除 ../。
將HTTP請(qǐng)求標(biāo)題設(shè)置為當(dāng)前隨機(jī)URL。
Regular Expression Extractor 用于從響應(yīng)中提取Content-Type頭
If Controller 使得它使下一輪從響應(yīng)中提取鏈接,如果響應(yīng)已匹配的內(nèi)容類(lèi)型才啟動(dòng)。