一.jmeter下载

安装jmeter:

地址https://jmeter.apache.org/download_jmeter.cgi

下载 【apache-jmeter-XXX. zip 】解压缩,运行bin目录下的jmeter.bat或者在bin目录地址栏输入cmd打开命令行,输入jmeter,打开jmeter图形化界面

jmeter有很多插件在lib目录下,需要时可直接下载到lib目录下安装使用

二.jmeter核心元件

● 测试计划:测试起点,所有组件的容器,一般是这个项目的名称

● 线程组:代表一定数量的用户,发送请求

● 取样器:向服务器发送请求的最小单元,就是每一个接口请求

● 逻辑控制器:结合取样器实现一些复杂的逻辑(常用循环控制器),例如做csv数据驱动时,需要使用循环处理器读取csv文件的数据,文件里有几组数据就循环几次

● 前置处理器:在请求之前的工作(例如设置用户参数)

● 后置处理器:在请求之后的工作,主要是处理响应数据,(json提取器(登录成功之后提取token值)、正则表达式提取器)

● 断言:判断请求是否成功(响应断言、大小断言、json断言)

● 定时器:负责请求时间的延时间隔,常用的有固定、高斯、随机

● 配置元件:配置信息(http请求默认值、http信息头管理器(如果参数是json格式传参,必须要添加这个设置)、用户定义的变量)

● 监听器:收集结果(查看结果树、汇总报告、聚合报告)

各大元件的执行顺序:

配置元件>前置处理器>定时器>取样器>后置处理器>断言>监听器

元件的作用域:jmeter所有原件都是依赖取样器运行

逻辑控制器只会对其下面的子节点生效,

如果父节点不是取样器,那么作用域就是当前元件的父节点下的所有节点

三.各元件应用

1.取样器:

就是发送http请求的信息,包括请求url,请求方法、请求参数,与postman添加request请求一样

2.配置元件

http请求默认值:一般同一个项目所用的服务器地址和ip是一致的,还包括所有接口都要使用的公共参数,可以给线程组添加一个这样一个配置元件,设置ip地址,将参数都添加到这个http请求默认值的参数中,那么这个线程组下面的所有请求都能够使用这个http请求默认值,只需要根据每个接口使用到的资源地址不同再在后面进行拼接即可

http请求默认值:项目涉及测试环境和生产环境时,可以添加两个http请求默认值,他们的服务器地址不同,需要时切换使用

http信息头处理器:post请求的参数格式如果是json格式,那么必须要设置请求头中content-type的值为application/json,可以给单个请求增加http信息头处理器

3.用户定义的变量 使用(可以在测试计划、线程组和取样器分别设置用户变量的值)

在接口中,有些变量存在重复使用的情况,例如账号、密码、登录后获取的token值,可以使用【配置元件】-用户定义的变量进行配置,在需要用到变量的地方,使用${变量名}使用

4.断言 --json path提取器

接口返回信息后,可以使用json path提取器进行提取,使用自带的json path表达式尝试提取

想要提取响应结果里面的msg值,使用$.msg获取,如果想要获取data里面的token值,使用$.data.token获取

将获取到的token值赋值给变量token,【后置处理器】--json提取器

在需要用到token鉴权的接口直接使用${token}来使用token的值

通常情况下,将 Token 放在请求头中时,对应的键名为 "Authorization"。常见的做法是将 Token 放在 "Authorization" 请求头的值中,通常以 "Bearer " 开头(由于项目设置原因,下面这个token是放在URL后面的)

headers = {

"Authorization": f"Bearer {token}"

}

5.csv数据驱动 (参数化)

csv数据文件设置(配置元件) 结合 循环控制器(逻辑控制器---适用于线程组) 使用,可以将csv文件中的数据依次给到用例

比如在测试注册/登录模块时,需要考虑很多账号和密码异常的情况:

1.账号正确+密码正确

2.账号不存在

3.账号为空

4.密码错误

5.密码为空

6.账号长度不符合

7.账号全部是数字/字母/含有特殊字符.........

这些非等价类可以用一个请求来执行完测试,就要用到csv数据驱动,使用循环控制器将文件的数据进行循环测试,每循环一次,就把文件里面每一行的参数给到测试用例执行

循环控制器,文件中有4组不同的账号和密码,那么就指定循环4次

csv数据文件设置,filename是文件的路径;变量名字是文件中的首行变量;要忽略首行,因为首行是变量名称

6.接口关联

网页需要在用户登录的前提下才能进行操作,即登录之后的操作需要带上登录成功以后返回的token值,使用json提取器将token的值提取出来,并且赋值给一个变量,在需要使用的地方用${变量名}引用,放在其他请求的参数中或者是拼接在url中-------json path

7.数据库数据驱动

jmeter连接数据库:配置元件----JDBC Connection Configuration,填写四项信息:

添加一个取样器JDBC Request,可以直接写sql语句

可将查询出来的值赋值给一个变量,在需要用到的地方${变量名}进行引用

8.jmeter断言

  • json断言:使用json path提取相关数据,对比预期结果
  • 响应断言:响应头,响应行信息
  • 持续时间断言:项目要求接口需要在xx ms内返回数据

补充

jmeter参数化的方式:

  • 用户定义的变量----配置元件【用户定义的变量】,作用范围是针对线程组
  • 用户参数------前置处理器【用户参数】
  • 逻辑控制器+CSV数据驱动----逻辑控制器+配置原件【csv数据驱动】,作用范围是针对取样器

jmeter连接数据库验证接口数据正确性:

jmeter连接数据库执行sql查询的数据定义为一个变量(例:username),在想要引用这个变量时${username}是无法使用的,sql是一个独立的语法结构,jmeter不知道sql执行后会返回几条数据,故jmeter会将我们自己定义的变量+jmeter自己生成的数字来生成这个变量名,我们要引用变量时,应该使用${username_1},可以添加调试取样器查看数据库返回的数据

如果需要测试登录接口,从数据库获取用户名和密码后,发现密码是加密的,我们引用账号和密码时,无法正常发送请求(这个问题还没找到方法解决?)

jmeter批量生成数据,插入数据库(20条):

步骤:

1.添加jdbc 数据库配置信息

2.添加循环控制器(循环次数20)

3.循环控制器子级添加计数器(从1开始递增),计数器变量设置为n

4.循环控制器子级添加jdbc request,Query Type选择update statement,写入insert 语句,例:insert into test_user(username,psssword) values("username_${n}","xxxxxx")

jmeter接口录制功能

操作步骤:

1.添加线程组,---录制

2.在测试计划中添加非测试元件--http代理服务器

3.打开电脑代理设置,手动--使用代理服务器,IP127.0.0.1,端口写一个没有占用的端口(例8900),http代理服务器端口填写8900,目标控制器选择录制线程组

启动http代理服务器,进行网页操作,线程组就会出现很多取样器,抓取接口成功,可以在取样器下看到请求数据、请求方法

jmeter函数使用---【函数助手】

在jmeter中,函数格式为:${}定义,${__函数名(参数)}使用

1.时间戳函数 ${__time(,)}当前时间戳,以毫秒展示,${__time(yyyy-MM-dd HH:mm:ss)}当前时间戳,以年月日 时分秒展示

2.随机数

${__Random(1,100)} 生成1-100的随机数

3.V函数,进行变量拼接

${__V(,)}

4.计数器n,在【配置元件】-【计数器】指定开始数,以及最大计数数值

jmeter生成测试报告

命令:jmeter -n -t[jmx文件名] -l [结果数据] -e -o [html报告文件]

-n 非GUI模式执行jmeter

-t 测试计划保存路径,jmx文件,以及文件名

-l 保存后生成的测试结果文件

-e 测试结束后生成测试报告

-o 存放报告的路径

jmeter接口测试应用的更多相关文章

  1. http接口测试——Jmeter接口测试实例讲解

    摘要: 最近做的项目需要测试很多接口,上网查一查,发现完整讲述接口测试的资料太少,所以最近自己做完这个项目,把测试的东西整理一下和大家分享一下,希望对看到的人有所帮助     一.测试需求描述 1. ...

  2. jmeter接口测试教程

    一.Jmeter接口测试步骤: 1.添加线程组

  3. 通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

    通过Jenkins跑Jmeter接口测试脚本,我想当有接口跑失败时Jenkins发送邮件通知,这个如何弄呢

  4. jenkins+ANT+jmeter 接口测试环境搭建

    目的 jmeter很早就接触了,最近又在接触项目的时候整了一下.写这篇博客主要有两个目的 1,为了给自己搭建jmeter做一个总结. 2,在部署过程中遇到过一些坑,在这分享出来,也希望能给需要的人一个 ...

  5. JMeter接口测试系列:Jmeter+jenkins+ant 的自动化构建

    在JMeter接口测试不断深入的过程中,发现可以和jenkins和ant一起搭配进行自动化的构建.下面是jmeter自动化构建的整理笔记. 准备环境 需要本机上确定安装了jmeter.ant和jenk ...

  6. Jmeter接口测试-断言

    JMeter接口测试-断言  对应qq群号:616961231 一个http请求发出,怎么判断执行的是否正确呢? 通过检查服务器响应数据,是否符合预期的数据, 如果是,任务成功,  如果否, 任务失败 ...

  7. jmeter接口测试实战-创建用户

    jmeter接口测试实战-创建用户 相信大多数看到标题的同学都会有疑问, 创建用户不是很简单吗, 调用一下创建用户接口, 传入指定入参, 用户即可创建成功, 今天我们的实战来讲讲创建场景.通过接口创建 ...

  8. JMeter接口测试实战-动态数据验证

    JMeter接口测试实战-动态数据验证 说到验证就不得不说断言, 先来看下JMeter官方给出断言(Assertion)的定义, 用于检查测试中得到的响应数据等是否符合预期,用以保证测试过程中的数据交 ...

  9. JMeter 接口测试-if控制器

    JMeter 接口测试-if控制器 ​ 使用场景: 当业务场景是用户登录才能支付操作, 不登录点击支付, 页面会跳转到登录页面. 对于接口也是这样, 一个接口需要执行前, 需要有前提条件, 比如0状态 ...

  10. Jmeter接口测试实战-数据传递

    Jmeter接口测试实战-数据传递 接口与接口之间没有关联的测试是缺乏意义和没有灵魂的,只有数据在不同接口之间传递才能勾画出业务场景重要的链路. 我们用较为通用的http/https协议,接口普遍返回 ...

随机推荐

  1. 短视频SDK 视频编辑SDK AE模版SDK 人体抠图SDK 绿幕抠图SDK

    优势:  快速接入免费试用名称:  短视频SDK品牌:  蓝松SDK特色:  一站式视音频解决方案 杭州蓝松科技有限公司,多年来一直专注于音视频领域核心技术的研发.核心研发团队掌握的行业领先技术,目前 ...

  2. EXlucas

    \(EXLucas\) 扩展卢卡斯定理 ·题意 试求: \[C^{m}_n \mod P \ \ \ \ \ \ \ \ \ \ \ ( P \in N ^* ) \] 注意, \(P\) 非质数( ...

  3. Linux 磁盘命名规则

    IDE硬盘:早期的 IDE 接口硬盘被命名为hd[a-d],其中 hd 表示硬盘(Hard Disk),后面的字母 a 至 d 代表系统中第一至第四个 IDE 硬盘.不过,随着 SATA 接口硬盘的普 ...

  4. 用描述程序的方式emo,扎心了...

    用描述程序的方式emo,扎心了... 众所周知写程序是个枯燥无聊的过程,再加上生活的不顺与坎坷,当程序语言与emo结合起来,看谁还说程序员不懂感情! 首当其冲的就是循环语句了 世界上最寂寞的感觉,是我 ...

  5. 使用 nuxi dev 启动 Nuxt 应用程序的详细指南

    title: 使用 nuxi dev 启动 Nuxt 应用程序的详细指南 date: 2024/9/2 updated: 2024/9/2 author: cmdragon excerpt: 摘要:本 ...

  6. C++: 智能指针的自定义删除器 `Custom Deleter` 有什么用?

    C++11智能指针std::shared_ptr和std::unique_ptr都支持自定义删除器,本文将介绍自定义删除器的使用场景和使用方法.智能指针模板参数的第二个类型是删除器,一般是一个函数指针 ...

  7. JavaScript – Function 函数

    参考 阮一峰 – 函数的扩展 基本用法 function fn1(param1, param2 = 'default value') { return 'return value'; } fn1('1 ...

  8. CSS – rem, em, px

    参考: 掘金 – 如何更愉快地使用em -- 别说你懂CSS相对单位 绝对值 vs 相对值 px, cm, mm 这些是绝对值. rem, em 是相对值. 绝对值就是最终的尺寸. 相对值的意思是它不 ...

  9. 面试官:GROUP BY和DISTINCT有什么区别?

    在 MySQL 中,GROUP BY 和 DISTINCT 都是用来处理查询结果中的重复数据,并且在官方的描述文档中也可以看出:在大多数情况下 DISTINCT 是特殊的 GROUP BY,如下图所示 ...

  10. QT框架中的缓存:为什么有QHash和QMap,还设计了QCache和QContiguousCache?

    简介 本文介绍了QT框架中可用于缓存的几个数据类型各自的特点:通过本文读者可以了解到为什么有QHash和QMap,还设计了QCache和QContiguousCache? 目录 QHash和QMap有 ...