• JMeter分布式压测及4种参数化方式,转发收藏


    JMeter分布式压测

    前提条件

    1、所有测试机上保证jdk版本一致,jmeter版本一致;

    2、所有测试机关闭防火墙。

    分布式环境搭建

    选择一台机器作为控制机,其余机器全部作为负载机。

    控制机设置

    1、编辑bin目录下jmeter.properties文件:

    • 设置server_port,默认为1099,可修改;需去掉server_port前的“#”符号
    • 设置remote_hosts=控制机IP:端口号,负载机IP:端口号,其它负载机IP:端口号

    设置完成后保存文件。

    备注:若控制机不执行测试,则remote_hosts中不需要填写控制机IP。

    2、在jmeter的bin目录下双击运行create-rmi-keystore.bat,根据提示输入(随意输入即可)

    最后按回车键,成功后bin目录下会出现rmi_keystore.jks文件。

    负载机设置

    1、复制在控制机生成的rmi_keystore.jks文件到每一台负载机jmeter的bin目录下

    2、编辑负载机bin目录下jmeter.properties文件

    • 设置server_port,默认为1099;(控制机中填写的负载机端口号需与此处设置对应)
    • 设置remote_hosts=控制机IP:端口号

    设置完成后保存文件。

    检查负载机是否成功添加

    在控制机运行jmeter.bat(若设置之前已打开,需关闭后重新运行)

    Run→Remote start选项中显示所有已添加机器的IP

    检查负载机是否与控制机连通

    运行控制机与负载机bin目录下jmeter-server.bat文件

    在控制机上选择负载机对应的IP,执行测试

    检查负载机上jmeter-server界面是否显示开始测试

    出现上方字样即为成功连通。

    执行测试

    所有测试机双击运行bin目录下jmeter-server.bat文件(控制机和所有负载机都需运行)

    在控制机上设置测试脚本,线程数与执行次数(或执行时间);之后在控制机上点击Remote Start All即可。

    备注:所有负载机无需打开jmeter.bat,所有测试机器的结果汇总显示在控制机上。

    实际测试时,使用非GUI模式进行测试,执行命令:

    jmeter -n -t scrpit.jmx -r -l result.jtl

    -n:使用非GUI模式

    -t:指定要运行的jmx文件

    -r:启动所有远程agent

    -l:生成的测试结果文件

    执行命令后会出现报错

    需将所有压测机jmeter.properties文件中server.rmi.ssl.disable值设置为true

    重新启动jmeter-server.bat,执行命令即可。

    JMeter4种参数化方式

    一、JMeter参数化简介

    1.JMeter参数化的概念

    当使用JMeter进行测试时,测试数据的准备是一项重要的工作。若要求每次迭代的数据不一样时,则需进行参数化,然后从参数化的文件中来读取测试数据。

    参数化:是自动化测试脚本的一种常用技巧,可将脚本中的某些输入使用参数来代替,如登录时利用GET/POST请求方式传递参数的场景,在脚本运行时指定参数的取值范围和规则。

    脚本在运行时,根据需要选取不同的参数值作为输入,该方式称为数据驱动测试(Data Driven Test),而参数的取值范围被称为数据池(Data Pool)

    2.JMeter参数化方式之使用场景对比

    参数化方式

    使用场景

    1

    User Parameters

    适用于参数取值范围很小的时候使用

    2

    CSV Data Set Config

    适用于参数取值范围较大的时候使用,该方法具有更大的灵活性

    3

    User Defined Variables

    一般用于Test Plan中不需要随请求迭代的参数设置

    4

    FunctionHelper中的函数

    可作为其他参数化方式的补充项,如:随机数生成的函数${__Random(,)}

    二、Jmeter参数化的4种主要方式

    1.User Parameters(用户参数)

    操作路径:线程组–>添加–>前置处理器–>用户参数

    1)添加用户参数功能模块

    2)设置参数项、参数值(变量和用户)

    这里添加四个用户,也就是4组参数

    3)配置http取样器界面的请求参数

    4)配置线程组

    设置线程数:4,代表执行4个用户数

    5)添加察看结果树,查看运行的结果

    操作路径:线程组–>添加–>监听器–>察看结果树

    下图可看到结果:

    4个运行成功,4个openid成功传入

    2.CSV Data Set Config(CSV数据文件设置)

    操作路径:线程组–>添加–>配置元件–>csv数据文件设置

    1)添加CSV数据文件设置模块

    2)准备需要做参数化的参数值

    ①简单的几条数据:这里是用.csv格式保存的;.txt格式也可以。

    ②最近在做一个大并发,所以需要准备的数据特别多,该如何做呢?

    可以先在数据库中查询出需要传的参数,导出文件格式默认为:.csv,可以保存到桌面或者其它位置,一会儿备用

    3)配置CSV Data模块

    Configure the CSV Data Source配置项&功能:

    配置项

    取值或者选择项

    Filename(文件名)

    参数化文件的读取位置,即保存参数化数据的文件目录。可为绝对路径,也可为相对路径。在分布式测试中,还是利用相对路径比较方便,因为有的机器可能安装路径不一样,同时可避免脚本迁移时需要修改路径

    File Encoding(文件编码)

    编码格式,选择UTF-8

    Variable Names(变量名称(英文逗号间隔))

    变量名称。这里定义的变量名称,后面就可以直接用来引用了。(多个变量名称以逗号隔开,例如username,passwd,参数化文件中同样有对应的两列数据。)

    Ignore first line(忽略首行)

    忽略第一行数据(类似LR中第一行数据是变量名称,如果你的配置文件中为了记忆第一行也是变量名,可以选择是忽略该行数据)

    Delimiter(分隔符)

    Variable Names中的参数分隔符,默认为英文逗号

    Allow quoted data?

    是否允许引用数据,默认false。选项为“true”时对全角字符的处理可能会出现乱码

    Recycle on EOF?

    是否循环读取参数文件内容;因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入

    Stop thread on EOF?

    当Recycle on EOF为False时(读取文件到结尾),停止进程,当Recycle on EOF为True时,此项无意义

    Sharing mode(线程共享模式)

    共享模式,即参数文件的作用域:All Threads(所有现场);Current Thread Group(当前线程组);Current Thread(当前线程)

    4)设置http取样器的请求参数

    5)设置线程组

    这里主要是设置模拟执行的用户个数

    线程数:100,代表待会儿会执行100个用户

    6)添加察看结果树,查看执行结果

    操作路径:线程组–>添加–>监听器–>察看结果树

    3.User Defined Variables(用户自定义变量)

    1)添加用户自定义变量模块

    操作路径:线程组–>添加–>配置元件–>用户自定义变量

    2)配置User Defined Variables用户自定义变量界面中的参数及其值

    操作路径:

    3)设置http采样器的请求参数,将参数传进去

    4)设置线程数

    这里主要是设置模拟执行的用户个数

    线程数:2,代表待会儿会执行2个用户

    5)添加察看结果树,查看执行结果

    操作路径:线程组–>添加–>监听器–>察看结果树

    4.Function Helper中的函数

    操作路径:tools–>函数助手对话框

    1)设置函数

    比如:需要随机获取一个时间

    2)复制生成的函数字符串

    3)粘贴到http请求参数中

    4)添加察看结果树,查看执行结果

    操作路径:线程组–>添加–>监听器–>察看结果树

    函数还有很多,需要的可以去了解一下

    如果上述大家还没有看明白,可以看下我下方录制的视频。

    Jenkins持续集成-测开必须掌握的分布式架构icon-default.png?t=M5H6https://ke.qq.com/course/315793?flowToken=1042615

  • 相关阅读:
    css 实现鼠标上移添加下划线
    我试图扯掉这条 SQL 的底裤。
    羽夏 MakeFile 简明教程
    如何使用 Bootstrap 创建一个简单的仪表板
    docker镜像创建、删除等相关操作
    1.4_17 Axure RP 9 for mac 高保真原型图 - 案例16 【动态面板-滚动条6】手动制作滚动条
    【C++】map的使用
    【好书推荐】JavaScript Es8 函数式编程实践入门
    【JAVA】-- setBorder
    通达信软件L2接口的委托队列有什么用?
  • 原文地址:https://blog.csdn.net/weixin_68548441/article/details/125483987