zoukankan      html  css  js  c++  java
  • 四、增加Jmeter脚本-术语

    1 添加断言

    • 【例 1】检查注册是否成功
      • 先根据“结果树”中的“HTML”中的“响应数据”,找到需要检查的网页中的文 本
      • 复制上述内容,根据“结果树”中的“Text”中的“响应数据”,确定最终确定要 检查的文本(可能含有标记)
      • 在线程组下找到需要检查的 url,右击“添加”→断言→响应断言
        • 要测试的响应字段:响应文本
        • 模式匹配规则:包括
        • 要测试的模式:添加
          • 预期结果如“Thankyou,<b>zhsan1”
        • 注意
          • 找不到会报错,找到无反应

    2 事务

    • 右击 step1→添加→逻辑控制器→事务控制器。
    • 拖动事务位置,将 url 拖动到合适的事务中。

    3 参数化

    • 配置元件→CSVDataSetConfig
      • Filename:参数文件名
        • 可用相对或绝对路径,相对路径须在...jmeter 安装位置in 中;
        • 当前目录下使用./;参数文件中不能使用列名。
      • Fileencoding:文件编码格式
        • 常用且建议 UTF-8
      • VariableNames(comma-delimited)
        • 以英文逗号间隔的列名,与数据的间隔符可以不一致
      • Delimiter(use' 'fortab)
        • 指定数据间隔符,Tab 用' '(不加引号),默认逗号
      • Allowquotadata
        • 表示数据中是否有分隔符
      • Recycle on eof
        • 参数不够用时,是否从头开始重新循环
    • 【例 1】注册 200 个账号,客户名使用用户名。
      • 手动编辑参数文件,写入参数,但不要写列名
      • 找到需要参数化的输入数据的 url
        • 在前面的位置,右击“添加”→配置元件→CSVDataSetConfig
        • 将参数的“值”改为“${参数名}”
          • 使用参数时不加引号
      • 负载测试
        • 单击“ThreadGroup”,设置“线程数”为并发人数
          •  一个线程对应一个模拟用户
        • Ramp-UpPeriod(insecond)
          • 线程启动开始运行的时间间隔,单位是秒,即所有线程在多长时间内开始 运行。
          • 如设置线程数为 200,数据为 75 秒,相当于 15s 加载 40 个用户。

    4 关联

    • 后置处理器→正则表达式提取器
      • 引用名称
        • 根据指定规则找到的字符串存放到此名表示的参数中。
      • 正则表达式
        • 一个用()表示一个模式;left(?)right:?表示遇到行中的第一个 right 就作为右 边界,然后不断向后寻找。
      • 模板
        • $1$指第一个模板(模式),$2$第二个...,此项必填;
        • 允许 $1$$2$ 的写法。
      • 匹配数字
        • 找到的第某项,1 为第 1 项,-1 为所有项,0 是随机
          • 参数名_matchNr(区分大小写)中存着找到几项,必写-1
          • 参数名_gi 表示找到的第 i 项,i 从 1 开始,g0 表示包含左右边界在内 的整个字符串
            • g 是关键字
          • 有多个模板时,参数名_i_gj 表示找到的第 i 行第 j 列数据
    • 正则表达式案例
      • 网页内容

    <table>

    <tr><td>hello</td><td>zhsan</td><td>123</td>

    <tr><td>hello</td><td>lisi</td><td>5326</td>

    </table>

      • 正则表达式:<tr><td>hello</td><td>(.*)</td><td>(.*)</td>
      • 【例 1】模板:$1$,匹配数字:1

    test=zhsan,test_g=2,test_g0=<tr><td>hello</td><td>zhsan</td><td>123</td>

    test_g1=zhsan

    test_g2=123

      • 【例 2】模板:$1$,匹配数字:2

    test=lisi,test_g=2,test_g0=<tr><td>hello</td><td>lisi</td><td>5326</td>

    test_g1=lisi

    test_g2=5326

      • 【例 3】模板:$2$,匹配数字:1

    test=123,test_g=2,test_g0=<tr><td>hello</td><td>zhsan</td><td>123</td>

    test_g1=zhsan

    test_g2=123

      • 【例 4】模板:$2$,匹配数字:2

    test=5326,test_g=2,test_g0=<tr><td>hello</td><td>lisi</td><td>5326</td>

    test_g1=lisi

    test_g2=5326

      • 【例 5】模板:$1$$2$,匹配数字:-1

    test_1=zhsan123

    test_1_g=2,test_1_g0=<tr><td>hello</td><td>zhsan</td><td>123</td>

    test_1_g1=zhsan(第 1 行第 1 列)

    test_1_g2=123

    test_2=lisi5326

    test_2_g=2,test_2_g0=<tr><td>hello</td><td>lisi</td><td>5326</td>

    test_2_g1=lisi

    test_2_g2=5326

    test_matchNr=2

    • 例 6】?的用法
      • 正则表达式:<td>(.*)</td>与<td>(.*?)</td>
      • 查看正则表达式的结果
        • 在线程组中添加 DebugSampler,移到正则表达式提取器之后
        • 在线程组中添加 BeanShellSampler,移到正则表达式提取器之后,写入下面的 代码之一
          • ${参数名};或"字符串${参数名}";
            • 结果出现在请求中,最后一个数据出现在响应中
            • 如果省略分号,则数据都不出现在响应中,此外还会报错,但是数据 还会正常显示
          • ResponseMessage="字符串${参数名}";
            • 结果出现在响应中,最后一个数据出现在响应中
          • log.error(数据);
            • 向日志中写数据
            • 点击“警告”图标可以清除日志
          • log.info(数据);
            • 向日志中写数据
    • 【例 7】录制订票的脚本,保证脚本正确实现业务。
      • 找到查看结果树中出错的请求,在这个 url 的请求中查找会话值
      • 在 step 下找到哪个 url 的发送数据中有会话值
      • 在查看结果树的 Text/源代码界面中,倒着找那个 url 中的响应数据中有会话值
      • 找到 sessionid 的左右边界
      • 在响应的 url 处添加后置处理器→正则表达式提取器
      • 在请求的 url 处,将 userSession 参数的值改为“${引用名称}”
        • 不输入引号

    5 自定义函数

    • 编写 Java 类
      • 编写自己需要的 static 函数,并加入 main 方法,先编译与运行正确
      • 删除 main 方法后保存,右击项目→导出→Java→可运行的 JAR 文件
        • 启动配置
          • 选择测试的类名
        • 导出目标
          • 必须放在apache-jmeter-3.0libext 目录中,名字可与类名不同
        • 忽略错误
          • 找不到 mian 方法
      • 【例 1】编写一个输出字符串左边多个字符的函数。
    • Jmeter 导入包
      • 测试计划→Adddirectoryorjartoclasspath 处:浏览,找到包
    • BeanShell 引用函数
      • import 包名.类名
      • vars.put("新参数名","常量值或参数名");
        • 常量值或参数结果存入新参数中
        • 无法在 BeanShell 的请求和响应中看到新参数值
        • BeanShell 后面的 url 以及请求中可以使用该参数
      • 可以在日志中看到参数值
        • log.error(包名.类名.函数名(参数));
      • 【例 2】输出航班号。
        • importstr.StrMethod; //包名.类名
        • log.error(str.StrMethod.split("${banci}","checked")[0]);
        • vars.put("hb","常量值或参数名");
          • 结果存入 hb 参数

    6 循环控制器

    • 右击 Step→添加→逻辑控制器→循环控制器
      • 循环最好放在事务之外。
      • CSVData 要放在循环之中。
    • 添加计数器,查看循环次数
      • 添加配置元件→计数器
      • 计数器要放在循环内部
    • 使用参数的方式
      • 点击 Step1 中的参数化→Sharingmode:CurrentThread
        • 不选择 CurrentThread,会导致有重复买票的情况
    • 【例】参数化化始发地和目的地,实现每人买 3 张票。
      • 为方便看那个用户订的票,参数化 lastname,使用用户名即可
      • 需要关联班次,注意班次使用了多次

    7 用户自定义变量

    • 根据业务流程制作成测试脚本,想要移植到其他测试环境时,由于数据发生了相应的变 化,例如 IP 地址、请求路径等,这时候可以将 IP 地址、请求路径等做成用户自定义变 量。
    • ThreadGroup→配置元件→用户自定义变量
    • 【例】将脚本中的 localhost 改为服务器 IP。
      •  HTTP 请求中的名称不需要改
  • 相关阅读:
    188. Best Time to Buy and Sell Stock IV
    452. Minimum Number of Arrows to Burst Balloons
    435. Non-overlapping Intervals
    28. Implement strStr() KMP
    10. Regular Expression Matching
    877. Stone Game
    格式化日期
    Designer属性编辑器简介
    pandas 根据内容匹配并获取索引
    access 中sql语句之“like” 语句的用法
  • 原文地址:https://www.cnblogs.com/sycz/p/13571140.html
Copyright © 2011-2022 走看看