四、增加Jmeter脚本-术语

1 添加断言

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

2 事务

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

3 参数化

  • 配置元件→CSVDataSetConfig
    • Filename:参数文件名
      • 可用相对或绝对路径,相对路径须在...\jmeter 安装位置\bin 中;
      • 当前目录下使用./;参数文件中不能使用列名。
    • Fileencoding:文件编码格式
      • 常用且建议 UTF-8
    • VariableNames(comma-delimited)
      • 以英文逗号间隔的列名,与数据的间隔符可以不一致
    • Delimiter(use'\t'fortab)
      • 指定数据间隔符,Tab 用'\t'(不加引号),默认逗号
    • 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.0\lib\ext 目录中,名字可与类名不同
      • 忽略错误
        • 找不到 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 请求中的名称不需要改
posted @ 2020-08-27 14:14  (悠)  阅读(160)  评论(0编辑  收藏  举报