模拟高并发测试的几种方式

本文探讨了Postman、ApacheBench和JMeter三种流行的并发测试工具,包括软件下载、安装、测试案例和关键参数设置。详细介绍了如何创建测试集合、配置并发执行和生成测试报告,适合IT专业人士了解和实践性能测试。

Postman

下载软件包

# 官网

启动

测试案例

  1. 创建一个Collections,将接口保存进Collections
  2. 点击Runner,选择需要并发测试的接口
  3. 设置相关参数,点击Run。

Apache Bench

下载软件包

# 官网
https://www.apachelounge.com/
# 软件包
https://www.apachelounge.com/download/VS16/binaries/httpd-2.4.48-win64-VS16.zip

启动

在目录【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  http://127.0.0.1:8080/test
  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

  2. 测试报告

    • 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/
# 软件包
https://mirrors.bfsu.edu.cn/apache//jmeter/binaries/apache-jmeter-5.4.1.zip

启动

在目录【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–>图形结果

  5. 打来日志

    选择选项,勾选日志查看

  6. 启动测试

线程属性

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ljt-tiger

thanks

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值