ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Jmeter接口测试基础学习使用笔记

2026/9/30 19:17:37 拓冰建站 浏览量
Jmeter接口测试基础学习使用笔记 一、Jmeter概述、安装接口 / 性能压测工具可以做 HTTP 接口、数据库 JDBC、TCP 等压测你日常做支付类接口测试非常常用。1、环境安装JDKJMeter5.4 推荐 JDK8/11配置JAVA_HOME环境变量官网下载https://jmeter.apache.org/download_jmeter.cgi下载apache-jmeter-x.x.zip二进制包解压即用无需安装启动Windows进入bin目录双击jmeterw.bat无黑窗口jmeter.bat带控制台日志Mac/Linuxsh jmeter.sh切换中文顶部菜单选项 → 选择语言 → Chinese (Simplified)二、核心组件必懂测试脚本基本结构1、第一步新建线程组名字、备注根据实际情况填写线程参数也根据实际需要来填写如果对接口进行基本的功能测试可以设置线程数为1意思是模拟一个用户收发请求2、新建sample取样器/请求测试计划根节点整个脚本容器1 个 jmx 文件 1 个测试计划线程组 Thread Group【核心】模拟并发用户线程数并发用户数量预备时间 Ramp-Up (s)多久内把所有线程启动完成例线程 10Ramp-Up10 → 每秒起 1 个用户循环次数每个线程循环跑多少次勾选【永远】持续压测取样器 Sampler真正发请求HTTP 请求最常用测接口JDBC 请求数据库、TCP 请求等配置元件HTTP 信息头管理器请求头Content-Type:application/json、tokenHTTP 请求默认值统一填服务器 IP、端口不用每个接口重复写CSV 数据文件设置参数化批量读取账号、订单号Cookie 管理器自动管理 cookie登录态保持后置处理器请求之后提取返回值接口关联必备JSON 提取器最常用提取 json 返回的 token、orderId正则表达式提取器断言校验接口返回是否符合预期响应断言判断响应码 200、响应文本包含指定内容JSON 断言校验 json 字段值监听器 Listener收集查看结果查看结果树调试脚本用看请求 / 响应详情压测时删掉非常耗性能聚合报告正式压测核心看吞吐量、平均响应时间、错误率样本结果执行顺序配置元件 → 前置处理器 → 定时器 → 取样器 → 后置处理器 → 断言 → 监听器三、接口Restful风格接口测试首先需要了解请求的RestFul风格HTTP传输JSON格式。如图一个请求sample有四要素请求URL、请求方式、参数说明、返回示例这四要素一般需要获取到项目接口文档除此之外还有如下接口类型WebServiceHTTP传输XML格式RPTTCP传输二进制数据弊端人类无法直接看懂最常用的就是RestFul风格四、Parametre参数与消息体数据JSON接口参数两种填写位置【Parameters 参数】 VS 【消息体数据JSON】核心一句话区分参数拼在 URL 地址后面的用【Parameters】请求体是 JSON 格式POST用【消息体数据】1、Parameters参数面板什么时候用适用场景参数放在 URL 里面查询参数Query 参数常见请求方式GET请求或者 POST 表单application/x-www-form-urlencoded特征URL 长这样https://httpbin.org/get?namezhangsanage20?问号后面 namezhangsanage20 这部分就是 Query 查询参数。jmeter工具操作在 HTTP 请求页面下方切换到【Parameters】表格· 点【添加】一行填写参数名、参数值· JMeter 会自动帮你拼接在 url 的?后面不需要手动写在路径里补充POST 表单form 表单提交Content-Type: application/x-www-form-urlencoded也用 Parameters参数会放在请求体不是 URL 上。注意使用 Parameters 的时候不要手动在路径后面写和参数容易重复拼接出错Parameters 里面的值不需要 url 编码JMeter 自动编码2、消息体数据Body Data什么时候用适用场景POST 请求请求体是 JSON 字符串后端接收 JSON请求头必须配套添加 Content-Type: application/json 在【HTTP 信息头管理器】添加特征参数不在 URL 上放在 http 请求的 body请求体里面接口文档标注请求体 JSONContent-Type:application/json操作HTTP 请求页面勾选【消息体数据】在大文本框粘贴完整 JSON 示例内容{ name:zhangsan, age:20 }重要规则消息体数据 和 Parameters 互斥两个区域不能同时填内容同时写会出异常JSON 格式严格引号必须英文双引号不能中文引号不能有多余逗号否则接口报错 400GET 请求一般不使用消息体数据HTTP 规范不推荐很多服务器会直接忽略 GET 的 body 内容快速判断对照表类型填写位置Content-Type常用请求方法例子URL 查询参数 QueryParameters无GET/get?name 张三表单 form 提交Parametersapplication/x-www-form-urlencodedPOST网页普通表单提交JSON 请求体消息体数据application/jsonPOST/PUT前后端分离接口传 JSON 对象五、操作实战界面工具基本功能增加、编辑、保存脚本修改测试元件、执行测试脚本、查看帮助信息核心元件测试计划容器线程组干活的人可以设置人数性能测试就是可以设置足够多的人数取样器要干的活辅助元件逻辑控制器对取样器进行逻辑控制、判断、循环等定时器让取样器进行延迟一定时间再执行监听器记录和展示取样器的执行结果断言判断取样器的执行结果配置元件配置修改取样器内容前缀处理器取样器执行自动执行后缀处理器取样器执行之后自动执行例1请求百度首页99次并在每次请求前都打印一些日志内容并查看每次请求的结果1、在测试计划中添加线程组添加取样器http取样器填写取样器内容如下2、上述只是添加了一个请求如果发出则只是请求一次百度首页此时要达成请求99次则需要为线程组添加逻辑处理器循环控制器编辑循环控制器内部内容3、为了在每次请求前能打印出日志我们需要为取样器添加前置处理器并在前置处理器里面通过书写少量代码形式实现3、最后为了查看每次取样器请求结果我们需要为循环控制器添加监听器来查看结果点击运行按钮导航栏绿色开始按钮进行发送请求至此已基本掌握jmeter的基本使用方法这里使用请求示例较为简单请求首页接口get方法、url写对添加一系列测试元件控制测试次数、测试结果到这里已经可以对单个接口进行功能/性能测试工作中jmeter使用复杂度取决于需求。需求复杂则使用的比较复杂。jmeter的各层级测试元件的结构也很重要元件摆放顺序也很重要元件加载顺序位置也很关键。**jmeter加载顺序**点击运行按钮1、加载配置元件2、加载线程组3、加载取样器4、为取样器加载辅助元件取决于取样器与之关系先加载取样器父级组件、同级组件、子级组件不会加载旁系组件有几个取样器相应配置元件就要加载几次六、Jmeter创建变量并使用在项目中进行接口测试有两种风格1、分别处理每一个接口、然后再整理接口与接口之间的关系2、全面分析项目的需求和特点然后按需配置辅助元件便于后期维护大型项目第一步为自己的jmeter测试项目建立目录不要随便丢弃放置后续将建立起来的接口测试脚本保存jmx文件可以发给项目组任何一个人都能执行。第二步熟悉接口文档有的是网页形式、有的是文档形式关注需要以下要素进行接口测试请求方法、接口地址、鉴权要求、请求参数响应状态码意思响应头对请求特殊说明、响应内容。根据接口文档请求我们能正确发起测试请求根据接口文档响应的规范描述我们能准确判断接口测试结果这都是接口测试不可缺失的一部分。例2:登陆接口提取token鉴权变量便于其他取样器、接口使用业务分析添加——根据restful使用put方式查看——使用get方式同时一般进入网页内部进行操作需要登陆鉴权用户登陆后生产一个token密钥密钥未过期则用户处于登陆状态token过期则用户处于未登陆或已超时退出状态。于是根据前面测试辅助元件的学习我们应该在发起添加/查看列表请求之前先发起登陆请求在得到网站返回的token后把token数据保存起来作为请求前置数据附带一起在发起请求时传入请求则可通过鉴权1、登陆接口请求参数填写一般有用户名、密码需要填写则可在参数-》消息体内进行填写此处涉及到接口设计规范还需为登陆接口加一个配置元件头管理器在里面设置内容类型为接口规定的类型application/json之类的2、提取登陆接口返回的token并使用方法一为需要该鉴权token的接口新增http信息头管理器并新增参数1添加请求头Authorization2请求头内容类型空格Token值该方法比较累赘每个需要登陆的接口都需要创建一个信息头管理器只适合一两个接口的测试如果希望每个接口都能使用到该token即测试其他需要登陆的接口时只需要登陆一次即可不需要说每测试一个接口就需要调用登陆接口一次则使用方法二如下。方法二变量提取概念1从响应中提取内容并保存为变量2便于其他接口或元件使用3提取器边界简单提取1个数据正则复杂的提取N个数据JSONjson接口专用token变量提取操作为登陆接口新建JSON提取器提取token保存为自取名变量以便后续使用json提取器使用jsonpath语言可以简要去了解下很简单。token变量提取后使用方法在信息头管理器添加参数名为Authorization值为引用保存的token变量类型空格${access_token}进行使用七、接口关联含义将上一个接口的响应内容作为下一个接口的请求参数思路通过变量来传递数据步骤1、创建上一个接口添加【后置处理器】提取数据创建变量2、使用’${变量名}’进行使用只有写了提取器的后置处理器才能提取变量提取器CSS给网页提取数据现在基本不用了JSON给JSON数据使用的现在用的比较多边界提取器给字符串用的一次只能提取一个正则提取更高级的字符使用一次能提取多个XPath给网页使用重要JSON正则/边界提取器1、边界提取器边界提取器使用通过指定左右边界值把边界中间的数据提取出来保存为变量1、为登陆接口新增边界提取器边界提取器主要使用左边界、右边界被提取内容左边所有内容为左边界右边所有内容为右边界——可以在结果树里查看2、正则提取器假设登录接口返回响应内容如下{code:200,msg:success,data:{token:abc123456xyz789}}我们目标提取 token 的值 abc123456xyz7891填写正则提取器配置①引用名称access_token②正则表达式“token”:“(.*?)”解析“token”: 匹配前面固定文字(.*?) 捕获我们要的 token 值 匹配后面的双引号JMeter 正则提取器()包裹你想要提取的内容外面是匹配框架。 例token:(.?)就可以抓到 token 的值③模板111④匹配数字1取第一个匹配结果⑤缺省值token提取失败通用正则写法模板新手直接套用前后有固定文字固定前缀(.*?)固定后缀例子响应id:10086提取数字 10086 正则id:(.*?)⚠️ 注意如果响应是 JSON 格式优先推荐 JSON 提取器正则提取器适合普通文本、html、非标准文本JSON 结构的接口JSON 提取器更稳定不容易因为空格、换行报错。2后续接口使用提取到的变量在后续 HTTP 请求的消息体 / 请求头里直接写 ${access_token} 例如在信息头管理器添加请求头Authorization: Bearer ${access_token}如何验证正则表达式是否匹配成功方法 1查看结果树调试线程组添加【查看结果树】监听器运行脚本看登录接口的响应数据核对是否匹配可以添加【Debug 取样器】专门查看变量值添加路径线程组右键 → 添加 → 取样器 → Debug 取样器 运行脚本打开查看结果树打开 Debug 取样器响应能直接看到 ${access_token} 的值判断提取成功 / 失败。方法 2在线正则网站预测试推荐可以把接口返回的响应复制到在线正则测试网站如https://tool.oschina.net/regex/提前调试正则表达式避免在 JMeter 反复试错。常见踩坑点大小写敏感正则匹配区分大小写前后文字大小写必须和返回响应一模一样。空格、换行问题如果返回内容中间存在换行、多余空格正则容易匹配失败JSON 场景优先改用 JSON 提取器。括号()不能少只有括号里面的内容才会被提取忘记加括号就提取不到数据。贪婪匹配问题不要写(.)尽量用(.?)非贪婪防止一次性匹配到末尾匹配数字填错如果写1但是没有匹配内容变量就会变成【缺省值】。作用域错误正则提取器必须放在产生返回数据的 HTTP 请求下面放错位置提取不到。正则提取器 VS JSON 提取器对比正则提取器JSON 提取器适用数据HTML、普通文本、非结构化字符串JSON 响应接口返回标准 json优点通用性强任何文本都能提取语法简单不受空格换行影响稳定性高缺点容易受换行、空格干扰正则语法难写只能处理标准 JSON推荐场景页面 HTML、文本返回后端 JSON 接口90% 接口测试首选正则提取器属于后置处理器取样器执行完成后才执行提取。核心公式固定前缀(.*?)固定后缀提取的变量使用 ${变量名} 引用。JSON 格式接口优先 JSON 提取器正则提取器作为备选。八、接口断言默认断言默认情况下预期状态码小于400则认为未出错了——未加断言时结果树显示绿色1xx继续请求2xx请求成功3xx重新请求4xx客户端错误你错了5xx服务端错误我错了1、断言元件1、响应断言帮助我们判断响应的状态码、文本、相应的代码普通断言如下弊端是无法判断目标内容在何处只能判断是否包含2、JSON断言可以提取响应中需要的部分并检测是否包含目标内容可以更加简单、便捷、精确的提取指定内容通常会加一个普通响应断言用于忽略状态该响应断言仅勾选忽略状态码除了这两个断言还有很多断言、什么自定义断言JSR233断言之类的——自定义断言是通过代码实现Script脚本比如正则通知关键字出现次数、判断关键词出现次数等这些进阶内容可以自行拓展或在现实中有需要时运用ai生成script代码复制到断言中去即可九、jmeter使用函数方法创建一些变量供测试使用例3创建随机/唯一的变量来使用此时需要使用函数打开jmeter函数助手随机数生成函数有重复概率随次数增加而增加random如果用时间作为一个随机且唯一的变量来使用时时间的重复概率则是随着空间的增加而增加time最好的用法是使用UUID确保生成不会重复的随机数十、数据驱动测试含义可以根据数据的数量和内容可以自动的决定用例的数据和内容步骤1、创建数据文件jmeter支持csv将测试数据放入表格文件转成csv文件也可以username,passwordadmin123,123——模拟无用户名只有密码的情况先造出测试数据来以测试数据驱动用例形成和用例执行2、加载数据文件先给线程组添加一个循环控制器将待测接口取样器放入该循环控制器下为循环控制器加一个配置元件-CSV数据文件设置填写该元件信息如下后在接口穿参是就可以引用csv中的变量了该元件会循环读取csv文件中的数据并可以被引用使用——以数据驱动测试用例3、根据数据文件去请求、传递参数注意如果是多接口使用数据驱动测试的话1、必须使用while控制器2、循环条件里要写代码十一、jmeter调试方法jmeter调试方法——了解jmeter内部细节排查错误原因非常重要的元件查看结果树该元件内可以查看取样器执行结果、响应内容、发送内容等可以在这里排查错误原因同时还可以在这里检查断言是否写正确了调试取样器显示的是jmeter本身的内容有时候比如变量取的不对可以为线程组添加一个调试取样器在里面可以看到所有变量的值这个时候就可以检查自己引用的变量是否是正确的预期值自定义断言主要通过写js代码来实现逻辑控制如果不确定可以在其中加入一些日志内容便于断言出现错误时进行排查——日志十二、Jmeter执行MYSQL1、需要数据库连接信息2、SQL语句3、JDBC——java数据库连接规范拓展DB-API——Python数据库连接规范步骤1:在jmeter里发送数据库请求需要两个元件JDBC Connection Configuration使用数据库连接信息JDBC Request执行SQL语句并且得到执行结果步骤2:在JDBC连接配置元件里填写数据库信息步骤3:填写JDBC请求配置SQL语句最好写标准SQL语句不易出错最后只需为该线程组添加查看结果树后点击执行脚本即可进行JDBC request里填写的SQL语句。关于SQL语句如果不确定可以使用DBeaver工具此工具为开源的数据库通用客户端工具数据库管理软件DBeaver 可以自动生成 SQL不用手写对测试非常好用可以自行了解进行下载。使用场景描述若待测接口的参数来源于数据库测试无法手动获取到数据如医院系统、甲方数据库等我们则可以通过创建数据库请求JDBC request测试元件书写相应查询代码查询到需要的数据保存为变量便于待测接口使用使用时用${变量名}形式即可若不确定变量是否保存成功可以添加调试取样器元件执行下在里面查看各变量值是否存在/正确。十三、Jmeter执行命令1、添加JSR223取样器代码的调试主要靠日志里看所以执行结果需要保存为变量后打印在日志中才可以看到内容2、在JSR223取样器配置中可以切换语言JAVA、groovy、bash等十四、Jmeter接口加密加密是信息安全的重要手段常用在身份加密、访问控制等安全场景原理对原有内容的特殊变换从而隐藏内容无法伪造内容常见的算法1、哈希单向的速度快但缺点是无法还原常用在签名、内容校验中。著名算法——MD5、SHA-5122、对称加密速度相对快、可以还原数据、加密密钥和解密密钥相同逻辑简单但解密者完全可以伪造加密安全性较低应用场景为信任解密者的场景下会使用例AES3、非对称加密安全性最高、加密密钥和解密密钥不一致但速度较慢。用于对解密者不信任/安全系数要求较高的场景例RSAjmeter当中实现加密有四种方式执行代码调用函数执行命令执行SQL例3假如有个企业MD5加密接口请求URLhttp://ll6.62.63.211:500/md5login请求方式为POST参数有两个分别是username、password都是string类型都必须使用md5加密处理可用数据username“admin”password“123”此时如何进行接口测试呢1、添加http取样器填写好接口信息此时发送接口请求应该会失败因为用户名、密码皆未使用md5加密此时有上述几种方式进行加密操作如果有函数则调用函数没有函数可以通过在jmeter中执行命令来加密2、此处使用函数对用户名、密码进行加密使用jmeter自带的函数助手选择digest函数Jmeter还支持脚本语言进行加密、可以用数据库方法进行加密此处我们只需要掌握Jmeter自带的函数工具功能强大基本都能覆盖使用十五、根据项目分析建立jmeter测试脚本结构1、阅读项目接口文档获取信息1项目使用何种鉴权方式2参数使用表单等可能使用自定义参数3接口地址前缀等是否相同4接口之间存在关联——意味着要使用变量了5接口参数有无要求不能重复6接口响应是否有JSON2、创建公共元件每个接口都需要用到的取决于阅读项目接口文档得来的分析若项目是cookie鉴权——创建http cookie管理器若多个接口地址使用的相同的前缀地址——添加配置元件http请求默认值接口之间存在关联——创建用户定义变量3、补全取样器和子级辅助元件1每一个接口一个取样器sample可以写一个其他的复制取样器内容修改下即可此时发送接口请求应该会失败因为用户名、密码皆未使用md5加密此时有上述几种方式进行加密操作如果有函数则调用函数没有函数可以通过在jmeter中执行命令来加密2、此处使用函数对用户名、密码进行加密使用jmeter自带的函数助手选择digest函数[外链图片转存中…(img-wAFOcJLV-1790652106235)]Jmeter还支持脚本语言进行加密、可以用数据库方法进行加密此处我们只需要掌握Jmeter自带的函数工具功能强大基本都能覆盖使用十五、根据项目分析建立jmeter测试脚本结构1、阅读项目接口文档获取信息1项目使用何种鉴权方式2参数使用表单等可能使用自定义参数3接口地址前缀等是否相同4接口之间存在关联——意味着要使用变量了5接口参数有无要求不能重复6接口响应是否有JSON2、创建公共元件每个接口都需要用到的取决于阅读项目接口文档得来的分析若项目是cookie鉴权——创建http cookie管理器若多个接口地址使用的相同的前缀地址——添加配置元件http请求默认值接口之间存在关联——创建用户定义变量3、补全取样器和子级辅助元件1每一个接口一个取样器sample可以写一个其他的复制取样器内容修改下即可2此刻才仔细看接口文档注意接口的关联