需求1:测试计划中定义一个 http 请求访问传智播客官网,但是该请求不是无条件执行的,声明一个用户定义的变量,如果变量是 itcast 才执行,否则就不执行
1、搭框架,测试计划,线程组,结果树,声明一个用户定义的变量
2、核心:添加 if 控制器,子级添加取样器 (和之前实现不同,控制器和取样器存在父子级关系)
需求2:有一组关键字 [hello,python,测试] (使用用户定义的变量存储)要依次取出,并在百度搜索
1、搭框架,测试计划,线程组,结果树,声明一个用户定义的变量,存储一组数据
2、添加 forEach 控制器,子级添加取样器 (和之前实现不同,控制器和取样器存在父子级关系)
3、百度搜索关键字
需求3:循环访问学生管理系统10次
实现:
1、搭框架,测试计划,线程组,结果树
2、添加循环控制器,子级添加取样器 (和之前实现不同,控制器和取样器存在父子级关系)
关联: 上一个请求的响应结果和下一个请求的数据有关系。
需求1:两个http请求,请求A访问传智播客官网,请求B访问百度 ,请求A将传智播客官网源码中的 title 标签的值取出,传递给请求B,在请求B中作为关键字搜索这个title值
步骤:
1、搭框架,编写两个请求,传智播客 + 百度搜索
2、核心: 取出传智播客页面源码的 title 值
3、传递给百度:${变量名} 的方式传值
需求:两个请求,请时求A查询所有学院信息,请求B访问百度,从请求A中提取出第一个学院的学院名称,把名称放在百度上搜索
步骤:
1、搭框架,编写两个请求,查询所有学院信息 + 百度搜索
2、核心:从学院查询中提取学院名称
3、传递给百度,调用格式: ${变量名}
建议: 如果从标签文档提取数据建议使用 XPath 提取器,如果从非标签文档提取数据建议使用正则表达式提取器
变量作用域局限于当前线程组,其他线程组不可以直接调用。可以将请求A中提取的结果导出到公共空间(可以被不同线程组共享),请求B再从公开空间调用该变量,相当于全局变量。
步骤:
1、将请求A的数据导出到公共空间( __setProperty)
2、把代码放在beanshell取样器中
3、请求B从公共空间调用数据 (__property)
JMeter 中内置了 定时器,可以实现时间模式相关的性能测试
需求1:同一时刻 100 个同学去访问学生管理系统的查询所有学院信息功能,统计高并发情况下平均响应时间以及错误率(高并发)
1、搭框架,测试计划,线程组,取样器,结果树(局限性),指定线程组的线程数属性值为 100
2、添加定时器 synchronizing timer(集合点组件)
3、运行并查看结果查看:聚合报告组件,可以对结果汇总分析
需求2:一个用户以 20QPS ( == 20 次/s,QPS是每秒钟的查询次数) 的频率访问学生管理系统服务器,持续15秒,统计服务器的平均响应时间
QPS: Query per Seconds 每秒查询数(查询率),每秒访问多少次服务器
1、搭框架,测试计划,线程组,取样器,聚合报告,根据题干计算数据:
循环次数 = 访问频率 * 持续时间
2、添加QPS访问频率控制的相关组件:
每分钟访问次数 = 访问频率 * 60
多机台协作,以集群的方式完成测试任务,可以提高测试效率。
控制机 = 负责任务分配
执行机 = 负责任务实现
工作流程
1.控制机需要制定测试任务,并下发到执行机
2.执行机执行任务并将结果返回到控制机
3.控制机做结果汇总
环境搭建:
1、不同的测试机上安装 Jmeter
2、配置基础环境(统一操作系统、JDK、Jmeter … )
3、核心: 控制机如何与执行机通信? 关键点:端口号
4、控制机中设置执行机的 IP
%JMETER_HOME%/bin/jmeter.properties ----> remote_hosts=执行机A的IP:端口号, 执行机B的IP:端
口号, …