zoukankan      html  css  js  c++  java
  • JMeter:基本及参数化、关联

    一、JMeter和LoadRunner对比

    1、lr稳定,使用c写,jmeter跨平台,免费,开源,小巧,java写的;

    2、jmeter没有进程方式,只有线程;

    3、jmeter没有IP欺骗;

    4、lr有不同带宽下的测试,jmeter没有。

    二、JMeter的配置

    1、path环境变量的配置:

    程序的执行需要使用外部的指令javac,但是javac仅仅只能在jdk安装目录下的bin目录下执行,因此程序只能写入bin目录。程序开发过程中,不能将源代码写入JDK的安装目录,因此需要将源程序保存到任意位置的指定目录(英文目录),所以需要使javac指令在任意目录下可以运行。

    path环境变量的参照形配置方式
    创建新的变量名称:JAVA_HOME
    为JAVA_HOME添加变量值:JDK安装目录
    将path环境变量中JDK目录修改
    %JAVA_HOME%in;

    在切换jdk时,只需要修改JAVA_HOME

    2、classpath环境变量的配置:

    classpath环境变量配置方式
    创建新的变量名称:classpath
    值设定为指定的还有class文件的目录,多个目录间使用分号(;)分割
    作用:使classpath目录中的.class文件可以在任意目录运行
    技巧:通常将配置的目录最前面添加.配置,即当前目录,使.class文件搜索时首先搜索当前目录,然后根据目录配置的顺序依次查找,找到后即运行,因此classpath目录中的配置存在先后顺序

    在jmeter配置过程中,jdk的配置中classpath的配置:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar;

    3、配置jmeter环境变量:

    JMETER_HOME:D:apache-jmeter-3.2   → 根据jmeter实际的解压路径填写

    calsspath:%JMETER_HOME%libext ApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar;%JMETER_HOME%liblog4j-1.2-api-2.8.1.jar;

    jmeter最小组成单元是测试计划

    任何性能测试工具的实质是:一个请求,外边套上多线程,使用多线程发请求

    jmeter录制脚本(如何录制?)

    拓展:常见的服务器软件(应用程序)分配端口如下:

    FTP:21
    SSH:22
    MYSQL:3306
    DNS:53
    HTTP:80
    POP3:109
    Https:443

    三、JMeter基本说明

    使用JMeter录制豆瓣api接口:

    1、添加http请求:

    2、参数:

    3、JMeter变量/参数作用域:

    新增"线程组2":

    由此可知全局变量Identify一样作用于线程组2

    如果将查看结果树,放置和线程组同级,那么在请求完毕后,查看结果树中,会出现两个请求,如上图。

    发送请求后:

    四、参数化

    1、取值方式

    1)随机取值:

    2)固定取值:

    在D盘下,建立文本文件lhy.txt,并初始化文本文件内容:

    文件值以参数的形式传递:

    配置Jmeter如下图:

    相关字段说明:

    filename:文件的绝对路径和文件名
    file encoding:文件的编码方式,一般情况下,留空就好
    varable names:对外进行值传递的key(key的名称不能重复,即使有多个CSV DATA SET Config),jmeter的文本文件中,没有key列,数据全部标识值
    delimeter:分隔符
    如果不想定义多个CSV DATA SET Config的话,就在一个CSV DATA SET Config文件中,配置多列,用约定的分隔符进行列的分割;如果想一个CSV DATA SET Config对应的文件中,只有一列,当需要传递多个参数时,就定义多个CSV DATA SET Config,并建立对应的文本文件保存相关的值。

    http请求中,配置参数wd取配置的参数文件中的key2即lhy.txt文件的第二列的值:

    发送请求,测试参数化的值传递:

    对应lhy.txt文本文件第二列的值,已经对服务器发送了请求。

    是否去除引号:

    修改lhy.txt文件,如下图:

    修改http请求中参数wd的取值:

    发送请求:

    反之,可以测试"Allow quoted data?:"值为true的情况,在请求中双引号给去除了。

    值不够是否循环:

    修改lhy.txt文件,如下图:

    修改线程组循环次数:

    执行请求:

    查看结果可知,向服务器发送了3次请求,并且3次请求中wd的取值分别对应lhy.txt文本文件第一列的值。

    在线程组中设置循环次数为4,发送请求:

    sharing mode  → All threads:

    首先来看下线程组(相当于lr中的场景设置)的基本设置:

    如果使用使用调度器的话,图中的循环次数就失效了,调度器下的持续时间(秒),相当于lr中controller里的运行时间

    如果启动延时,那么图中线程属性里的Ramp -Up Period就失效了

    如果设置了启动时间和结束时间,那么持续时间就失效了

    线程组中的循环相当于lr中的迭代,线程数相当于lr中的vu即并发用户数

    测试CSV Data Set Config中的Sharing mode,如下图:

    ①首先测试All threads:

    思想:lr中的取值策略分为:顺序、随机、唯一,更新lhy.txt文件,增加key1列的值到10记录

    A、在线程组中,设置线程数为1,循环次数为4,发送请求,分析请求中的wd参数的值分别为lhy1,lhy2,lhy3,lhy4,由此可以排除该项取值策略为随机的可能;

    B、那么如何验证该选项的取值策略到底是顺序还是唯一呢?

    加并发。在线程组中,设置线程数(并发)为2,循环次数为3:

    如果是顺序:线程1 → lhy1,lhy2,lhy3  线程2 → lhy1,lhy2,lhy3

    如果是唯一:线程1 → lhy1,lhy2,lhy3  线程2 → lhy4,lhy5,lhy6

    发送请求,查看结果:

    线程1 → lhy1,lhy2,lhy3  线程2 → lhy4,lhy5,lhy6

    可以确定,All threads的取值策略是唯一的。

    C、对比lr中,值的变更方式有迭代、每次出现、OCNE,那么如何验证All threads值的变更策略呢?

    思考:All threads值的变更策略如果是ONCE的话,如上B的设置,2个线程,3次循环,执行的结果应该是:

    线程1 → lhy1,lhy1,lhy1  线程2 → lhy2,lhy2,lhy2

    那么,在线程组的step1下,再新增一个请求,以确定值的更新方式:

    上图中,step1相对于lr脚本中的循环,step中的循环和线程组中的循环(迭代)构成嵌套循环,添加方式:

    设置线程数(用户数)为1,循环次(迭代)为1:

    如果是唯一+每次迭代:线程1 → lhy1  线程2 → lhy1

    如果是唯一+每次出现:线程1 → lhy1  线程2 → lhy2

    查看请求发送的参数,得到如下的执行结果:

    线程1 → lhy1  线程2 → lhy1

    由此可知All threads对应的是唯一+每次迭代。线程组和线程组之间严格的遵循唯一。

    练习:设置3线程,4次迭代,2次循环,Recycle on EOF(false),Stop thread on EOF(false),预计输出:

    T1: 1 1     4 4   7 7     10 10

    T2: 2 2     5 5   8 8     EOF EOF

    T3: 3 3     6 6   9 9     EOF EOF

    sharing mode  → Current  threads:

    同上:

    A、设置 1线程  3次迭代 得到结果如下:

    T:lhy1,lhy2,lhy3,确定取值方式唯一或者顺序

    B、设置 2线程  3次迭代 得到结果如下:

    线程      第一次迭代    第二次迭代     第三次迭代

    T1:         lhy1,          lhy2,           lhy3

    T2:         lhy1,          lhy2,           lhy3

    由此可以确定取值方式为顺序

    C、增加一个请求数,确定值更新策略,设置 1线程  1次迭代,得到结果如下:

    线程    第一次请求   第二次请求

    T1:       lhy1            lhy1

    由此可以确定Current threads 方式为:顺序+每次迭代。不同线程组间也是一样,遵循顺序+迭代这个标准。

    sharing mode  → All threads:

    分别设置两个线程组中的线程数为2,循环次数为3:

    线程组1的取值:

    T1:1 3 5

    T2:2 4 6

    线程组2的取值:

    T1:1 3 5

    T2:2 4 6

    由此可得出结论:

    同线程组下是唯一+每次遇见的取值,不同线程组之间取值是顺序+迭代的取值方式。

    五、关联

    JMeter的关联是用正则表达式完成的

     

    Apply to:在哪里取关联的值
    引用名称:关联值的变量名
    模版:默认$1$
    匹配数字:相当于lr关联函数web_reg_parameter_ex中的ordinal

    关联的步骤:

    1、设置要传递的值:在request1的请求中,设置参数wd的值为besttest;

    2、在查询结果树的返回值里边搜索需要关联值,确定要取值的位置;

    3、通过正则表达式界面,确定需要关联值的左右边界:

    4、在request2的请求参数中,将wd的值替换为:${tital};

    5、发送请求,查询值是否关联成功。

    六、断言

    相当于lr中检查点的概念

    请求没有报错,说明断言成功。

    --------------------------------------------

    所有困难终会过去,努力才不枉来这世上走一遭... ...

    如欢如殇 授以青春鲜活肢体奔忙 如思如忘 驱以老朽深沉灵魂冥想 始自情热激荡 从未敢终于世事炎凉 无能执手相望 无法去尝试结发同床 无力至心死身僵 一息坚强 ------ 我一直没有放弃,如果你也能看到 修身 修禅
  • 相关阅读:
    15、事例十五:纹理映射
    14、事例十四:材质:十二个材质球
    [luogu]P1084 疫情控制
    [luogu]P2502 [HAOI2006]旅行
    [luogu]P2053 [SCOI2007]修车
    线性相关/线性基
    [luogu]P3629 [APIO2010]巡逻
    [luogu]P3623 [APIO2008]免费道路
    权值线段树
    树链剖分
  • 原文地址:https://www.cnblogs.com/lz2lhy/p/6816480.html
Copyright © 2011-2022 走看看