性能工具之Jmeter關聯小白學習

  • 2019 年 12 月 24 日
  • 筆記

背景

性能測試關聯是每個性能測試人員必須掌握的技能,記得2013年做性能測試,關聯對於我來說是一個比較緊張與害怕的事情,記得當時在給財務公司做網銀性能測試就用到了關聯,當時讓會的同事教我,也許因為怕教他人餓死自己,每次請教的時候都是模擬兩可,總是說就這樣寫就行。後面做完項目後,自己花了時間與精力終於搞定什麼是關聯,為什麼要做關聯,中國有一句古話《求人不如求己》,只有自己掌握核心技能或者自己在某方面有沉澱,所有人脈自然就來,古人云《富貴深山有遠親,貧窮鬧市無近鄰》。

知識點

python字典知識點複習

字典定義

字典是另一種可變容器,且可存儲任意類型對象。簡單的說就是容器,只有符合字典的規則就能存放數據,對於java熟悉人員來說相當於java的map,字典是鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括弧({})中如 d = {key1 : value1, key2 : value2 }。

常用操作

字典創建

根據python字典規則【k->】,以下是簡單的字典,

>>> homelear={"weekends":"是一個集中學習晉陞的好日誌",                "play":"出去玩,在家學習",                 "learning":"學習什麼",                  "plan":"['java','python','linux','mysql']"}

查看當前可以進行什麼操作

>>> dir(homelear)  ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']  >>>

增

#新增一個元組  dicadd = ('調優', '慢查詢', '執行計劃', '索引','架構');  #把剛才創建的元組新增到字典中去  >>> homelear["mysql"]=dicadd  #查看新增的結果  >>> homelear  {'weekends': '是一個集中學習晉陞的好日誌',  'play': '出去玩,在家學習', 'learning': '學習什麼',  'plan': "['java','python','linux','mysql']",  'mysql': ('調優', '慢查詢', '執行計劃', '索引', '架構')}  #第二種新增方法:  >>> homelear.update(jvm="調優不是一蹴而就的")  #查看結果  >>> homelear  {'weekends': '是一個集中學習晉陞的好日誌',  'play': '出去玩,在家學習', 'learning': '學習什麼',  'plan': "['java','python','linux','mysql']",  'mysql': ('調優', '慢查詢', '執行計劃', '索引', '架構'),   'jvm': '調優不是一蹴而就的'}   #同時增加兩個寫法:   >>> homelear.update(jvm="調優不是一蹴而就的",ngix="它不過就是一個轉發而已")  #查看  >>> homelear                                             就是一個轉發而已")  {'weekends': '是一個集中學習晉陞的好日誌', 'play': '出去玩,在家學習', 'learning': '學習什麼', 'plan': "['java','python','linux','mysql']", 'mysql': ('調優', '慢查詢', '執行計劃', '索引', '架構'), 'jvm': '調優不是一蹴而就的', 'ngix': '它不 過就是一個轉發而已'}  >>>

刪

pop(key)

#新建字典  >>> a = {"a":"b","c":"dd"}  #刪除欄位key  >>> a.pop('a')  'b'  #查詢  >>> a  {'c': 'dd'}

del dict[key]

#新建字典  >>> a = {"a":"b","c":"dd"}  # 根據del規則刪除key  >>> del a['a']  # 查詢  >>> a  {'c': 'dd'}  

改

#新建字典  >>> a = {"a":"b","c":"dd"}  # 修改  >>> a['a']="學習是一個快樂的事情,分享體現價值的事情"  # 查詢  >>> a  {'a': '學習是一個快樂的事情,分享體現價值的事情', 'c': 'dd'}  

查

#查看該字典下有什麼方法可以用  >>> dir(a)  ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
#根據上面方法可以用  #遍歷字典  >>>  >>> for k,v in a.items():  ...     print("key=%s,value=%s"%(k,v))  ...  key=a,value=學習是一個快樂的事情,分享體現價值的事情  key=c,value=dd  >>>  >>> for key in a:  ...     print("key=%s"%a[key])  ...  key=學習是一個快樂的事情,分享體現價值的事情  key=dd    #遍歷value值  >>> for value in a.values():  ...     print(value)  ...  學習是一個快樂的事情,分享體現價值的事情  dd  >>>  

圖說明

簡單的說:每次請求伺服器,伺服器會給客戶端發送一個動態值,但伺服器會每次校驗客戶端是否攜帶該值並做對比,如果每次請求攜帶值與發送的值是正確就放行,如果不正確就返回失敗獲取其他步驟。

環境搭建

django參考程式碼

from django.shortcuts import render  from django.http import HttpResponse, JsonResponse    import time      # Create your views here.  def index_seven(request):      return HttpResponse("歡迎 性能測試人員 進入開發性能架構師!")      # Create your views here.  def index(request):      return render(request, "index.html")      param = []      # 登錄  def login(request):      if request.method == "POST":          username = request.POST.get('username', '')          password = request.POST.get('password', '')          if username == 'admin' and password == 'admin':              timesoo = time.time()              param.append(timesoo)              result = {'code': 200, 'msg': 'success', "reslutselect": param[0]}              return JsonResponse(result)          else:              result = {'code': 111, 'msg': 'username or password error'}              return JsonResponse(result)              # return render(request, 'index.html', {'error': 'username or password error!'})      def select(request):      if request.method == "POST":          msg = request.POST.get('msg', '')          res = request.POST.get('reslutselect', '')          if msg == 'success' or res is not None:              result = {'code': 200, 'msg': '恭喜你成功'}              return JsonResponse(result)          else:              result = {'code': 111, 'msg': '恭喜未登錄'}              return JsonResponse(result)              # return render(request, 'index.html', {'error': '恭喜你沒有登錄'})

路由參考程式碼

from django.contrib import admin  from django.urls import path  from django.conf.urls import url    from sevenapp import views    urlpatterns = [      path('admin/', admin.site.urls),      url(r'^index/$', views.index),  # 添加index/路徑配置      url(r'^login/$', views.login),  # 添加簡單登錄      url(r'^query/$', views.select),  # 添加簡單登錄  ]

運行效果

Jmeter腳本編寫

登錄

查詢

關聯JSON Extractor提取器

1、第一從響應結果獲取響應的關聯數據:

2、增加JSON Extractor並填寫表達式

解釋

  • Names of Created variables:保存的變數名,後面使用${Variable names}引用
  • JSON Path expressions:上一步中調試通過的json path表達式
  • Match Numbers:匹配數字(0代表隨機,1代表第一個,-1代表所有)
  • Default Values:找不到時默認值,一般設置為NOT FOUND
  • Compute concatenation var(suffix_ALL):是否統計所有,即將匹配到的所有值保存,名為「變數名_ALL」,使用場景需要獲取的值有多個,後面需要對這一組數據進行操作。

簡單語法

JsonPath

描述

$

根節點

@

當前節點

.or[]

子節點

..

選擇所有符合條件的節點

*

所有節點

[]

迭代器標示,如數組下標

[,]

支援迭代器中做多選

[start:end:step]

數組切片運算符

?()

支援過濾操作

()

支援表達式計算

結果:

登錄查詢獲取結果給第二個請求

關聯效果

總結

上面是簡單的操作步驟,相信大家看看就明白,話說《言語道斷》

送大家一篇《諸葛亮》修身文章:

夫君子之行,靜以修身,儉以養德。非淡泊無以明志,非寧靜無以致遠。夫學須靜也,才須學也,非學無以廣才,非志無以成學。淫慢則不能勵精,險躁則不能治性。年與時馳,意與日去,遂成枯落,多不接世,悲守窮廬,將復何及!

Tags: