软件测试—Day2
Q:面试过程中,性能测试你测试什么?关注的点是什么?
A:程序的响应时间,系统的吞吐量,以及并发用户数,和tps,qps,以及DB的IOPS,和服务器的系统资源(CPU和内存)。通过一定的工具或者代码的方式,来验证被测试的程序是否满足性能测试的目标,以及验证程序是否会出现OOM,系统崩溃,系统无响应等情况。
Q:性能测试过程中,开发说需要添加服务器性能测试才能继续,此时你会?
A:性能测试的过程中,测试环境的资源配置与生产环境的资源必须是一致的。所以行不通,否则需要其他相关人员一起配合。
工作流程:
1、清楚性能测试的目标是什么?
2、怎么去做?
3、过程中需要收集数据
4、最后一定要有结论,汇报领导。
小扩展:主流的MQ消息队列服务器
Kafka:由LinkedIn公司打造,主要应用于大数据领域,在数据的实时流要求是非常高的,性能优越,但是在数据一致性方面表现很差劲。
RabbitMQ:对数据的一致性要求很高,对性能反而要求没那么高。
性能测试模型(性能测试步骤)
性能测试模型也可以理解为性能测试步骤,具体汇总为如下:
• 测试前期准备工作:
1、梳理清楚性能测试的目标(参考之前的历史数据,性能的目标由测试主导梳理出来,但是和大家一起沟通决定下来)
2、在目标清楚的基础上,梳理5出测试场景,和准备测试数据
3、准备测试资源(人力资源和机器资源)
• 测试工具技术引入
1、LoadRunner:HP公司研发,主要在工业级的性能测试中具备非常大的优势,收费使用。
2、JMeter Apache基金会顶级项目,是Java语言%开发的,它是开源的,在头部互联网公司基本都会进行二次开发,应用广泛。
3、Locust是python代码级别的性能测试工具,它是基于协程(微小的线程)
• 性能测试计划
1、具体测试场景执行的负责人,和执行的开始结束时间
2、前置工作内容
3、具体使用到的测试技术
• 测试设计与开发
1、编写测试脚本来执行验证具体的测似场景
• 测试执行与管理,数据收集
1、在脚本编写的基础上执行以及验证测试场景
2、我们在测试过程中需要收集数据(性能计数器)
A、服务器系统资源:CPU和内存
B、DB资源:IOPS,连接数
C、服务资源:响应时间(最大,最小,平均,中位数(50%),90%,95%,99%,吞吐量,并发数)
3、数据收集的思路:把这些数据写在InfluxDB(时序数据库),最后展示在 Grafana平台上。
场景:针对一码通的系统,需要做并发的测试,目标数据是每秒并发15万
1、5万 2、10万 3、15万 4、20万 5、25万
• 测试分析
1、结合收集到的数据分析是否和最初制定的性能测试目标吻合,如果达到了目标,输出性能测试的报告 2、如果没有达到目标,那么开发继续调整,优化,测试继续测试
相关工具下载地址
安装jdk,配置Java环境
JVM监控工具
打开cmd ----->输入jvisualvm
性能测试的方法
验收负载测试:
在QA的环境模拟生产运行的业务压力和使用场景组合,测试系统的性能是否满足生产环境的性能诉求。 环境:
-
测试环境(QA)
-
预发布环境:介于测试环境和生产环境之间
-
生产环境(线上环境)
负载测试
在被测系统上持续不断的增加压力,直到性能指标(响应时间等)超过预定指标或者某种资源(CPU&内存)使用已经达到饱和状态。核心是找到系统的处理极限,为系统调优提供数据,从而达到了解系统性能的容量。
压力测试
该方法是指系统在一定饱和状态下,具体如CPU,内存等饱和使用的情况下,系统能够处理的会话能力,以及系统是否会出现错误,比如TimeOut(超时),OOM(内存泄露),OverStackExpection(堆栈异常/堆栈溢出)。
压力测试的特点: • 检查系统在处于压力情况下时应用的性能表现 • 等价于负载测试,使系统的资源处于一个瓶颈的状态(建议CPU和内存在75%以上) • 这种方式一般用于测试系统的稳定性(系统的稳定性是指被测系统在系统资源饱和的状态下,依然能够很好的处理系统的业务逻辑,比如618等大促期间,淘宝流量饱和,依然能够正确处理订单和进行支付等)
配置测试
被测环境软硬件环境参数的调整,达到最优的分配原则。
并发测试
模拟用户的并发访问,测试多用户并发访问同一个应用时是否存在死锁或者其他的问题,并发测试的特点是:
• 发现系统中可能隐藏的并发访问的问题 • 关注系统可能存在的并发问题,如内存泄露,线程锁,资源争用情况 • 使用的测试工具如profiler等
问题类别 | 问题描述 |
内存问题 | 内存泄露/太多临时对象/超过太多设计生命周期对象 |
数据库问题 | 数据库死锁/长事务 |
线程/进程问题 |
线程/进程同步失败 |
其他问题 | 争用资源导致死锁 TimeOut |
可靠性测试
给系统加载一定的业务压力,让应用持续运行一段时间,测试系统在这种条件下是否能稳定运行。
故障演练
容灾恢复测试
去中心化
比特币: 1、资源有限 2、每个货币都在全球的不同节点中有记录
被测对象往往是一个服务,服务一般都会提供接口,那么我们直接访问这个接口可以来测试这个服务。
sdk
JMeter下载地址:https://jmeter.apache.org/download_jmeter.cgi
配置jmeter的环境变量
将JMeter的bin目录添加的path的环境变量中
检查是否配置成功:cmd --->输入jmeter -v,成功页面如下图所示:
打开jmeter方法:cmd --->输入jmeter
添加线程组:
作业:
1、怎么区分负载测试与压力测试
答:给被测系统上不断的施加压力,让数据在超负荷环境下运行,找到系统所能承受的最大负荷量。比如早上上班高峰期,一辆公交车能够正常工作所承载的最多人数是多少,重点是how much。压力测试是在系统资源(CPU和内存)饱和,也就是可用资源极度有限的情况下,系统能否正常工作,是否会出现一些OOM、TimeOut、OverStackExpection(堆栈溢出等)异常情况,考察的重点是在被测系统的稳定性。
2、怎么理解系统稳定性测试
答:稳定性测试也可以称作可靠性测试,是指给被测系统内施加一定的压力,让其持续运行一段时间,看能否正常工作稳定运行。
4、做性能测试需要准备哪些工作,为什么?
答:性能测试是一个庞大的工程,需要在开始前做好相关准备工作。
①测试需求分析,确定测试目标。
②性能测试计划
1、具体测试场景执行的负责人,和执行的开始结束时间
2、前置工作内容:确定测试环境,准备数据(参考历史相关数据,人为设置生产环境的真实数据)、设计测试场景
3、具体使用到的测试技术
②编写测试脚本
执行验证测试场景,与相关人员分析可能会出现的问题
③收集数据
④测试分析,编写测试报告
根据收集到的数据捷星结果分析,判断与最初预想的性能测试目标是否一致,若一致就可以出给出性能测试报告。否则需要反馈结果给开发,优化后再次进行性能测试。
5、性能测试中测试环境和生产环境的配置必须一样嘛?为什么?
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架