Postman
下载软件包
# 官网
启动
测试案例
- 创建一个Collections,将接口保存进Collections
- 点击Runner,选择需要并发测试的接口
- 设置相关参数,点击Run。
Apache Bench
下载软件包
# 官网
https://www.apachelounge.com/
# 软件包
启动
在目录【xxx\Apache24\bin 】下,通过cmd进入命令行界面,启动abs.exe
abs.exe
测试案例
ab [options] [http://]hostname[:port]/path
例如:
-n后面的1000代表总共发出1000个请求,-c后面的500表示采用500个并发(模拟500个人同时访问);后面的网址表示测试的目标URL。
ab -n 1000 -c 500 http://127.0.0.1:8080/test
# 或
abs.exe -n 1000 -c 500
- 参数说明
- -n
• requests Number of requests to perform //本次测试发起的总请求数
• -c
concurrency Number of multiple requests to make //一次产生的请求数(或并发数)• -t
timelimit Seconds to max. wait for responses //测试所进行的最大秒数,默认没有时间限制。• -r
Don’t exit on socket receive errors // 抛出异常继续执行测试任务• -p
postfile File containing data to POST //包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是 -p 111.txt• -T
content-type Content-type header for POSTing //POST数据所使用的Content-type头信息,如 -T “application/x-www-form-urlencoded” 。 (配合-p)• -v verbosity How much troubleshooting info to print
//设置显示信息的详细程度 – 4或更大值会显示头信息, 3或更大值可以显示响应代码(404, 200等), 2或更大值可以显示警告和其他信息。 -V 显示版本号并退出。• -C
attribute Add cookie, eg. -C “c1=1234,c2=2,c3=3” (repeatable)
//-C cookie-name=value 对请求附加一个Cookie:行。 其典型形式是name=value的一个参数对。此参数可以重复,用逗号分割。提示:可以借助session实现原理传递 JSESSIONID参数,实现保持会话的功能,如-C ” c1=1234,c2=2,c3=3, JSESSIONID=FF056CD16DA9D71CB131C1D56F0319F8″ 。• -w
Print out results in HTML tables //以HTML表的格式输出结果。默认时,它是白色背景的两列宽度的一张表。• -i
Use HEAD instead of GET
- …
- 测试报告
- Document Path:测试页面
- Document Length: 页面大小
- Concurrency Level: 测试的并发数
- Time taken for tests:整个测试持续的时间
- Complete requests:完成的请求数量
- Failed requests: 失败的请求数量
- Write errors: 0
- Total transferred: 整个过程中的网络传输量
- HTML transferred: 整个过程中的HTML内容传输量
- Requests per second: 最重要的指标之一,相当于LR中的每秒事务数,后面括号中的mean表示这是一个平均值
- Time per request: 最重要的指标之二,相当于LR中的平均事务响应时间,后面括号中的mean表示这是一个平均值
- Time per request: 每个连接请求实际运行时间的平均值
- Transfer rate: 平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题
- …
JMeter
下载软件包
# 官网
http://jmeter.apache.org/
# 软件包
启动
在目录【xxx\apache-jmeter-5.4.1\bin 】下,通过cmd进入命令行界面,window下启动 ,双击【 jmeter.bat 】脚本文件
测试案例
- 添加本次测试计划
选中TestPaln,右键–>添加–>Threads(Users)–>线程组,定义名称,例如tiger-test - 设置线程数 (所谓线程数就是并发用户数)
- 添加协议及相关配置信息
选中tiger-test,右键–>添加–>Sampler–>HTTP Request,定义名称,例如tiger-request
填写接口相关参数 - 为线程添加监听器
选中tiger-request,右键–>添加–>Listener–>查看结果树
选中tiger-request,右键–>添加–>Listener–>图形结果
- 打来日志
选择选项,勾选日志查看 - 启动测试
线程属性
- 线程数
虚拟用户数,假如50 - Ramp-Up Period(in seconds)
虚拟用户增长时长,例如设置为300,也就是说5分钟内,50个用户请求完毕 - 循环次数
一个虚拟用户所多少次测试,例如20,则表示总共执行1000次 - ….
代码
public class ConcurrencyTest {
// 请求总数
public static int clientTotal = 5000;
// 同时并发执行的线程数
public static int threadTotal = 200;
public static AtomicInteger count = new AtomicInteger(0);
public static void main(String[] args) throws Exception {
// 线程池
ExecutorService executorService = Executors.newCachedThreadPool();
// 信号量
final Semaphore semaphore = new Semaphore(threadTotal);
// 计数器闭锁,线程执行一次,计数器减1,直到为0
final CountDownLatch countDownLatch = new CountDownLatch(clientTotal);
for (int i = 0; i < clientTotal; i++) {
executorService.execute(() -> {
try {
semaphore.acquire();
add();
semaphore.release();
} catch (Exception e) {
log.error("exception", e);
}
countDownLatch.countDown();
});
}
// 等待闭锁减为0,才执行下面的操作
countDownLatch.await();
// 关闭线程池
executorService.shutdown();
log.info("count:{}", count.get());
}
private static void add() {
count.incrementAndGet();
}
}