• JMETER实战从创建测试数据到分布式压测测试全流程


    一.创建测试用户

    此节包含登录、token提取、模拟生成测试数据、测试数据驱动文件获取、批量创建用户
    
    • 1

    (1)首先有有两个接口的参数及数据,分别是登录接口及系统管理的新建用户接口
    在这里插入图片描述
    (2)这里创建两个线程组,setUp线程组用以登录接口以及获取登录接口的token/cookie,以及一个JSON提取器和一个Beanshell后置处理程序
    在这里插入图片描述
    (3)接口信息按照需求而定,这里因为是post提交方式,所以直接提交Body Data的json。
    ${username}换成你都账号名
    ${password}换成你的登录密码
    当然根据具体接口信息而定,一个能登陆上的用户(有创建测试用户权限的)即可
    在这里插入图片描述
    (4)Json提取器配置
    请求这个接口,可以看到access_token里有我们需要的token信息
    在这里插入图片描述
    $.data.access_token即是我们需要的(具体视json而定)
    第一行的token即是我们获取到这个token的全局变量名
    在这里插入图片描述
    (5)beanshell后置处理程序
    在这里插入图片描述
    创建全局变量access_token,即为上(4)的token
    props.put(“access_token”,vars.get(“token”))
    (6)创建http信息头管理及token、content-type配置
    在这里插入图片描述
    token即为(5)获取到的access_token
    Bearer ${__P(access_token,)}
    这个公式获取方法也可以公式获取器P获得
    在这里插入图片描述
    (7)通过python小程序批量获得测试用户驱动数据(txt与csv两种格式)

    #保存成txt格式
    with open(‘D:/用户0427.txt’, ‘w+’) as file1: # with…open用法
    for i in range(1, 1000): # for循环生成账号
    file1.write(f’zs{i:03}, 123456\n’) # 字符串的格式化

    #保存成csv格式
    with open(‘D:/权限用户.csv’, ‘w+’) as file1:
    for i in range(1, 10000):
    file1.write(f’test{i:04}, 123456,1555555{i:04},cs{i:04}@qq.com,\n’)

    后续使用csv作为例子,在d盘生成我们需要的一万个测试用户数据,方便后续添加
    在这里插入图片描述
    (8)批量新增测试用户,新建一个线程(包含生成测试数据接口)
    接口及(7)所需要的数据视项目而定
    在这里插入图片描述
    (9)这里将D:/权限用户.csv移动到JMETERHOME/bin下了,方便后续分布式压测测试,再创建一个(6)的信息头在线程组下
    第一行,因为放在bin目录下,所以可以直接填文件位置为,权限用户.csv
    在这里插入图片描述
    此处第三行的全局变量就是对应csv文件的四列,第四行开启的话是不忽略首行,这里csv文件首行就是新增用户数据所以不需要了,其它默认配置即可

    到这里批量新增测试用户就准备完毕了
    (10)批量新增测试用户
    在这里插入图片描述
    这里调整线程数一万个,这样就会执行一万次,点击运行
    在这里插入图片描述
    这样就新增成功了
    如果成功请忽视,有问题则分析是哪里错了
    看请求头、请求数据
    (1)token是否成功取到
    (2)测试数据是否正确传递
    在这里插入图片描述
    在这里插入图片描述
    二、分布式压测(主master机windows10,压测机linux为centos7.8)
    完成了上述一的批量新增测试用户就可以进行分布式压测了
    首先确保master与slave机的jdk版本大致一致,最好完全一致,这里个人使用的是jdk1.8版本
    jmeter版本的一致,也是最好完全一致,这里使用的都是jmeter5.5,觉得麻烦的可以直接拷贝windows的jmeter到centos机里面,这样也能确保版本一致
    进行此步骤前提master与slave机已有jdk环境且有jmeter
    master:10.37.3.112
    slave:10.37.0.101
    (1)对master机配置
    打开jmeter的bin目录下,打开jmeter-server,在最后添加
    RMI_HOST_DEF=-Djava.rmi.server.hostname=master机ip
    在这里插入图片描述
    打开jmeter.properties,放开以下的#并做配置
    remote_hosts=127.0.0.1:1099,10.37.3.112:1099,10.37.0.101:1099 (压测机ip:端口,用,隔开)
    server_port=1099 (如果master机也需要做压测就需要打开)
    server.rmi.ssl.disable=true (slave与master机通信要做的)
    mode=Standard (此处为了能看到slave的结果树)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    (2)slave机配置
    首先bin目录下放上测试文件【权限用户.csv】,这里一定要和windows同级目录下,否则运行结果树是没有结果的
    所以都放在jmeter的bin目录下就行,确保这里测试数据都在同级目录下,这里被坑了半天多时间
    打开jmeter-server,在最后添加
    RMI_HOST_DEF=-Djava.rmi.server.hostname=master机ip
    在这里插入图片描述
    打开jmeter.properties,放开以下的#并做配置
    server_port=1099
    server.rmi.ssl.disable=true
    mode=Standard
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (3)上述配置做完后,做一个测试看是否成功
    启动slave机的jmeter.server
    在这里插入图片描述

    然后启动master机的gui,并运行slave机进行压测
    在这里插入图片描述
    运行成功

    (4)准备多用户的一套组合业务数据测试
    比如说一万个用户登录后进行新建某样东西,这里因为考虑这个业务逻辑是多用户,所以需要在线程里额外加一个token提取器,保证是不同的用户,可以把上面的setUp线程组关闭了,json与beanshell与上述的setUp线程组是一样的,新建的http信息头管理器、csv也是一样的(因为新增用户的账号和密码在登录直接可以用)
    在这里插入图片描述
    新增一个测试场景
    在这里插入图片描述
    打开压测机进行分布式压测,逻辑就是一万个用户同时进行登录,然后都由自己新建一个测试场景
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    大致观察下只有开始的和最后成功创建了,中间的几千个用户都创建失败了,具体压测结果为多少,就需要自己慢慢测试大致值了

    发现已经出现很多的错误之处了,再去查看聚合报告,写一份的性能报告,就可以自己总结,数万用户的操作的性能测试压测啦

  • 相关阅读:
    电脑屏幕控制键盘鼠标网络模型
    容器编排工具很多套,出身名门的Swarm上不了
    信息系统项目管理师Part17-云计算
    车牌自动识别-matlab
    【笔记】samba shell 脚本 离线安装 - Ubuntu 20.04
    安恒信息明御安全网关 suffix参数任意文件上传漏洞
    贯穿嵌入式开发的编程语言?
    DDL语句
    分布式系统部署Redis
    DOCKER本地仓库
  • 原文地址:https://blog.csdn.net/qq_36967200/article/details/127753310