概述
我們在做效能測試的時候,不同的視角看到的結果都不一樣。
例如響應時間
使用者通過客戶端向服務端發出請求的時間為: T1
服務端接收到請求,處理該請求的時間為:T2
服務端返回資料給客戶端時間為: T3
客戶端接收到響應資料,處理資料呈現給使用者時間為:T4
從系統視角來看:
系統的響應時間Ts= T1+T2+T3。該時間沒有包括客戶端對資料處理並呈現的時間T4
從使用者視角來看:
使用者眼中的的響應時間:Tu = T1+T2+T3+T4。使用者通過客戶端發出業務請求,到客戶端展現相應的請求結果,這個過程的時間越短越好
從伺服器視角來看:
伺服器接收到客戶端傳送的請求,並給出響應,這個過程所消耗的時間為響應時間,即伺服器僅關注T2
從不同的視角下,衡量響應時間的指標也各不相同。在實際測試過程中,要明確以什麼視角驗證被測物件的效能。
大多數情況下,我們用jmeter做效能測試的響應時間都以使用者視角去看待。
那麼我們在效能測試的過程中,想要獲取使用者的真實體驗資料,就要儘可能的去模擬使用者的真實使用場景。
什麼是真實使用者場景?比如一個使用者登入,使用者想要執行登入,首先要開啟登入頁面,然後輸入使用者名稱密碼,點選登入,直到登入載入完成。這一系列的操作中,有很多靜態資源需要載入,比如css,js,jpg等等。這些靜態資源也是需要響應時間的,都需要消耗資源。那麼我們在效能測試中就必須把這些東西統計進去。
詳細描述
jmeter中有四種載入html資源的方法
一:請求中載入靜態資源
GET請求下,在Sampler-Advanced中,勾選獲取所有內含的資源。傳送請求之後,可以在結果樹中看到所有載入的靜態資源
二:傳送並行請求( Parallel HTTP Requests)
在並行請求中,可以同時傳送很多個sampler(get請求)。結果樹中會自動載入所有靜態資源。
三:通過抓包的方式,抓取所有的靜態資源
我們可以通過抓包獲取到所有頁面的靜態資源,統一放在事物控制器下面。事物控制器會把所有的靜態資源消耗的時間整合在一起,聚合報告中會看到合併後的效能資料
四:Chrome Driver 載入瀏覽器
通過Chrome Driver得出的效能資料更加貼近真實使用場景,準確度和可信度更高。jmeter會把我們瀏覽器驅動中的所有操作當做一個完整的事物。在聚合報告中可以看到一個完整的事物響應時間。
點選傳送門:jmeter與java_selenium自動化
try { var pkg = JavaImporter(org.openqa.selenium, org.openqa.selenium.support.ui) ##此處是匯入support.ui的類,對應的是selenium-support.jar WDS.log.info('WDS Name:' + WDS.name) WDS.sampleResult.sampleStart() WDS.browser.navigate().to("https://qas.cttq.com") ##呼叫navigate方法,跳轉url,對應的方法在selenium-remote-driver.jar中 WDS.log.info('Browser Title:' + WDS.browser.getTitle()) ##呼叫getTitle方法,捕捉title,對應的方法在selenium-remote-driver.jar中 WDS.log.info('Browser CurrentUrl:' + WDS.browser.getCurrentUrl()) WDS.log.info('Cookie:' + WDS.browser.manage().getCookies()) WDS.log.info('Request Header: ' + WDS.sampleResult.getRequestHeaders()) var what = WDS.browser.findElement(pkg.By.name('username')) what.sendKeys(['8107000']) ##定位name元素,觸發sendKeys事件,填寫登入名 var where = WDS.browser.findElement(pkg.By.name('password')) where.sendKeys(['000000']) ##定位name元素,觸發sendKeys事件,填寫登入名 var button = WDS.browser.findElement(pkg.By.id('login-btn')) button.click() ##定位id元素,觸發click事件,點選登入 ##上面呼叫的幾種封裝元素和事件,對應的方法在selenium-remote-driver.jar中 var wait = new pkg.WebDriverWait(WDS.browser, 5000) ##呼叫了WebDriverWait,對應的方法在selenium-support.jar中。數值為ms wait.until(pkg.ExpectedConditions.presenceOfElementLocated(pkg.By.xpath("/html/body/div/header/div[1]/div/img"))) ##呼叫前面的wait 5s,強制等待元素出現 var results = WDS.browser.findElements(pkg.By.xpath("/html/body/div/header/div[1]/div/img")) WDS.log.info('Result: ' + results) if(results.empty) { WDS.sampleResult.successful = false WDS.sampleResult.responseMessage = “登入失敗“ } else{WDS.log.info("登入")} ##斷言元素是否捕捉成功 WDS.sampleResult.sampleEnd() } catch(ex) { WDS.log.error(ex) WDS.sampleResult.successful = false WDS.sampleResult.responseMessage = 'There were no results returned' WDS.sampleResult.sampleEnd() }
但是這種Chrome Driver 的方式在負載測試中有一個弊端
那就是,系統會根據你的執行緒數去啟動瀏覽器。也就是說你設定了多少執行緒,它就會啟動多少瀏覽器。這樣一樣,機器記憶體瞬間就會被消耗掉
那麼我們能不能像loadrunner一樣,即使不啟動瀏覽器,也可以模擬出瀏覽器的效果?答案是可以的。
jmeter中提供了另一種webdriver方法可以達到這種效果。
想知道答案嗎?來參加公開課,小編告訴你!
關注公眾號後聯絡小編
加入公開課分享群
QQ號:1144890271