Java教程

JMeter初识学习:新手入门教程

本文主要是介绍JMeter初识学习:新手入门教程,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述

本文介绍了JMeter初识学习的相关内容,包括JMeter的基本概念、主要功能和适用场景。文章详细讲解了JMeter的安装与配置步骤,以及如何创建第一个测试计划。通过本文,读者可以快速上手并掌握JMeter的基本操作。

JMeter初识学习:新手入门教程
JMeter简介

JMeter是什么

JMeter 是一个开源的性能测试工具,它主要用于模拟负载测试和压力测试以验证应用程序在各种条件下的性能表现。JMeter 支持多种协议,包括但不限于 HTTP、HTTPS、FTP、WebDAV、SOAP、JDBC、JMS 和 FTP。

JMeter的主要功能

  • 负载测试:通过创建线程组模拟多用户并发访问,评估应用程序在高负载情况下的表现。
  • 压力测试:测试应用程序在极端条件下的行为,如增加大量并发用户或者增大数据量。
  • 性能测试:分析应用程序的响应时间、吞吐量和资源利用率等指标。
  • 接口测试:测试Web应用、数据库、LDAP服务器等接口的性能。

JMeter的适用场景

  • 对Web应用进行负载测试和压力测试。
  • 对数据库进行性能测试。
  • 测试客户端脚本、Web服务等。
  • 模拟真实的用户行为以进行性能测试。
安装与配置JMeter

下载JMeter

下载JMeter的最新稳定版可以从其官方网站获取。前往官网下载页面,选择适合的操作系统和版本进行下载。例如,下载JMeter 5.4版本的zip包:

wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.4.zip

安装JMeter

解压下载的JMeter包,使用以下命令:

unzip apache-jmeter-5.4.zip
cd apache-jmeter-5.4

配置JMeter环境

确保JMeter的bin目录路径已添加到系统的PATH环境变量中,以便可以从命令行直接运行JMeter脚本。

export PATH=$PATH:/path/to/jmeter/apache-jmeter-5.4/bin
创建第一个测试计划

创建测试计划

启动JMeter后,选择“文件” -> “新建”来创建一个新的测试计划。在新建的测试计划中,可以添加线程组、采样器、监听器等组件。

添加线程组

线程组用于模拟用户的行为。右键点击测试计划,选择“添加” -> “线程(用户)” -> “线程组”。

配置线程组参数:

  • 线程数(Threads):模拟的用户数量。
  • 持续时间(Duration):测试运行的时间,以秒为单位。
  • 循环次数(Loop Count):每个线程执行测试的次数。
  • 启动延迟(Startup Delay):线程开始执行前的延迟时间。

例如,设置线程数为10,持续时间为60秒,循环次数为1,启动延迟为0秒。

添加HTTP请求

右键点击线程组,选择“添加” -> “取样器” -> “HTTP请求”。配置HTTP请求参数:

  • 协议(Protocol):HTTP 或 HTTPS。
  • 服务器名称或IP(Server Name or IP):目标服务器的主机名或IP地址。
  • 端口号(Port Number):目标服务器的端口号,通常HTTP使用80端口,HTTPS使用443端口。
  • 请求类型(Method):GET 或 POST。
  • 请求路径(Path):请求的URL路径。
  • 名称(Name):请求的名称。

例如,添加一个HTTP GET请求,访问目标为http://example.com/api/users

示例Java代码展示线程组配置:

public class JMeterTestPlan {
    public static void main(String[] args) throws Exception {
        JMeterTestPlan jMeterTestPlan = new JMeterTestPlan();
        // 配置线程组
        jMeterTestPlan.configureThreadGroup(10, 60, 1, 0);
    }

    public void configureThreadGroup(int threadCount, int duration, int loopCount, int startupDelay) {
        // 配置线程组参数
        ThreadGroup threadGroup = new ThreadGroup();
        threadGroup.setNumThreads(threadCount);
        threadGroup.setDuration(duration);
        threadGroup.setLoops(loopCount);
        threadGroup.setStartupDelay(startupDelay);
    }
}

示例Python代码展示添加HTTP请求:

from http.client import HTTPConnection

def add_http_request():
    conn = HTTPConnection("example.com")
    conn.request("GET", "/api/users")
    response = conn.getresponse()
    print(response.status, response.reason)
    data = response.read()
    print(data)
    conn.close()

add_http_request()
基本测试元素介绍

采样器

采样器用于向服务器发送请求并接收响应。JMeter支持多种协议的采样器,如HTTP请求、JDBC请求、FTP请求等。

示例代码:

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="示例HTTP请求" enabled="true">
    <stringProp name="HTTPSampler.domain">example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.protocol">http</stringProp>
    <stringProp name="HTTPSampler.path">/api/users</stringProp>
    <stringProp name="HTTPSampler.method">GET</stringProp>
    <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
    <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
    <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
    <boolProp name="HTTPSampler.use_threads">false</boolProp>
    <stringProp name="HTTPSampler.connect_timeout"></stringProp>
    <stringProp name="HTTPSampler.response_timeout"></stringProp>
</HTTPSamplerProxy>

监听器

监听器用于显示采样器的响应结果。常用的监听器包括查看结果树、聚合报告、断言结果等。

示例代码:

<ViewResultsTree guiclass="ViewResultsTreeNode" testclass="ViewResultsTree" testname="查看结果树" enabled="true"/>

断言

断言用于验证响应是否符合预期。常用的断言包括响应代码、响应长度、响应时间等。

示例代码:

<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="示例HTTP请求" enabled="true">
    <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
    <stringProp name="HTTPSampler.domain">example.com</stringProp>
    <stringProp name="HTTPSampler.port">80</stringProp>
    <stringProp name="HTTPSampler.protocol">http</stringProp>
    <stringProp name="HTTPSampler.path">/api/users</stringProp>
    <stringProp name="HTTPSampler.method">GET</stringProp>
    <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
    <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
    <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
    <boolProp name="HTTPSampler.use_threads">false</boolProp>
    <stringProp name="HTTPSampler.connect_timeout"></stringProp>
    <stringProp name="HTTPSampler.response_timeout"></stringProp>
    <elementProp name="HTTPsampler.info" elementType="HTTPSampler" guiclass="HttpTestSampleGui" testclass="HTTPSampler" testname="示例HTTP请求" enabled="true">
        <boolProp name="HTTPSampler.postBodyRaw">true</boolProp>
        <stringProp name="HTTPSampler.domain">example.com</stringProp>
        <stringProp name="HTTPSampler.port">80</stringProp>
        <stringProp name="HTTPSampler.protocol">http</stringProp>
        <stringProp name="HTTPSampler.path">/api/users</stringProp>
        <stringProp name="HTTPSampler.method">GET</stringProp>
        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
        <boolProp name="HTTPSampler.use_threads">false</boolProp>
        <stringProp name="HTTPSampler.connect_timeout"></stringProp>
        <stringProp name="HTTPSampler.response_timeout"></stringProp>
    </elementProp>
    <hashTree>
        <ResponseAssertion guiclass="AssertionGui" testclass="ResponseAssertion" testname="响应断言" enabled="true">
            <collectionProp name="Asserion.test_strings">
                <string>示例断言</string>
            </collectionProp>
            <stringProp name="Assertion.responseAssertionErrorsOKAs">false</stringProp>
            <stringProp name="Assertion.responseHeader">Content-Type</stringProp>
            <stringProp name="Assertion.responseHeaderMatchType">1</stringProp>
            <stringProp name="Assertion.responseMessage"></stringProp>
            <stringProp name="Assertion.responseMessageMatchType">1</stringProp>
            <stringProp name="Assertion.responseText">示例断言</stringProp>
            <stringProp name="Assertion.responseStream">false</stringProp>
            <stringProp name="Assertion.testField">1</stringProp>
            <stringProp name="Assertion.amatch"></stringProp>
        </ResponseAssertion>
    </hashTree>
</HTTPSamplerProxy>
执行与查看结果

执行测试计划

点击工具栏上的“启动”按钮开始执行测试计划。JMeter会根据配置的线程组参数发送请求,并收集响应数据。

查看测试结果

在执行过程中,可以使用监听器查看结果树来查看每个请求的详细信息,包括HTTP响应代码、响应时间、响应数据等。

导出测试报告

执行完成后,可以导出测试报告以进行进一步分析。右键点击测试计划,选择“保存测试计划”,将测试计划保存为.jmx文件。使用“工具” -> “报告” -> “查看测试结果”选项,生成HTML格式的报告文件。

示例代码:

<TableViewer guiclass="TableVisualizerGui" testclass="Table" testname="聚合报告" enabled="true">
    <boolProp name="Table.shellEscape">false</boolProp>
    <boolProp name="Table.showEmpty">false</boolProp>
    <stringProp name="Table.title"></stringProp>
    <stringProp name="Table.columns">
        <string>label</string>
        <string>success</string>
        <string>latency</string>
        <string>#samples</string>
        <string>avg</string>
        <string>min</string>
        <string>max</string>
        <string>throughput</string>
        <string>allThreads</string>
        <string>allThreads.avg</string>
        <string>allThreads.min</string>
        <string>allThreads.max</string>
        <string>allThreads.stdev</string>
    </stringProp>
    <stringProp name="Table.rows">
        <string>label</string>
        <string>success</string>
        <string>latency</string>
        <string>#samples</string>
        <string>avg</string>
        <string>min</string>
        <string>max</string>
        <string>throughput</string>
        <string>allThreads</string>
        <string>allThreads.avg</string>
        <string>allThreads.min</string>
        <string>allThreads.max</string>
        <string>allThreads.stdev</string>
    </stringProp>
    <boolProp name="Table.subTable">false</boolProp>
    <boolProp name="Table.sortTable">false</boolProp>
</TableViewer>
小结

总结学习要点

通过本教程的学习,你已经掌握了JMeter的基本操作,包括安装配置、创建测试计划和执行测试等。你学会了如何使用线程组、HTTP请求、采样器、监听器和断言等组件来构建和执行负载测试和压力测试。

推荐进阶学习资源

为了进一步提升你使用JMeter的能力,推荐以下资源:

  • 慕课网:提供丰富的在线课程和实战项目,帮助你深入学习JMeter和性能测试。
  • 官方文档:JMeter的官方网站提供了详细的用户手册和示例,可以用来深入学习和参考。
  • 书籍:《负载测试实战:JMeter》等书籍,提供了详细的理论和实战指导。
  • 社区:加入JMeter相关的技术社区和论坛,与其他用户交流经验和解决问题。

通过不断实践和探索,你将能够更好地利用JMeter进行复杂的性能测试和压力测试。

这篇关于JMeter初识学习:新手入门教程的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!