领导:给你一个项目,如何开展性能测试工作。我:***

news2024/10/2 10:29:50

01

怎么开展性能测试

01

测试的一般步骤

性能测试的工作是基于系统功能已经完备或者已经趋于完备之上的,在功能还不够完备的情况下没有多大的意义(后期功能完善上会对系统的性能有影响,过早进入性能测试会出现测试结果不准确、浪费测试资源);因此,性能测试首先是基于功能测试的,你必须了解其功能实现才能开展性能测试。

我们还是来逐步分解说明:一个被测系统来了,我们需要分三块来分析

  • 入口:需要怎么发送请求,施压方应该施加多大的压力,用什么方法施压;

  • 被测系统:系统怎么应对单个请求,系统业务流程是怎么样的,系统网元节点、数据流向等,整体性能需求有没有,需要考察哪些指标,怎么监控;

  • 出口:接收数据有哪些,怎么获取和比对;

OK,是不是感觉就像功能测试差不了多少?是的,就是先分析单个用户的功能流程以及系统的数据流向(包括后台的数据流向)结构图,然后再考虑大量的用户操作。

那么一般系统的性能测试步骤大体如下:

1) 确认测试目标

2) 分析被测系统业务需求

3) 分析被测系统的系统结构

4) 分析被测系统的性能测试点

5) 设计测试方案、检测方案和测试案例

6) 选择测试工具

7) 测试开发

8) 测试执行

9) 测试结果分析

10) 测试调优、测试验证、测试分析

11) 测试报告

02

测试准备

测试准备工作越充分后期的测试执行越顺利,一般测试准备工作如下:

  • 确认测试目标

  • 分析被测系统的业务

  • 分析被测系统的结构

  • 分析被测系统可能产生性能瓶颈的节点

  • 设计测试方案、检测方案和测试方案

我们分步来研究一下:

01

确认测试目标

拿到一个任何任务首先都要确认任务的目标是什么。如果不知道目标,你所做的任何努力得到的结果有可能都不是最终所需要的结果。

性能测试也一样,它首先是有一个目标的。无论是你是随机测试想看看系统的当前性能情况,还是奔着对系统进行优化而去的,还是检验一下系统的性能是否满足需求,等等,这些都是你做事情之前的一个目标。你后面所做的一切事情,从分析到方案和案例设计,到测试执行监控,再到最后的测试分析和报告,都是要围绕这个目标展开的。

图片

所以,首要的任务就是确认测试的目标要求,需要达到怎样的一个测试目的和目标。有一些,测试任务没有明确的目标或者要求,并不说明它没有目的和目标,这就需要我们进行沟通和分析了

沟通就是要和项目组达成一致的目的要求;分析,分析需求,分析系统,最后也是要明确项目或者系统测试任务的目的要求。

02

分析被测系统的业务

曾经在一次面试中,有一位面试官给了我这样一个题目:“有一个网站,只知道它的总访问量一天是300万,怎么测试它的性能?”,大家想一想要怎么设计方案?

------猜想面试官是想面试者回答,正态分布、二八原理等基本的测试原则应用。

我当时没有回答任何与正态分布、二八原理相关的东西;记得当时面试官对我的回答好像是“蔑视”的笑了笑;可能是觉着“连基本的正态分布、二八原理都不知道,还搞性能测试?”。其实,性能测试并不是想象的那样简单,并不是一个简单的原理的应用就行的,如果这么容易,那岂不是谁都能搞。

性能测试的基础是基于系统的业务功能基本趋于稳定,首要的任务就是性能在系统满足业务功能需求上展开,因此我们必须要分析系统的业务。不管是普通的网站也好还是比较专业的系统也好,它都是有业务功能需求的,所有的性能测试都要基于这些功能才能进行,脱离了业务功能的性能测试没有意义。性能测试所以首要的任务就是分析系统的业务功能,分析系统业务上的性能限制,也就是业务需求。

那么怎么分析系统的业务需求呢?

(1) 如果有用户需求规格说明,首要的任务就是阅读和理解分析用户需求规格说明;

(2) 如果没有用户需求规格说明,那么就需要分析系统功能,提炼出系统的业务需求。如果可能,项目组比较熟悉的人讲述一遍是最好的了。

(3) 最后无论哪一种,最好的方法就是按照自己的理解画出系统的业务流程或者系统的功能结构图,拿到项目组进行确认。一定要进行确认,和整个项目组达成一致的认同。

图片

有人会说,我们自由测试没有项目组可确认的时候怎么办?

还是一样,需要从分析入手。如果不分析,你就不会知道系统的功能数据流向,请求的数据构成,系统的网元结构,以及系统可能出现的瓶颈在哪一个节点,你又怎么进行优化呢?

当然面对一种全新的知识领域的时候,可能需要我们多积累经验,更多的进行分析;我们可能需要结合实践,多次实际运行系统或者执行测试,在测试中不断的进行优化和完善我们的分析过程、分析结果、测试方案、测试开发甚至是测试执行等等。

分析被测系统的业务,有时候不是一蹴而就,需要我们进行多次反复的分析、确认和再分析、再确认,直到把系统弄明白,甚至有可能在测试执行的最后阶段你还需要再次进行分析和确认,然后重新规划测试。

03

分析被测系统的结构

系统的结构和系统的业务一样重要,不知道系统的网元结构可能就没有办法进行监控,就没有办法知道瓶颈在哪个节点,就不能进行优化。

分析系统的结构,最好的方法就是项目组提供系统的部署和构成图;如果项目组不能提供或者没有项目组,那就需要用TCPDUMP等抓包工具,分析数据流向。

TCPDUMP的使用:

 

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

  • tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型

  • -i eth1 : 只抓经过接口eth1的包

  • -t : 不显示时间戳

  • -s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包

  • -c 100 : 只抓取100个数据包

  • dst port ! 22 : 不抓取目标端口是22的数据包

  • src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24

  • -w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析

从第一个节点分析流向到哪,确定第二层的节点;然后从第二层每个节点分析第三层节点,逐层分析,完善系统的数据流向的所有机构层次和节点;然后再弄明白每个节点部署的应用程序或者进程队列;对每一个节点的应用程序或者进程队列进行测试监控;最后才能得出哪些应用或者进程队列需要进行优化。

弄明白系统的节点构成之外,还需要弄明白各个节点之间的通讯协议和数据格式,后面的测试工具选择和测试数据准备以及测试脚本开发就需要你明白这些。这一切的基础就是要分析和弄明白系统的所有节点,也就是要分析清楚系统的结构。

04

分析系统可能的性能瓶颈

分析系统的业务需求和系统的结构组成,同时预判系统可能存在的性能瓶颈,这是分析中的一个目标;得到预判的性能瓶颈后我们后面需要在监控的时候多注意一下这些节点。

当然有一些常见的可能会是系统瓶颈的节点我们需要注意:

(1) 登录,一般系统登录要进行多种校验,可能数据交互比较频繁;

(2) 下单,抢单、抢红包这个时候会有一定量的并发需求;

(3) 大数据的查询、统计和报表分析,会对系统产生压力;

(4) 视频、动画等会对网络产生压力;

(5) 消息比较集中的系统功能节点,会对系统产生压力;

(6) 一些特殊的业务需求会对系统产生压力;

图片

常见的瓶颈:

(1) 数据库的瓶颈一般在磁盘IOPS过高造成进程阻塞

(2) 系统进程数过多一般会消耗系统的内存空间

(3) 消息队列和缓存服务,开启持久化后会需要考察磁盘IOPS,不开启持久化则需要考察内存占用

(4) 频繁的管道开辟和销毁会导致CPU占用较高

(5) 有部分程序结构上不能利用多个CPU

等等!!!

在分析业务和系统结构的过程中,我们就需要考虑这个业务点或者结构点会不会有大量的数据访问,会不会产生压力,我们的设计会不会产生性能瓶颈。

05

方案和案例设计

测试方案的以及最后测试方案文档的形成,实际就是上面所有分析工作的总结。

你写测试方案的过程就是明确测试目的目标、分析业务需求、系统结构以及评估测试方法、测试安排、测试风险等等的过程总结。而这些全部来源于你在测试执行之前的分析,有时候可能你在测试过程中还需要做出一些分析和调整。

测试方案包含了这些你分析和整理的各个方面。一个好的测试方案包含的内容:

测试目的目标、内容(可能包含业务性能、可靠性、稳定性等等),业务需求目标,系统业务构成,系统节点构成,测试方法流程,需要监控的指标要求和节点等等。

测试案例,实际上一般需要包含在测试方案中;测试案例,实际上就是普通的业务操作流程,用测试工具或者其他测试手段来模拟大的数据量业务操作,并对系统的各个节点进行监控,获取监控数据。预期的监控数据和实际监控数据的对比,满足要求就是预期要求,实际对比结果就是测试结果。

总结:给大家准备了从功能测试到测试开发全套测试视频课程+项目实战+面试宝典+简历模板

需要的小伙伴可以点击主页,验证消息填写:000即可获取

 一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战

四、App自动化项目实战

五、一线大厂简历

六、测试开发DevOps体系

七、常用自动化测试工具

八、JMeter性能测试

九, 银行业务测试

十,大数据测试和业务分析

 

 十一:项目实战

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1128776.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

react项目实现文件预览,比如PDF、txt、word、Excel、ppt等常见文件(腾讯云cos)

使用腾讯云文档预览&#xff0c;需要开通文档预览功能&#xff0c;该功能需要收费的。 使用限制 如果需要图片预览、视频或音频可以使用获取下载链接。 页面代码 <button onClick() > {handleClick(myself/文档.xlsx)}>预览</button><div style{{ height:…

百度AI代码辅助工具Baidu Comate初体验

国内的程序员们也可以使用国产的代码辅助工具了。百度Comate智能代码助手正式上线SaaS版本&#xff0c;即日起可申请试用。官网&#xff08;https://comate.baidu.com/&#xff09;。 点开使用手册&#xff0c;先瞜一眼&#xff0c;后面再细看&#xff0c;手册里面有详细的说明…

yum管理openssh服务

文章目录 yum工具使用1.yum的配置文件2.yum仓库的管理本地仓库网络仓库 3.使用yum管理软件listcleanrepolistinstallupdatedowngraderemoveinfoprovideshistorydeplistgrouplistgroupinstall opensshsshd服务Secure Shell 示例ssh主机密钥配置免密登录SSH 安全注意事项 yum工具…

【文件操作】Java -操作File对象

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 文件操作 Java - File对象 Java - File对象 Fi…

Matlab绘制散点的95%置信区间图

Matlab常绘制95%置信区间图&#xff0c;主要使用到patch函数。 如果直接使用散点进行拟合&#xff0c;在patch函数绘制95%置信区间时&#xff0c;会绘制的很乱&#xff0c;这个是由于patch函数所导致的&#xff0c;其实这个问题在 Matlab绘制95%置信区间图 中已经讲到过&#…

JS 严格模式和正常模式详解

JavaScript 严格模式&#xff08;Strict Mode&#xff09;和正常模式&#xff08;Non-Strict Mode&#xff09;是用于控制 JavaScript 代码执行的两种不同模式。严格模式引入了一些限制和变化&#xff0c;旨在帮助开发人员编写更可靠、安全和高效的代码。在本文中&#xff0c;我…

js实现将文本生成二维码(腾讯云cos)

示例 页面代码 import { getQCodeUrl } from /utils/cosInstance; import { PageContainer } from ant-design/pro-components; import { Access, useAccess } from umijs/max; import { Button, Image } from antd; import { useState } from react;const AccessPage: Reac…

SpringCloud复习:(2)@LoadBalanced注解的工作原理

LoadBalanced注解标记了一个RestTemplate或WebClient bean使用LoadBalancerClient来进行负载均衡。 LoadBalancerAutoConfiguration类给带注解的RestTemplate添加了拦截器&#xff1a;LoadBalancerInterceptor. 具体流程如下&#xff1a; 首先定义一个LoadBalancerInterceptor…

超强满血不收费的AI绘图教程来了(在线Stable Diffusion一键即用)

超强满血不收费的AI绘图教程来了&#xff08;在线Stable Diffusion一键即用&#xff09; 一、简介1.1 AI绘图1.2 Stable Diffusion1.2.1 原理简述1.2.2 应用流程 二、AI绘图工具2.1 吐司TusiArt2.2 哩布哩布LibLibAI2.3 原生部署 三、一键即用3.1 开箱尝鲜3.2 模型关联3.3 Cont…

小白必看,手把手教你重装系统

一&#xff0c;安装步骤 二&#xff0c;重装之前需要做的准备 1、重装之前请大家务必注意备份重要资料。电脑有价&#xff0c;数据无价——重要数据备份之后&#xff0c;电脑随便折腾都没问题。大不了就是重装不成功。系统软件问题多试几次总能解决的&#xff0c;但重要数据一…

《红蓝攻防对抗实战》七.常规反弹之利用NC在Linux系统执行反弹shell

目录 一.利用NC工具在linux执行反弹shell 1.Linux正向连接shell 2.利用Linux自带bash反弹Shell 前文推荐&#xff1a; 《红蓝攻防对抗实战》一. 隧道穿透技术详解《红蓝攻防对抗实战》二.内网探测协议出网之TCP/UDP协议探测出网《红蓝攻防对抗实战》三.内网探测协议出网之H…

最新壁纸自动采集系统网站PHP源码/360壁纸官方数据接口采集/ZHEYI采集源码

源码介绍&#xff1a; 最新壁纸自动采集系统网站PHP源码&#xff0c;它是ZHEYI自动采集源码&#xff0c;能够在360壁纸官方数据接口采集。很好用的壁纸网站源码分享&#xff0c;仅供学习&#xff0c;请勿商用。 ZHEYI自动采集壁纸PHP源码&#xff0c;能全自动采集高清壁纸网源…

设计模式—设计模式总览

设计模式—设计模式总览 在 1994 年&#xff0c;由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 《Design Patterns - Elements of Reusable Object-Oriented Software》&#xff08;中文译名&#xff1a;《设计模式 - 可复用的面向对…

Wish如何入驻?最全防封攻略

近日来&#xff0c;跨境电商平台Wish有了新改革&#xff0c;为提高产品质量把控效率&#xff0c;Wish最近将入驻机制又完全开放转变为“邀请制”&#xff0c;加强了品控措施&#xff0c;也意味着商家入驻门槛变高&#xff0c;流程与之前截然不同。但对于已有跨境电商经验/没有跨…

Mybatis 简介(一)

这里使用的是3.5.11版本 MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO&#xff08;P…

非连续分配管理方式-基本分页存储管理

非连续分配-可为用户进程分配分散的内存空间 一、存储过程 1.将内存空间分成大小相等的分区&#xff0c;每个分区为一个页框/页帧(内存块/物理块/物理页面)&#xff0c;每个页框有一个编号(页框号/内存块号/物理块号)&#xff0c;从0开始 2.将进程的逻辑地址空间也分为与页框…

在NodeJS中使用npm包实现JS代码混淆加密

使用npm包&#xff0c;在NodeJS中实现JS代码混淆加密 在前后端JS开发过程中&#xff0c;JS代码保护&#xff08;JS代码混淆加密&#xff09;是非常重要的一环。 JShaman是一个云端的代码保护Saas平台&#xff0c;可以对JS代码进行混淆、加密、压缩等操作&#xff0c;从而增强…

[极客大挑战 2019]EasySQL

【解题思路】 1.打开靶机链接 2.输入数据进行尝试 输入1,1&#xff1a; 可以在导航栏里面看到username和password的变量。 3.使用万能密码 username&#xff1a;1 or 11# username&#xff1a;任意数据 password&#xff1a;任意数据 …

传统制造业如何转型?什么是智能工厂?

本文将为大家讲解&#xff1a;传统制造业如何转型&#xff1f;什么是智能工厂&#xff1f; 一、传统工业存在哪些痛点 相较于新兴工业&#xff0c;传统工业在当前发展放缓&#xff0c;并受到了一波互联网数字化智能化发展的冲击。 1、低效率和高成本 传统工业通常采用传统的…

C算法:写一个用于找出数组的最大值和最小值的函数

需求&#xff1a; 写一个用于找出数组的最大值和最小值的函数。 示例&#xff1a;int array[9] {5, 9, 3, 1, 2, 8, 4, 7, 6}; 该数组最大值的下标为1&#xff0c;最小值的小标为3。 代码实现&#xff1a; #include <stdio.h>int getNum(int *array,int len,int (*…