软件测试Apache JMeterJmeter实战经验

JMeter--配置元件

2018-08-23  本文已影响393人  顾顾314

1、HTTP cookie 管理器


Cookie管理器元素有两个功能:

首先,它像web浏览器一样存储和发送cookie。如果您有一个HTTP请求,并且响应包含一个cookie, cookie管理器将自动存储该cookie,并将其用于将来对该特定web站点的所有请求。每个JMeter线程都有自己的“cookie存储区域”。因此,如果您正在测试一个使用cookie来存储会话信息的web站点,那么每个JMeter线程都有自己的会话。注意,这些Cookie不会出现在Cookie管理器显示中,但是可以使用查看结果树监听器看到它们。

JMeter检查收到的cookie是否对URL有效。这意味着不存储跨域cookie。如果您有错误的行为或希望使用跨域cookie,请修改JMeter Property文件中“cookiemanager .check.cookie =false”。
*注意,该文件的默认地址是:/Users/guxuecheng/Downloads/apache-jmeter-3.3/bin/jmeter.properties *

接收到的cookie可以存储为JMeter线程变量。要将cookie保存为变量,请定义属性“cookiemanager .save.cookie =true”。另外,cookie名称在存储之前以“COOKIE_”作为前缀(这避免了局部变量的意外损坏),以还原到原始行为,定义属性“CookieManager.name.prefix=' '(一个或多个空格)。修改以后(需要重启 JMeter),带有名称TEST的cookie的值可以称为${COOKIE_TEST}
注意:每一个 cookie 的名称必须以 COOKIE_开头

第二,您可以手动向cookie管理器添加cookie。但是,如果这样做,cookie将由所有JMeter线程共享。

默认情况下,使用空值(null)的cookie会被忽略。这可以通过设置JMeter属性:cookiemanager .delete_null_cookie =false来更改。注意,这也适用于手动定义的cookie——任何这样的cookie在更新后将从显示中删除。还要注意,cookie的名称必须是唯一的——如果第二个cookie是用相同的名称定义的,它将替换第一个cookie。

HTTP Cookie管理器中文版 英文版

如果采样器的作用域中有多个Cookie管理器,那么目前无法指定使用哪个Cookie管理器。另外,存储在一个cookie管理器中的cookie对任何其他管理器都不可用,所以要小心使用多个cookie管理器。

参数
属性 描述 是否为必选项
名称 管理器的名称,可任意命名,便于自己区分记忆,可使用默认值
每次反复清除 Cookies? 如果选中,每次执行主线程组循环时都会清除所有服务器定义的cookie。没有清除GUI中定义的任何cookie。
Cookie Policy 用于管理cookie的cookie策略。“standard”是3.0以后的默认值,在大多数情况下应该可以工作。参见Cookie规范和CookieSpec实现[注:“ignoreCookies”相当于省略了CookieManager]。
Implementation HC4CookieHandler(HttpClient 4.5。X的API)。默认是3.0以后的HC4CookieHandler。[注:如果你有一个网站要测试IPv6地址,选择HC4CookieHandler(兼容IPv6)]
存储在 Cookie 管理器中的 Cookie 这使您有机会使用测试执行期间所有线程都将使用的硬编码cookie。“域”是服务器的主机名(没有http://);该端口目前被忽略。
添加 添加一行 cookie N/A
删除 删除选中的一行 N/A
载入 加载以前保存的cookie表,并将条目添加到现有的cookie表条目中。 N/A
保存测试计划 将当前cookie表保存到一个文件中(不保存从HTTP响应中提取的任何cookie)。 N/A


2、CSV Data Set Config


创建csv文件,把需要的参数写在一列中。不需要写变量名称,直接写变量值就可以。


CSV Data Set Config

CSV Data Set Config用于从文件中读取行,并将它们拆分为变量。它比__CSVRead()__StringFromFile()函数更容易使用。它非常适合处理大量变量,并且对于使用“随机”和惟一值进行测试也很有用。

在运行时生成唯一的随机值在CPU和内存方面代价高昂,因此只需在测试之前创建数据。如果有必要,文件中的“随机”数据可以与运行时参数一起使用,以从每次运行中创建不同的值集——例如使用连接——这比在运行时生成所有东西要便宜得多。

JMeter允许引用值;这允许值包含分隔符。如果启用了“allow quoted data”,一个值可以用双引号括起来。这些都是删除。若要在引用字段中包含双引号,请使用两个双引号。例如:

1,"2,3","4""5" =>
1
2,3
4"5

JMeter支持CSV文件,这些文件的标题行定义列名。要启用此功能,请将“Variable Names”字段保留为空。必须提供正确的分隔符。

JMeter支持包含新行在内的引用数据的CSV文件。

默认情况下,文件只打开一次,每个线程将使用与文件不同的行。然而,将行传递给线程的顺序取决于它们执行的顺序,这在迭代之间可能有所不同。在每次测试迭代开始时读取行。在第一次迭代中解析文件名和模式。

有关其他选项,请参阅下面共享模式的描述。如果希望每个线程都有自己的一组值,那么需要为每个线程创建一组文件。例如test1.csv,test2.csv,…,testn.csv。使用文件名test$ { __threadNum }.csvSharing mode设置为“Current thread”。

CSV数据集变量是在每次测试迭代开始时定义的。由于这是在配置处理完成之后,所以它们不能用于某些配置项——例如JDBC Config——在配置时处理它们的内容(参见Bug 40394),但是这些变量在HTTP Auth管理器中可以工作,因为username等在运行时被处理。

作为一种特殊情况,分隔符字段中的字符串“\t”(不带引号)被视为制表符。

当到达文件(EOF)的末尾,且循环选项为true时,读取将从文件的第一行重新开始。

如果recycle选项为false,而stopThread为false,那么当到达文件末尾时,所有变量都被设置为<EOF>。这个值可以通过设置JMeter属性csvdataset.eofstring来更改。

如果回收选项为false,停止线程为true,那么到达EOF将导致线程停止。

参数
属性 描述 是否为必选项
名称 树中显示的这个元素的描述性名称。
Filename 要读取的文件的名称。相对文件名是根据活动测试计划的路径解析的。对于分布式测试,CSV文件必须存储在服务器主机系统中与JMeter服务器启动位置相对的正确目录中。也支持绝对文件名,但请注意,除非远程服务器具有相同的目录结构,否则它们不太可能在远程模式下工作。如果同一个物理文件以两种不同的方式引用——例如csvdata.txt./ csvdata.txt -然后这些被当作不同的文件。如果操作系统不区分大小写,那么csvData.TXT也将被分开打开。
File Encoding 用于读取文件(如果不是平台默认值)的编码。
Variable Names 变量名称的列表。名称必须用分隔符分隔。它们可以用双引号引用。JMeter支持CSV头行:如果变量name字段为空,则读取文件的第一行并将其解释为列名列表。
Use first line as Variable Names 忽略CSV文件的第一行,它只在变量名不为空时使用,如果变量名为空,第一行必须包含头。
Delimiter 分隔符,用于分割文件中的记录。如果行上的值比变量的值少,则其余的变量不会被更新——因此它们将保留以前的值(如果有的话)。
Allow quoted data? CSV文件是否允许引用值?如果启用,则可以将值括在" --双引号-允许值包含分隔符。
Recycle on EOF? 是否应该在到达EOF时从头重新(循环)读取文件?(默认是true)
Stop thread on EOF? 如果回收是假的,线程是否应该在EOF上停止?(默认是false)
Sharing mode All threads——文件在所有线程之间共享。
Current thread group——对于出现元素的每个线程组,每个文件都会打开一次
Current thread—为每个线程分别打开每个文件
Identifier-所有共享相同标识符的线程共享相同的文件。例如,如果您有4个线程组,您可以为两个或两个以上的组使用一个公共id在它们之间共享文件。或者您可以使用线程号在不同线程组中的相同线程号之间共享文件。

注意:EOF 是一个文件结尾的意思。

.csv 两组变量值示例

如果上面的实例变量名是 username 和 password,那么就要在Variable Names一栏写上 username,password

Variable Names

这里的变量名适合 CSV 文件中的值是一一对应的。

csv 文件已经创建,变量也已经定义,那么如何让 HTTP 请求的参数获取到这些值呢?

请求参数

如图,这里的参数取值{username}和{password}是和Variable Names中定义的参数是一样的,否则无法获取到 CSV 文件中的变量值。

不过有一个问题,比如这个登录请求,如果登录的时候需要验证码,那似乎就比较麻烦了。

3、HTTP 信息头管理器(HTTP Header Manager)


主要是用来添加 HTTP 请求头。

JMeter现在支持多个头管理器。合并标题项以形成采样器的列表。如果要合并的条目与现有的标头名称匹配,它将替换以前的条目,除非条目值为空,在这种情况下,任何现有条目都将被删除。这允许您设置默认的标头集,并对特定的采样器应用调整。


HTTP Header Manager HTTP 信息头管理器

4、JDBC Connection Configuration


从提供的JDBC连接设置中创建数据库连接(JDBC Request Sampler)。连接可以在线程间可选地合用。否则,每个线程都有自己的连接。JDBC采样器使用连接配置名称来选择适当的连接。使用的池是DBCP,请参阅BasicDataSource配置参数

JDBC Connection Configuration
参数
属性 描述 是否为必须
名称 树中显示的连接配置的描述性名称。
Variable Name for created pool 连接所连接的变量的名称。可以使用多个连接,每个连接都绑定到不同的变量,允许JDBC Samplers选择适当的连接。

每个名字必须是不同的。如果有两个使用相同名称的配置元素,则只会保存一个。如果检测到重复的名称,JMeter将记录一条消息。
Max Number of Connections 池中允许的最大连接数。在大多数情况下,将其设置为0(0),这意味着每个线程都将得到自己的池,其中只有一个连接,即线程之间不共享连接。

如果您真的想使用共享池(为什么?),那么将最大数量设置为与线程数量相同,以确保线程之间不会互相等待。
Max Wait (ms) 如果在尝试检索连接的过程中超过超时时间,则Pool抛出一个错误,请参阅BasicDataSource.html#getMaxWaitMillis
Time Between Eviction Runs (ms) 空闲对象回收线程运行之间的睡眠毫秒数。当非正数时,将不会运行空闲对象驱逐器线程。(默认为“60000”,1分钟)。请参阅BasicDataSource.html#getTimeBetweenEvictionRunsMillis
Auto Commit 为连接打开或关闭自动提交。
Test While Idle 测试池的空闲连接,请参阅BasicDataSource.html#getTestWhileIdle.验证查询将用于测试它。
Soft Min Evictable Idle Time(ms) 在空闲对象回收器回收连接之前,连接可能会在池中闲置最少的时间,但额外的条件是,至少minIdle连接仍保留在池中。请参阅BasicDataSource.html#getSoftMinEvictableIdleTimeMillis
默认为5000(5秒)
Validation Query 用于确定数据库是否仍在响应的简单查询。这默认为jdbc驱动程序的‘isValid()’方法,该方法适用于许多数据库。然而,有些可能需要不同的查询;例如,Oracle可以使用“SELECT 1 FROM DUAL”之类的东西。
验证查询的列表可以使用jdbc.config.check配置。查询属性,默认为:

hsqldb
select 1 from INFORMATION_SCHEMA.SYSTEM_USERS
Oracle
select 1 from dual
DB2
select 1 from sysibm.sysdummy1
MySQL
select 1
Microsoft SQL Server (MS JDBC driver)
select 1
PostgreSQL
select 1
Ingres
select1
Derby
values 1
H2
select1
Firebird
select 1 from rdb$database

列表来自 stackoverflow entry on different database validation queries,它可能不正确

请注意,这个验证查询用于池的创建,以验证它,即使“Test While Idle”表明查询只在空闲连接上使用。这是DBCP行为。
Database URL 数据库的JDBC连接字符串
JDBC Driver class 驱动器类的全限定名称。(必须在JMeter的classpath中——最容易将.jar文件复制到JMeter的/lib目录中)。

验证查询列表可以使用jdbc.config.jdbc.driver配置。类属性,默认为:

hsqldb
org.hsqldb.jdbc.JDBCDriver

Oracle
oracle.jdbc.OracleDriver

DB2
com.ibm.db2.jcc.DB2Driver

MySQL
com.mysql.jdbc.Driver

Microsoft SQL Server (MS JDBC driver)
com.microsoft.sqlserver.jdbc.SQLServerDriver
或者
com.microsoft.jdbc.sqlserver.SQLServerDriver

PostgreSQL
org.postgresql.Driver

Ingres
com.ingres.jdbc.IngresDriver

Derby
org.apache.derby.jdbc.ClientDriver

H2
org.h2.Driver

Firebird
org.firebirdsql.jdbc.FBDrivery

Apache Derby
org.apache.derby.jdbc.ClientDriver

MariaDB
org.mariadb.jdbc.Driver

SQLite
org.sqlite.JDBC

Sybase AES
net.sourceforge.jtds.jdbc.Driver
Username 连接为的用户名。
Password 密码联系。(注意:此存储在测试计划中未加密)

不同的数据库和JDBC drivers需要不同的JDBC settings。Database URL和JDBC Driver class由JDBC implementation提供者定义。

下面显示了一些可能的设置。请查看JDBC driver文档中的详细信息。

如果JMeter报告No suitable driver,那么这可能意味着:

如果数据库服务器不运行或不可访问,那么JMeter将报告java.net.ConnectException。

下面给出了一些数据库及其参数的示例。

MySQL
 Driver class
  com.mysql.jdbc.Driver
 Database URL
  jdbc:mysql://host[:port]/dbname

如下图所示:

Database URL 和 JDBC Driver class

解释:
  - Driver class:因为测试的是 MySQL 数据库,所以这里选择com.mysql.jdbc.Driver,这个选项是可选的,不需要手动输入。

  - Database URL:就是你的数据库地址,因为我是在自己的电脑上创建的 MySQL 数据库,所以 host 是localhost;创建的数据库默认端口是3306,所以这里 port 是3306;因为我创建的数据库名称叫 my_db,所以dbname是 my_db。

PostgreSQL
 Driver class
  org.postgresql.Driver
 Database URL
  jdbc:postgresql:{dbname}

Oracle
 Driver class
  oracle.jdbc.OracleDriver
 Database URL
  jdbc:oracle:thin:@//host:port/service  或者 jdbc:oracle:thin:@(description=(address=(host={mc-name})(protocol=tcp)(port={port-no}))(connect_data=(sid={sid})))

Ingress (2006)
 Driver class
  ingres.jdbc.IngresDriver
 Database URL
  jdbc:ingres://host:port/db[;attr=value]

Microsoft SQL Server (MS JDBC driver)
 Driver class
  com.microsoft.sqlserver.jdbc.SQLServerDriver
 Database URL
  jdbc:sqlserver://host:port;DatabaseName=dbname

Apache Derby
 Driver class
  org.apache.derby.jdbc.ClientDriver
 Database URL
  jdbc:derby://server[:port]/databaseName[;URLAttributes=value[;…]]

以上可能不正确——请检查相关的JDBC驱动程序文档。

上一篇下一篇

猜你喜欢

热点阅读