Jmeter接口测试01

摘要:
Jmeter接口测试的简单操作包括http脚本编辑(发送get/post请求、cookie设置、标头设置和权限验证)、参数化、断言、关联和数据驱动。1.添加线程组2。添加http请求3。在http请求4中写入访问url、路径、请求方法和参数。添加视图结果树5。调用接口,查看返回值,并测试API http:
Jmeter 简介
  Apache JMeter 是 Apache 组织的开放源代码项目,是一个纯 Java 桌面应用,用于压力测试和性能测试。它最初
被设计用于 Web 应用测试但后来扩展到其它测试领域。
 
Jmeter 功能
  • 能够对 HTTP 和 FTP 服务器进行压力和性能测试, 也可以对任何数据库进行同样的测试(通过 JDBC)。
  • 完全的可移植性和 100% 纯 java。
  • 完全 Swing(Java 设计的 GUI 工具包)和轻量组件支持。
  • 完全多线程 框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样。
  • 精心的 GUI 设计允许快速操作和更精确的计时。
  • 缓存和离线分析/回放测试结果。
 
Jmeter 接口测试
  Jmeter 接口测试的简单操作包括做 http 脚本编辑(发 get/post 请求、cookie 设置、header 设置、权限认证)、
参数化、断言、关联和数据驱动等等。
 
Jmter 安装启动
下载安装
说明
一般开放原代码软件都会有两个版本发布: Source 和 Binary
• Source 是源代码版,你需要自己编译成可执行软件。
• Binary 是可执行版,直接可以拿来用的,他已经给你编译好的版本
• 下载后,解压文件到任意目录,避免在有空格的路径安装 JMeter。
• 环境依赖: java 环境,需要自行安装配置好 JDK 环境变量
 
启动软件
  进入到 jmeter 的 bin 目录,双击运行 JMeter.bat 即可启动软件,如下界面:
Jmeter接口测试01第1张
Jmeter 接口测试实践
Jmeter 脚本编写一般分五个步骤:
1. 添加线程组
2. 添加 http 请求
3. 在 http 请求中写入接入 url、路径、请求方式和参数
4. 添加查看结果树
5. 调用接口、查看返回值
 
测试 API
http://httpbin.org
发送 Get 请求
请求 URL 如下:
http://httpbin.org/get
在 Jmeter 配置如下图所示:
Jmeter接口测试01第2张
 
在查看结果树选择 Json Path Tester 如下图所示可以看到返回结果:
 
Jmeter接口测试01第3张
发送 POST 请求
请求 URL 如下
http://httpbin.org/post
Jmeter 配置如下图所示:
Jmeter接口测试01第4张
响应结果:
 
Jmeter接口测试01第5张
HTTP 请求默认值
  通过上面两个请求我们发现,Web 服务器中的协议和服务器名称或 IP 这两个值都是一样,每次重复输入其实比较麻
烦,因此我们可以使用 HTTP 请求默认值来管理这些公共的配置数据。
 
添加步骤:线程组——添加——配置元件——HTTP 请求默认值 然后进行如下配置,并把该元件放置到请求前面。
Jmeter接口测试01第6张
 
经过请求默认值的配置后,后续我们增加新的请求,如果这两项值是一样的话,那么则无需再重复填入该值。
 
断言设置
Jmeter 可以针对每一个请求响应进行断言。
设置步骤:选中一个请求,如 http-get,然后右键选择:添加——断言——响应断言。
 
各个匹配模式含义如下:
• 包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式
• 匹配:响应内容要完全匹配需要匹配的内容即代表响应成功,大小写不敏感,支持正则表达式。
• Equals:响应内容要完全等于需要匹配的内容才代表成功,大小写敏感,需要匹配的内容是字符串正则表
达式
• Substring:返回结果包含指定结果的字串,但是 subString 不支持正则字符串
• 否:不进行匹配
• 或者
如下图所示匹配返回的字符串是否包含 http://httpbin.org/get
Jmeter接口测试01第7张
 
如果断言成功,则查看结果树为绿色标志,如果断言失败则为红色显示,如下图所示:
 
Jmeter接口测试01第8张
参数设置
Jmeter 支持通过 Query String Parameters 或者 Request body 请求体来传递参数。
Query String Parameters
如果希望在请求 URL 中添加参数,则可以在 Http 请求界面的 Parameters 选项里面添加参数。
该参数会通过 Query String Parameters 方式传递给服务器,也就是在 URL 中传递参数。 如下图如所示设置参数:
 
Jmeter接口测试01第9张
Request body
在 Post 请求中参数一般在 body 中传递,Jmeter 也支持在 body 中传递参数。如传递 Json 格式的参数,在 Body
Data 编辑框输入如下参数:
{"username":"huang"}
另外还需要指定参数的格式,因此需要添加 HTTP 信息头管理器
添加步骤:选定请求——添加——配置元件——HTTP 信息头管理器,然后在管理器里面添加参数类型 Content-Type :application/json  如下图所示:
Jmeter接口测试01第10张
变量
在请求过程中,有时我们需要在请求中设置一些变量来测试不同的场景。
Jmeter 支持以下类型变量:
• 用户自定义变量
• 函数生成变量
• BeanShell 变量
• 数据文件变量
用户自定义变量
设置步骤: 选中请求——添加——前置处理器——用户参数 设置变量名称为 user,值为 huang
Jmeter接口测试01第11张
在请求时引用变量如下所示: 变量引用格式为:${user}
 
Jmeter接口测试01第12张  
函数生成变量
Jmeter 有许多内置的函数,可以生成随机数。创建步骤:点击菜单栏选项——函数助手对话框——下拉选择
__Random()函数 函数配置如下: 
Jmeter接口测试01第13张
BeanShell 变量
什么是 Bean Shell?
• BeanShell 是一种完全符合 Java 语法规范的脚本语言,并且又拥有自己的一些语法和方法;
• BeanShell 是一种松散类型的脚本语言(这点和 JS 类似);
• BeanShell 是用 Java 写成的,一个小型的、免费的、嵌入式的 Java 源代码解释器,具有对象脚本语言特性,非
常精简。
• BeanShell 执行标准 Java 语句和表达式,另外包括一些脚本命令和语法。 官网:http://www.BeanShell.org/
 
Jmeter 有哪些 Bean Shell?
• 定时器: BeanShell Timer
• 前置处理器:BeanShell PreProcessor
• 采样器: BeanShell Sampler
• 后置处理器:BeanShell PostProcessor
• 断言: BeanShell 断言
• 监听器: BeanShell Listener
 
Bean Shell 常用内置变量
JMeter 在它的 BeanShell 中内置了变量,用户可以通过这些变量与 JMeter 进行交互,其中主要的变量及其使用
方法如下:
vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),
它是测试用例与 BeanShell 交互的桥梁,常用方法:
//定义 jmeter 变量
vars.put(String key,String value);
//从 jmeter 中获取变量
vars.get(String key);
log:写入信息到 jmeber.log 文件,使用方法: 
log.info(“hello huang!”);
BeanShell 实践案例
1.创建请求名为 beanshell_test 的 Http 请求,请求地址为:http://httpbin.org/get 同时设置传递的参数为 beanshell_user
Jmeter接口测试01第14张
2.创建 BeanShell PreProcessor 变量设置如下所示: 

 Jmeter接口测试01第15张

3.最后运行结果可以看到,设置的变量已经生效
 
Jmeter接口测试01第16张
CSV 数据文件变量
CSV 数据文件变量是指从外部 csv 文件读取数据出来作为变量。
设置步骤: 选择请求——添加——配置元件——CSV 数据文件设置
创建 csv 文件(最好不用用记事本创建,推荐用 Nodepad++)文件编码为 UTF-8 文件内容如下:user_data.csv
huang,8888
CSV 数据文件设置如下:
Jmeter接口测试01第17张
在 Post 请求中引用变量数据如下:
 
Jmeter接口测试01第18张
运行之后在查看结果树中请求选项栏可以看到获取的变量数据。

Jmeter接口测试01第19张

CSV 参数化
针对之前的 POST 接口进行如下参数遍历测试:
接口如下:
http://httpbin.org/post
发送参数:user_datas.csv

zhangsan,123
lisi,6666
wangwu,999
mazi,2222

在之前的 csv 数据文件设置需要需改配置如下:表示把所有数据读取一遍,且不重复。

Jmeter接口测试01第20张

 ❖ Filename --- 参数项文件

❖ File Encoding --- 文件的编译方法,一般为空
❖ Vaiable Names --- 文件中各列所表示的参数项;各参数项之间利用逗号分隔;参数项的名称应该与HTTP Request 中的参数项一致。
❖ Delimiter --- 如文件中使用的是逗号分隔,则填写逗号;如使用的是 TAB,则填写 ;
❖ Recycle on EOF? --- True=当读取文件到结尾时,再重头读取文件,False=当读取文件到结尾时,停止读取文件
❖ Stop thread on EOF? --- 当 Recycle on EOF?一项为 False 时起效;True=当读取文件到结尾时,停止进程
 
 
接口请求名称格式更改为:http-csv-post-${user} 方便我们后续查看数据遍历情况。
最后修改线程组的线程数量,因为数据中有 4 组数据,所以设置为 4.
Jmeter接口测试01第21张
 
运行查看结果如下: 
Jmeter接口测试01第22张
正则匹配
问题思考
接口测试过程中经常需要接口之间关联调用,比如获取上一个接口的返回值,作为另一个接口的请求参数,那么该如何从处理呢?
这里需要使用 Jmeter 的正则表达式提取器,通过对响应的数据来提取指定的数据。
 
操作案例
从请求 http-get 响应数据中匹配随机数 num 的值,然后创建请求 get-num 来引用 num 的作为请求参数。
设置步骤:
选中请求——添加——后置处理器——正则表达式提取器
根据 http-get 的响应,提取返回值中的 host 配置如下:
 
 Jmeter接口测试01第23张
正则表达式配置表
• 引用名称:请求要引用的变量名称,如填写 result_num,则可用${result_host}引用它。
• 正则表达式:匹配需要的内容。
• 模板:用$host$引用起来,如果在正则表达式中有多个匹配数据,num 表示匹配到的第几个值给变量。如:$1$表示匹配到的第 1 个值存储在变量中。
• 匹配数字:0 代表随机取值,1 代表全部取值,
• 缺省值:如果参数没有取得到值,那默认给一个值让它取。
 
案例中正则表达式说明
• ()括起来的部分就是要提取的。
• .匹配任何字符串。
• +一次或多次。
• ?在找到第一个匹配项后停止。
  相关资料:正则表达式教程 
 
新建一个请求 get-host,在新的请求中将 http-get 返回的数据作为参数传递,如下图所示: Jmeter接口测试01第24张

 查看结果如下图:

Jmeter接口测试01第25张

免责声明:文章转载自《Jmeter接口测试01》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇OpenSCAD 建模:矿泉水瓶盖如何解决读取到文件末尾时碰到EOF导致的重复输出或者无用输出下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#调用java类、jar包方法。

一、将已经编译后的java中Class文件进行打包;打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理; 使用的命令:jar cvf test.jar -C com/ . 其中test.jar为要生成的jar包;com/ . 为指定的当前目录下的文件夹,该文件夹包括子文件夹及class文件; 二、到IKVM官方网站下载IKVM需要的组件 ...

使用iText库创建PDF文件

前言 译文连接:http://howtodoinjava.com/apache-commons/create-pdf-files-in-java-itext-tutorial/ 对于excel文件的读写操作,相信大家都比较熟悉,使用apache的POI库即可。本篇文章,我将基于iText库编写各式各样的代码示例去创建PDF文件。这些例子会按它们各自的功能分...

处理 EF 并发其实就这么简单

    最近项目有点闲,终于可以了解点自己想了解的了,以前听同事讲面试的经历总会被问到“如何处理高并发大数据” 乍一听感觉这东西好像很有学问的样子,于是并发这个词在脑海里留深刻印像,而且在自己心中的技术地位也提高很多,也导致了解并发相关的知识时,也带着思想负担,总以为很难懂,程序员或许都是这样,在自己不懂的技术领域,别人说一个很简单的技术,给他的感觉都是很...

.NET调用Java写的WebService

最近遇到一个用.net调用java写的webservice的应用,对方程序员提供了一个后缀为wsdl的文件,这个跟.Net里面生成的wsdl文件差不多,起初没什么概念就查了点资料,知道可以将这个wsdl文件编译动态库直接调用,也就是生成一个代理了,这个跟以往经常将.net的webservice描述地址进行编译似乎差不多,于是就尝试这写,还基本能实现。基本格...

curl的常用参数

-A -A参数指定客户端的用户代理标头,即User-Agent。curl 的默认用户代理字符串是curl/[version]。 $ curl -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 S...

idea常用配置

idea 下载其他版本: https://www.jetbrains.com/idea/download/other.html Tomcat配置VM Options:  -XX:PermSize=512m -XX:MaxPermSize=1024m 1.IDEA卡顿,修改IDEA使用内存 修改idea配置文件 在IDEA的安装目录下的bin目录下: 用记事...