Jmeter(五十)_性能測試模擬真實場景下的用戶操做

概述

咱們在作性能測試的時候,不一樣的視角看到的結果都不同。

例如響應時間javascript

用戶經過客戶端向服務端發出請求的時間爲: T1
服務端接收到請求,處理該請求的時間爲:T2
服務端返回數據給客戶端時間爲: T3
客戶端接收到響應數據,處理數據呈現給用戶時間爲:T4css


從系統視角來看
系統的響應時間Ts= T1+T2+T3。該時間沒有包括客戶端對數據處理並呈現的時間T4html

從用戶視角來看
用戶眼中的的響應時間:Tu = T1+T2+T3+T4。用戶經過客戶端發出業務請求,到客戶端展示相應的請求結果,這個過程的時間越短越好java

從服務器視角來看
服務器接收到客戶端發送的請求,並給出響應,這個過程所消耗的時間爲響應時間,即服務器僅關注T2web

從不一樣的視角下,衡量響應時間的指標也各不相同。在實際測試過程當中,要明確以什麼視角驗證被測對象的性能。
大多數狀況下,咱們用jmeter作性能測試的響應時間都以用戶視角去看待。瀏覽器

那麼咱們在性能測試的過程當中,想要獲取用戶的真實體驗數據,就要儘量的去模擬用戶的真實使用場景。服務器

什麼是真實用戶場景?好比一個用戶登陸,用戶想要執行登陸,首先要打開登陸頁面,而後輸入用戶名密碼,點擊登陸,直到登陸加載完成。這一系列的操做中,有不少靜態資源須要加載,好比css,js,jpg等等。這些靜態資源也是須要響應時間的,都須要消耗資源。那麼咱們在性能測試中就必須把這些東西統計進去。post

詳細描述

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

相關文章
相關標籤/搜索