2.并发测试

2.并发测试

2.1.定义

并发测试主要关注系统在多用户同时访问时的表现,旨在评估系统在高并发情况下的稳定性和性能。

2.2.测试场景

通过模拟多个用户同时访问系统,记录分析系统响应时间,吞吐量和资源利用率指标,发现潜在的性能瓶颈。

主要关注系统在高并发情况下的稳定性和数据一致性问题,比如死锁、竞态条件等。

单业务功能场景的并发测试

针对系统中某个具体功能模块例如登录、注册、支付等,模拟多个用户同时执行相同的操作,验证功能模块在高并发情况下的响应速度,数据一致性和系统稳定性。

混合业务功能场景的并发测试

模拟多个用户同时执行不同的操作,例如部分用户浏览新闻内容,部分用户发起评论等,评估系统在复杂使用场景下的整体性能和资源分配情况。

性能极限测试

逐步增加用户数量,直到系统达到性能瓶颈或崩溃,以确定系统能承受的最大并发用户数,找出性能瓶颈,为系统提供数据支持。

长时间稳定性测试

模拟长时间的高并发使用情况,如模拟一天或几天内持续的高流量访问,以评估系统在长时间高负荷运行下稳定性和可靠性,检查是否有内存泄露、资源耗尽等问题。

异常情况下的并发测试

模拟网络延迟、服务器宕机、数据库连接失败等异常情况,同时进行高并发操作,以验证系统在异常情况下能否正常恢复和异常处理机制的有效性。

分布式系统并发测试

对于分布式系统,模拟跨多个节点的高并发访问,评估分布式系统在高并发条件下的数据一致性、通信效率和容错能力。

2.3.测试步骤

确定测试目标

明确测试范围,定义相应的测试性能指标例如吞吐量、响应时间、资源利用率等,选择设计具体的测试场景比如单业务/混合业务功能场景、性能极限测试、长时间稳定性测试、异常情况下的并发测试等。

准备测试数据和测试工具

做测试前的准备工作,准备足够用的测试数据,比如用户账号、测试订单等。

整理测试数据,测试数据应覆盖各种可能的输入情况,包括边界值和异常值。

选择合适的测试工具并做相关测试前配置,安装和配置系统监控工具以监控系统性能指标。

编写测试脚本

按测试数据编写自动化测试脚本,模拟用户操作,并设置并发控制保证多个用户同时执行操作,并发量视测试目标和测试场景来指定。

执行测试任务

启动测试任务,并关注系统运行情况,监控系统性能,并记录测试结果。

分析测试结果

分析响应时间、吞吐量、资源利用率等系统性能指标,评估其在高并发下的表现,查找分析相关性能瓶颈,记录测试问题和系统异常。

优化和再测试

根据测试结果进行对应的优化,重新执行测试以验证优化效果,重复该过程进行迭代优化直到满足预期目标。(优化代码看起来需要研发支持)

编写测试报告

总结测试结果和测试过程,并给出相关优化建议。归档本次并发测试脚本、测试数据和测试报告等相关资料,以便日后查阅复用。

2.4.补充

竞态条件

定义当两个或更多进程/线程尝试同时对共享数据进行读写操作时,如果没有适当的同步机制来控制它们的执行顺序,就可能发生竞态条件。

影响可能造成数据不一致、程序崩溃、安全漏洞等问题。比如在一个计数器上进行自增操作,如果两个线程同时读取了同一个值并基于这个值进行了计算,那么最终计数器的值可能是错误的。

例子一个银行账户转账场景中,如果同时有两个事务尝试修改同一个账户余额而没有正确的锁定机制,可能会导致金额计算出错。

文件操作中的竞态条件,如两个进程试图在同一时间打开和写入相同的文件,可能会导致文件内容损坏。

解决方法
使用互斥锁(Mutex)来保证任何时刻只有一个线程能够访问共享资源。
利用信号量(Semaphore)等同步原语来控制资源访问的并发程度。
应用原子操作,这是一种不可分割的操作,一旦开始就必须连续完成,不会被其他线程中断。
设计无锁算法或使用乐观锁策略,例如版本号检查或比较并交换(CAS)指令。

信号量

二进制信号量(Binary Semaphore):
计数器的值只能是0或1。
类似于互斥锁(Mutex),用于保护临界区,确保同一时间只有一个线程可以访问共享资源。
计数信号量(Counting Semaphore):
计数器的值可以是任意非负整数。
用于控制多个资源的访问,允许多个线程同时访问资源,但总数不超过计数器的值。

应用场景:

资源限制:
控制对有限资源的访问,如数据库连接池、文件句柄等。
例如,一个数据库连接池最多允许10个连接,可以使用计数信号量来控制。
线程同步:
协调多个线程的执行顺序,确保某些操作按特定顺序执行。
例如,生产者-消费者模型中,生产者线程和消费者线程通过信号量同步。
并发控制:
限制同时执行某段代码的线程数量,避免资源竞争。
例如,限制同时访问某个API的线程数量,防止过载。

以上补充由 通义灵码 提供

posted @ 2024-11-15 13:32  ShadowMurloc  阅读(190)  评论(0)    收藏  举报