目录

  • 性能测试
    • 1. 性能测试Day06
      • 1.1 昨日回顾
      • 1.2 今日目标
      • 1.3 性能测试脚本编写
        • 常用的Jmeter元件:
        • 编写脚本:
      • 1.4 性能测试环境准备
      • 1.5 执行测试脚本

性能测试

这篇文章总结了一下我学习的性能测试部分的第六天的部分知识, 文章包含昨日回顾,今日目标,性能测试脚本编写, 性能测试环境准备和执行测试脚本(只展示了登录部分的并发测试)。不足之处希望大佬指正!

1. 性能测试Day06

1.1 昨日回顾

(1)Jmeter图表(Jmeter第三方插件)

  • 安装插件管理器

    • 从Jmeter官网上下载Plugins-manager.jar的包
    • 将JAR包放到LIB/ext目录
    • 打开Jmeter,就可以使用插件管理器
  • 安装插件
    • 打开Jmeter,选项 —— Plugins Manager
    • 进入 available plugins,搜索并选中指定的插件
    • 右下角有一个安装按钮(Install and restart),点击会自动下载安装
  • 常用插件:
    • TPS:每秒事务数
    • Throughout Byte per second:每秒上传下载的子节点
    • PerForm插件:监控服务器上的所有资源指标
      • 下载ServerAgent的软件包
      • 在需求监控的服务器上安装——解压缩
      • 在需要监控的服务器上运行,执行startAgent.bat(windows)、startAgent.sh(linux)
      • 进入Jmeter,添加PerForm插件,配置需要监控的资源指标
      • 启动脚本运行,资源指标会自动监控

(2)Jmeter并发数的计算
通过运营数量来统计(日活量、请求量。。。。)

  • 第一种计算方法:TPS = 一段时间内总的请求量 / 总时间
  • 第二种计算方法(二八原则):
    • TPS = 一段时间总请求量 * 80% / 总时间 *20%(一段时间可以是一天、一小时、10分钟,时
      间维度越小并发量的值越准确)
    • 该结果可以用于稳定性测试的TPS并发量
  • 第三种计算方法:
    • TPS = 峰值时间段的总请求量 / 峰值时间 * 系数(系数可以是2、3、6、10,取决于项目组自
      己的要求)
    • 该结果可以用于压力测试的TPS并发量

3)轻商城的项目

  • 熟悉项目(功能架构、技术架构、数据库的关键表、项目部署)
  • 项目需求分析
    • 确定性能测试的需求指标(客户/产品给需求;通过运营数据分析)
    • 确定性能测试的测试点(业务功能——用的多/重要的/特殊时间节点/主流程发生变化、技术
      ——资源消耗多的)
    • 确定目的:
      • 单个接口的性能需求指标
      • 多个接口组合(按照用户的业务场景)的性能需求指标
      • 模拟用户的业务场景,进行长时间的稳定性测试
  • 编写性能测试计划
    • 测试目的—— 对应需求分析中的测试目的
    • 测试范围——对应需求分析中的测试点
    • 测试策略——对于性能的测试点,使用什么样的方法能达成对应的测试目的
    • 时间、人力、进度的安排
  • 编写性能测试用例
    • 根据测试目的和测试点来进行编写

      • 单个接口的性能需求指标(针对每个测试点分别写一个测试用例)
      • 多个接口组合(按照用户的业务场景)的性能需求指标(针对每个业务场景写一个测试
        用例)
      • 稳定性测试(稳定性的测试用例)

1.2 今日目标

  • 性能测试脚本编写
  • 准备性能测试环境和数据
  • 运行性能测试脚本,并监控数据指标

1.3 性能测试脚本编写

常用的Jmeter元件:

编写脚本:

基础元件:

1、HTTP信息头管理器 —— 对请求消息的消息头进行修改
2、使用HTTP请求默认值写入协议、域名、端口、编码格式,在HTTP请求取样器中只需要写入路径、
请求方法、参数即可。好处是:在测试时,如果换了测试环境,直接修改HTTP请求默认值即可,不需
要修改所有脚本
3、编写脚本时,每个用例一个独立的线程组
线程组名称建议修改为用例名称
HTTP请求取样器的名称修改为用户名称
每个HTTP请求需要添加断言
如果请求URL中的参数可能为中文,建议将参数放入到下面参数列表中,并将中文参数勾选“编码”
4、当脚本涉及到登录及后续相关操作时,需要使用提取器将登录后的token信息提取出来,在后续请求
中加上token信息,这样后续请求才是登录状态
5、编写jmeter脚本的过程,如果HTTP请求之前调试过,可以直接拷贝(ctrl+c —— ctrl+V)到新的线
程组使用
6、结算下订单的脚本编写:
对于结算的操作:涉及到两个接口 —— 勾选商品,结算按钮
在结算下订单脚本测试前,需要准备好测试数据——购物车中需要有现成的商品

7、编写脚本的过程中,常用的静态数据,可以先写到用户定义的变量中,在脚本中进行引用。好处
是:后续如果脚本修改数据,可以直接修改变量,不需要去每个脚本中进行修改
8、业务流程的脚本:只需要将前面单接口脚本调通,按照业务流程的接口顺序将前面的接口脚本拷贝
过来即可

1.4 性能测试环境准备

特点:

  • 性能测试的环境独立使用 —— 其他测试人员不可用使用该环境
  • 性能测试的环境要求与用户真实使用的环境完全一致
    • 硬件环境:包括硬件服务器的台数、硬件服务器的配置、网络环境
    • 软件环境:
      • 软件版本:所有的操作系统、数据库、被测程序、第三方软件等软件
      • 软件配置:所有的操作系统、数据库、被测程序、第三方软件等软件
    • 使用场景的一致性
      • 测试数据:数据量必须与用户环境一致
      • 业务场景:发送请求的负载量与用户环境一致

如何达成性能测试环境与生产环境一致:

  • 硬件环境 —— 找运维人员申请
  • 软件环境 —— 所有的软件版本和配置可以找开发人员要,然后自己安装
  • 使用场景一致性
    • 测试数据:需要测试自己构造(通过python脚本构造相同数量级的数据)
    • 业务场景:通过需求分析和运营数据获取主要的业务操作和对应的并发指标

测试数据的准备(插入10万条数据):
在性能测试时,相同的SQL语句在不同的数据库数据的基础,执行时间不同,因此需要构造与用户实际
环境相同数量级的数据

#导包
import pymysql
#建立连接
conn = pymysql.connect(host="192.168.80.132",user="root",password="xxxxxx",database="litemall",port=3306,charset='utf8')
#建立游标
cursor = conn.cursor()
#编写SQL语句
#goods_sql这条语句并不正确 (这里只需理解代码的流程就行)
goods_sql = "第一条sql"
goods_attr_sql = "第二条sql"
goods_product_sql = "第三条sql"
goods_spec_sql = "第四条sql"
#循环执行SQL语句并提交事务
goods_start = 200000
for i in range(100000):goods_id = goods_start + i;print("插入第{}条数据,ID为{}".format(i+1,goods_id))sql = goods_sql.format(goods_id,goods_id,goods_id)cursor.execute(sql)sql = goods_attr_sql.format(goods_id)cursor.execute(sql)sql = goods_product_sql.format(goods_id)cursor.execute(sql)sql = goods_spec_sql.format(goods_id)cursor.execute(sql)conn.commit()#关闭游标
cursor.close()
#关闭连接
conn.close()

select * from litemall_goods where id = ‘1181000’
在插入数据前的查询时间:0.003
在插入数据后的查询时间:0.009

1.5 执行测试脚本

执行测试脚本的测试机:
执行性能测试前,需要根据要模拟的业务负载量来选择适当的测试机

  • 单机执行

    • windows:图形化界面、操作简单;资源使用低,能模拟的并发数低
    • linux:命令行操作,操作难度高;资源使用率高,能模拟的并发数高
  • 分布式执行
    • 如果单台测试机(无论windows或linux)都无法满足负载量要求时,需要使用分布式的方
      法,使用多台测试机一起来模拟特定负载量的业务

性能测试脚本执行:
登录脚本:
1、在性能测试时需要模拟不同的用户进行登录操作,因此需要提前构造用户数据

#导包
import pymysql
#创建连接
conn = pymysql.connect(host="192.168.80.132",user="root",password="xxxxxx",database="litemall",port=3306,charset='utf8')
#创建游标
cursor = conn.cursor()
#添加用户的SQL语句
user_sql = "INSERT INTO `litemall`.`litemall_user` (`id`, `username`, `password`, `gender`, `birthday`, `last_login_time`, `last_login_ip`, `user_level`, `nickname`, `mobile`, `avatar`, `weixin_openid`, `session_key`, `status`, `add_time`, `update_time`, `deleted`) VALUES ('{}', '{}', '$2a$10$SrnVvS/D6N0XNd4MHNjQR.W3VUfJhOdBylPC3Ika0zTvmxyiJ52AS', '0', NULL, '2020-08-14 12:00:58', '192.168.91.1', '0', 'xiaoh', '{}', 'https://yanxuan.nosdn.127.net/80841d741d7fa3073e0ae27bf487339f.jpg?imageView&quality=90&thumbnail=64x64', '', '', '0', '2020-08-12 14:14:37', '2020-08-14 12:00:58', '0');"
#循环插入数据
user_start = 100000
for i in range(100000):user_id = user_start + iusername = "test" + str(user_id)mobile = "13012" + str(user_id)print("插入第{}条数据ID为{}".format(i+1,user_id))sql = user_sql.format(user_id,username,mobile)cursor.execute(sql)conn.commit()
#关闭游标
cursor.close()
#关闭连接
conn.close()

2、修改对应的Jmeter脚本
将登录时用户名密码进行参数化,确保每次执行登录请求时,使用不同的用户名进行登录
{“username”:“test${__Random(100000,200000,)}”,“password”:“xxxxxx”}

3、监控服务器的资源配置
- 将ServerAgent程序;压缩包上传到待监控的服务器
- 进入到linux服务器,对ServerAgent程序进行加压缩,并赋权限
- 运行代理监控程序: ./startAgent.sh
- 在Jmeter中添加监听器——PerForm图表,并配置

4、模拟5个用户并发执行,记录对应的性能指标
从当前指标来看,5个用户并发时TPS为18.3,响应时间为271ms;
由于响应时间在需求许可范围内,但TPS达到需要要求的TPS(20),因此需要进一步加大负载量测试
系统性能
资源指标在里面先忽略(因此当前虚拟机资源不足,未执行性能测试时内存使用率就已经达到80%)

5、模拟10个用户并发执行,记录对应的性能指标
当前系统的TPS为19.5(接近20),响应时间为506ms(满足需求<3s)
问题是:资源使用率中CPU达到96%,内存达到82%,说明当前系统资源不足,需要提升系统配置

进入首页脚本:
添加购物车—查看购物车—商品结算—下订单—查看订单脚本:
准备工作:
1、5个用户、10个用户。。。。,用相同/不同的账号密码来登录?
2、与前面登录脚本一样,使用随机用户名进行登录?例如:前缀test + random(100000,200000)
3、修改指定商品的库存量,库存量改大(保证在性能测试的过程中不能库存耗尽)
加入购物车脚本:…
结算并下订单脚本:
准备工作:为每个用户创建对应的收货地址
执行测试脚本:…
业务流程的测试:…
稳定性测试:…

【博学谷学习记录】超强总结,用心分享|软件测试第六阶段性能测试day06相关推荐

  1. [博学谷学习记录]超强总结,用心分享|第07节 常用的API-----笔记篇

    目录 1.API 1.1 API概述-帮助文档的使用 1.2 键盘录入字符串 2. String类 2.1 String概述 2.2 String类的构造方法 2.4 创建字符串对象的区别对比 2.5 ...

  2. {博学谷学习记录} 超强总结,用心分享|狂野架构师-前置互联网架构演变过程

    本章以系统架构,数据架构,两种维度来进行讲解 目录 1 系统架构 1,1 单体架构 1.2 中台战略 2 数据库架构 2,1 单体架构 2.2 主从读写 2.3 分库分表 3 总结 1 系统架构 1, ...

  3. [博学谷学习记录]超强总结,用心分享|架构 Nacos入门

    提示:学习笔记 欢迎指点 文章目录 前言 一.Nacos安装 二.Nacos服务注册与发现 1.服务提供者Provider 2.服务消费者Consumer 三.Nacos作为配置中心 前言 Nacos ...

  4. [博学谷学习记录]超强总结,用心分享|架构 敏捷 - 开发管理之道

    提示:学习笔记 欢迎指点 文章目录 1.敏捷开发思想之道 2.面向对象开发之道 3.敏捷学习之道 1.敏捷开发思想之道 一名敏捷开发者,敏捷思想的掌握自然首当其冲.在敏捷开发实施的过程中,我们虽然不是 ...

  5. [博学谷学习记录]超强总结,用心分享|第16节 集合续-----笔记篇

    目录 1.HashSet集合 1.1HashSet集合概述和特点[应用] 1.2HashSet集合的基本应用[应用] 1.3哈希值[理解] 1.4哈希表结构[理解] 1.5HashSet集合存储学生对 ...

  6. [博学谷学习记录] 超强总结,用心分享|陌陌综合案例

    注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统等,Spark Flin ...

  7. [博学谷学习记录]超强总结,用心分享|Hive的压缩格式

    压缩格式 工具 算法 文件扩展名 是否可切分 DEFAULT 无 DEFAULT .deflate 否 Gzip gzip DEFAULT .gz 否 bzip2 bzip2 bzip2 .bz2 是 ...

  8. [博学谷学习记录]超强总结,用心分享|软件测试之计算机基础(一)

    本周开始学习软件测试,而我也即将开始在平台记录我的学习之路.我会把我的个人心得及掌握的知识发布在此平台,俗话说最好的输入就是输出,希望在输出的同时能有更多的收获,也希望与大家多多交流. 为了更好的学习 ...

  9. [博学谷学习记录]超强总结,用心分享|人工智能机械学习基础知识线性回归总结分享

    1.线性回归的核心是参数学习,线性回归和回归方程(函数)有关 2.线性回归是目标值预期是输入变量的线性组合 3.欠拟合的产生原因是学习到数据的特征过少 4.多元线性回归中的"线性" ...

最新文章

  1. 为什么自动化对于IT工程师是必须的?
  2. 【 Vivado 】输入延迟约束(Constraining Input Delay)
  3. pandas语法乱、API多?你需要整理一下!|知乎讨论
  4. 手把手教你搭建用户画像,数据分析效率提升百倍
  5. QT qml---- loader使用方法
  6. Spring Boot,@ EnableWebMvc和常见用例
  7. Linux C++ 实现线程池
  8. python operator 多属性排序_Python爬取高颜值美女(爬虫+人脸检测+颜值检测)你能打几分?...
  9. iOS开发 字符串的转化 小技巧
  10. 用viewpager实现图片轮播
  11. 让驰骋工作流程引擎 ccbpm使用自定义表单来实现自己的业务逻辑.
  12. android 支付宝接口开发,android 实现支付宝wap接口编程
  13. Houdini学习笔记003
  14. WinFR 界面版 - 免费好用的数据恢复软件,误删文件轻松找回
  15. [BZOJ3993] [SDOI2015]星际战争(最大流+二分)
  16. 20分钟掌握前端编写 CLI 工具
  17. Zeepelin系列(一)Zeepelin安装和配置以及对Hive的基本使用
  18. type-c速度测试软件,速度篇—Type-C/USB3.0接口到底谁快_固态硬盘评测-中关村在线...
  19. Python3飞机大战全代码(亲测OJBK)
  20. 计算机节能认证技术规范产品目录,CQC节能产品认证目录.doc

热门文章

  1. 【学习提升】elasticsearch-head无法页面新建索引且无法展示数据
  2. 阿里某员工的苦恼:来阿里虽然涨了工资,但却不快乐,每天很压抑
  3. 软考—程序员(软件生存周期)
  4. Linux系统之部署Yearning SQL审核平台
  5. spring core之Ioc介绍
  6. 【C++基础语法】03 C++ 程序逻辑结构、分支 if 及关系表达式
  7. 智能手机出厂需要软件测试吗,智能手机出厂前做了哪些可靠性测试?
  8. 记一次 电脑重装系统 Windows 10 x64 系统“我们无法创建新的分区,也找不到现有的分区”
  9. [转] unity功能开发——实名认证
  10. 2022年医药新零售行业发展分析及前景预期