)
前言本文接续上文五、JMeter工具5.1 JMeter安装Apache JMeter是Apache组织基于Java开发的压力测试工具用于对软件做性能测试。使用前需确保已安装Java运行环境。JMeter环境要求JMeter介绍安装方式较为简便下载tar包后解压即可使用。以apache-jmeter-5.5.tgz为例文件大小约81.52MB解压完成后即可进入bin目录进行后续操作。JMeter下载包解压后的目录结构bin目录内容5.2 启动方式启动JMeter有两种方式。方式一为直接点击bin目录下的bat文件启动方式二为命令行启动这种方式更为推荐。使用命令行启动前需先添加JMeter系统环境变量保存后打开命令行工具输入jmeter命令即可启动。bat文件启动方式配置系统环境变量命令行启动JMeter若需将界面修改为中文可在jmeter的bin目录下找到jmeter.properties文件将其中的language项修改为zh_CN即可。5.3 使用流程JMeter的基本使用流程如下首先启动JMeter在测试计划下添加线程组然后在线程组下添加HTTP取样器填写HTTP请求的相关请求数据接着在线程组下添加查看结果树监听器最后点击启动按钮运行查看接口测试结果。添加线程组添加HTTP取样器填写HTTP请求数据5.4 元件作用域在JMeter中元件的作用域和执行顺序是较为重要的概念。元件的作用域主要由测试计划的树形结构中的元件父子关系来确定。取样器元件内组件不依赖其他元件就可执行因此取样器不存在作用域问题元件作用域只对它的子节点有作用其他作用域默认根据测试计划中树形结构来定。元件作用域与执行顺序示意六、JMeter组件6.1 线程组线程组用于控制JMeter执行测试的线程数一个线程可以理解为一个测试用户。线程组的主要配置参数包括线程数即设置发送请求的用户数量Ramp-up时间秒即设置性能测试运行的时间循环次数可配置指定次数或永远循环。6.2 HTTP取样器HTTP取样器需要添加的必需配置包括http协议、http主机名或IP、端口、请求方法、路径、内容编码以及参数。参数可以拼在路径里也可以写在参数区中POST参数则需要放到消息体数据中。6.3 查看结果树查看结果树是常用的监听器之一其中取样器结果用于统计请求相关的信息主要包括Thread Name即线程组名称Sample time即发送请求时间load time即响应时间Response code即接口响应状态码。6.4 HTTP Cookie管理器HTTP Cookie管理器像Web浏览器一样存储和发送Cookie。如果HTTP请求的响应包含cookieCookie管理器会自动存储该cookie并将其用于将来对该特定网站的所有请求。每个JMeter线程都有自己的cookie存储区因此测试使用cookie存储会话信息的网站时每个JMeter线程都将拥有自己的会话。6.5 HTTP请求默认值当测试脚本中涉及的多个接口协议、IP、端口号全都相同时可以将这些公共配置单独抽取出来存放在HTTP请求默认值中其他接口就可以省略不写协议、IP和端口号从而简化配置并便于统一管理。6.6 用户定义的变量用户定义的变量通过线程组的配置元件添加适用于变量需要在多个脚本中使用的场景方便统一管理和修改。6.7 CSV数据文件设置以登录接口为例当执行登录接口的性能测试时若手动配置用户名和密码为固定值无法模拟真实的多用户登录环境。通过CSV数据文件设置可以提供多组用户数据来实现更真实的登录操作。添加方式为线程组的配置元件中选择CSV数据文件设置。操作步骤首先进行CSV数据文件设置主要配置项包括文件名填写csv文件的路径建议使用绝对路径文件编码选择UTF-8变量名称指定从csv数据文件中读取的数据需要保存到的变量名有多个变量时用逗号分隔是否忽略首行决定是否从csv数据文件第一行开始读取分隔符要求与csv数据文件中多列的分隔符一致遇到文件结束符再次循环若选择为True当数据不够时会从头取若选择False则需要勾选遇到文件结束符停止线程。然后编写test.csv文件每行一组用户名和密码数据。接着修改登录接口及其他涉及到username和password获取的参数将固定值替换为${username}和${password}。修改完成后登录接口发起请求时将从csv文件中获取配置好的参数获取顺序为从上往下依次获取。最后修改线程组中的线程数使得每次取到的username和password都不一样。6.8 JSON提取器当接口响应成功后有时需要提取返回值中的对应字段用于其他接口的参数配置。JSON提取器可以实现这一功能需针对某一个HTTP请求接口添加。以博客首页接口为例其返回的JSON数据包含postTime、title、blogId、userId、content等字段。JSONPath常用操作符$表示根元素表示当前元素*为通配符表示所有节点..选择所有符合条件的节点.表示子元素[]表示数组索引。例如获取响应中的所有blogId元素可使用$..blogId获取第一个blogId元素可使用$.[0].blogId。配置完成后运行脚本所有查看博客内容接口对应的blogId将统一替换为提取到的值。6.9 JSON断言接口发送请求成功且响应码为200并不能完全代表接口请求成功更多时候需要关注接口响应数据是否符合预期。JSON断言用于验证响应数据中的字段是否满足预期条件同样针对某一个HTTP请求接口添加。使用时需注意若不勾选Additionally assert value表示不添加断言值可用来判断字段是否存在若勾选Additionally assert value则必须添加Expected Value期望的断言值若不勾选Match as regular expression正则匹配则Expected Value必须填写完整少一个字符都会导致断言失败若勾选正则匹配则Expected Value可以仅写上部分关键词即可断言成功。6.10 同步定时器为了达到并发的效果需要添加同步定时器。JMeter同步定时器的作用主要在于模拟多用户并发访问的场景确保多个线程能够同时执行某个操作以达到真正的并发效果。当多个线程同时启动时它们可能会在不同的时间间隔内执行无法达到真正的并发效果。同步定时器将这些线程的执行时间同步使它们在同一时间点执行可以理解为集合点——当线程数量达到指定值后再一起释放可以瞬间产生较大的压力。现实生活中红绿灯就相当于一个集合点有人先到达有人后到达但必须等到绿灯后所有人才能开始过人行道。说明虽然通过加入集合点可以约束请求同时发送但不能确保请求同时到达服务器因此只能说是较真实地模拟并发。6.11 事务控制器JMeter事务控制器主要用于测试执行嵌套测试元素所花费的总时间相当于模拟用户进行一系列操作的测试。在进行页面性能测试或API性能测试时事务控制器可以帮助测试人员更准确地评估系统性能尤其是在涉及多个接口或操作的复杂场景中。若不添加事务控制器则一个接口即一个事务添加了事务控制器后可以将多个接口统一放到一个事务控制器下作为一个事务。