• 14
  • 14
分享

一、Jmeter简介

1、Jmeter简介

Apach JMeter是Apache组织的开发源代码项目,是一个纯Java桌面应用,用于压力测试和性能测试。它最初被设计用于Web应用测试但后来扩展到其他测试领域。

2、Jmeter功能

  • 能够对HTTP和FTP服务器进行压力和性能测试,也可以对任何数据库进行同样的测试(通过JDBC);

  • 完全的可移植性和100%纯Java;

  • 完全Swing(Java设计的GUI工具包)和轻量组件支持;

  • 完全多线程,框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样;

  • 精心的GUi设计允许快速操作和更精确的计时;

  • 缓存和离线分析/回放测试结果。

3、Jmeter接口测试

Jmeter接口测试的简单操作包括做http脚本编辑(发get/pose请求、cookie设置、header设置、权限认证)、参数化、断言、关联和数据驱动等。

4、安装说明

一般开放源代码软件都会有两个版本发布:Source和Binary

  • Source是源代码版,你需要自己编译成可执行软件;

  • Binary是可执行版,直接可以用,是已经编译好的版本;

  • 下载后,解压文件到任意目录,路径不可有空格;

  • 环境依赖:Java环境。

二、Jmeter发送请求

1、Jmeter接口测试实践

Jmeter脚本编写一般分为五个步骤:

  1. 添加线程组;

  2. 添加http请求;

  3. 在http请求中写入:接入url、路径、请求方式和参数;

  4. 添加查看结果树;

  5. 调用接口,查看返回值。

2、测试API

http://httpbin.org

三、Jmeter断言

1、断言设置

Jmeter可以针对每一个请求响应进行断言。设置步骤:选中一个请求,如http-get,然后右键选择:添加——断言——响应断言。

各个匹配模式含义如下:

  • 包括:响应内容包括需要匹配的内容即代表响应成功,支持正则表达式;

  • 匹配:响应内容要完全匹配的内容即代表响应成功,大小写不敏感,支持正则表达式;

  • Equals:响应内容要完全等于需要匹配的内容才代表成功,大小写敏感,需要匹配的内容是字符串正则表达式;

  • Substring:返回结果包含指定结果的字符串,但是subString不支持正则字符串;

  • 否:不进行匹配。

四、参数设置

1、参数设置

Jmeter支持通过Query String Parameters或者Request body请求体来传递参数

2、Query String Parameters

如果希望在请求URL中添加参数,则可以在Http请求界面的Parameters选项里面添加参数。该参数会通过Query String Paraments方式传递给服务器,也就是在URL中传递参数。

1.jpg

3、Requeest body

在Post请求中参数一般在body中传递,Jmeter也支持在body中传递参数。如传递Json格式的参数,在Body Data编辑框输入如下参数:

{"username":"51zxw"}

还需要制定参数的格式,需要添加HTTP信息头管理器

添加步骤:选定请求——添加——配置元件——HTTP信息头管理器,在管理器里面泰纳及参数类型Content-Type:application/json。如下图:

2.jpg

五、用户变量&函数变量

1、变量

在请求过程中,有时我们需要在请求中设置一些变量来测试不同的场景。

Jmeter支持以下类型变量:

  • 用户自定义变量

  • 函数生成变量

  • BeanShell变量

  • 数据文件变量

2、用户自定义变量

设置步骤:选择请求——添加——前置处理器——用户参数,设置变量名称为user,值为51zxw

3.jpg

在请求时引用变量如下所示:变量引用格式为${user}

4.jpg

进行用户参数设置时,设置多用户,选中【每次迭代更新一次】,在主线程中,设置线程数为3.

5.jpg

6.jpg

3、函数生成变量

Jmeter有许多内置的函数,可以生成随机数。创建步骤:点击菜单栏选项——函数助手对话框——下拉选择_Random()函数,函数配置如下:

7.jpg

六、Beanshell变量

1、什么是Bean Shell

  • Bean Shell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;

  • BeanShell是一种松散类型的脚本语言(这点和JS类似);

  • BeanShell是用Java写成的,一个小型的,免费的,嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精简;

  • BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。

官网:http://www.BeanShell.org/

2、Jmeter有哪些BeanShell

  • 定时器: BeanShell Timer;

  • 前置处理器: BeanShell PreProcessor;

  • 采样器: BeanShell Sampler;

  • 后置处理器: BeanShellPostProcessor;

  • 断言: Beanshell断言;

  • 监听器: BeanShell Listener。

3、BeanShell常用内置变量

JMeter在它的BeanShell中内置了变量,用户可以通过这些变量与JMeter进行交互,其中主要的变量及其使用方式如下:

vars - (JMeterVariables):操作Jmeter变量,这个变量实际引用了Jmeter线程中局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:

//定义Jmeter变量
vars.put(String key,String value);
//从jmeter中获取变量
vars.get(String key);

log:写入信息到Jmeter.log文件,使用方法:

log.info("Hello 51xzw");

示例:

8.jpg

七、CSV数据文件变量&参数化

1、CSV数据文件变量

CSV数据文件变量是指从外部csv文件读取数据出来作为变量。

设置步骤:选择请求——添加——配置原件——CSV数据文件设置

创建csv文件,文件编码为utf-8,文件内容如下:

user_data.csv

51xzw,8888

1.jpg

注意:

若请求存在用户参数和CSV数据文件,运行时会优先调用用户参数

2、CSV参数化

2.jpg

八、正则匹配

1、问题思考

接口测试过程中经常需要接口直接关联调用,比如获取上一个接口的返回值,作为另一个接口的请求参数,那么该如何处理呢?

这里需要使用Jmeter的正则表达式提取器,通过对响应的数据来提取指定的数据。

2、操作案例

从请求http-get响应数据中匹配随机数num的值,然后创建请求get-num的作为请求参数。

3、设置步骤:

选择请求——添加——后置处理器——正则表达式提取器

根据http-get的响应,提取返回值中的num配置如下:

1.jpg

2.jpg

4、正则表达式配置表

  • 引用名称:请求引用的变量名称,如填写result_num,则可用${result_num}进行引用

  • 正则表达式:匹配需要的内容

  • 模板:用n u m numnum引用起来,如果在正则表达式中有多个匹配数据,num表示匹配到的第几个值给变量。如:1 11表示匹配到的第一个值存储在变量中

  • 匹配数字:0代表随机取值,1代表全部取值

  • 缺省值:如果参数没有取得到值,将会取默认值

案例中正则表达式说明:

  • ()括起来的部分就是要提取的

  • . 匹配任何字符串

  • +一次或多次

  • ?在找到第一个匹配项后停止

相关资料:https://www.runoob.com/regexp/regexp-tutorial.html

九、用例数据分离

当用例越来越多,用例维护起来就越来越麻烦,

将用例的数据存放在csv文件中,然后通过csv文件配置来读取用例中的数据,执行测试。

1、用例设计

以httpbin接口为例,创建用例文件:jmeter-testcase.csv

1.png

用例名称变量含义:

  • ${caseSeq}:用例编号

  • ${apiType}:api类型

  • ${apiSeq}:api版本号

  • ${apiName}:api名称

  • ${priority}:优先级

  • ${url}:api路径

  • ${methods}:请求方法

  • ${parameter}:请求参数

  • ${expectValue}:期望值、用于断言

2、Jmeter设置步骤:

  1. 创建一个线程组,命名为:数据驱动;

  2. 创建一个http请求默认值,设置如下;

  3. 添加一个循环控制器,步骤为:线程组——添加——逻辑控制器——循环控制器。循环控制器的作用可以控制整个执行的次数。默认值是1,根据用例数量可以修改为4;

  4. 在循环控制器节点下创建csv文件设置,具体配置内容如下;

  5. 创建一个if控制器,步骤为:线程组——添加——逻辑控制器——if控制器。

if控制器的作用为根据不同条件执行不同的用例,例如这里根据不同的接口请求类型,分别创建了get和post两个控制器。

get设置的条件语句如下:

1.jpg

条件语句为:“m e t h o d s ” = = " G E T " , 其 中 {methods}”=="GET",其中methods”=="GET",其中{methods}表示引用的methods中的值

参数:

  • Interpret Condition as Variable Expression?:如果或者选项被选中,将不会使用js解析;条件表达式必须是true(忽略大小写);

  • Evaluate for all children:在每个子节点执行前都会计算表达式。

POST条件语句设置为:"${methods}"==“POST”

11.jpg

6、创建GET请求类型的用例如下

2.jpg

用例名称格式:KaTeX parse error: Expected group after '_' at position 10: {caseSeq}_?{apiSeq}_${apiName}

断言设置如下:${expectValue}引用csv中对应的值

1.jpg

最后添加查看结果树,然后运行查看运行结果:

2.jpg

十、Cookie设置

1、HTTP Cookie管理器

如果有一个HTTP请求,其返回结果包含一个cookie,那么使用JmeterCookie管理器会自动将该cookie保存起来,而且以后所有对该网站的请求都使用同一个cookie。每个Jmeter线程都有自己独立的“cookie保存区域”。

2、案例实践

请求URL如下:

http://httpbin.org/cookies/set

以上请求会返回cookie,Cookie内容可以通过自定义参数设置。这里我们设置Cookie内容如下:

1.jpg

添加Cookie管理器:选中线程组——添加——配置元件——HTTP Cookie管理器

运行之后我们可以在查看结果树看到Cookie:

2.jpg

十一、授权设置

1、应用背景

在介绍Postman的过程中,使用Postman各种授权协议的接口进行测试,在Jmeter中同样也支持对需要授权的接口进行测试。

2、Basic Auth

请求接口为:

http://httpbin.org/basic-auth/{username}/{passwd}

设置用户名为:tianlin 密码:666

新建http请求名称为:basic-auth ,设置如下:

1.jpg

然后添加HTTP授权管理器:选中请求——添加——配置元件——HTTP授权管理器,配置如下;

11.jpg

十二、测试报告

1、聚合报告

聚合报告是一个比较精简的报告元件,可以查看每个接口的性能情况于执行结果。设置步骤:选中线程组——添加——监听器——聚合报告。

1.jpg

报告各个参数含义如下:

  • Samples——本次场景中一共完成了多少个请求

  • Average——平均响应时间

  • Median——响应时间的中值

  • 90%Line——所有请求中90%的响应时间

  • Min——最小响应时间

  • Max——最大响应时间

  • Error——出错率

  • Troughput——吞吐量

  • Received——响应数据大小

  • KB/sec——以流量做权衡的吞吐量

2、HTML报告

JMeter3.0以后,引入了Dashboard Report,用于生成HTML页面格式图形化包公扩展模块。

生成步骤:

打开cmd进入jmeter目录bin目录

执行命令:

jmeter -n -t httpbin_test.jmx -l httpbin.jtl -e -o C:\User\Shuping\Desktop\report

命令的参数:

  • -n:以非GUI形式运行Jmeter

  • -t:jmeter脚本路径

  • -l:result运行结果保存路径(.jtl)此文件必须不存在

  • -e:在脚本运行结束后生成html报告

  • -o:用于存放html报告的目录,不加该参数默认生成到bin\report-output

生成的测试报告样式如下:

2.jpg


作者:天林~

原文链接:https://blog.csdn.net/tianlin151/article/details/116133624

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   前言  无论什么自动化,都会需要参数化。unittest可以通过ddt来完成参数化,那么pytest通过什么呢?  parametrize  pytest中自带的装饰器parametrize可以来实现测试用例的参数化功能。  使用方法  通过下方装饰器,使用在需要传入参数的case中。用例传参中的值和装饰器传入的参数值一致。@pytest.mark.parametrize('参数化名称',参数化值)  安静举一个登录传参的例子。import pytest # 登录参数 data = [('anjing', &...
            13 15 2981
            分享
          •   在软件开发的世界中,保证代码质量和稳定性是至关重要的任务。而自动化测试作为现代开发流程的重要组成部分,为开发团队提供了一种有效的方式来确保代码的质量、减少错误,并提高整体的可维护性。在本文中,我们将深入探讨自动化测试的优势、类型以及实施方法。  什么是自动化测试?  自动化测试是通过使用脚本和自动化工具,对软件应用的不同部分进行自动化的测试和验证。与手动测试相比,自动化测试更快速、可重复且能够全天候运行,从而大大提高了开发过程中的效率和代码质量。  自动化测试的优势  减少人为错误: 人为的疏忽和繁琐的重复操作可能导致错误。自动化测试能够在相同的环境中执行相同的测试用例,从而减少了人为错误...
            0 0 728
            分享
          • 作为测试人员,发现问题提交问题是我们的第一要务,但是如果能够简单的定位问题,指出问题的原因是前端还是后端(方便指派给正确的处理人),甚至更直接的指出出错的地方,那就是大大加分了。今天分享一个简单但是常见的场景的问题分析:PC后台,数据导入和数据导出功能是两个常用功能,而导出就往往涉及全部导出,翻页后导出,勾选部分数据导出,搜索关键词查询后导出,组合条件搜索后导出等场景。在一次项目测试过程中,就遇到了一个问题,没有加任何筛选条件,直接点击导出按钮,但是导出的数据只有第一页,而不是全部数据。看了下接口的日志,发现了以下问题:1、接口导出返回的数据中,就只有第一页的数据2、进一步排查发现,前端给后端...
            1 1 9537
            分享
          •   最近的工作需要经常和测试打交道,但我并非这个细分领域的行家,看着几千条测试用例和五花八门的测试设备与工具,以及工程师展示的繁复曲线与图表,着实有些眼花缭乱,没太看懂,不由得陷入了深深的思索......  1 T型人才与焦利氏称  陷入思索有两个原因:一是确实没跟上节奏,只能佯装沉思,以掩饰尴尬,保持风度;二是汽车领域的知识太多了,没能力是一说,但也实在没必要事事跟上节奏,守好自己碗里的饭就不错了。  可是,我们不是要构建T型知识结构,成为综合性人才嘛。那怎么办呢?  写到这里,想到多年前的大学物理实验课,绝大多数课意料之内地忘得干干净净,但倒是记住了一堂——焦利氏称,原因是老师说的一句话,...
            0 0 837
            分享
          •   消息源 @i 冰宇宙近日在 X 平台上发布推文,在评论三星业界首款 10.7Gbps LPDDR5X DRAM 内容时表示,明年推出的 Galaxy S25 基础款手机依然 8GB 内存起步。  国内安卓手机内存早就“卷”到 12GB 起步,而且不断推高到 16GB、24GB 等,但三星的 Galaxy S 系列依然是 8GB 起步,因此给人的感觉是“不思进取”,也有不少网友调侃三星“被制裁”了。  如果真的如消息源所曝料的,明年三星 Galaxy S25 基础款继续 8GB 内存起步,那么即便采用更高规格,对于消费者的吸引力会大打折扣。  查询公开信息,该消息源今天还表示三星计划将 Go...
            0 0 695
            分享
      • 51testing软件测试圈微信