目录
总目录:
一、JMeter简介:
-用途:
JMeter是Apache组织使用Java开发的一款测试工具:
1.可以使用对服务器、网络或对象模拟巨大的负载。
2.通过创建带有断言的脚本来验证程序是否能返回期望的结果。
-优缺点:
优点:
1.开源、免费 2.跨平台 3.支持多协议 4.小巧 5.功能强大
缺点:
1.不支持IP欺骗
2.使用JMeter无法验证JS程序,也无法验证页面UI,所以要和Selenium配合来完成Web2.0应用的测试。
二、JMeter安装:
1).JMeter是使用Java编写的,必须安装Java环境:
1.JDK:Java SE Development Kit(java开发工具包,为Java程序开发提供环境支持)
2.JRE:Java Runtime Environment(java运行环境,为Java程序运行提供环境支持)
2).下载并安装JMeter
下载:Apache JMeter - Download Apache JMeter
安装:直接解压缩即可
三、项目简介:
-学生管理系统:
学生管理系统:对学生信息进行增删改查,对应的RESTful语法风格如下。
查:URL+GET (查所有,查指定,根据某些参数进行查找,模糊查询) 状态码确定就是200
增:URL+POST ()状态码201或200
改:URL+PUT 状态码201或200
删:URL+DELETE 状态码确定为204
-API接口清单:
附件内容是相关接口清单,请根据清单描述,测试各个接口实现。
PS:该系统是严格遵循RESTful架构风格的实现,通过练习以强化对RESTful架构风格的理解与认识。
查询:
新增:
更新:
删除:删除单个,删除多个。
四、JMeter基本使用:
设置接口三要素查询所有学院信息:
1.测试计划--右键--线程--添加线程组
2.线程组--右键--取样器--http请求
3.测试计划--右键--添加监听器--查看结果树
4.点击运行,查看结果
测试要遵循接口的文档进行一步步测试。
-示例:
目的:查询所有。
http://127.0.0.1:8000/api/departments/
查看结果:【查看结果树】
-JMeter线程组相关:
进程:正在运行的程序
线程:是进程中的执行线索
线程组:进程中有许多线程,为了方便管理,可以对线程按照性质分组,分组的结果就是线程组
PS:三者关系,一个进程可以包含多个线程组,一个线程组可以包含多个线程。
-JMeter并发执行和顺序执行:
并发执行:多个线程同时执行
顺序执行:多个线程顺序执行
-JMeter两个特殊线程组:
setUp线程组:最优先执行的线程组
tearDown线程组:最后执行的线程组
-JMeter线程组常用属性:
线程组的配置:
线程数:组内线程个数
Ramp-Up时间(秒):程序准备时间
循环次数:每个线程要执行的次数
调度器:调度器配置包括持续时间和启动延迟。
-http请求默认值:
http请求默认值:被复用的内容的封装。
若多个线程的http请求所需信息一致,可通过HTTP请求默认值 来设置,就不需要对单个的http请求进行设置重复信息了,只需对该http请求设置独特的信息。
-信息头管理器:
新增修改实现时提交的数据是JSON格式的,需声明提交的数据的内容类型;
五、参数化:
定义:动态的获取、设置或生成数据,是一种由程序驱动代替人工驱动的数据设计方案,提高脚本的编写效率及编写质量
以下四种方式实现参数化:
1.用户定义的变量
2.CSV数据文件设置
3.用户参数
4.函数
1.参数化--用户定义的变量:
调用格式:${变量名}
通俗点说:用一个名称来代替一小段数据。即下图中红色字体的部分。
只能代表一小段内容,不适合大量数据的参数化。
2.参数化--CSV数据文件设置(用得更广):
CSV : 逗号分隔值,是一种简洁且常见的数据存储格式,存储语法如下图所示:
对于批量数据的参数化。
实现步骤:
1.使用CSV文件存储测试数据
2.编写被复用的学院新增脚本模板
注意2:编码集使用UTF-8无BOM格式
3.关联脚本与数据(将文件数据导入脚本)
操作步骤:
1.先准备好数据,并将其csv.txt格式,具体数据的保存是:每行里的数据用","英文下的逗号隔开。不同行数据用"回车"隔开。数据保存为"UTF-8"格式。
2.测试计划-右键"添加"-配置原件-CSV数据文件设置:
文件名:数据的存储路径
文件编码:utf-8
变量名称(西文逗号间隔):将各列的名称列举出来,不同名称用英文逗号间隔。
忽略首行(只在设置了变量名称后才生效):False
分隔符(用'\t'代替制表符):,
是否允许带引号?:False
遇到文件结束符再次循环?:False
遇到文件结束符停止线程?:True
线程共享模式:所有现场
3.配置线程组的参数:
循环次数:永远
对于这里面线程组的配置:
循环次数:选择【永远】,除非知道具体的数据条数,可不选【永远】直接在后面写上具体条数。
3.参数化--用户参数(不常用):
也是处理批量数据。但csv数据文件设置需要额外添加txt文件数据。而用户参数无需额外添加文件数据。
实现步骤:
1.编写被复用的学院新增脚本模板
2.使用用户参数存储测试数据
3.将数据导入脚本模板
4.设置执行次数
具体操作步骤:
1.HTTP请求-用户参数:点击添加变量多一行数据;点击添加用户多一列数据。
2.线程组属性:用线程数模拟几个人,所以有几个人线程数就写几。此处无需设置循环次数。
3.消息体数据进行变量替换:
4.参数化--函数:
常见函数:
_counter计数器函数TRUE(每个用户都有自己的计数器)FALSE(所有用户共用一个计数器)
_Random随机数函数 参数1:取值范围最小值(包含) 参数2:取值范围最大值(包含)
_time获取当前时间的函数 无参:获取的是距离 1970/01/01 00:00:00的毫秒值
参数1:yyyyMM_dd HH:mm:ss 格式化成 年|月_日 时:分:秒 格式
_time:
六、直连数据库:
通过直连数据库让程序代替接口访问数据库,如果二者预期结果不一致,就找到了程序缺陷。
获取某条学院的名字,放在百度搜索:
1.Jmeter不具备直连数据库功能,必须整合第三方(jar包)实现
2.配置数据库的连接
3.通过JDBC Ruquest请求向数据库发送SQL语句并接受提取响应结果
4.结果获取规则可以通过Debug Sampler组件查看
5.将提取到的响应结果,在百度上
步骤:
1.新建一个测试计划,并添加上jar包(sqlite-jdbc-3.21.0.jar),这样JMeter就有了直连数据库的功能。
2.添加JDBC请求。线程组-添加-取样器-JDBC Request
3.JDBC Connection Configuration的具体配置:
jdbc:sqlite:具体数据库的文件路径
例如:jdbc:sqlite:E:\项目\studentManagementSystem\db.sqlite3
4.JDBC Request的参数配置:
5.可在察看结果树中查看结果。
6.HTTP请求参数的配置:
协议:http
服务器名称或IP:<www.baidu.com>
端口号:80
val_30 对应黑马学院1
在线程组中添加调试取样器但并不需要设置任何东西。
7.一切弄好后,再次运行,然后查看结果树。结果如下:
七、断言:
在HTTP请求中进行添加断言。
1.响应断言:
断言:让程序代替人工判断响应结果是否符合预期
分类:
响应断言 = 断言状态码和响应体
大小断言 = 判断响应内容的字节长度
断言持续时间 = 判断响应时间
步骤:
1.按照之前的实现编写测试脚本
2.为被判断的取样器添加断言组件
3.直接运行查看结果断言通过:无提示。断言失败:给出错误。
举例:
判断响应文本:
1.包含"老张":
结果无报错:
2.不包含"老张hahha":
结果报错:
模式匹配规则:
常用"包括"和"相等"。
"包括":判断某些内容是否包含。
"匹配":正则表达式用到的内容
"相等":判断是否完全相等
"字符串":
"否":在前面的选择基础上结果取反。
"或者":
测试字段:
常用"响应文本"和"响应代码":
"响应文本":最终通过一系列条件判断得到的内容。
"响应代码":查的状态码是200;增的状态码是201或200;改的状态码是201或200;删的状态码是204.如果判断值为2000或其他数则直接报错。
-响应代码报错示例:
2.大小断言:
判断请求得到的结果数据有多少。
"响应字段的大小"的选择:
完整响应:
响应头:
响应的消息体:
响应代码:
响应消息:
-示例:
因为没有添加判断条件,所以侧边栏爆红。这样可以看到全部的响应结果。
3.断言持续时间:
同样的添加断言方式。
1000ms = 1s
注意单位是毫秒
下章导航:
JMeter进阶篇...