Postman

下载软件包

# 官网

启动

测试案例

  1. 创建一个Collections,将接口保存进Collections
  2. 点击Runner,选择需要并发测试的接口
  3. 设置相关参数,点击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
  1. 参数说明
  • -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
  1. 测试报告
  • 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 】脚本文件

测试案例

  1. 添加本次测试计划
    选中TestPaln,右键–>添加–>Threads(Users)–>线程组,定义名称,例如tiger-test
  2. 设置线程数 (所谓线程数就是并发用户数)
  3. 添加协议及相关配置信息
    选中tiger-test,右键–>添加–>Sampler–>HTTP Request,定义名称,例如tiger-request
    填写接口相关参数
  4. 为线程添加监听器

选中tiger-request,右键–>添加–>Listener–>查看结果树

选中tiger-request,右键–>添加–>Listener–>图形结果

  1. 打来日志
    选择选项,勾选日志查看
  2. 启动测试

线程属性

  1. 线程数
    虚拟用户数,假如50
  2. Ramp-Up Period(in seconds)
    虚拟用户增长时长,例如设置为300,也就是说5分钟内,50个用户请求完毕
  3. 循环次数
    一个虚拟用户所多少次测试,例如20,则表示总共执行1000次
  4. ….

代码

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();
}
}