性能:软件质量属性中效率特性
概念:使用自动化工具,模拟不同场景,对软件各项性能指标进行测试评估
时间特性:系统处理用户请求的响应时间
资源特性:CPU、内存、磁盘IO
自动化工具
模拟不同场景
软件各项性能指标
侠义:单个用户进行业务场景的测试,并统计性能的各项指标
广义:在某一时刻进行性能测试建立一个已知的性能水平,当软硬件发生变化时在测试,观察变化对其性能的影响
通过逐步增加系统负载,测试系统性能的变化,在满足性能指标的前提下,系统所能承受的最大负载量的测试。
找到系统的最优负载和最大负载。最大负载一般项目组内部知晓,不会对外公布。普通用户看到的系统最大能力,一般是测试得的最优负载。
在服务器稳定运行的情况下,进行长时间的测试,保证服务器正常运行。
长时间:1天、一周

按照jmeter测试计划的树形结构来定义作用域(类似于python的缩进)
作用域的原则:
普通线程组:用于发送业务请求的线程组(受并行、串行配置的影响)
setup线程组:在所有的线程组之前执行(不受并行、串行配置的影响)
teardown:在所有线程组之后执行(不受并行、串行配置的影响)
线程数:需要模拟的虚拟用户数
ramp-up time:模拟的虚拟用户数全部启动所需的时间
线程数:代表并发用户数,体现服务器的负载量
循环次数:代表执行时间
1.配置方法
某支付系统,需要用1000个不同的用户登录,并使用不同的测试金额数据访问支付接口?
答:1. 定义CSV数据文件,存放1000个不同的用户账号密码
2.定义线程组,将线程组的线程数设置为1000
3.添加CSV数据文件设置,读取CSV数据文件中的账号密码
4添加HTTP请求(用户登录的请求),在请求中引用CSV数据文件设置中的用户账号、密码参数
5添加HTTP请求(支付请求),使用counter函数作为支付金额的参数
6添加查看结果数观察结果
JMeter断言:通过自动化的手段对请求的响应数据进行自动校验
响应断言(断言一定是在HTTP请求的子节点下)
性能:重点在于分析被测系统是否能满足特定的业务需求场景(时间、资源)
1.取样器-HTTP请求 发送HTTP请求
2.配置元件-HTTP请求默认值 设置HTTP请求的默认参数
3.配置元件-用户定义的变量 定义变量,可供后面引用
4.后置处理器-JSON提取器 提取JSON响应结果中的内容
5.断言-响应断言
6.断言-JSON断言 对响应结果进行断言
7.监听器-查看结果树 用于Jmeter脚本调试时查看运行日志
8.监听器-聚合报告 用于Jmeter性能测试时查看运行结果

1.Http信息头管理器–对请求消息的消息头进行修改
2.使用HTTP请求默认值写入协议、域名、端口、编码格式
3.编写脚本时,每个用例一个独立的线程组 ----改为名字、添加断言
4.当脚本涉及登录及后续相关操作时,需要使用提取器将登录后的token信息提取出来,在后续请求中加上token信息
#导包
import pymysql
#创建连接
conn = pymysql.connect(host="192.168.85.139",user="root",password="Lagou@1234",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 + i
username = "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()
{"username":"test${__Random(100000,149728)}","password":"123456"}
