zoukankan      html  css  js  c++  java
  • jmeter脚本开发:控制器和参数化(三)

    一. jmeter录制脚本优化

    录制的脚本有很多“杂质”,如js、css等

    1. 不需要的脚本

    删除:右键,直接删除或禁用

    左键选中第一个,按住shift键,同时选择最后一个,这样可以同时删除或者禁用多个

    录制时,添加过滤

    2. 条件头文件

    cookie管理器

    消息头管理器

    HTTP缓存管理器做性能测试暂时不要加,因为做性能目的是得到每一次请求真实数据,如果使用缓存,就取得的是缓存,与用户第一次访问是有差别的

    HTTP请求默认值用于域名、端口的配置,一般用的也比较少

    3. 添加监视器

    建议加上调试取样器(在取样器里)

    4. 添加断言

    做功能测试需要加,做性能测试不需要加

    二. jmeter手写脚本

    1. 选协议——取样器(HTTP Request)

    2. 接口报文组装:接口文档api文档swagger(restful)  F12  fiddler

    accept:

    application/x-www-form-urlencoded  浏览器表单提交格式

    application/json;charset=utf-8   加编码是因为有的接口请求数据里含有中文,防止乱码

    text/hml;  文本格式

    multipart/form-data  表单

    3. 监视器——查看结果树(View Results Tree)

    4. 配置元件——请求头(HTTP Header Manager)cookie管理器(HTTP Cookie Manager)

     

    举例:一个Content-Type为application/json的接口:

    一般加两个,Content-Type和Accept

    三. 控制器

    1. 循环控制器:当前线程组内循环n次

    循环控制器下面挂着注册接口

    会循环四次,但从调试取样器看,只有一个线程组

     

    将循环次数改为2,表示有2个线程组,循环4次,总共应该循环8次

     

     

    2. ForEach控制器:循环变量名称相近

    3. If控制器:条件判断

    “变量” == “值” (javascript语法)

    Interpret Condition as Variable Expression?当做一个变量判断真/假 (上面输入框用的是变量,不是表达式)

    Evaluate for all children 执行子节点前先计算表达式真/假 (上面输入的表达式)

    4. switch控制器:跳转到某个子取样器执行,输入子取样器名称

    5. 随机控制,随机顺序控制器

    随机控制:多个中随机选执行一个(只执行一个)

    随机顺序控制器:随机打乱多个取样器的执行顺序(多个都执行)

    6. 仅一次控制器

    每个线程,只执行一次,登录场景常用,和setUp线程组相近

    7. 吞吐量控制器

    Total Executions  运行总次数

    虽然有10个线程,吞吐量应该是10,但这里限制了总的吞吐量是5,因此只会执行5次

     

     

    Percent Executions  运行比例(1-100)

     

    三. jmete参数化

    1. jmeter参数化与关联

    用户自定义变量  User Defined Variables

    用户参数 User Parameters

    函数 function

    csv读取文件 CSV Data Set Config

    json提取  JSON Extractor

    正则  Regular Expression Extractor

    2. 变量命名规则

    字母、下划线开头,可含数字,大小写敏感(java规则)

    3. 用户自定义变量 User Defined Variables

    配置元件Config Element > 用户自定义变量 User Defined Variables

    运行中值不变

     

     

     

    可以看到,用户自定义的变量userdefined的值没有变,而用户参数userparams每次都会发生变化

    4. 用户参数 User Parameters

    前置处理器 Pre processors > 用户参数 User Parameters

    动态读取,值可能因读取而变化

     

     

     

    如果把线程数设置为5,循环次数设置为1,同样也会变化

     

     

    5. 函数function

    Tools > 函数助手对话框Function Helper Dialog (ctrl + shift + f1)

    选择函数Choose a function,帮助help 生成(自动复制)

      随机函数 __Random  eg:${__Random(1000, 9999, )}

      设置属性 __setProperty  eg:${__setProperty(randproperty, ${randomnum}, )}

      读取属性 __P  eg:${__P(randproperty, )}

      关联函数 __V  eg:${__V(A${N})}

      时间函数 __time  eg:${__time(.)}   ${__time(YMD H:mm:ss,)}

     

     

     

     

     

    这样可以实现变量跨线程组的调用

     

     rd与上次运行的randomnum相同

     

     

    时间函数

     

    6. csv读取文件

    配置元件Config Element > CSV 数据文件设置 CSV Data Set Config

    支持csv格式、文本格式(txt/log/json/无后缀文本)  --推荐,因为国内都习惯使用中文,如果csv文件用excel打开,它的编码不是utf-8,可能出现中文乱码,因此不推荐使用csv格式

      变量名称:java变量命名规则,多个变量间用英文逗号

      忽略首行:有表头是用(True/False)

      分隔符;

      遇到文件结束符再次循环?True/False

      遇到文件结束符停止线程?True/False

      线程共享模式

     

    10个线程,总共6个数据,从第7个开始从头循环,因为设置的遇到文件结束符再次循环为True

    这样会跑7次

     

    7.  正则

    后置处理器post processors > 正则表达式提取器 Regular Expression Extractor

    模糊提取信息,作为后续操作的参数

    apply to   filed to check

    name 变量名称

    Regular Expression  正则表达式

    template  模板,$1$代表第1个,$2$代表第2个

    match No.   0代表随机,1代表第1个,-1代表全部

    8. json提取

    后置处理器 post processors > Json提取器JSON Extarctor

    apply to

    name  变量名称

    json path expression json路径

    规则:

      $.开头

      后面跟节点名称、列表时用中括号[0]

      节点层级用 . 号

     

     

    apply to 下的区别

    Jmeter Variable Name to Use的使用

    方法一:json提取

    方法二:正则提取

     

    10. 正则表达式

    左右边界值,中间匹配内容用 () 代表用户括号内正则匹配

    . 匹配除换行符以外的所有字符

    * 匹配0的次或者多次——贪婪

    + 匹配1次或者多次——懒惰

    ? 匹配0次或者1次

    . *  .+

    d  d+   [0-9]+

    w  w+  英文字母或数字的字符串

     

    11. 断言

    右键 添加 断言Assertion

    响应断言 Response Assertion

     

     

     

    或者:两个有一个成功即为成功

    否是非的意思,不包含成功,包含失败

  • 相关阅读:
    超赞!推荐一个专注于Java后端源码分析的Github项目!
    SpringApplication对象是如何构建的? SpringBoot源码(八)
    Java是如何实现自己的SPI机制的? JDK源码(一)
    SpringBoot的启动流程是怎样的?SpringBoot源码(七)
    SpringBoot内置的各种Starter是怎样构建的?--SpringBoot源码(六)
    外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)
    SpringBoot是如何实现自动配置的?--SpringBoot源码(四)
    设计模式目录
    桥接模式
    常见的HTTP状态码
  • 原文地址:https://www.cnblogs.com/my_captain/p/11714731.html
Copyright © 2011-2022 走看看