本文介绍了JMeter初识学习的相关内容,包括JMeter的基本概念、主要功能和适用场景。文章详细讲解了JMeter的安装与配置步骤,以及如何创建第一个测试计划。通过本文,读者可以快速上手并掌握JMeter的基本操作。
JMeter 是一个开源的性能测试工具,它主要用于模拟负载测试和压力测试以验证应用程序在各种条件下的性能表现。JMeter 支持多种协议,包括但不限于 HTTP、HTTPS、FTP、WebDAV、SOAP、JDBC、JMS 和 FTP。
下载JMeter的最新稳定版可以从其官方网站获取。前往官网下载页面,选择适合的操作系统和版本进行下载。例如,下载JMeter 5.4版本的zip包:
wget https://archive.apache.org/dist/jmeter/binaries/apache-jmeter-5.4.zip
解压下载的JMeter包,使用以下命令:
unzip apache-jmeter-5.4.zip cd apache-jmeter-5.4
确保JMeter的bin目录路径已添加到系统的PATH环境变量中,以便可以从命令行直接运行JMeter脚本。
export PATH=$PATH:/path/to/jmeter/apache-jmeter-5.4/bin
启动JMeter后,选择“文件” -> “新建”来创建一个新的测试计划。在新建的测试计划中,可以添加线程组、采样器、监听器等组件。
线程组用于模拟用户的行为。右键点击测试计划,选择“添加” -> “线程(用户)” -> “线程组”。
配置线程组参数:
例如,设置线程数为10,持续时间为60秒,循环次数为1,启动延迟为0秒。
右键点击线程组,选择“添加” -> “取样器” -> “HTTP请求”。配置HTTP请求参数:
例如,添加一个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进行复杂的性能测试和压力测试。