说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!
接着上一篇博客继续往下写 :https://blog.youkuaiyun.com/qq_41782425/article/details/100180470
目录
一丶JMeter介绍及安装
1.介绍
Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服务器等等。JMeter可用于模拟大量负载来测试一台服务器,网络或者对象的健壮性或者分析不同负载下的整体性能。同时,JMeter可以帮助你对你的应用程序进行回归测试。通过你创建的测试脚本和assertions来验证你的程序返回了所期待的值。为了更高的适应性,JMeter允许你使用正则表达式来创建这些assertions.
JMeter与LoadRunner比较
JMeter 是一款开源(有着典型开源工具特点:界面不美观)测试工具,虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细;很它的优点也有很多:
1.开源,他是一款开源的免费软件,使用它你不需要支付任何费用,
2.小巧,相比LR的庞大(最新LR11将近4GB),它非常小巧,不需要安装,但需要JDK环境,因为它是使用java开发的工具。
3.功能强大,jmeter设计之初只是一个简单的web性能测试工具,但经过不段的更新扩展,现在可以完成数据库、FTP、LDAP、WebService等方面的测试。因为它的开源性,当然你也可以根据自己的需求扩展它的功能。
两者最大的区别:jmeter不支持IP欺骗,而LR支持。
JMeter缺点与内部功能详细说明
使用JMeter无法验证JS程序,也无法验证页面UI,所以要须要和Selenium配合来完成Web2.0应用的测试。
2.安装
1.因为jmeter是由java语言开发的,所以要使用jmeter那么需要安装jdk,安装完jdk后则需要配置环境变量
2.安装jdk并配置环境变量后,然后在cmd窗口输入java以及javac检验是否安装配置成功
3.将jmeter安装包进行加压后,点击运行bin目录下的jmeter.bat文件
4.运行成功后即打开软件窗口,如下
二丶JMeter接口自动化
1.jmeter中的元件
1.测试计划,所有的请求或其他操作都存在测试计划中
2.线程组,所有的操作都属于一个线程
a)添加线程组
b)添加线程组成功后如下,线程数表示使用多少个线程(用户)进行测试,Ramp-UP表示多少时间内跑完线程数,循环次数即循环多少次操作(访问)
3.取样器(sampler)
a)在线程组中添加HTTP请求的取样器
b)添加请求成功后如下
4.断言(对结果进行判断)
a)添加响应断言
b)添加断言成功后如下
5.监听器(对结果进行收集)
a)添加断言结果监听器
b)添加断言结果监听器成功后如下
2.jmeter实战
1.get请求模拟
a)在jmeter上模拟出全国天气预报根据城市名/id查询天气接口
b)在运行前,先保存该测试计划
c)运行,向目标接口发送请求
d)以上只是向目标接口发送请求数据,但是并没有响应结果,所以需要添加响应结果的监听器
e)添加察看结果数成功后,直接在察看结果数界面点击上方的启动按钮,成功的发送一次http请求,点击这个http请求查看响应的数据
f)对测试的接口进行断言(成功的断言),当请求成功则返回的响应数据中的error_code的值为0,那么我们断言0这个值即可
- 再次启动,断言成功则在断言结果中只显示请求的方式http请求
g)对测试的接口进行断言(失败的断言),将响应断言中的值修改成10001,接口返回的响应数据中肯定没有10001这个值,即断言失败
- 再次启动,断言失败则在断言结果中显示出不包含10001这个值
f)同理如测试全国天气预报天气种类及标识列表接口,则再创建一个线程组,在线程组中添加HTTP请求丶察看结果树丶响应断言以及断言结果等
2.post请求模拟
模拟根据GPS坐标查询天气接口
a)在jmeter上模拟出全国天气预报根据GPS坐标查询天气接口(不一样的就是需要修改为post方法)
b)运行后打开察看结果数中服务器返回的数据
- ****有一个重点必须要说明:在HTTP请求中添加请求数据时,需要注意如果数据的名称在复制粘贴时,切记要双击点开看看,可能前面存在空格,导致发送请求后服务器返回错误响应数据
模拟根据IP查询地址接口
a)模拟根据IP查询地址接口(这是一个免费永久的接口,支持get/post两种请求)
b)运行后查看112.112.11.11ip的地址
模拟iwebshop登录接口
a)通过fiddler抓取iwebshop登录接口,首先查看域名
b)然后查看路径
c)最后查看请求数据,在body请求内容块数据进行全选复制
d)紧接着回到jmeter上点击Add from Clipboard直接从剪切板粘贴
f)运行后,在察看结果数中发送的HTTP请求(其余两条请求为重定向请求)
g)前两个请求中都没有响应数据
h)查看第三个请求的响应数据中的title是用户登录并且搜索cdtaogang用户搜索不到,说明并没有模拟登录成功
g)之所以没有模拟成功原因很简单,从fiddler中抓取的登录接口是携带了cookie的,但是我们在jmeter中模拟登录时并没有携带任何cookie,只是传递的登录的参数数据
h)解决方法,添加HTTP Cookie管理器即可,会自动帮我们生成所需的cookie
i)重新运行,查看响应数据,模拟iwebshop登录接口成功
j)对响应结果进行断言,断言根据响应数据中是否存在cdtaogang这个字符串
k)查看断言结果,没有任何问题
3.接口间参数传递
1.在上一篇博客中通过代码模拟了webtours登录接口,这个接口中的userSession参数就是通过另一个接口响应数据中获取的,现在通过jmeter来模拟webtours登录接口,首先配置HTTP请求
2.发送请求,查看响应数据,显然是失败的,因为接口请求的参数userSession的值是需要从另一个接口的响应数据中获取的
3.通过fiddler工具抓取的接口,可以查找出是哪个接口响应参数中存在userSession参数值
4.基于以上请求,需在jmeter中再创建一个HTTP请求用于获取响应参数中的userSession,因为存在两个HTTP请求,所以进行命名区分
5.查看OPEN请求的响应数据存在userSession值
6.上一篇博客中通过代码中的正则表达式提取出userSession的值,那么在jmeter中同样也是使用正则来获取,需要添加正则提取器
7.配置正则提取器
8.在LOGIN请求中userSession值配置匹配出来的变量usersession的值(因为是值所以需要使用${}进行提取)
9.运行后,查看响应数据,成功的模拟webtours登录接口
4.参数化
方式一:通过读取csv、txt文件获取数据
1.在iwebshop项目中添加如下配置
2.构造txt文本数据
3.在CSV Data Set Config中进行导入文件
4.在HTTP请求中配置读取txt文本的数据
5.运行查看发送的请求地址,因为只发送了一次,所以只读取了data_01.txt文本中的第一行数据
6.查看响应数据,登录成功
7.为了读取data_01.txt文本中的所有数据,所以在iwebshop配置循环次数为3次
8.再次运行,发送了三次请求,并将所有的用户名和密码进行了依次发送
9.在webtours中配置CSV Data Set Config,读取csv文档数据
10.查看构造的data_02.csv数据
11.在LOGIN请求中配置username以及password的值
12.配置webtours循环次数为3次,运行后查看请求,读取csv数据成功
13.在csv数据中第一行的用户名密码为正确其余的都是错误的,所以在对应的响应数据中提示用户名密码错误
14.模拟登录成功的话提示数据为用户名密码正确correct,不正确为incorrect
15.即那么我们就可以通过响应数据中是否包含correct这个值来判断是否登录成功,首先在csv数据中添加expect预期值
16.紧接着在CSV Data Set Config中配置获取预期值数据接收变量
17.选中LOGIN请求添加响应断言以及断言结果
18.运行webtours后,断言结果都没问题
方式二、通过函数助手读取csv、txt文件
1.不再使用以上的方式,所以将webtours中的CSV Data Set Config进行禁用掉
2.点击函数助手
3.在函数助手中选择读取文件的类型,并且指定要读取的csv文件路径,以及csv文件第几列的数据(输入的是索引值从0开始计算,如输入0表示读取第一列数据也就是对应的用户名)
4.然后将复制生成的函数字符串粘贴到LOGIN请求参数中的username对应的值中,同理password也是需要在函数助手中进行生成,但是文件列号需要改成1表示第二列
5.同理预期结果也一样,在响应断言中进行更改
6.运行webtours后,发现LOGIN请求响应数据中的请求都是第一列和第二列的第一个,说白了就是第一行读取了三遍
7.导致以上结果的原因是,函数助手读取csv文件数据时是按照用户数来读的,而我们在webtours中配置的是一个用户读取三次数据,所以解决方法就是将线程数修改为3,循环修改为1,表示3个用户读取一次
8.重新运行,查看响应数据,成功的读取csv中的所有数据
方式三、通过用户参数设置数据
1.在webtours添加用户参数
2.在用户参数中配置变量以及对应的用户
3.在LOGIN请求中配置请求参数中的username以及password
4.在响应断言中配置预期结果值
5.最后在webtours线程组中修改用户数以及循环数
6.运行后,从响应数据请求中的参数还是跟(方式二、通过函数助手读取csv、txt文件)一样只是读取一行
7.即还是需要将webtours线程组中的用户设置为3,循环设置为1,再次运行,响应结果中的请求数据显示读取不同的csv数据