随着互联网和移动互联网的高速发展,越来越多的企业需要通过网络应用来提供服务,以满足用户的需求。同时,为了保证网络应用的稳定性和可靠性,各种负载测试工具也应运而生。在这篇文章中,我们将介绍四种常见的压测工具:wrk、ab、loadrunner和jmeter,并举例说明它们的使用方法。
- wrk
wrk是一个轻量级的HTTP压力测试工具,它使用Lua编写,并在epoll模型上进行优化,可以发送高并发的HTTP请求。以下是一个使用wrk测试本地服务器的示例代码:
wrk -t4 -c100 http://localhost:8080
上面的命令表示开启4个线程模拟100个客户端访问本地的8080端口,可以得到如下统计信息:
Running 10s test @ http://localhost:8080
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 290.54us 246.90us 11.25ms 97.80%
Req/Sec 14.61k 2.59k 18.52k 72.75%
582319 requests in 10.00s, 70.03MB read
Requests/sec: 58231.88
Transfer/sec: 7.00MB
可以看到,在10秒的测试中,wrk共发起了582319个请求,平均每秒可以处理58231个请求。
- ab
ab是Apache Web Server自带的一个工具,也是一个轻量级的HTTP测试工具,可以在Linux和Windows平台上运行。以下是一个使用ab测试本地服务器的示例代码:
ab -n1000 -c10 http://localhost:8080/
上面的命令表示发起1000个请求,10个并发,测试本地的8080端口,可以得到如下统计信息:
Server Software: Apache/2.4.18
Server Hostname: localhost
Server Port: 8080
Document Path: /
Document Length: 12 bytes
Concurrency Level: 10
Time taken for tests: 1.035 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 126000 bytes
HTML transferred: 12000 bytes
Requests per second: 965.55 [#/sec] (mean)
Time per request: 10.345 [ms] (mean)
Time per request: 1.035 [ms] (mean, across all concurrent requests)
Transfer rate: 118.96 [Kbytes/sec] received
可以看到,ab发起了1000个请求,平均每秒可以处理965个请求。
- loadrunner
loadrunner是一款商业化的压测工具,拥有强大的功能和广泛的支持。以下是一个使用loadrunner测试本地服务器的示例代码:
Action()
{
lr_start_transaction("transaction_name");
lr_think_time(5);
web_url("url",
"URL=http://localhost:8080/",
"TargetFrame=",
"Resource=0",
"RecContentType=text/html",
"Referer=",
"Snapshot=t1.inf",
"Mode=HTML",
LAST);
lr_end_transaction("transaction_name", LR_AUTO);
return 0;
}
上面的代码表示在执行一个事务(transaction_name)前等待5秒,然后访问本地的8080端口,并将结果存储到t1.inf中。
4.jmeter
JMeter是一款免费的、开源的压测工具,用于模拟实际用户负载对服务器、网络等系统资源的影响。JMeter的主要功能包括开发各种HTTP请求、FTP请求、JDBC操作、SOAP/XML-RPC请求以及定制Java请求等。
以下是使用JMeter进行简单的HTTP请求的示例代码:
-
首先,打开JMeter软件,在Test Plan中右键点击Add -> Threads(Users) -> Thread Group。
-
在Thread Group的属性面板中设置线程数、循环次数、启动时间和持续时间等参数。
-
选择Thread Group,右键点击Add -> Sampler -> HTTP Request,填写服务器地址、端口号和路径等请求信息。
-
进入HTTP Request的属性面板中,可以设置请求方法、参数、请求头和响应校验等详细配置。
-
接着,可以添加断言、监听器等组件来分析测试结果,比如通过Response Assertion来检查响应结果是否符合预期。
-
最后,点击运行按钮即可启动测试,并在Listeners面板中查看测试结果。
下面是一个简单的JMeter脚本示例,用于向百度搜索发送GET请求并检查响应结果是否包含关键词:
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.1.1">
<hashTree>
<TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="Example Test Plan" enabled="true">
<stringProp name="TestPlan.comments"></stringProp>
<boolProp name="TestPlan.functional_mode">false</boolProp>
<boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>
<boolProp name="TestPlan.serialize_threadgroups">false</boolProp>
<elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" enabled="true">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="TestPlan.user_define_classpath"></stringProp>
</TestPlan>
<hashTree>
<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Example Thread Group" enabled="true">
<stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
<elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" enabled="true">
<boolProp name="LoopController.continue_forever">false</boolProp>
<stringProp name="LoopController.loops">1</stringProp>
</elementProp>
<stringProp name="ThreadGroup.num_threads">1</stringProp>
<stringProp name="ThreadGroup.ramp_time">1</stringProp>
<longProp name="ThreadGroup.start_time">1577437923000</longProp>
<longProp name="ThreadGroup.end_time">1577437923000</longProp>
<boolProp name="ThreadGroup.scheduler">false</boolProp>
<stringProp name="ThreadGroup.duration"></stringProp>
<stringProp name="ThreadGroup.delay"></stringProp>
</ThreadGroup>
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Example HTTP Request" enabled="true">
<elementProp name="HTTPsampler.Arguments" elementType="Arguments">
<collectionProp name="Arguments.arguments"/>
</elementProp>
<stringProp name="HTTPSampler.domain">www.baidu.com</stringProp>
<stringProp name="HTTPSampler.port"></stringProp>
<stringProp name="HTTPSampler.connect_timeout"></stringProp>
<stringProp name="HTTPSampler.response_timeout"></stringProp>
<stringProp name="HTTPSampler.protocol">http</stringProp>
<stringProp name="HTTPSampler.contentEncoding"></stringProp>
<stringProp name="HTTPSampler.path">/s</stringProp>
<stringProp name="HTTPSampler.method">GET</stringProp>
<boolProp name="HTTPSampler.follow_redirects">true</boolProp>
<boolProp name="HTTPSampler.auto_redirects">false</boolProp>
<boolProp name="
【软件测试到测试开发全测试生涯学习路线】
以及全套配套的学习资料,视频教程....
:【以下路线图太详细了只能展开部分,具体的可以在文章末尾扫描小卡片备注000领取哦】
1:自动化测试进阶系列:
2:全栈性能测试,监控以及调优
3:全栈测试开发平台实战
4:全栈安全测试渗透测试
5:devops持续集成部署
6:全栈接口测试工具进阶
7:跨平台自动化测试工具
8:大厂简历,真题,录音
9:全栈系列课企业项目实战
总结:下方是作者从功能测试到自动化测试拿到年薪34w,花费三年打造的软件测试到测试开发全职业生涯资料包,有需要的话可以点击文章末尾的小卡片备注000领取哈