软件测试——性能测试1

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: 软件测试——性能测试

一、性能测试简介

性能测试:通过性能测试工具(Jmeter,Loadrunner),通过特定方式对系统施加一定压力(正常场景、异常负载以及峰值条件来实施压力,得到各项性能指标来保证系统的性能需求)。

性能测试原理:基于协议,用工具模拟实际操作(发送多个请求),并且收集数据生成报告。

性能测试的目的:

  • 评估系统的能力;
  • 识别系统的弱点(瓶颈);
  • 检查系统的隐藏问题;
  • 保证系统的稳定性和可靠性;
  • 在保证用户体验感的同时节省资源;

性能测试一般在功能测试的中后期进行,性能测试是依赖于功能测试的。

性能测试一般要有独立的测试环境,并且测试环境要进行用户数据初始化。

前期的网络测试能在局域网中进行,网络影响小。

二、性能测试指标

  • 响应时间:指的是从客户端发送请求开始到收到服务的响应且看到响应内容为止的时间段,响应时间=网络传输时间+服务器处理时间+浏览器解析呈现时间;
  • 用户数:在线数:在软件上不一定操作,并发数:在软件上且在操作(特定时间或时段);
  • 资源利用率:常见资源有CPU、内存、磁盘、网络带宽;
  • 吞吐量:处理数据总量;
  • 吞吐率:单位时间内处理的数据量;
  • 点击量:点击的数量;
  • 点击率:单位时间内点击的次数;

软件的性能是否达标是依据用户的性能需求。

三、性能测试的流程

  1. 分析用户的性能需求,确定性能指标;
  2. 制定性能测试方案,设计性能测试的场景;
  3. 根据性能测试场景准备脚本,调试脚本,优化脚本,确保脚本能够保证性能测试的需求;
  4. 执行测试脚本;
  5. 收集性能测试指标数据,与需求进行比对,性能调优,回归测试;
  6. 生成测试报告。

四、Jmeter简介

Jmeter是基于Java语言开发的开源测试工具:轻量级测试工具(与LoadRunner比较);

常用场景

压力测试:常用于web系统,可以录制教本、参数化、断言、关联以及操作数据库

接口测试:http脚本(get,post),加cookie,加header、加权限认证以及上传文件等

支持多种协议(web协议、webService、通过JDBC连接数据库、FTP等)。


Jmeter的特性优点:


免费的开源软件;

简单且直观的图形用户界面;

Jmeter中负载和性能测试许多不同的服务器类型(HTTP、HTTPS,SOAP等)

独立于平台的工具;

拥有完整的Swing和轻量级组件支持;

拥有完整的多线程框架;

高度可拓展;

用于执行应用程序的自动化测试和功能测试。

Jmeter的组成部分:


负载发生器:用于产生负载(发送请求),多进程(线程)模拟用户行为;

用户运行器:脚本运行的引擎,附加在进程或线程之上的;

资源生成器:生成测试过程中服务器的资源数据(收集测试数据);

报表生成器:根据测试中获取的数据生成报表,提供可视化的数据显示方式;

Jmeter常见概念:


测试计划:描述一个性能测试包含本次测试的所有相关功能;

线程组:一般一个线程组可看作一个虚拟用户组,其中每个线程为一个虚拟用户;

取样器:测试对象以及测试内容,是基于线程的,Jmeter支持多种取样(Jmeter支持多种协议);

监听器:对测试结果进行处理和可视化展示的一系列组件,常见的有图形结果、查看结果树,聚合报告、表格结果等;

控制器:驱动处理一个测试,有逻辑控制器和取样控制器;

配置元件:用于提供对静态数据配置的支持;

定时器:用于在操作之间设置等待时间;

QPS:每秒请求数(防止恶意刷取,增加项目负载)

断言:用于检查测试中得到的响应数据是否符合预期;

前置处理器:用于在实际请求发出之前对即将发出的请求进行特殊处理;

后置处理器:用于对Sampler发出请求后得到的服务器响应进行处理,一般用于提取响应中的特定数据。

五、Jmeter常见测试框架

测试计划:只要启动Jmeter就会默认生成一个测试计划,这个计划包含了本次测试的相关功能。

线程(用户):线程组:主线程组,核心,需要进行性能测试的内容(不可省略);


                       setup 线程组:初始化的内容(可省略),若存在则最先运行;


                       teardown线程组:收尾的内容(可省略);


线程属性:


线程数(用户数)

Ramp-up: 虚拟用户启动时间,用户开始发请求的时间;

循环次数:具体的次数,或者永远(必须加调度器有持续时间,否则无法结束),当同时设置了次数并且添加调度器时间,以设置次数为准。

取样器:测试对象及测试内容,基于线程的,即要模拟的动作


             常用http请求:协议、服务器IP、端口号、方法、url地址、编码方式


监听器:用来查看测试结果,图形化显示,常用的有查看结果树(同时查看请求和响应信息,绿色表示测试地址通常,不代表测试case成功,红色代表异常)、聚合报告(汇总请求发送情况)、图形结果(图形化展示)、表格形式展示(可以查看启动时间)。


Jmeter支持多个请求同时发送,支持多协议、多请求同时并发。


在聚合报告中,时间是以ms为单位的;


在汇总报告中,标准偏差体现稳定性的,表示离散程度,越小约好。

六、Jmeter录制脚本

1、http代理服务器设置(在Jmeter中完成);

添加http代理服务器(脚本记录器),再添加线程组,将目标控制器选为如图所示,端口默认是8888:

2、浏览器的设置;

在internet选项的连接中将局域网设置为如下:

在Jmeter的脚本记录器中启动,之后在浏览器中进行相关操作,就会录制:


七、脚本增强

tps:每秒事务处理量(每秒处理的消息数),表达系统处理能力的性能指标;

集合点:一般用来测试瞬间的并发能力;

思考时间:一般是用来模拟用户的真实行为(用户在页面的停留时间),让每个用户的操作有一定差异,有了思考时间会减少服务器堆积的情景时间;

事务通过控制器来体现。

在Jmeter中通过定时器来实现集合点和思考时间。

集合点使用同步定时器,能够实现真正的并发(先到的线程在集合点等后到的,等到期了就一起走),适用场景:秒杀、限购、抢票等

注意:设置集合的模拟虚拟用户数不能大于线程数,否则会一直等待。


集合虚拟用户数小于线程组中的用户数,表示分批次集合,最后一批有可能不够集合的数目,必须要设置等待时间。


集合虚拟用户数等于线程组中的用户数,表示所有虚拟用户必须全部到达集合点,才一起开始下一个动作。如果模拟用户数量设置为0表示全部用户都参与集合。超时时间设置为0,当最后一批无法达到集合数量时将一直等待,等待到系统的最大值才释放。


对于思考时间常用的是固定计时器和高斯随机定时器;


固定计时器:固定停留(间隔),上下请求发出的时间间隔是固定的;


高斯随即定时器:随机停留(间隔),每个虚拟在请求前都是按照随机事件间隔停留。


注意:在设置定时器时,固定偏移量和随机偏移量不要同时设置,否则以固定偏移量为准。

八、Jmeter脚本参数化

参数化的作用:让数据变得不一样,模拟每个线程(虚拟用户)的数据不一样,就进行参数化。

参数化实现的步骤:

  1. 判断哪些参数需要实现参数化;
  2. 设置参数:新建变量(定义名称),准备参数的值;
  3. 用参数代替需要参数化的数据(替换形式:${xx});

用户定义的变量:自定义变量,适用于ip或者欢迎词等只有一个参数值的数据,但是这个值可以变化;


配置原件 -> 用户定义的变量。


前置处理器中的用户参数:在请求发出之前,对请求的参数进行处理;


迭代:需要执行验证的操作再执行一次。


线程数表示使用的用户数;


特点:指定了用户和参数的关系,适用于数量比较少的参数化操作,用户和参数有特定关系。


配置原件中的CSV数据文件设置:必须先准备好参数文件是.csv文件格式或者.bat文件格式。


使用范围:大批量用户参数,并且参数值有一定规律(利用excel表格来准备参数文件)。


当设置的用户参数数量少于虚拟用户数时,就会循环重复使用参数。


将excel表格转换为dat格式时,先保存为txt文本格式,再保存为dat格式,并且在bat文件中键和值之间用拥吻逗号分隔。


Tools中的函数助手:使用其中的CSVRead函数。


前提:准备好csv参数文件,注意不要加列表名(参数标题)。


设置csv文件的读取列号从0开始。

作用域和执行顺序:

作用范围:处于不同的级别,受控范围和可控制的范围是不一样的,特别是定时器。

当一个定时器只应用于一个请求中,就将定时器作为请求的子节点加入;

当一个定时器同时应用于多个请求时,就将请求跟定时器放在同一个级别。

在Jmeter中,即使集合点放在请求子节点中仍可以实现同步。

在同一个作用域下,执行的顺序如下:

配置原件 -> 前置处理器 -> 定时器 -> 取样器 -> 后置处理器 -> 断言 -> 监听器

软件测试——性能测试2:https://developer.aliyun.com/article/1521851

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
目录
相关文章
|
13天前
|
敏捷开发 Java 测试技术
探索软件测试中的自动化测试框架
在软件开发的生命周期中,软件测试扮演着至关重要的角色。随着技术的不断进步和软件项目的日益复杂化,传统的手动测试方法已经无法满足高效、准确的测试需求。自动化测试作为一种提高测试效率和质量的有效手段,越来越受到开发者和测试者的青睐。本文将深入探讨自动化测试框架的重要性、常见的自动化测试工具以及如何选择合适的自动化测试框架。
37 10
|
20天前
|
机器学习/深度学习 前端开发 测试技术
探索软件测试中的自动化测试框架选择与优化策略####
本文深入探讨了在当前软件开发生命周期中,自动化测试框架的选择对于提升测试效率、保障产品质量的重要性。通过分析市场上主流的自动化测试工具,如Selenium、Appium、Jest等,结合具体项目需求,提出了一套系统化的选型与优化策略。文章首先概述了自动化测试的基本原理及其在现代软件开发中的角色变迁,随后详细对比了各主流框架的功能特点、适用场景及优缺点,最后基于实际案例,阐述了如何根据项目特性量身定制自动化测试解决方案,并给出了持续集成/持续部署(CI/CD)环境下的最佳实践建议。 --- ####
|
2月前
|
机器学习/深度学习 人工智能 监控
提升软件质量的关键路径:高效测试策略与实践在软件开发的宇宙中,每一行代码都如同星辰般璀璨,而将这些星辰编织成星系的过程,则依赖于严谨而高效的测试策略。本文将引领读者探索软件测试的奥秘,揭示如何通过精心设计的测试方案,不仅提升软件的性能与稳定性,还能加速产品上市的步伐,最终实现质量与效率的双重飞跃。
在软件工程的浩瀚星海中,测试不仅是发现缺陷的放大镜,更是保障软件质量的坚固防线。本文旨在探讨一种高效且创新的软件测试策略框架,它融合了传统方法的精髓与现代技术的突破,旨在为软件开发团队提供一套系统化、可执行性强的测试指引。我们将从测试规划的起点出发,沿着测试设计、执行、反馈再到持续优化的轨迹,逐步展开论述。每一步都强调实用性与前瞻性相结合,确保测试活动能够紧跟软件开发的步伐,及时适应变化,有效应对各种挑战。
|
2月前
|
测试技术 UED
软件测试的艺术:探索性测试的力量
【10月更文挑战第6天】在软件开发的世界中,测试是确保产品质量的关键步骤。传统的测试方法往往遵循严格的脚本和预定义的路径进行,但探索性测试(ET)则提供了一种更为灵活、创造性的替代方案。通过模拟真实用户的行为和思考过程,ET能够揭示那些传统测试可能遗漏的问题。本文将深入探讨探索性测试的核心原则、实施策略以及它如何提高软件测试的效率和有效性。
|
16天前
|
测试技术 数据库连接 数据库
测试脚本的编写和维护对性能测试结果有何影响?
测试脚本的编写和维护对性能测试结果有着至关重要的影响,
26 1
|
24天前
|
测试技术 开发者 UED
探索软件测试的深度:从单元测试到自动化测试
【10月更文挑战第30天】在软件开发的世界中,测试是确保产品质量和用户满意度的关键步骤。本文将深入探讨软件测试的不同层次,从基本的单元测试到复杂的自动化测试,揭示它们如何共同构建一个坚实的质量保证体系。我们将通过实际代码示例,展示如何在开发过程中实施有效的测试策略,以确保软件的稳定性和可靠性。无论你是新手还是经验丰富的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
22天前
|
jenkins 测试技术 持续交付
软件测试中的自动化测试策略
在当今快速发展的软件行业中,自动化测试已成为确保软件质量和效率的关键工具。本文将探讨自动化测试的重要性、实施策略以及面临的挑战,旨在为软件开发团队提供实用的指导和建议。
|
1月前
|
测试技术
探索软件测试中的“思维侧翼”——如何以创新思维引领测试策略###
本文旨在探讨软件测试领域中,如何通过培养与运用创新思维,提升测试策略的有效性与效率。不同于传统的技术解析或理论阐述,本文将以“思维侧翼”为喻,启发读者从不同维度审视软件测试,寻找突破常规的思路与方法。我们相信,在快速迭代的软件开发周期中,灵活多变且富有创造力的测试思维,是发现潜在缺陷、保障产品质量的关键。 ###
|
1月前
|
测试技术 定位技术 UED
软件测试的艺术:探索性测试的深度与广度
【10月更文挑战第22天】在软件开发的广阔舞台上,测试扮演着不可或缺的角色。本文将带领读者深入理解探索性测试(Exploratory Testing)的精髓,揭示其在现代软件质量保证中的价值。我们将通过实际案例、生动比喻和具体步骤,展现如何像艺术家一样进行软件测试,确保产品质量的同时,提升测试的效率和乐趣。文章不仅适合初学者建立测试基础,也能帮助资深测试人员深化对探索性测试的理解和应用。
|
1月前
|
监控 安全 jenkins
探索软件测试的奥秘:自动化测试框架的搭建与实践
【10月更文挑战第24天】在软件开发的海洋里,测试是确保航行安全的灯塔。本文将带领读者揭开软件测试的神秘面纱,深入探讨如何从零开始搭建一个自动化测试框架,并配以代码示例。我们将一起航行在自动化测试的浪潮之上,体验从理论到实践的转变,最终达到提高测试效率和质量的彼岸。