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

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

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在socket epoll高并发项目中,我们可以使用以下方法来测试高并发性: 1. 压力测试:可以使用工具如Apache JMeter或wrk等进行压力测试模拟多个并发请求发送到服务器。可以设置并发连接数和请求频率,观察服务器的响应时间和处理能力。 2. 性能测试:可以使用工具如Apache Bench或siege等进行性能测试,发送多个并发请求并记录服务器的响应时间、吞吐量等指标。可以通过调整并发连接数和请求的大小来测试服务器的性能极限。 3. 负载均衡测试:如果项目中使用了负载均衡器来分流请求,可以模拟多个并发请求发送到负载均衡器,观察负载均衡器的转发能力和服务器的响应时间。 4. 异常情况测试:可以模拟网络延迟、断连、异常数据等异常情况,观察服务器的容错能力和恢复能力。 5. 数据库测试:如果项目中有涉及数据库的操作,可以模拟并发读写请求,观察数据库的性能和并发处理能力。 6. 监控和分析:在测试过程中,可以使用监控工具来实时监测服务器的CPU、内存、网络等指标,以及检查是否有内存泄漏或资源泄漏等问题。 通过以上的测试方法和手段,我们可以评估高并发项目的性能和稳定性,找出性能瓶颈和优化空间,提高系统的并发处理能力。 ### 回答2: 在进行socket epoll高并发项目的测试时,可以采取以下几个步骤来测试高并发性: 1. 设计并发测试场景:根据项目的需求和设计,确定需要模拟的并发用户数、每个用户的请求频率和请求类型。可以使用工具如Apache JMeter或自行编写脚本来模拟并发请求。 2. 配置并发环境:在测试机器上进行并发测试,需要增加网络带宽、增加计算资源,比如使用高性能的服务器和网络设备,确保能够支持大量并发连接。 3. 编写测试程序:根据项目的需求,在测试程序中实现模拟并发请求的逻辑,通过socket epoll模型建立大量并发连接,并发送模拟请求进行测试。 4. 监控并发连接数和响应时间:使用系统工具如netstat、top等来监控服务器端的并发连接数和系统资源使用情况。同时,使用性能监控工具如zabbix、grafana等来监控服务器的吞吐量、响应时间等指标。 5. 数据验证和压力测试:在并发测试中,确保数据的一致性,对接收到的响应进行验证。并逐步增加并发连接数,直至达到系统的极限,观察系统响应时间的变化情况和可能出现的性能瓶颈。 6. 多样化的测试场景:在测试过程中,可以尝试不同的测试场景,如不同的请求类型、不同大小的数据包等,验证系统在各种情况下的高并发性能。 7. 异常处理:在测试中,需要注意处理一些异常情况,如客户端异常断开连接、网络异常等,确保系统对异常情况的处理能力。 通过以上步骤,可以对socket epoll高并发项目进行有效的测试,找出系统的性能瓶颈,及时进行优化和调整,提升系统的高并发性能。 ### 回答3: 在socket epoll高并发项目中,为了测试高并发性能,可以采取以下几种方式: 1. 压力测试工具:使用一些专业的压力测试工具,如JMeter、Apache Bench或wrk等,来模拟大量的并发请求。可以设置并发数、每秒请求数和总请求量等参数,对系统进行压力测试,观察系统在高并发情况下的性能表现。 2. 自动化测试脚本:编写自动化测试脚本,通过多线程或多进程进行模拟并发请求,向服务器发送大量的请求。可以使用Python的模块,如requests、multiprocessing等,实现并发请求的测试。 3. 网络负载生成工具:使用网络负载生成工具,比如Locust、Gatling等,来模拟真实的网络负载情况。可以设置请求频率、并发数和持续时间等参数,模拟多种场景下的高并发情况。 4. 并发性能监控工具:使用一些并发性能监控工具,如Grafana、Prometheus等,来监控系统的并发性能。通过收集CPU、内存、网络等指标数据,可以分析和评估系统在高并发场景下的性能瓶颈。 5. 随机性测试:在测试过程中,引入随机性因素,模拟真实场景下的随机请求。可以设计不同类型的请求和不同请求参数的组合,观察系统在随机请求下的并发性能表现。 需要注意的是,在进行高并发性能测试时,要合理设置测试参数,以真实场景为依据,同时监控系统各项指标,及时发现并解决性能瓶颈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ljt-tiger

thanks

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

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

打赏作者

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

抵扣说明:

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

余额充值