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


關聯

一、什么是關聯

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

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

例如:用戶登錄后,session信息都不同,有些操作要使用session,就需要將這個動態的信息保存下來。 
還有經常遇到的場景,第二個請求提交的參數要從第一個請求的返回數據中獲取。

 

二、關聯的用法

常用的兩種關聯用法

1.json  Path Extractor提取參數值

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();
執行並查看結果:
可以看到在填寫的下載路徑文件夾下,可以看到下載好的文件
 壓測
一、什么是壓力測試 壓力測試通過確定一個系統的瓶頸或者不能接收的性能點,來獲得系統能提供的最大的服務級別的測試。通俗地講,壓力測試是為了發現在什么條件下您的應用程序的性能會變得不可接受。
再直白一點就是被測試的系統,在一定的訪問壓力下,看程序運行是否穩定/服務器運行是否穩定(資源占用情況)
二、壓力測試的工具
最常用的壓力測試工具是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

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

 

如果腳本里邊又參數化文件的話,那么在其他壓力機上相同位置也得有相同的文件。
我們在本地jmeter看一下添加的壓力機
運行->遠程啟動

 

或者直接點擊全部運行按鈕,進行運行,就可以進行壓測啦,大家一起來試一下吧
好了,先簡單想這么多了,具體工作中遇到什么問題再慢慢學習吧~加油


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM