jmeter關聯、下載文件、簡單壓測

關聯java

1、什麼是關聯正則表達式

關聯是請求與請求之間存在數據依賴關係,須要從上一個請求獲取下一個請求須要回傳回去的數據。json

簡單地說就是在測試過程當中有些數據的值會常常發生變化,要獲取並使用這些數據,把這個動態的信息保存下來,咱們就要進行關聯。api

例如:用戶登陸後,session信息都不一樣,有些操做要使用session,就須要將這個動態的信息保存下來。 
還有常常遇到的場景,第二個請求提交的參數要從第一個請求的返回數據中獲取。
服務器

 

2、關聯的用法cookie

經常使用的兩種關聯用法網絡

1.json  Path Extractor提取參數值session

2.正則表達式的方法併發

咱們已學生金幣充值的接口爲例來實驗,因爲接口須要權限,須要獲取登陸時的sign值咱們就用關聯來實現。工具

登陸接口

  • 請求URL  http://api.nnzhp.cn/api/user/login
  • 請求方式    post
  • 請求參數  參數爲key-value形式

                       參數名        必選     類型     說明

                       username    是       string    用戶名

                       passwd        是        string   密碼

     

       登錄用戶名:niuhanyang

       密碼:aA123456

返回參數說明

                      參數名         類型   說明

                       error_code  int       錯誤編碼,0爲操做成功

                       login_info   object   登陸對象信息

                       userId        int        用戶id

                       sign           string     簽名

                       login_time  string  登陸時間

打開jmeter,添加登陸接口請求,調用查看結果

 獲取學生信息接口

  • 請求URL  http://api.nnzhp.cn/api/user/stu_info
  • 請求方式  get
  • 請求參數

                       參數名        必選     類型     說明

                       stu_name    是       string    學生姓名

調用接口結果

 

學生金幣充值

  • 請求URL:http://api.nnzhp.cn/api/user/gold_add
  • 請求方式  post 
  • 參數 ,

    該接口有權限驗證,須要admin用戶才能夠作操做,須要添加cookie

    cookie中key爲登陸的用戶名,value從登陸接口中獲取,登錄成功以後會返回sign

                        參數名        必選     類型     說明

                       stu_id           是       int    學生id

                       gold           是        int     金幣數量

返回參數說明

                       參數名         類型   說明

                       error_code  int       錯誤編碼,0爲操做成功

                       msg            string   提示信息

第一種方法比較簡單,使用插件json path  postprocessorh  或 jp@gc - json Path Extractor 

以下:在登陸接口添加json path  postprocessorh,獲取須要參數化的值的信息

 
$.login_info.sign
提取json串,使用json path extra
意思爲給sign賦值,取值第一層爲$,第二層爲login_info , 第三層爲sign ;
 
{(第一層)
"error_code": 0,
"login_info": {(第二層)
"login_time": "20171210170002",
"sign": "5071cef01583473c7beb6fe1110f937f",(第三層)
"userId": 8
}
}
 而後在cookie設置中,sign的值進行參數化,參數化的值用${參數名}

上面的例子中,返回值只有一個結果,若是存在多個結果的場合,咱們怎麼取值呢?

如今咱們以學生ID爲例來實驗,能夠看到上圖中的查看學生信息中反回了多個ID號,咱們用上邊的方式來試一下

添加json  Path Extractor

從學生信息返回的結果看,獲取內容的json串取爲$.stu_info.id,將stu_id進行參數化爲${id},執行

能夠看到執行結果是失敗的,傳入的學生id是咱們輸入的默認值nono。

咱們來看一下學生接口的返回信息

{
        "error_code": 0,
        "stu_info": [
                {
                        "id": 872,
                        "name": "A",
                        "sex": "nn",
                        "age": 33,
                        "addr": "士大夫是非得失的士大夫士大夫",
                        "grade": "33",
                        "phone": "15221223211",
                        "gold": 9500
                },
                {
                        "id": 1053,
                        "name": "A",
                        "sex": "nn",
                        "age": 33,
                        "addr": "士大夫是非得失的士大夫士大夫",
                        "grade": "33",
                        "phone": "16221223211",
                        "gold": 100
                }
        ]
}

上述的返回結果中,有兩組信息,包含了兩個學生的信息,若是用$.stu_info.id,計算機不知道要去獲取,因此咱們須要指定一下要獲取哪個ID號
$.stu_info[1].id
[1]由於計算機的計數是從0,開始的,因此1表示的是取第二個學生信息中的id號,咱們再來執行一下

執行結果是成功的。

2.正則表達式 須要進行參數化還有一種方法是用正則表達式,以下

 執行

 

下載文件 1.文件上傳
咱們先來回憶一下在jmeter中文件上傳的操做

文件上傳類型

  • 請求URL:http://api.nnzhp.cn/api/file/file_upload
  • 請求方式  post 
  • 參數

                       參數名        必選     類型     說明

                       file              是        file       文件     

返回參數說明

                       參數名         類型   說明

                       error_code  int       錯誤編碼,0爲操做成功

                       msg            string   提示信息

在jmeter中添加http請求,選擇文件,添加參數信息,執行

能夠看到上傳文件執行成功了。

2.下載文件

如今咱們來試一下下載文件是如何操做的

在網絡上找到一個圖片資源,獲取到圖片的地址:http://img4.duitang.com/uploads/item/201209/08/20120908180716_3rrvi.jpeg

咱們在jmeter中新建一個HTTP請求,填寫相應的參數,執行

能夠看到下載成功了,那怎麼把圖片下載到本地呢?這就須要用到Bean Shell Sampler

BeanShell是一種徹底符合Java語法規範的腳本語言,而且又擁有本身的一些語法和方法;
具體如何寫java代碼這裏就不具體介紹了,能夠找到一段下載文件的代碼。
 

代碼以下:

import java.io.*;
byte[] result = prev.getResponseData();  //這個是獲取到請求返回的數據,prev是獲取上個請求的返回
String file_name = "C:\\besttest\\jmeter\\xiaer.jpg"; //表明存放文件的位置和文件名
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();
執行並查看結果:
能夠看到在填寫的下載路徑文件夾下,能夠看到下載好的文件
 壓測
1、什麼是壓力測試 壓力測試經過肯定一個系統的瓶頸或者不能接收的性能點,來得到系統能提供的最大的服務級別的測試。通俗地講,壓力測試是爲了發如今什麼條件下您的應用程序的性能會變得不可接受。
再直白一點就是被測試的系統,在必定的訪問壓力下,看程序運行是否穩定/服務器運行是否穩定(資源佔用狀況)
2、壓力測試的工具
最經常使用的壓力測試工具是loadrunner和jmeter
下面咱們說一下jmeter中怎麼作簡單的壓測
以上面的登陸接口爲例

登陸接口

  • 請求URL  http://api.nnzhp.cn/api/user/login
  • 請求方式    post
  • 請求參數  參數爲key-value形式

                       參數名        必選     類型     說明

                       username    是       string    用戶名

                       passwd        是        string   密碼 

       登錄用戶名:niuhanyang

       密碼:aA123456

添加線程組,添加http請求,添加聚合報告

設置壓測的併發數,這裏咱們設置100個併發,循環10次,持續30s

下面看一下各個參數的含義:

Label:每一個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這裏顯示的就是 Name 屬性的值
#Samples:表示你此次測試中一共發出了多少個請求,若是模擬10個用戶,每一個用戶迭代10次,那麼這裏顯示100,咱們設置的爲100個用戶循環10次,因此一共的請求爲100*10=1000
Average:平均響應時間——默認狀況下是單個 Request 的平均響應時間(單位是毫秒),當使用了 Transaction Controller 時,也能夠以Transaction 爲單位顯示平均響應時間
Median:中位數,也就是 50% 用戶的響應時間
90% Line:90% 用戶的響應時間
Min:最小響應時間
Max:最大響應時間
Error%:本次測試中出現錯誤的請求的數量/請求的總數
Throughput:吞吐量——默認狀況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也能夠表示相似 LoadRunner 的Transaction per Second 數
KB/Sec:每秒從服務器端接收到的數據量,至關於LoadRunner中的Throughput/Sec

根據具體的壓測結果與目標需求進行比較來分析是否知足需求以及須要進行的優化操做
三、添加壓力機
有時壓力測試的時候一臺壓力機可能不能知足需求,咱們須要添加多個壓力機,或者用其餘人的機器進行壓測,這個時候咱們就須要添加壓力機。
一、先在其餘電腦上啓動jmeter_server,確保都在一個網段上,確保幾臺機器能ping通
二、修改jmeter配置文件,在remote_hosts 添加對應的IP地址,端口號默認1099
三、本機啓動jmeter,在運行中選擇遠程啓動,能夠單獨啓動壓力機也能夠所有啓動
 

 

若是腳本里邊又參數化文件的話,那麼在其餘壓力機上相同位置也得有相同的文件。
咱們在本地jmeter看一下添加的壓力機
運行->遠程啓動

 

或者直接點擊所有運行按鈕,進行運行,就能夠進行壓測啦,你們一塊兒來試一下吧
好了,先簡單想這麼多了,具體工做中遇到什麼問題再慢慢學習吧~加油
相關文章
相關標籤/搜索