按照功能点分类:

功能测试:业务流程是否正常显示
性能测试L关注各种性能指标,是否符合设计预期
负载测试、压力测试、性能测试、大数据测试、可靠性测试
安全测试:渗透测试,由网络安全工程师参数,比如模拟各种注入
其他:易用性、安装测试、恢复测试、兼容性测试、文档测试

按照测试方法分类

白盒测试:从软件内部去查看问题,检查代码逻辑,代码走查测试
灰盒测试:结合白盒测试与黑盒测试的有点进行综合使用
黑盒测试:从软件外部去查看问题,检查功能是否是实现,是否易用

按照程序运行状态分类:

静态测试
动态测试

按照测试阶段分类:

单元测试
继承测试
系统测试
验收测试
回归测试
alpha测试
beta测试
灰度测试
冒烟测试

性能测试

定义:

是对计算机系统或子系统执行其功能的能力的度量
例如:响应时间、吞吐能力、事务处理能力等

方法:

  • 通过模拟真实生产运行的业务压力量和使用场景组合测试系统的各项性能指标是否满足生产性能需求
  • 即在特定的他条件下验证系统的能力状况

    目的:

  • 验证软件系统是否达到用户提出的性能要求,同时发现软件系统中存在的性能瓶颈,提供系统性能验收测试报告,优化软件,最后达到优化系统的目的。

  • 包括以下几个方面:

    • 评估系统的能力
    • 是被体系中的弱点
    • 系统调优
    • 验证稳定性和可靠性

      价值:

  • 保证系统的性能,面临海量用户、海量数据、多任务、稳定性高、高并发、高可用性等需求,找出性能瓶颈,提供良好体验

    场景:

  • 用户量大、使用频繁、面临大数据、重要的业务功能

  • 快增长模式:用户量爆发增长,比如:登录、购票、抢单
  • 慢增长模式:用户量逐渐增加

    组成:

  • 被测系统由应用服务器、数据库服务器、缓存服务器组成

  • 客户端、应用服务器、数据库服务器、缓存服务器、网络

    影响:

  • 硬件:CPU、内存、硬盘

  • 操作系统:并发时缓存大小,缓存交换任务优先级
  • 网络:公共网络延迟、服务器本地网络速度、贷款、吞吐量
  • 中间件、web服务器
  • 数据库服务器:索引设计等因素
  • 客户端:用户数和类型、活动频率、思考时间、访问数、点击数
  • 编程语言、程序实现方式、算法

    内容:

  • 性能测试在软件的质量保证中起着重要的作用,他包括的测试内容丰富多样

  • 中国软件测评中心将性能测试丐萝为三个方面:
    • 应用在客户端性能的测试
    • 应用在网络上性能的测试
    • 应用在服务器端性能的测试
  • 通常情况下,三个方面有效、合理和结合,可以达到对系统性能全面的分析和瓶颈的预测

    客户端:

  • 应用在客户端性能测试的目的是考察客户端应用的性能,测试的入口是客户端

  • 他主要包括并发性能测试、疲劳强度测试、大数据量测试和速度测试等

    网络端:

  • 应用在网络上性能的测试终点是利用成熟先进的自动化技术进行网络应用性能监控,网络应用性能分析和网络预测

    • 网路应用性能分析
    • 网络应用性能监控
    • 网络预测

      服务端:

  • 应用在服务器上性能的测试,可以采用工具监控,也可以使用系统本身的监控命令

  • 例如可以使用top命令来监控资源使用情况
  • 实时测试的目的是实现服务器设备、服务器操作系统、数据库系统、应用在服务器上性能的全貌监控

    标准:

  • 支持用户多

  • 响应速度快
  • 稳定性好
  • 节省系统资源

    关注点:

  • 对性能的关注是多个层面的

    • 用户视角
      • 软件对用户操作的响应时间:按钮、指令、连接
      • 性能测试指标:响应时间(平均响应时间)
    • 系统管理员视角
      • 服务器的资源使用情况
      • 应用服务器和数据库的资源使用情况
      • 系统能否实现扩展
      • 系统性能可能的瓶颈在哪
      • 更换哪些设备能够提高性能
      • 最多支持多少用户的访问
      • 系统的容量:系统最大的业务处理量
      • 系统稳定性:系统能否支持长时间连续的业务访问
    • 开发视角
      • 系统架构:架构设计是否合理
      • 数据库设计:数据库设计是否存在问题
      • 代码是否存在性能方面的问题
      • 系统中是否有不合理的内存使用方式
      • 是否存在不合理的线程同步方式
      • 是否存在不合理的资源竞争

        技术栈:

  • 测试工具:jmeter

  • 测试基础:性能测试理论、自动化测试策略
  • 性能测试基础知识:cpu、内存、磁盘、网络
  • 性能调优:代码、架构、中间件、操作系统、数据库
  • 协议:HTTP/HTTPS/Webservice
  • 部署、版本管理、持续继承:jenkins、maven/ant、/git/svn

    类型:

  • 负载测试、压力测试、强度测试、容量测试、并发测试、稳定性测试、配置测试、失败测试等

    负载:

  • 模拟时机软件系统所承受的负载条件的系统负荷,通过不断加载或其他加载方式来观察不同负载下系统的响应时间和吞吐量、系统占用的资源等,检测系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题

  • 模拟业务操作对服务器造成的压力,比如模拟100个用户进行发帖、登录、购票等
  • 关注点:软件系统的性能基线,软件在一定周期内,最大支持多少并发用户数,软件请求出错率
  • 负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题

    压力:

  • 压力测试、强度测试,在强负载下的测试,查看应用系统在峰值使用情况下操作行为,从而有效地发现系统的某项功能隐患,系统是否具备良好的容错能力和可恢复能力

  • 关注点:饱和状态,让系统处在很大强度的压力之下,看硬件系统是否达到需求文档设计的性能目标,在一定时期内,系统的cpu利用率、内存使用率、磁盘I/O吞吐率、网络吞吐量等是否稳定
  • 分类:

    • 高负载下的长时间(大于24小时以上)的稳定性压力测试
    • 极限负载情况下导致系统崩溃的破坏性

      容量:

  • 核实测试用户同时使用软件程序的最大数量,确定系统最大承受力,譬如系统最大用户数,最大存储量,最多处理的数据流量等

    并发:

  • 通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或其他性能问题

  • 特点:主要目的是发现系统中可能隐藏的并发访问时的问题,如系统中的线程锁和资源征用方面的问题
  • 关注点:同时多个用户对一个模块或操作进行加压
  • 集合点:方便并发使用的控制器

    稳定性/可靠性/疲劳强度:

  • 在一定软硬件环境下,长时间运行一个负载,确定系统在满足性能指标的前提下是否运行稳定

  • 特点:主要目的是验证是否支持长期稳定的运行,需要在压力下持续一段时间运行,需要关注系统的运行状况
  • 关注点:稳定,不要给系统太大的压力,只要系统能够长期处于一个稳定状态
  • 稳定性测试:长时间运行软件,查看是否连续稳定运行。一般测试时间是12小时或24小时
  • 可靠性测试:在有代表性的环境按照客户端时机操作方法操作,验证软件是否符合客户需求
  • 疲劳强度测试:比稳定性测试时间更长,一般测试时间是48小时或更长

    配置测试:

  • 核实在操作条件保持不变的情况下,通过对被测系统的软硬件环境资源配置的调整,收集各种不同配置对系统的性能影响的程度,从而找到系统各项资源的最优分配原则

  • 特点:主要目的是了解各种不同音速对系统性能影响的程度,从而判断出最值得进行的调优操作,一般在对系统心梗状况有了初步了解后进行
  • 一般用于心梗调优的规划能力,为设备选择。设备配置提供参考
  • 关注点:微调—最优分配,通过对软硬件的不断调整,找出这个最佳状态,是系统达到最强的状态

    失败测试:

  • 对于有容灾备份和负载均衡的系统,通过此测试来验证,如果系统发生故障,用户是否可以继续使用系统

    测试种类区别:

  • 性能测试—-性能指标

  • 负载测试—-宣称能力
  • 压力测试—-饱和状态
  • 容量测试—-最大量、最多数
  • 并发测试—-同时
  • 稳定性测试/可靠性测试—-长时间
  • 配置测试—-调整配置

    负载和压力的区别:

  • 共同点:都是性能测试不同的设计,都是在测试过程中逐步加压(递增测试)

  • 负载测试:是在正常范围内测试,满足性能需求,确保正常运行即可
  • 压力测试:可以在极端范围内测试,能够测试系统的性能极致

    流程:

    image.png

    需求分析:

  • 系统响应时间要求

  • 每秒完成的业务量的要求
  • 系统资源使用情况要求
  • 用户并发量以及使用场景设计要求

    注意事项:

  • 服务器和客户端要在同一个局域网内,否则网络音速会成为性能测试的瓶颈

  • 在心梗测试中药增加必要的断言,否则无法确认执行是否成功
  • 不要加过多的断言,会影响性能指标
  • 加入等待时间,是测试和真是情况一致
  • 统计响应时间要考虑过滤
  • 统计出每个页面,每个动作的响应时间以及响应时间的戏份(域名解析、服务器时间。网络传输时间。客户端时间等)以便带来更好的测试结果
  • 运行性能测试时关闭日志功能,调试脚本时打开日志功能
  • 性能测试数据准备,尽量保证数据库里的数据和真是生产环境里的数据童虎或略多于真是环境数据,测试时数据会不断累加,要考虑软件整个的生命周期内可能的最大数据量

    误区:

  • 应用程序必须在功能测试通过后才能做性能测试—-×

    • 整体性能测试需要,但是小模块接口性能也应该尽早开展
  • 性能测试要向功能测试一样,覆盖到所有的功能—-×
    • 不是所有功能,根据二八原则有选择的指定性能测试方案
  • 系统吞吐量随着并发增加而增加—-×
    • 并不是限行增长,有峰值和平稳期
  • 一定要想方设法达到客户给出的性能指标要求—-×
    • 有些需要与客户沟通增加硬件配置等解决性能瓶颈问题
  • 压力测试、负载测试。容量测试等分开执行—-×
    • 一个整体系统性能测试常经理,应该包括各种类型的测试
  • 性能测试就是工具的使用—-×
    • 工具只是辅助作用,测试方案,场景分析,问题的定位是关键