yolanda

yolanda 查看完整档案

深圳编辑  |  填写毕业院校  |  填写所在公司/组织 segmentfault.com/u/lijing_tester 编辑
编辑

测试媛一枚,注重持续学习,持续分享

个人动态

yolanda 发布了文章 · 2018-11-18

ngrinder解读goovy最基本的GET请求脚本

此文搬运自本人csdn博客https://blog.csdn.net/lijing7...

上一篇文章中讲了ngrinder怎么快速发送一个GET请求,在此详细解读一下其中的脚本。
(前提是你已经了解了groovy的基本代码结构,如果还不了解的先看这里--搭建 nGrinder 性能测试平台 并快速使用

一、自动生成GET请求脚本

1、配置 Create a script

在ngrinder管理台主页,点击script-->Create a script,并填写脚本名称和请求的url,如下所示:

clipboard.png

点击 Create 按钮,nGrinder会自动生成对应的脚本结构,如果没有参数需要设置的话,可以直接运行了。

二、详细解决GET请求脚本

ngrinder自动生成的脚本如下所示:

解析见代码中的注释

import static net.grinder.script.Grinder.grinder
import static org.junit.Assert.*
import static org.hamcrest.Matchers.*
import net.grinder.plugin.http.HTTPRequest
import net.grinder.plugin.http.HTTPPluginControl
import net.grinder.script.GTest
import net.grinder.script.Grinder
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
// import static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith
import org.junit.FixMethodOrder
import org.junit.runners.MethodSorters

import java.util.Date
import java.util.List
import java.util.ArrayList

import HTTPClient.Cookie
import HTTPClient.CookieModule
import HTTPClient.HTTPResponse
import HTTPClient.NVPair

/**
 * A simple example using the HTTP plugin that shows the retrieval of a
 * single page via HTTP.
 *
 * This script is automatically generated by ngrinder.
 *
 * @author admin
 */
@RunWith(GrinderRunner)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class TestRunner {

    public static GTest test
    public static HTTPRequest request
    public static NVPair[] headers = []
    public static NVPair[] params = []
    public static Cookie[] cookies = []

    @BeforeProcess
    public static void beforeProcess() {
        // 设置请求响应超时时间(ms),超过则抛出异常
        HTTPPluginControl.getConnectionDefaults().timeout = 6000
        
        // 创建GTest对象,第一个参数1代表有多个请求/事务时的执行顺序ID
        // 第二个参数是请求/事务的名称,会显示在summary结果中
        // 有多个请求/事务时,要创建多个GTest对象
        test = new GTest(1, "www.baidu.com")  
        request = new HTTPRequest()
        grinder.logger.info("before process.");
    }

    @BeforeThread
    public void beforeThread() {
        // 注册事件,启动test,第二个参数要与@Test注解的方法名保持一致
        // 有多个请求/事务时,要注册多个事件
        test.record(this, "test")
        grinder.statistics.delayReports=true;
        grinder.logger.info("before thread.");
    }

    @Before
    public void before() {
        // 在这里可以添加headers属性和cookies
        request.setHeaders(headers)
        cookies.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) }
        grinder.logger.info("before thread. init headers and cookies");
    }

    @Test
    public void test(){
        // 发送GET请求
        HTTPResponse result = request.GET("https://www.baidu.com", params)
        // 断言HTTP请求状态码
        assertThat(result.statusCode, is(200))
    }
}
查看原文

赞 0 收藏 0 评论 0

yolanda 发布了文章 · 2018-11-16

nGrinder中快速编写groovy脚本01-脚本结构

在前面的文章中,我们已经知道,nGrinder支持groovy和Jython脚本,今天学习一下ngrinder中的groovy脚本结构。

ngrinder中的groovy脚本结构类似 junit,同时在junit的基础之上封装了自己的注解,用来控制脚本的运行。

一、运行逻辑图如下:

clipboard.png

二、各注解的使用比较

注解描述应用范围用例
@BeforeProcess定义在进程被调用之前应执行的行为static method加载被线程共享的资源文件,定义 GTest 等
@AfterProcess定义在进程被终止之前应执行的行为static method关闭资源文件
@BeforeThread定义在每个线程被调用之前应执行的行为member method登录目标系统,建立线程内的一些值,例如,Cookie 处理
@AfterThread定义在每个线程被终止之前应执行的行为member method退出系统
@Before定义每个被 @Test 注解的方法被执行前应执行的行为member method每个被 @Test 注解的方法的共享逻辑、变量设置
@After定义每个被 @Test 注解的方法被执行后应执行的行为member method很少使用
@Test定义测试行为,被执行多次member method测试体

三、关注点

在ngrinder中,通常使用单进程多线程就足够大部分测试了,所以:

  • 我们最需要关注的就是 @Test ,这个是循环体;
  • 其次是 @Before ,这里设置多个循环体的共享变量;
  • 再其次是 @BeforeThread@AfterThread ,用于设置每个线程执行前后的行为。

四、具体代码结构

@RunWith(GrinderRunner)  // 每个测试类都要加这个注解
class TestRunner {
    @BeforeProcess  // 在每个进程启动前执行
    public static void beforeProcess() {
        // 加载资源文件、初始化 GTest 等
    }
    @BeforeThread  // 在每个线程执行前执行
    public void beforeThread() {
        // 登录、设置 cookie 之类
    }
    
    @Before  // 在每个 @Test 注解的方法执行前执行
    public void before() {
        // 设置变量、多个 @Test 方法共用的逻辑等
    }
    @Test  // 在测试结束前不断运行。各个 @Test 注解的方法异步执行。
    public void foo() {
        // ...
    }
    
    @Test
    public void bar() {
        // ...
    }
    
    @After  // 在每个 @Test 注解的方法执行后执行
    public void after() {
        // 很少用到
    }
    
    @AfterThread
    public void afterThread() {
        // 登出之类
    }
    
    @AfterProcess  // 在每个进程结束后执行
    public static void afterProcess() {
        // 关闭资源
    }
查看原文

赞 0 收藏 0 评论 0

yolanda 发布了文章 · 2018-11-16

groovy语法快速学习01

执行groovy脚本和代码的三种方式:

clipboard.png

>groovysh.bat
Groovy Shell (2.5.4, JVM: 1.8.0_91)
Type ':help' or ':h' for help.
-------------------------------------
groovy:000> "Hello ,World! "
===> Hello ,World!
groovy:000> 'hahaha'
===> hahaha

groovyConsole是一个swing界面,是一个小型的groovy交互式解释程序。
可通过"Ctrl+R" 或 "Ctrl+Enter" 或 "Action"菜单的Run命令来运行脚本。
也可选中脚本中的一部分来运行,在进行简单调试或单步执行时非常有用。

clipboard.png

groovy中自动会导入下面这些包,可以在代码中直接使用这些包中的类,而且不用指定包的名称。
而在java中,只会自动导入java.lang.*

import java.lang.* 
import java.util.* 
import java.io.* 
import java.net.* 
import groovy.lang.* 
import groovy.util.* 
import java.math.BigInteger 
import java.math.BigDecimal
查看原文

赞 1 收藏 1 评论 0

yolanda 发布了文章 · 2018-11-15

认识groovy,并配置开发环境

一、什么是groovy?

  • groovy 是在java平台上的、具有像Python、Ruby、Smaltalk语言特性的灵活动态语言,groovy使这些特性像java语法一样被java开发者使用。
  • groovy非常灵活,它既能像脚本语言一样使用,也可以被编译成java字节码,然后能集成到java应用程序中或web应用程序,整个应用程序都可以是groovy编写的。
  • groovy运行在JVM上,拥有java平台上的所有强大功能,包括大量的java类库也可以直接在groovy中使用,同时groovy语法本身也跟java很相似。
groovy的设计方向:
给Java增加像python一样的动态特性
它可以跟Java完美集成,具有很好的java友好性

二、groovy开发环境配置

1、配置JDK,Groovy 的运行依赖于JDK,要先配置好 JDK 环境;

2、下载Groovy,地址:http://www.groovy-lang.org/do...
    可以根据需要下载二进制版本或win-install版本,以下演示的是下载二进制版本;
    下载后在任意位置解压,我的解压路径是D:\software\groovy-2.5.4

3、增加系统环境变量:

  • GROOVY_HOME=D:\software\groovy-2.5.4
  • Path路径添加%GROOVY_HOME%bin

4、在cmd命令行中运行“groovy -v" 验证安装配置是否成功;

C:\Users\jjing>groovy -v
Groovy Version: 2.5.4 JVM: 1.8.0_91 Vendor: Oracle Corporation OS: Windows 7

C:\Users\jjing>groovyconsole

5、在cmd命令行输入“groovyconsole”打开groovy自带的编辑器,编写代码;

clipboard.png

查看原文

赞 1 收藏 1 评论 0

yolanda 发布了文章 · 2018-11-15

什么是Jython?

Jython(旧称JPython)

  • 它是一种完整的语言,而不是一个Java翻译器或仅仅是一个Python编译器;
  • 它是Python语言在Java中的完全实现;
  • Jython不仅提供了Python的库,同时也提供了所有的Java类,这使其有一个巨大的资源库;
  • 它和Python一样,强调代码的简明性、方便性和易读性
  • 它可编译成Java字节码,具有Java的“写一次,处处可用”的特点
查看原文

赞 0 收藏 0 评论 0

yolanda 发布了文章 · 2018-11-15

搭建 nGrinder 性能测试平台 并快速使用

接上一篇的nGrinder介绍篇

一、nGrinder 组件介绍

1、ngrinder包含Controller、agent 和 monitor 三部分

2、Controller

  • 提供性能测试的web接口
  • 协调测试进程
  • 调整和显示测试的统计结果
  • 让用户创建和修改脚本

3、Agent

  • 在代理服务器上加载运行测试进程和线程
  • 可以部署多台,提升压测能力
  • 最好是能部署在单独的服务器上,如果没有条件的话,也可以跟Controller在一台服务器
  • 但是不能部署在被测服务器上

4、Monitor

  • 用于监控被测服务器的系统性能(例如:CPU/MEMORY)
  • 必须部署在被测服务器上

二、nGrinder 环境搭建

$ java -XX:MaxPermSize=512m -jar ngrinder-controller-3.4.war --port 80
可在下载ngrinder后,直接通过上面的命令运行
也可以通过下面的方式,把war包放在tomcat容器中运行

1、安装JDK,配置环境变量

2、安装Tomcat

3、下载nGrinder:https://github.com/naver/ngri...

4、把下载好的包放到Tomcat的webApps文件夹中

5、启动Tomcat,并访问nGrinder

  • nGrinder主页:http://localhost:8080/ngrinder-controller-3.4/ 看到下图表示搭建成功。
  • 如果想直接通过http://localhost:8080/访问,把文件名改为ROOT.war即可

clipboard.png

       

6、安装Agent

  • 登录 nGrinder 管理台,默认账号和密码都是admin,点击右上角,选择 Download Private Agent (不同版本可能会稍有区别) ,如下图所示
  • 把 ngrinder-agent 压缩包解压到用作Agent的服务器上,运行 run_agent.sh 即可

clipboard.png

7、安装Monitor(需要安装在被测服务器上)

  • 下载Monitor安装包,方法类似Agent
  • 把 ngrinder-monitor 压缩包解压到被测服务器上,运行 run_monitor.sh 即可

补充说明:

ngrinder支持开箱即用,不需要额外配置,第一次启动时,系统配置自动生成
默认使用H2数据库,且schema自动创建
版本更新时,数据库schema自动更新
agent 、monitor模块从controller下载,无需配置
版本更新时,只需更新controller,agent和monitor会自动更新
在线修改系统配置,多数据修改无需重启
即使用cluster模式,配置也很简单

四、快速使用

1、输入测试URL,选择脚本语言,然后点击开始测试,会自动生成测试脚本并进入配置页面

clipboard.png

2、基本的压测配置

clipboard.png

代理:是指压测所需要的server的数量
虚拟用户有两个指标:

  • 进程数:每个server起多少进程去跑
  • 线程数:每个进程新建的线程数量
  • 并发量=代理数x进程数x线程数

Ramp-Up:设置增量测试,逐渐向最大的的并发量增长,只有勾选该框时,初始数、增量、初始等待时间、进程增长间隔的值才有效
测试时间:表示压测需要持续运行的时间
测试次数:脚本执行的次数,同测试时间二选一

3、运行测试

        在配置页面右上角点击保存并运行,启动测试。

4、监控测试,查看结果

        当启动测试后,会在页面显示当前的TPS、虚拟用户、测试成功与否的数量等信息。测试完成后,会显示测试结果。

clipboard.png
        
    可以点击详细测试结果查看更详细的信息,比如TPS、平均时间、首次接受数据平均时间,以及被测服务器的CPU,MEM等信息。
    

查看原文

赞 1 收藏 0 评论 0

yolanda 发布了文章 · 2018-11-15

nGrinder详细介绍及性能工具对比

一、The Grinder

1、The Grinder是一个基于Java的开源性能测试框架,通过多个agent负载机很方便的进行分布式测试。

clipboard.png

2、主要特性:

  • 可以测试任何java代码,包括各种常用的接口

    • 如HTTP web servers, SOAP和REST web services,还有客户端服务器RMI、JMS、EJBs等,还支持自定义协议。
  • 测试脚本使用python和Clojure语言
  • 成熟的HTTP协议支持:

    • 自动管理客户端连接和cookies,SSL代理;
    • 支持录制脚本,能够记录并回放浏览器和网站之间的复杂交互。
  • 包括console和agent端

3、不足

  • 一次只能运行一个测试
  • 没有测试历史记录
  • 没有图形化的测试报告

二、nGrinder

nGrinder是基于Grinder的开源的web性能测试平台,由韩国最大互联网公司NHN公司的开发团队进行了重新设计和完善。

特性:开源、易用、高可用、可扩展

clipboard.png

1、nGrinder 在 Grinder 的基础上:

  • 实现多测试并行
  • 基于web的管理
  • 实现cluster
  • 内置svn,方便的脚本编辑、管理
  • 增加支持Groovy脚本,相对于Jython,可以启动更多的虚拟用户
  • 使用改造过的 JUnit 框架,比Grinder脚本强大得多
  • 实现对目标服务器的监控
  • 插件系统扩展

2、工作原理

  • 由一个控制端controller和多个代理端agent组成,通过控制端(浏览器访问)建立测试场景,然后分发到代理端进行压力测试。
  • 用户按照一定规范编写测试脚本,controller会将脚本以及需要的资源分发到agent,用jython执行。
  • 在脚本执行的过程中收集运行情况、相应时间、测试目标服务器的运行情况等。并且保存这些数据生成测试报告,通过动态图和数据表的形式展示出来。用户可以方便的看到TPS、被测服务器的CPU和内存等情况。

三、LoadRunner JMeter 与 nGrinder对比

1、Loadrunner

  • 基于UI操作,容易上手。早期很流行,功能强大,但是太笨重,安装很麻烦。
  • 不开源,扩展性不高,收费贵。往后的方向肯定是客户端工具逐步向平台化发展,所以已经慢慢被替代了。

2、JMeter

  • 基于UI操作,容易上手,但是编程能力较弱(使用beanshell脚本语言)。
  • 其次JMeter基于线程,模拟数千用户几乎不可能。

3、nGrinder

  • 单节点支持3000并发、支持分布式、可监控被测服务器、可录制脚本、开源、平台化。
比较点JMeterNgrinderLoadRunner
实现语言Javajava/pythonjava/VB/C/.NET
使用方式C/S或CommandB/SB/S
支持分布式master/slavecontroller/agentmaster/slave
资源监控monitor/plugin,如果二开,需要查找plugin的源码monitor方式,有直接可用的源码自带资源监控功能
社区活跃度文档完善有中文社区网上资料和相关培训很多,购买正版还可以得到技术支持
是否需要编码基本不需要需要,Jython/Groovy需要
脚本的维护本地内置SVN本地
脚本录制可使用BadBoy进行录制可通过PTS插件进行录制自带录制功能
可扩展性可增加plugin,输出结果可以再加工可增加plugin通过扩展函数库实现
安装简单,解压即可简单,可以下载安装包或绿色包解压安装包比较大,安装繁琐
nGrinder 安装配置及使用 见下篇。
查看原文

赞 1 收藏 1 评论 0

yolanda 发布了文章 · 2018-11-14

JMeter基本介绍

一、Jmeter能干嘛?

JMeter是Apache组织开发的开源项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做的比较成熟,因此,常被用做接口功能测试和性能测试。

它能够很好的支持各种常见接口,如HTTP(S)、WebService、JDBC、JAVA、FTP等,并以多种形式展现测试结果。

当然,以上并不是jmeter的全部功能,还有很多地方需要深入探索,而且还有很多插件不断出现,相信以后越来越强大。

二、Jmeter与LoadRunner比较

1、Jmeter:

开源免费,轻量级免安装,支持插件很多,功能也日趋完善,报表分析功能较弱

2、LoadRunner:

商业收费,体积很大、安装麻烦、过于笨重,测试场景设置灵活,报表分析功能强大,支持协议很全面。

3、二者比较:

早期性能测试主要都是用的LoadRunner,虽然很贵,但是没有其它更好的替代产品。直到Jmeter出现后,越来越多的企业和个人开始转向Jmeter,转为用LR真的很痛苦,如果你之前一直用LR,突然尝试Jmeter后,可能会果断放弃LR!!

LR收费贵不说(对于个人可以想办法装破解版,但是企业就不敢随便用破解的,只能用商业的)它实在太笨重了!!一个安装包解压后有2-3个G,而且安装过程非常麻烦,对系统环境的要求也非常高,一般只能装在虚拟机上使用。

但是Jmeter完全没有这些问题,开源免费(现在的公司都越来越注重成本了,免费的优先),非常轻量级,整个压缩包只有40多M,免安装直接解压就可以用了,而且功能也越来越完善,有众多的扩展插件,方便公司进行二次开发,实在是广大中小企业的完美选择呀~~,所以自然是越来越多的企业都转向jmeter了(我上家公司就是这样嘀)。

三、jmeter安装及环境配置

1、安装jdk

jmeter是依赖java环境的,所以要先安装jdk。

需要注意的是jmeter3.0以上的版本都需要jdk7以上才能支持,其它没啥特别的。

安装jdk并配置好环境变量(配置方法我就不在这里啰嗦了啊)。

2、安装jmeter

其实jmeter是免安装的,只需要下载解压即可。

安装包直接去jmeter官网下载即可(http://jmeter.apache.org/down...),建议选择3.0或以上版本,我目前使用的是3.0的版本。下载后解压到非C盘的非中文目录即可。

3、配置jmeter环境变量:

JMETER_HOME=F:jmeterapache-jmeter-3.0(根据实际的jmeter解压路径填写)
CLASSPATH=%JMETER_HOMElibextApacheJMeter_core.jar;%JMETER_HOME%libjorphan.jar;%JMETER_HOME%liblogkit-2.0.jar;

4、启动jmeter

双击jmeter bin目录下的jmeter.bat,稍等一会能够正常打开如下界面,说明安装成功了。

clipboard.png

clipboard.png

小tips:在jmeter窗口打开的同时会有如上的命令行窗口,不要关闭哦,不然jmeter窗口也就关闭了。

查看原文

赞 1 收藏 1 评论 1

yolanda 发布了文章 · 2018-11-14

JMeter-如何使用Jmeter方便的管理Cookies?

一、使用Jmeter cookie的业务背景

业务背景:

我们在工作中经常会遇到如下压测场景:

登录后对查询、充值、购买...等业务进行压测;

这种场景很熟悉吧?很多业务操作是要依赖登录的,但是一个用户在每次进行登录时通常会生成cookie,而且在接下来的操作中都必须携带上它的cookie,服务器对后续的每次请求都会进行校验。

首先想到的是从登录响应中用正则表达式提取出cookies,然后在其它操作中调用不就行了吗?

不行!

因为cookies并不是在登录的响应结果中生成的,而是在response header中携带的,所以不能用正则表达式提取。

那用什么来获取呢?我们先来看一下jmeter官方文档中怎么说的吧:

二、解读Jmeter官方文档

Jmeter官方文档是这样写的:

70

下面我简单翻译一下:

cookie管理器元件有两大功能:

首先,它能够像web浏览器一样存储和发送cookies。

如果你有一个HTTP请求和响应包含一个cookie,cookie管理器会自动存储该cookie,并能够在该特定网站上接下来的所有请求中使用该 cookie。

JMeter的每个线程都有自己的“cookie存储区”。所以,如果你正在测试一个使用cookie来存储会话信息的网站,那么每个JMeter线程都有自己的会话。请注意,这种cookies不会在cookie管理器中展示出来,但可以在“查看结果树”中看到它们。

JMeter会检查收到的cookies是否对URL有效。这意味着跨域的cookie不能被存储。如果你有窃听行为,或者想要存储跨域cookies,需要在jmeter.poperties中设置:“ CookieManager.check.cookies = false”。

接收到的Cookies可以存储为JMeter的线程变量。如果要把 cookies保存为变量,需要设置:

 “ CookieManager.save.cookies =true”。

此外,默认情况下jmeter中的cookies在存储时名字前缀为“ COOKIE_ ”,这是为了避免因局部变量重名引起的异常情况。如果不想用这个前缀,需要定义属性“CookieManager.name.prefix = ”(一个或多个空格)。如果使用了前缀,则一个名称为TEST的cookie的值可以通过$ {COOKIE_TEST}获取 。

其次,你可以手动添加一个cookie到cookie管理器。但是,如果你这样做,这个cookie将被所有JMeter的线程共享。注意,这样的cookies创建后生命周期会很长。

空值的cookies默认被忽略掉。这可以通过设置JMeter的属性进行更改:CookieManager.delete_null_cookies =false。请注意,这也适用手工定义的cookies-任何此类cookies在更新后会从cookie manager中移除。

还需要注意的是cookie名称必须是唯一的-如果一个cookie的名称与已有cookie同名,它将取代原有的cookie。

如果在一个sampler作用域中有多个cookie manager,目前没有办法去指定使用某一个。并且,一个cookie manager中保存的cookie不能被其它的cookie manager使用,所以要慎用多个cookie manger。

有没有觉得很难理解呢?

 没关系,下面我们来总结一下:

Cookie Manager主要有两大作用:

1、自动管理cookie:

就像浏览器一样能够自动存储和发送Cookie,如果一个http请求的响应中包含Cookie,那么Cookie Manager就会自动地保存这些Cookie并在所有后来发送到该站点的请求中使用这些Cookie的值。每个线程都自己存储cookie的区域。

在cookie manager中看不到自动保存的cookie,我们可以在察看结果树View Results Tree中看到被发送请求的Cookie Data。

要把Cookies保存到线程变量中,要定义属性"CookieManager.save.cookies=true"。线程变量名为COOKIE_ + Cookie名。属性CookieManager.name.prefix= 可以用来修改默认的COOKIE_的值。

2、手动管理Cookie:

手动添加Cookie到Cookie Manager,这些Cookie的值会被所有线程共享。 

比较简单的做法是使用firefox的firebug导出cookies ,然后再导入到jmeter的cookie manager中,当然,这里也可以通过Add按钮手动添加cookies。
70

Tips:

1、需要注意的是域、路径必须填上,尤其是域;因为Jmeter现版本默认不支持跨域的请求,不填的话设置的Cookie不会被带上。

2、在需要取Cookie的线程里添加一个Http Cookie管理器,可以默认为空,但是一定要添加,否则是不会存储cookie变量的

3、这样在同一个线程(组)内其它操作组件都是可以直接通过${COOKIE_xxxx}来获取

4、目前jmeter在一个sampler中不能同时有多个cookie manager

5、想要跨域存储cookies,需要设置 CookieManager.check.cookies =false

三、线程组内部传递cookies

了解了cookie manager,现在我们回到业务场景中来:

如何实现对查询接口(必须先登录,携带cookie)进行压测?

70

这是一个很简单的场景,但是如果直接按照上面这样的方式去执行,你会发现结果会报错,因为jmeter默认不会保存cookies,需要加上cookie manager,如下所示:

70

如上,加一个空的cookie manager即可以自动保存cookie,并且能够在同一个线程组之间传递cookie,此时再次运行脚本就通过了。

但是我们并不需要同时对登录操作进行压测,也就是说,我只需要用一个用户登录一次,然后循环进行其它业务操作,这时候需要把登录和查询操作分别放在两个线程组中,但是jmeter官方文档中说cookies不能跨域传递的,也就是不能在线程组中共享,那要怎么实现呢?

四、跨线程组传递cookies

官方文档中说cookie变量是线程内有效,线程外无效,但是实际测试同一个线程组的其它线程是可以直接访问的。

如果是跨线程组的情况,不能直接访问,可以用其它的方式来进行cookie变量的共享,试验了几种方式,下面这种方式最简单:

通过JMeterUtils.setProperty和JMeterUtils.getPropDefault方法实现

1、在生成cookie的请求中添加beanshell postprocessor后置处理器,并添加如下脚本,把cookie保存在Jmeter属性参数中:

import org.apache.jmeter.util.JMeterUtils; 
JMeterUtils.setProperty(“cookie_name”, “cookie_value”); 

其中cookie_name和cookie_value分别换成你对应的cookie名称(不带COOKIE_前缀)和cookie值

2、在需要使用cookie的另一个线程组的请求中添加beanshell preprocessor前置处理器,并添加如下脚本,取出cookie的值,并存入线程变量中:

import org.apache.jmeter.util.JMeterUtils; 
String value = JMeterUtils.getPropDefault(“cookie_name”);

Vars.put(“cookie_name”,value);

这里的cookie_name和前面设置的名称一样。

然后在该线程组中就可以使用${cookie_name}来获取cookie的值,也就是实现了跨线程组传递cookie。

查看原文

赞 0 收藏 0 评论 0

yolanda 发布了文章 · 2018-11-14

JMeter-详解jmeter线程组

线程组元件是任何一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程下。所有的任务都是基于线程组。

一、Threads (Users)线程 用户

clipboard.png

上图可以看到,jmeter有三个添加线程组的选项,名字不一样, 但是创建之后,其界面是完全一样的。

1、 setup thread group  

一种特殊类型的ThreadGroup,用于在执行常规线程组之前执行一些必要的操作。在“setup thread group ”下提到的线程行为与普通线程组完全相同。不同的是执行顺序---它会在普通线程组执行之前被触发。

应用场景举例:

  • A、测试数据库操作功能时,用于执行打开数据库连接的操作。
  • B、测试用户购物功能时,用于执行用户的注册、登录等操作。

 

2、teardown thread group 

一种特殊类型的ThreadGroup,用于在执行常规线程组完成后执行一些必要的操作。在“teardown thread group ”下提到的线程行为与普通线程组完全相同。不同的是执行顺序---它会在普通线程组执行之后被触发。

应用场景举例:

  • A、测试数据库操作功能时,用于执行关闭数据库连接的操作。
  • B、测试用户购物功能时,用于执行用户的退出等操作。

tips:

默认情况下,如果测试按预期完成,则TearDown线程组将不会运行。
如果你想要运行它,则需要从Test Plan界面中选中复选框“Run tearDown Thread Groups after shutdown of main threads”。

可能你还是不太理解他们与普通的线程组有什么不同。但是如果你用过junit,想必你应该对setup ,teardown这两个字眼不陌生。

如果你熟悉loadrunner,那你应该知道loadrunner的脚本中除了action里是真正的脚本核心内容,还有进行初始化操作的init脚本和测试完毕后对应的end脚本块。那么这里setup thread group 和 teardown  thread group 就是分别指这两部分。

  

3、thread group(线程组)

     这个就是我们通常使用的线程。通俗的讲,一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。多个用户同时去执行相同的一批次任务。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量,不会影响其他线程的变量值。

 

二、线程组基本设置

在线程组界面中可以设置以下数据,进行控制线程组:

clipboard.png

1、取样器错误后要执行的动作:

  • 继续:忽略错误,继续执行
  • Start Next Thread Loop: 忽略错误,线程当前循环终止,执行下一个循环。
  • 停止线程:当前线程停止执行,不影响其他线程正常执行。
  • 停止测试:整个测试会在所有当前正在执行的线程执行完毕后停止
  • Stop test now:整个测试会立即停止执行,当前正在执行的取样器可能会被中断。

这几个配置项控制了“当遇到错误的时候测试的执行策略”是否会继续执行。
 

2、设置线程数:

线程数也就是并发数,每个线程将会完全独立的运行测试计划,互不干扰。多个线程用于模仿对服务器的并发访问。

 

3、设置ramp-up period:

ramp-up period用于设置启动所有线程所需要的时间。
如果选择了10个线程,并且ramp-up period是100秒,那么JMeter将使用100秒使10个线程启动并运行。
每个线程将在前一个线程启动后10(100/10)秒后启动。

当这个值设置的很小、线程数又设置的很大时,在刚开始执行时会对服务器产生很大的负荷。

下图的线程配置中,5个线程,5秒启动时间,每个线程执行两次循环。那么每秒会启动一个线程,每次循环执行一个请求。

clipboard.png

4、设置循环次数:

该项设置线程组在结束前每个线程循环的次数,如果次数设置为1,那么JMeter在停止前只执行测试计划一次。

5、Delay Thread creation until needed:

 默认情况下,测试开始的时候,所有线程就被创建完了。如果勾选了此选项,那么线程只会在合适的需要用到的时候创建。

 

三、线程组调度器设置

调度器配置可以更灵活的控制线程组执行的时间
1、持续时间(秒):

控制测试执行的持续时间,以秒为单位。

2、启动延迟(秒):

控制测试在多久后启动执行,以秒为单位。

3、启动时间:

控制测试在某个时间点启动。但这个配置会被“启动延迟”配置覆盖。

4、结束时间:

控制测试执行的结束时间。但这个配置会被“持续时间”配置覆盖。

如果不想立即执行执行,可以通过调度器控制测试执行的开始时间和结束时间。

当测试开始时,如果设置了调度器,JMeter将等待直到到了开始时间。
在每个周期结束,JMeter将会检查是否到达结束时间,如果达到,停止运行;否则测试继续运行直到达到了重复限制。

查看原文

赞 3 收藏 2 评论 0

认证与成就

  • 获得 11 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2018-10-09
个人主页被 415 人浏览