1、Jmeter组件:断言(重点)

A、是什么?

程序代替人工判断响应结果是否符合预期

B、为什么?

安全、高效、功能强大

C、怎么用?

分类:

C-1、断言响应的状态码

C-2、断言响应的内容

C-3、断言响应的内容的字节数

C-4、断言响应的时间

2、Jmeter组件:集合点

A、是什么?

Jmeter 内置组件之一,可以启动多个用户,让多个用户在同一刻去访问服务器

B、为什么?

可以模拟高并发实现,测试服务器性能

C、怎么用?

场景:模拟 N 个用户在同一时刻查询学院信息操作

C-1、搭建框架(测试计划、结果树、线程组、http请求)

  1. 线程组通过线程数模拟多个用户

C-2、添加集合点组件

  1. 定时器 -----> 同步定时器
  2. 组件属性1: 一组用户数
  3. 组件属性2: 超时时间<br />![图片.png](https://cdn.nlark.com/yuque/0/2020/png/1029078/1590651559889-b253413e-a490-4bdb-95dd-9ef070322a40.png#align=left&display=inline&height=169&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=337&originWidth=976&size=40292&status=done&style=none&width=488)<br />C-3、运行查看结果
  4. 运行流程:
  5. 1)、启动线程 ----> 右上角
  6. 2)、所有线程启动完毕,再统一执行
  7. 查看结果添加聚合报告:<br /> ![图片.png](https://cdn.nlark.com/yuque/0/2020/png/1029078/1590588747639-1a91ac69-e092-4bed-8db4-f19b26356761.png#align=left&display=inline&height=73&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=130&originWidth=1143&size=8461&status=done&style=none&width=645)

C-4、注意

超时时间可以设置为 0 : 无限等待

建议 : 线程总数整除集合点的一组线程数,否则会挂起

3、Jmeter组件:函数

A、是什么?

是程序中的封装单元(最小的),封装一些功能实现

B、为什么?(了解)

优点1:易读 易维护

优点2:实现功能复用

C、怎么用?

流程:

1)、打开Jmeter 内置的函数功能模块

2)、选择要调用的函数,传参数,生成调用格式

3)、哪里需要粘哪里

函数分类:


__counter() : 计数器

__random(): 随机数函数,包含左右临界值

__time() : 获取时间的函数

    时间格式: yyyy/MM/dd HH:mm:ss == 年/月/日 时:分:秒

__CSVRead() :和 CSV Data Set Config 类似可以读取 CSV 文件数据

需求:使用 CSVRead 函数实现学院信息的批量插入(比如: 3条)

思想:

1)、搭建框架(线程组设置循环次数),JSON 格式数据只是模板,具体数据动态获取

  注意:执行次数设置与信息头设置(名称:Content-Type         值:application/json;charset=UTF-8 )

**CSV Data Set Config 执行多次是使用的循环次数,而 CSVRead 执行多次使用的是线程数**<br />![图片.png](https://cdn.nlark.com/yuque/0/2020/png/1029078/1590660484398-5ff31ef2-dff6-4ad0-947b-ac04b07ce559.png#align=left&display=inline&height=208&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=344&originWidth=562&size=147739&status=done&style=none&width=339)<br />0指的是列数,默认从第一行第一列开始读取

2)、将数据存储在外部的文本文档(CSV 格式)
图片.png
3)、使用 CSVRead 函数逐行获取并解析 CSV 文件,插入到提交的 JSON 数据中
图片.png
CSVRead 函数设置 CSV文件路径时,必须得使用绝对路径,不可以使用相对路径


__setProperty() : 属性设置

__property() : 属性获取

需求:http 请求1 访问百度,将请求1响应的 title 值传递给请求2,但是两个请求不属于同一个线程组

      http 请求2 访问 google  /?wd=百度一下你就知道

实现思想 :

  将线程组内部的数据导出去,存储在共享空间中,其他线程组要使用数据,就从共享空间获取

实现流程:

 1)、将数据从当前线程组导出 __setProperty

     变量名

     变量值  ${变量名}<br />![图片.png](https://cdn.nlark.com/yuque/0/2020/png/1029078/1590661658627-28b1214d-96f4-4851-bfd1-71a697a5cc41.png#align=left&display=inline&height=261&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=521&originWidth=1794&size=495948&status=done&style=none&width=897)<br />         使用 BeanShell Sampler 调用函数:将生成的函数字符串放入BeanShell Sampler,即可导出到共享空间<br />![图片.png](https://cdn.nlark.com/yuque/0/2020/png/1029078/1590661766558-3b9b2d74-7752-4f08-9017-8bd8e2434120.png#align=left&display=inline&height=256&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=512&originWidth=1552&size=401125&status=done&style=none&width=776)<br />     2)、另外一个线程组将导出到共享空间的数据引入 __property

    根据之前的变量名获取,生成后粘贴到需要的地方<br />![图片.png](https://cdn.nlark.com/yuque/0/2020/png/1029078/1590661873011-c8a3355d-6db4-460a-930e-23649aa10228.png#align=left&display=inline&height=193&margin=%5Bobject%20Object%5D&name=%E5%9B%BE%E7%89%87.png&originHeight=354&originWidth=565&size=152006&status=done&style=none&width=308)<br />    注意:

     查看共享数据,工作台 ----> 添加 -----> 非测试元件 ----> property display

4、Jmeter:分布式

A、是什么?

多台测试机协作(集群方式)完成测试任务

B、为什么?

安全、高效、功能强大

C、怎么用?

C-1、基本架构:
图片.png
C-2、环境搭建:

1) 、搭建伪分布式环境,一台设备模拟 3 台

2)、在同一台设备开启 3 个 Jmeter 即可

       复制 3 个 Jmeter,因为要同时启动然后网络间进行数据交互,修改端口号

3)、伪分布式下配置端口号

    执行机 A,设置一个端口号: 6666<br />        执行机 B,设置一个端口号: 7777<br />在bin/jmeter.properties文件中找到下面并修改端口号

图片.png
控制机要寻址执行机 ,配置: remote-hosts=执行机AIP:6666,执行机BIP:7777
图片.png
C-3、分布式测试:
图片.png
启动 执行机A 和 执行机B 服务,双击bin/jmeter-server.bat
图片.png
1) 、需求:平均分配 1000 个用户分别给 执行机A 和 执行机B 执行

    控制机编写相关脚本

2)、分配给执行机