前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >性能工具之Jmeter关联小白学习

性能工具之Jmeter关联小白学习

作者头像
高楼Zee
发布2019-12-24 11:29:20
5030
发布2019-12-24 11:29:20
举报
文章被收录于专栏:7DGroup7DGroup

背景

性能测试关联是每个性能测试人员必须掌握的技能,记得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]

数组切片运算符

?()

支持过滤操作

()

支持表达式计算

结果:

登录查询获取结果给第二个请求

关联效果

总结

上面是简单的操作步骤,相信大家看看就明白,话说《言语道断》

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

夫君子之行,静以修身,俭以养德。非淡泊无以明志,非宁静无以致远。夫学须静也,才须学也,非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能治性。年与时驰,意与日去,遂成枯落,多不接世,悲守穷庐,将复何及!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 7DGroup 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 知识点
  • python字典知识点复习
    • 字典定义
      • 常用操作
        • 字典创建
        • 查看当前可以进行什么操作
    • 图说明
    • 环境搭建
      • django参考代码
        • 路由参考代码
          • 运行效果
          • Jmeter脚本编写
            • 登录
              • 查询
                • 关联JSON Extractor提取器
                  • 简单语法
                  • 登录查询获取结果给第二个请求
              • 结果:
              • 总结
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档