zoukankan      html  css  js  c++  java
  • Jmeter性能测试配置

    Jmeter检查点/断言

    在上一章节中,我们通过调试脚本,通过人工验证脚本可以完成业务功能,
    但在性能测试中,我们希望能通过自动验证脚本是否完成业务功能,在Jmeter
    中我们可以通过检查点,也就是断言来实现自动验证脚本的正确性。

    断言组件:
    Jmeter通过断言组件完成断言、自动验证的功能。
    断言组件通过获取服务器响应数据,然后根据断言规则去匹配响应数据;
    正常匹配脚本不会出现任何问题或者提示,如果匹配不到,就会出现异常情况,
    此时Jmeter就会判断这个事务失败,那么我们在察看结果树中看到的请求名称
    是红色字体。

    通过右击单个请求-添加--断言,可 以看到Jmeter的断言元件非常多,一
    般常使用的是响应断言(Response Assertion)。

    响应断言既是对服务器的响应数据进行规则匹配。

    响应断言界面如下:

    响应断言界面介绍:
    名称、注释、Apply之前在讲正则表达式提取器的时候介绍过,不做重复讲解。
    要测试的响应字段:针对响应数据的不同部分进行匹配,包含如下7个部分。
    响应文本:服务器返回的响应文本内容,HTTP协议排除Header部分
    Document(text):对文档内容进行匹配。
    URL样本:匹配URL链接。
    响应代码:匹配响应代码,如”200”。
    响应信息:匹配响应信息,如"0K"。
    Response Headers:匹配响应中的头信息。
    Ignore Status:一个请求有多个响应断言,当第一个断言设置该选项,那么如果第一个断言失败后,第二个断言成功,事务还是成功状态。
    模式规则匹配:包含如下5个部分。
    包括:响应内容包括需要匹配的内容,支持正则表达式。
    匹配:响应内容要完全匹配需要匹配的内容,大小写不区分,支持正则表达式。
    Equals:响应内容要完全与需要匹配的内容相同,区分大小写,不支持正则表达式
    Substring:响应内容包含需要匹配的内容,区分大小写,不支持正则表达式。
    否:选择Equals、Substring时匹配的是字符串,大小写敏感,选择此项类似降级。
    要测试的模式:填入需要匹配的字符串或者正则表达式。

    Jmeter事务

    Jmeter能够做到把每个请求统计成一个事务,但事务一般是用户宏观上的概
    念,所以系统把多个请求统计成一个事务, 在Jmeter中可以通过逻辑控制器下的事务控制器来完成此要求。

    逻辑控制器概念:
    逻辑控制器可以控制采样器(samplers)的执行顺序。由此可知,控制器需要
    和采样器一起使用,否则控制器就没有什么意义了。放在控制器下面的所有的采样器都会当做一个整体,执行时也会一起被执行。

    逻辑控制器分类:
    a)控制测试计划执行过程中节点的逻辑执行顺序,如:循环控制器(Loop
    Controller)、如果控制器(If Controller)等;
    b)对测试计划中的脚本进行分组、方便]Meter统计执行结果以及进行脚本的
    运行时控制等,如:吞吐量控制器(Throughput Controller)、事务控制器
    (Transaction Controller)等。

    我们需要做Jmeter的事务操作,所以需要用到事务控制器。

    事务控制器界面如下:

    Generate parent sample:如果事务控制器下有多个采样器(请求),勾选后,在察看结果树中不仅可以看到事务控制器,还可以看到每个采样器;并且事务控制器定义的事务是否成功取决于子事务是否都成功,任何一个失败代表整个事务失败。

    Include duration of timer and per-post processors in generated sample:是否包括定时器、预处理和后期处理延迟的时间,选中这一项会统计定时器(timer)的时间,否则只统计采样器(sample)的时间。

    Jmeter集合点

    在做性能测试过程中,我们会根据场景做狭义的并发,这个时候就需要用到
    集合点,集合点能够尽量让虚拟用户同一时刻发送请求,在Jmeter中集合点是通过定时器来完成的。

    定时器概念:
    Jmeter定时器用来控制取样器的执行时机,有固定定时器,随机定时器等。
    要实现集合点,一般我们需要用到同步定时器来进行控制。

    同步定时器(Synchronizing timer)概念:
    同步定时器用来保证取样器在同一-时刻向服务器发起负载,考虑到线程运行
    的时间快慢与场景的需要,也提供了同步线程数量的设置。如下图界面:

    同步定时器界面字段说明:

    名称、注释与之前元件一样可以随意设置。

    Number of Simulated Users to Group by:
    每次释放的线程数量。如果设置为0,等同于设置为线程组中的线程数量。
    Synchronizing timer仅作用于同-个JVM中的线程,所以,如果使用并发测试,确保"Number of Simultaneous Users to Group by"中设置的值不大于它所在线程组包含的用户数。

    Timeout in milliseconds:
    如果设置为0,Timer将会等待线程数达到了" Number of Simultaneous Users to Group"中设置的值才释放。如果大于0,那么如果超过Timeout in milliseconds中设置的最大等待时间[毫秒为单位)后还没达到"Number of Simultaneous Users to Group"中设置的值,Timer将不再等待,释放已到达的线程。
    如果设置Timeout in milliseconds为0,且线程数量无法达到"Number of
    Simultaneous Users to Group by"中设置的值,那么Test将无限等待, 除非手动终止。Timeout in milliseconds中设置的单位是毫秒。

    同步定时器使用说明:
    Synchronizing Timer是在每个sampler (采样器)之前执行的,而不是
    之后,不管这个定时器的位置放在sampler之后,还是之前,执行请求A和请
    求B前都会执行同步定时器如下左图所示:

    当执行一个sampler之前时,和sampler处于相同作用域的定时器都会被执行;如果希望定时器仅应用于其中一个sampler,则把该定时器作为子节点加入,如上右图定时器仅仅对请求B起作用,即仅在请求B执行前执行定时器,和请求A无关

    Jmeter参数化

    在做性能测试过程中,一般我们需要模拟多个用户进行操作,为了满足实际
    场景,模拟真实的用户行为,我们需要做到模拟的用户帐号或其它信息都是不同的,这时我们就需要用到参数化。在Jmeter中, 配置元件可以解决此问题。

    配置元件概念:
    JMeter配置元件可以用来进行参数化、初始化默认值和变量、存储服务器的
    响应信息以及配置链接数据库等。JMeter参数化一般使用配置元件中的CSV Data
    Set Config或者JDBC Connection Configuration来进行参数化

    CSV Data Set Config元件:
    该元件可以用来读取csv或dat文件的数据(一行一行读取),然后通过设置
    把读取到的数据关联到Jmeter中的变量保存。csv文件可以使用execl表格工具去进行编辑。

    JDBC Connection Configuration元件:
    该元件可以用来进行数据库的连接,然后通过JDBC Request元件发送数据库
    请求数据库中的表中的数据,再通过正则表达式提取器关联到Jmeter中的变量保存。

    CSV Data Set Config界面如下:

    界面字段说明:
    名称、注释与之前元件一样可以随意设置。
    Filename:指保存信息的文件目录,可以相对或者绝对路径,相对路径从Jmeter
    的启动目录(***/bin)路径。
    File Encoding:文件编码,默认为ANSI, 建议设置为utf-8,防止遇见乱码情况。

    Variable Names:参数名称,每个名称中间用分隔符分割,分隔符使用下面的“Delimitet”中定义的,默认用逗号隔开,与参数文件的参数对应。如果设置的参数
    名称多于参数文件中的参数,多余的参数取不到值;反之参数文件中的参数将没有
    参数对应。
    Delimitet:定义分隔符,用于分隔文件中的参数,及上述Variable Names中定义的
    参数名称。
    Allow Quoated data?:是否允许引用数据,设置为True,设置文件中的参数值都必
    须用引号引起来,False则不需要
    Recycle on EOF ?:遇到文件结束符时,是否从头开始循环读入,设置为True,则从
    头开始继续循环
    Stop Thread on EOF ?2:当Recycle on EOF设置为False并且Stop Thread on EOF为True,则读完csv文件中的记录后,停止运行
    Sharing Mode:参数文件共享模式,有三个设置,说明如下:
    All threads:参数文件对所有线程共享,包含同一测试计划中的不同线程组。
    Current thread group:只对当前线程组中的线程共享。
    Current thread:仅当前线程获取。

    在实际性能测试过程中,比如测试发帖的场景,由于每次发送相同的内容会被论坛系统屏蔽,这时我们根据之前的方式做成参数化,如果我们希望每次发帖的内容是随机的,这时可以借助]meter随机数函数。

    Jmeter随机数函数使用如下:
    1、点击菜单栏-选项--函数助手对话框--“选择一个 功能”下拉框选择_ Random String,生成一个随机字符串;
    2、设置Rondom String length,即设置生成随机字符串的长度;
    3、设置Chars to use for random string generation,指定用哪些字符作为种子进行随机生成,支持中文、数字、字母等;
    4、Name of variable in which to store the result (optional):函数名称(只是用来存储变量的名称,不可以${名称}使用), 可选项,如果填写,运行脚本后可在Debug Sampler中看到这个变量的值;
    5、点击生成按钮,自动生成一个字符串, 把该字符串替换到需要用到随机数参
    数的地方即可。

    在性能测试过程中,经常会遇见脚本开发时与测试执行时的服务器地址不一样,如果我们把服务器地址写死,修改起来就很麻烦,为了解决环境切换修改脚本的问题,我们常把访问地址进行参数化,当执行性能测试的环境变化后,我们只需要把参数对应的值改动一下就可以了。
    右击线程组--配置文件--用户定义的变量.打开界面如下:

    配置好URL和PORT变量后,在其它元件中使用${URL}引用变量即可。

    如果是手动开发Jmeter脚本,在GUI界面添加多个请求的时候,由于都是测试同一服务器,所以每个请求编写的过程中一些公共的部分比如服务器IP、端口等每次都需要重新写一遍,这个时候可以使用Jmeter提供的HTTP请求默认值,把重复的内容分离出来,只需要定义一次。
    HTTP请求默认值使用:
    添加方法:线程组-->右键添加-->配置元件--> HTTP请求默认值。
    和采样器的HTTP请求界面大致相同,配置好之后,之后写HTTP请求不需要填写该部分,采用该处的默认值。如下图所示:

  • 相关阅读:
    tty & pty & pts
    PageRank
    How to run a terminal inside of vim?
    vimdiff
    svn's tree conflict
    svn's diff command
    符号表分离
    gcc -D
    Options for Debugging Your Program or GCC
    invoking gdb
  • 原文地址:https://www.cnblogs.com/TD1900/p/12052634.html
Copyright © 2011-2022 走看看