为了账号安全,请及时绑定邮箱和手机立即绑定

JMeter初识项目实战:新手入门教程

概述

本文详细介绍了JMeter的下载、安装及基本操作,并通过实战案例展示了如何使用JMeter进行HTTP请求、注册、购物车操作等性能测试,帮助读者快速掌握JMeter初识项目实战。

JMeter简介与安装

JMeter 是一个开源的负载测试工具,主要用于对Web应用进行压力测试。它支持多种协议,包括HTTP、HTTPS、FTP、WebDav、Java等。利用 JMeter 可以模拟多种用户行为,如登录、注册、浏览网页等,从而帮助开发者测试系统的性能和稳定性。

JMeter下载与安装

下载JMeter可以从Apache的官方网站获取最新版本。以下是下载和安装的步骤:

  1. 访问Apache JMeter的官方网站,选择合适的版本进行下载。
  2. 下载完成后,解压下载的压缩包到本地的指定目录。
  3. 运行JMeter。

在命令行中,只需双击JMeter的jmeter.sh(Linux/Mac)或jmeter.bat(Windows)文件即可启动JMeter。

JMeter界面介绍

JMeter启动后会打开一个工作区,主要包含以下几个主要部分:

  • 菜单栏:包括文件、编辑、选项、帮助等菜单。
  • 工具栏:包含常用的测试操作按钮,如新建测试计划、打开测试计划、保存测试计划等。
  • 测试计划树:显示当前测试计划的所有组件,包括线程组、取样器、监听器等。
  • 工作区:显示当前选中的组件属性。
  • 结果树:显示测试结果,包括响应时间、状态码等信息。
  • 帮助:提供JMeter的使用文档和帮助信息。

JMeter配置示例

以下是一个简单的线程组配置示例,用于模拟用户行为:

<ThreadGroup>
    <elementProp name="ThreadGroup" elementType="ThreadGroup">
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
        <stringProp name="ThreadGroup.num_threads">5</stringProp>
        <stringProp name="ThreadGroup.ramp_time">1</stringProp>
        <boolProp name="ThreadGroup.action_start_threads">false</boolProp>
        <boolProp name="ThreadGroup.action_start_duration">false</boolProp>
        <boolProp name="ThreadGroup.action_start_count">false</boolProp>
        <boolProp name="ThreadGroup.action_stop_threads">true</boolProp>
        <boolProp name="ThreadGroup.action_stop_now">false</boolProp>
        <boolProp name="ThreadGroup.action_stop_duration">false</boolProp>
        <boolProp name="ThreadGroup.action_stop_count">false</boolProp>
        <stringProp name="ThreadGroup.duration"></stringProp>
        <stringProp name="ThreadGroup.delay"></stringProp>
        <stringProp name="ThreadGroup.comments"></stringProp>
        <intProp name="ThreadGroup.num_threads">5</intProp>
        <intProp name="ThreadGroup.ramp_time">1</intProp>
        <boolProp name="ThreadGroup.scheduler">false</boolProp>
    </elementProp>
</ThreadGroup>
JMeter基本概念与术语

测试计划

测试计划是JMeter最顶层的元素,包含了整个测试的所有组件。一个JMeter测试脚本一般只有一个测试计划。测试计划中可以包含线程组、取样器、监听器等组件。

线程组

线程组模拟了一组虚拟用户的行为,每个线程组可以设置线程数、循环次数等参数。线程组中的取样器负责发送请求,监听器负责收集测试结果。

取样器

取样器是JMeter中最关键的部分,用于模拟用户发送请求。常用的取样器有HTTP请求、FTP请求等。以下是一个HTTP请求取样器的例子:

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
   .
    .
    .
</HTTPSamplerProxy>

监听器

监听器用于收集并显示测试结果。常用的监听器有查看结果树、聚合报告、断言结果等。查看结果树监听器可以显示每个请求的结果,包括响应时间、状态码等。

断言

断言用于验证请求的响应是否符合预期。如果断言失败,则整个测试将失败。常用的断言类型有正则表达式断言、响应断言等。以下是一个简单的响应断言的例子:

<assertionResult>
    <stringProp name="Assertion.testName">响应断言</stringProp>
    <stringProp name="Assertion.responseCode">200</stringProp>
    <stringProp name="Assertion.responseMessage">OK</stringProp>
    <stringProp name="Assertion.bytes">0</stringProp>
    <stringProp name="Assertion.success">true</stringProp>
    <stringProp name="Assertion.errorMsg"></stringProp>
    <stringProp name="Assertion.responseData"></stringProp>
    <stringProp name="Assertion.isIgnore">false</stringProp>
</assertionResult>
创建第一个JMeter测试脚本

创建一个简单的测试脚本,模拟用户登录操作。

添加线程组

  1. 打开JMeter,创建一个新的测试计划。
  2. 在测试计划中添加一个线程组,设置线程数(例如5个用户)和循环次数(例如2次)。

添加HTTP请求取样器

  1. 在线程组中右键点击,选择添加 -> 取样器 -> HTTP请求
  2. 在HTTP请求取样器中设置请求的服务器名称或IP地址、端口号、协议、路径等。
  3. 设置请求的类型(例如POST)。
  4. 设置请求的参数。

添加查看结果树监听器

  1. 在线程组中右键点击,选择添加 -> 监听器 -> 查看结果树
  2. 设置监听器的名称,例如“查看结果树”。

执行测试并查看结果

点击JMeter的运行按钮(绿色的播放按钮),开始执行测试。测试完成后可以在查看结果树监听器中查看每个请求的结果。

HTTP请求取样器配置示例

以下是一个简单的HTTP请求取样器配置示例,用于模拟用户登录操作:

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.path">/api/login</stringProp>
    <stringProp name="HTTPSampler.method">POST</stringProp>
    <stringProp name="HTTPSampler.contentEncoding"></stringProp>
    <stringProp name="HTTPSampler.arguments">
        <collectionProp name="HTTPSampler.args">
            <elementProp name="username" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">user123</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="password" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">pass456</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
        </collectionProp>
    </stringProp>
</HTTPSamplerProxy>
JMeter常用插件介绍

JMeter插件管理器是JMeter的一个扩展,用于方便地管理和安装各种插件。常用插件包括:

JMeter插件管理器简介

JMeter插件管理器允许用户通过一个简单的GUI界面来管理JMeter插件,它可以自动下载并安装插件,无需手动下载和配置。

常用插件安装与使用

Hits Per Second

Hits Per Second 插件可以显示测试中的每秒请求数,帮助开发者更好地理解系统在高负载情况下的吞吐量。

JUnit Report Listener

JUnit Report Listener 可以将JMeter的测试结果导出为JUnit报告格式,方便与持续集成工具集成。

插件作用与应用场景

Hits Per Second 插件适用于需要监控高并发请求的应用场景。JUnit Report Listener 插件适用于需要集成到持续集成环境中的测试场景。

JMeter测试结果分析

如何解读测试结果

JMeter的测试结果可以通过不同的监听器来查看,例如查看结果树、聚合报告等。查看结果树监听器可以显示每个请求的具体响应时间、状态码等信息。聚合报告监听器可以汇总所有请求的平均响应时间、吞吐量等。

常见性能指标解析

  • 响应时间:响应时间是指从发送请求到接收到响应的时间。
  • 吞吐量:吞吐量是指每秒钟处理的请求数。
  • 并发用户数:并发用户数是指同时在线的用户数。
  • 错误率:错误率是指响应错误的比例。

如何优化测试脚本

优化测试脚本可以从以下几个方面入手:

  • 减少资源消耗:减少不必要的请求,优化请求参数等。
  • 合理设置线程组:根据系统实际情况合理设置线程数和循环次数。
  • 使用断言:使用断言来确保测试结果符合预期。
JMeter实战案例分享

实战案例:模拟用户登录

模拟用户登录操作是常见的测试场景之一,以下是一个简单的登录测试脚本:

  1. 创建一个新的测试计划。
  2. 添加线程组,并设置线程数为2,循环次数为1。
  3. 在线程组中添加一个HTTP请求取样器,设置请求的URL为/api/login,请求类型为POST。
  4. 在HTTP请求取样器中设置参数,例如usernamepassword
  5. 在线程组中添加查看结果树监听器,查看每个请求的结果。
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.path">/api/login</stringProp>
    <stringProp name="HTTPSampler.method">POST</stringProp>
    <stringProp name="HTTPSampler.contentEncoding"></stringProp>
    <stringProp name="HTTPSampler.arguments">
        <collectionProp name="HTTPSampler.args">
            <elementProp name="username" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">user123</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="password" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">pass456</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
        </collectionProp>
    </stringProp>
</HTTPSamplerProxy>

实战案例:模拟用户注册

模拟用户注册操作同样是一个常见的测试场景。以下是一个简单的注册测试脚本:

  1. 创建一个新的测试计划。
  2. 添加线程组,并设置线程数为2,循环次数为1。
  3. 在线程组中添加一个HTTP请求取样器,设置请求的URL为/api/register,请求类型为POST。
  4. 在HTTP请求取样器中设置参数,例如usernameemailpassword
  5. 在线程组中添加查看结果树监听器,查看每个请求的结果。
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.path">/api/register</stringProp>
    <stringProp name="HTTPSampler.method">POST</stringProp>
    <stringProp name="HTTPSampler.contentEncoding"></stringProp>
    <stringProp name="HTTPSampler.arguments">
        <collectionProp name="HTTPSampler.args">
            <elementProp name="username" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">user456</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="email" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">user456@example.com</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
            <elementProp name="password" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">pass789</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
        </collectionProp>
    </stringProp>
</HTTPSamplerProxy>

实战案例:模拟用户购物车操作

模拟用户购物车操作可以验证用户的购物流程是否正常工作。以下是一个简单的购物车操作测试脚本:

  1. 创建一个新的测试计划。
  2. 添加线程组,并设置线程数为2,循环次数为1。
  3. 在线程组中添加HTTP请求取样器,分别设置请求的URL为/api/cart/add(添加商品到购物车)和/api/cart/remove(从购物车移除商品)。
  4. 在HTTP请求取样器中设置参数,例如product_id
  5. 在线程组中添加查看结果树监听器,查看每个请求的结果。
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.path">/api/cart/add</stringProp>
    <stringProp name="HTTPSampler.method">POST</stringProp>
    <stringProp name="HTTPSampler.contentEncoding"></stringProp>
    <stringProp name="HTTPSampler.arguments">
        <collectionProp name="HTTPSampler.args">
            <elementProp name="product_id" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">123</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
        </collectionProp>
    </stringProp>
</HTTPSamplerProxy>

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
    <stringProp name="HTTPSampler.domain">www.example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.path">/api/cart/remove</stringProp>
    <stringProp name="HTTPSampler.method">POST</stringProp>
    <stringProp name="HTTPSampler.contentEncoding"></stringProp>
    <stringProp name="HTTPSampler.arguments">
        <collectionProp name="HTTPSampler.args">
            <elementProp name="product_id" elementType="HTTPArgument">
                <boolProp name="HTTPArgument.always_encode">true</boolProp>
                <stringProp name="Argument.value">123</stringProp>
                <stringProp name="Argument.metadata">=</stringProp>
            </elementProp>
        </collectionProp>
    </stringProp>
</HTTPSamplerProxy>

以上是使用JMeter进行性能测试的一些基础和实战案例。通过这些案例,你将能够更好地理解和应用JMeter进行各种Web应用的性能测试。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消