JMETER 中文手册 1. 简介 Apache JMeter 是 100%纯 java 桌面应用程序,被设计用来测试客户端/服务器结 构的软件(例如 web 应用程序)。它可以用来测试包括基于静态和动态资源程序 的性能,例如静态文件,Java Servlets,Java 对象,数据库,FTP 服务器等等。 JMeter 可以用来在一个服务器、网络或者对象上模拟重负载来测试它的强度或 者分析在不同的负载类型下的全面性能。 另外,JMeter 能够通过让你们用断言创建测试脚本来验证我们的应用程序是否 返回了我们期望的结果,从而帮助我们回归测试我们的程序。为了最大的灵活性, JMeter 允许我们使用正则表达式创建断言。 1.1 历史 Apache 软件组织的 Stefano Mazzocchi 是 JMeter 的创始人。他编写它起初是为 了测试 Apache JServ 的性能(一个已经被 Apache Tomcat 工程所替代的工程)。 我们重新设计 JMeter 来增强用户界面并增加功能测试的能力。 1.2 未来 我们希望看到作为开发者利用它的可插入架构使 JMeter 的功能快速扩展。未来 发展的主要目标是在没有影响 JMeter 的负载测试能力的情况下尽可能使 JMeter 成为最实用的回归测试工具。 2. 入门 开始使用 JMeter 最容易的方法是首先下载最新版 并且安装它。这个版本包含所 有你在构建和运行 Web,FTP,JDBC,和 JNDI 等测试时使用需要的所有文件。 如果你想执行 JDBC 测试,你当然需要从供应商得到适当的 JDBC 驱动。JMeter 没有提供任何 JDBC 驱动。 你可能需要下载的其它软件: BeanShell - BeanShell 函数和测试元件需要 Java Activation Framework - JavaMail 需要 Java Mail - Mail 可视化,Mail Reader 和 WebService(SOAP)取样器需要 JMS - JMS 取样器需要 General Java download page 详细参见 JMeter Classpath 一章安装附加的 jar 包 下一步, 开始使用 JMeter 并且参见用户手册创建一个测试计划一章使自 己更加熟悉 JMeter 基础 (例如,添加和删除元件)。 最后, 参见如何构建一个明确类型的测试用例的适合章节。例如,如果你对 Web 应用测试感兴趣,那就参见创建一个 Web 测试计划。其他具体的测试计划章节是: 高级 Web 测试计划 JDBC FTP JMS 点到点 JMS 主题 LDAP LADP 扩展 WebServices (SOAP) 一旦你熟练创建和执行 JMeter 测试计划, 通过你的测试计划你会观察到给你更 多帮助的各种元件的配置(定时器, 监听器, 断言, 和其他)。 2.1 需求 JMeter 需要最小需求的运行环境。 2.1.1 Java 版本 JMeter 需要一个完全适当的 JVM1.4 或者更高 因为 JMeter 仅使用 Java 标准 API, 请不要把因为 JRE 实现版本而无法运行 JMeter 的 bug 报告提交。 2.1.2 操作系统 JMeter 是 100%纯 Java 应用程序并且能够正确的在任何有适当的 Java 实现的操 作系统上运行。 JMeter 在下列环境已经被测试: Unix (Solaris, Linux, 等) Windows (98, NT, 2000, xp) OpenVMS Alpha 7.3+ 2.2 可选 如果你计划做 JMeter 开发或者想使用 SUN 的 java 标准扩展包,你将需要下列更 多的可选包。 2.2.1 Java 编译器 如果你想编译 JMeter 源代码或者开发 JMeter 插件,你将需要一个完整的适当的 JDK1.4 或者更高。 2.2.2 SAX XML 解析器 JMeter 使用 Apache 的 Xerces XML 解析器,你可以选择告诉 JMeter 使用一 个不同的 XML 解析器。 这样做,把第三方的解析器的类包包含在 JMeter 的 classpath 中, 并更新 jmeter.properties 文件里的解析器实现的全类名。 2.2.3 Email 支持 JMeter 有有限的 Email 能力。 它能够发送基于测试结果的 Email,并且支持 POP/IMAP 取样器。它现在不支持 SMTP 取样。 为了能够支持 Email, 需要添加 Sun 的 JavaMail 包和 activation 包到 JMeter classpath 。 2.2.4 SSL 加密 为了测试一个使用 SSL 加密(HPPS)的 web 服务器, JMeter 需要一个提供 SSL 实现 (例如 Sun 的 Java Secure Sockets Extension - JSSE)。包含需要的加 密包到 JMeter 的 classpath。 同样,通过注册 SSL 提供者更新 system.properties 文件。 JMeter 默认协议等级 TLS(传输层安全性)。这可以通过修改在 jmeter.proerties 或者 user.properties 文件中的"https.default.protocol"来改变。 JMeter 被配置接受所有的证书,不管是否信赖和合法时间等。这允许在测试服 务器最大灵活性。 如果服务器需要一个客户端证书,这是可以提供的。 为了更好的管理证书,也要有一个 SSL 管理器 。 JMeter 代理服务器(见下)不支持记录 SSL(https)。 2.2.5 JDBC 驱动 如果你需要 JDBC 测试,需要添加厂商的 JDBC 驱动到 classpath。确认文件是一 个 jar 文件,而不是 zip。 2.2.6 Apache SOAP Apache SOAP 需要 mail.jar 和 activation.jar. 你需要下载并拷贝这两个 jar 文件到你 jmeter/lib 目录.一旦文件放到那里,JMeter 会自动找到它们。 2.2.7 BeanShell 为了运行 BeanShell 函数或者任何 BeanShell 测试元件(取样器,定时器等), 你需要从 http://www.beanshell.org/ 下载 beanshell 的 jar 文件并拷贝 jar 文件到 jmeter/lib 目录,JMeter 会自动找到它。 2.2.8 ActiveMQ 3.0 类库 详细参见 http://activemq.apache.org/initial-configuration.html 详细参见 JMeter Classpath 一章安装附加的 jar 包 2.3 安装 避免在一个有空格的路径安装 JMeter。这将导致远程测试出现问题。 我们推荐大多数用户运行最新版本 。 要安装一个构建版本,简单解压 zip/tar 文件到你想安装 JMeter 的目录。保证 一个 JRE/JDK 正确的安装并且设置环境变量 JAVA_HOME,其它不需要做什么了。 安装目录接口应该看到的像这样一些东西(2.3.1 版本): jakarta-jmeter-2.3.1 jakarta-jmeter-2.3.1/bin jakarta-jmeter-2.3.1/docs jakarta-jmeter-2.3.1/extras jakarta-jmeter-2.3.1/lib/ jakarta-jmeter-2.3.1/lib/ext jakarta-jmeter-2.3.1/lib/junit jakarta-jmeter-2.3.1/printable_docs 如果你想的话你可以重命名父目录(例如 jakarta-jmeter-2.3.1) ,但是不要 改变任何子目录命。父目录路径中不能包含任何空格;如果包含,你运行客户端 -服务器模式会有问题。 2.4 运行 JMeter 要运行 JMeter, 运行 jmeter.bat (for Windows) 或者 jmeter (for Unix) 文 件。那些文件在 bin 目录下。稍微暂停后,JMeter GUI 会显示出来。 在 bin 目录你会发现有些附加脚本很有用。Windows 脚本文件(CMD 文件需要 Win2K 或者更新): jmeter.bat - 运行 JMeter(默认在 GUI 模式) jmeter-n.cmd - 使用一个 JMX 文件运行非 GUI 测试 jmeter-n-r.cmd - 使用一个 JMX 文件远程运行一个非 GUI 测试 jmeter-t.cmd - 在 GUI 模式使用一个 JMX 文件 jmeter-server.bat - 以服务器模式启动 JMeter 注意: LAST 可以在 jmeter-n.cmd, jmeter-t.cmd 和 jmeter-n-r.cmd 中使用, 意味着最后一次测试会运行. Unix 脚本文件; 可以运行在大多 Linux/Unix 系统. jmeter - 运行 JMeter(默认在 GUI 模式) jmeter-server - 以服务器模式启动 JMeter 2.4.1 JMeter Classpath JMeter 自动从下列目录中的 jar 文件发现类。 JMETER_HOME/lib - 用来放使用的 jar 文件 JMETER_HOME/lib/ext - 用来放 JMeter 组件和扩展 如果你开发新的 JMeter 组件,你可以压缩它们成 jar 包并拷贝到 JMeter 的 /lib/ext 目录。JMeter 将会自动发现在这里的任何 jar 文件中的 JMeter 组件。 支持的 jar 文件(类库)应该放在 lib 目录. 如果你不想把扩展 jar 包放到 lib/ext 目录,可以在 jmeter.properties 中定义 search_paths 属性。不要使用 lib/ext 给那些公用的 jar 包;它仅仅是存放 JMeter 组件。 其他 jar 包 (例如 JDBC, 和任何 JMeter 代码需要支持的类库)应该被代替放在 lib 目录 - 而不是 lib/ext 目录。 注意 JMeter 会发现.jar 文件,而不是.zip 文件。 你可以在$JAVA_HOME/jre/lib/ext 安装有用的jar 文件,或者(自从 2.1.1 版本) 你可以在 jmeter.properties 中设置 user.classpath 属性。 注意设置 CLASSPATH 环境变量将不起作用。这是因为 JMeter 使用"java --jar" 启动,并且 java 命令无记录忽略 CLASSPATH 变量,并且当使用-jar 选项时 -classpath/-cp 选项也被使用。[所有的 java 程序都是这样,不仅仅是 JMeter。] 2.4.2 使用代理服务器 如果你从防火墙/代理服务器后测试,你需要提供给 JMeter 防火墙/代理服务器 的主机名和端口号。这样做,从命令行使用以下参数运行 jmeter.bat/jmeter 文件: -H [代理服务器主机名或者 ip 地址] -P [代理服务器端口] -N [非代理主机] (例如: *.apache.org|localhost) -u [代理证书用户名- 如果需要] -a [代理证书密码 - 如果需要] 例如 : jmeter -H my.proxy.server -P 8000 -u username -a password -N localhost 或者, 你使用 --proxyHost, --proxyPort, --username, and --password JMeter 也有自己的内建 HTTP 代理服务器,来记录 HTTP(不是 HTTPS) 浏览器会话。这是和上面的代理设置描述不混淆的,它是在 JMeter 发出 HTTP 或者 HTTPS 请求时使用的。 2.4.3 非用户界面模式 (命令行模式) 为了不相互影响测试, 你可以选择运行没有用户界面的 JMeter。这样做,使用 下列命令选项: -n 这是指定 JMeter 在非用户界面模式运行 -t [包含测试计划的 JMX 文件的名字] -l [记录取样结果的 JTL 文件的名字] -r 运行在 jmeter.properties 文件里所有的远程服务器 (或者通过在命令行覆 盖属性指定远程服务器) 这个脚本也允许我们指定可选的防火墙/代理服务器信息: -H [代理服务器主机名或者 ip 地址] -P [代理服务器端口] 例如 : jmeter -n -t my_test.jmx -l log.jtl -H my.proxy.server -P 8000 2.4.4 服务器模式 为了分布测试 ,在服务器模式运行 JMeter,并且通过用户界面控制每一台服务 器。 jmeter-server/jmeter-server.bat 脚本使用适当的 classpath 为你开始远程注 册。如果失败,参见关于 JMeter 服务器启动细节。 运行 jmeter-server/jmeter-server.bat,加上下列选项命令: 这个脚本也允许我们指定可选的防火墙/代理服务器信息: -H [代理服务器主机名或者 ip 地址] -P [代理服务器端口] 例如 : jmeter-server -H my.proxy.server -P 8000 2.4.5 通过命令行覆盖属性 Java 系统属性,JMeter 属性,和日志属性可以通过命令行直接覆盖(代替更改 jmeter.properties 文件)。这样做,使用下列选项: -D[prop_name]=[value] - 定义一个 java 系统属性值。 -J[prop name]=[value] - 覆盖一个 JMeter 属性。 -L[category]=[priority] - 覆盖一个日志设置,设置一个特殊目录为给定的优 先级。 -L 标志也可以使用没有目录名来设置根目录日志等级。 例如 : jmeter -Duser.dir=/home/mstover/jmeter_stuff \ -Jremote_hosts=127.0.0.1 -Ljmeter.engine=DEBUG jmeter -LDEBUG 注意 命令行参数在启动时较早被处理,但是在日志系统被设置以后。尝试使 用-J 标志更新 log_level 或者 log_file 属性无效。 2.4.6 日志和错误信息 如果 JMeter 发现一个错误, 一个消息将被写入日志文件。日志文件名在 jmeter.properties 文件中定义。一般定义为 jmeter.log 。并且在 JMeter 启 动目录,例如 bin。 当在 Windows 下运行时,如果你不设置 Windows 显示文件扩展名,文件名会仅显 示为 JMeter。[你可以做一些事都很容易地发现伪装成文本文件的病毒和垃圾文 件...] 还有记录错误,jmeter.log 文件记录一些测试运行信息。例如: 10/17/2003 12:19:20 PM INFO - jmeter.JMeter: Version 1.9.20031002 10/17/2003 12:19:45 PM INFO - jmeter.gui.action.Load: Loading file: c:\mytestfiles\BSH.jmx 10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Running the test! 10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Starting 1 threads for group BSH. Ramp up = 1. 10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Continue on error 10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 started 10/17/2003 12:19:52 PM INFO - jmeter.threads.JMeterThread: Thread BSH1-1 is done 10/17/2003 12:19:52 PM INFO - jmeter.engine.StandardJMeterEngine: Test has ended 日志文件对发现错误原因很有帮助,作为 JMeter 不会打断一个测试来显示一个 错误对话框。 2.4.7 命令行选项目录 调用 JMeter 的 "jmeter -?"命令将打印所有命令选项的一个列表。列表如下: -h, --help 打印使用信息并退出 -v, --version 打印版本信息并推出 -p, --propfile {argument} 使用的 JMeter 属性文件 -q, --addprop {argument} 附加的属性文件 -t, --testfile {argument} 运行的 JMeter 测试文件(.jmx) -l, --logfile {argument} 日志取样文件 -n, --nongui 非用户界面运行 JMeter -s, --server 运行 JMeter 服务器 -H, --proxyHost {argument} 设置 JMeter 使用的代理服务器 -P, --proxyPort {argument} 设置 JMeter 使用的代理服务器端口 -u, --username {argument} 设置 JMeter 使用的代理服务器用户名 -a, --password {argument} 设置 JMeter 使用的代理服务器密码 -J, --jmeterproperty {argument}={value} 定义附加的 JMeter 属性 -D, --systemproperty {argument}={value} 定义附加的 System 属性 -S, --systemPropertyFile {filename} 一个属性文件被做为系统属性添加 -L, --loglevel {argument}={value} 定义日志等级: [category=]level 例如 jorphan=INFO or jmeter.util=DEBUG -r, --runremote 从非用户界面模式启动远程服务器 -d, --homedir {argument} 使用的 JMeter 目录 2.5 配置 JMeter 如果你希望改变 JMeter 运行时的属性你需要改变在/bin 目录的 jmeter.properties 文件,或者创建你自己的 jmeter.properties 文件并且在命 令行指定它。 注意 自 从 2.1.2,你能够通过 JMeter 属性 user.properties 在文件中定义附加的 JMeter 属性,user.properties 默认值是 user.properties。如果在当前目录 被发现,这个文件被自动加载。类似的,system.properties 被用来更新 系统属性。 参数 属性 描述 需 要 ssl.provider 你可以为你的 SSL 实现指定类。如果你想使用来自 sun 的 JSSE ,是这 样: com.sun.net.ssl.internal.ssl.Provider。JMeter 默认提供 https 支持。如果你正在使用 JDK1.4, 或者你使用 带 JSSE 类的 jar 文件在 JMeter 的 classpath 里的 JDK1.4。 No com.sun.net.ssl.internal.ssl.Provider。 JMeter 默认提供 https 支持是在你使用 JDK1.4 或者 你使用把 JSSE 类的 jar 包放到 JMeter classpath 中的 JDK1.3 时候。 No xml.parser 你可以指明一个你的 XML 解析器实现。 默认值是: org.apache.xerces.parsers.SAXParser No remote_hosts 逗号分割远程 JMeter 主机列表。如果你在一个分布 式环境运行 JMeter,列出你用 JMeter 远程主机运行 的机器。这允许你使用机器的用户界面控制那些服 No 务器。 not_in_menu 在 JMeter 选项屏中你不想看到的组件列表。 如果 JMeter 被添加越来越多的组件,你会希望定制 JMeter 只出现那些你感兴趣的组件。你可以在这儿 列出那些类名和他们的类标签(JMeter的用户界面出 现的字符串), 它们将在选项屏中不出现。 No search_paths 列出那些 JMeter 搜索 JMeter 附加类的路径(以;分 割);例如附加的取样器。被添加到 lib/ext 目录的任 何 jar 包都被发现。 No user.classpath JMeter 搜索的公用类库的路径列表。被添加到 lib 目 录的任何 jar 包都被发现。 No user.properties 附加的 JMeter 属性文件名。 初始化属性文件后它 们被添加,但是在-q 和-J 选项被处理之前。 No system.properties 附加的系统属性文件名。 -S 和-D 选项被执行前添 加。 No 又见 jmeter.properties 文件注释,在你改变其它设置时会给你更多的信息。 3. 创建一个测试计划 一个测试计划描述了一系列 Jmeter 运行时要执行的步骤。一个完整的测试计划 包含一个或者多个线程组,逻辑控制器,取样发生控制,监听器,定时器,断言 和配置元件。 3.1 添加和删除元件 在一个树上通过右击可以添加元件到一个测试计划 ,并且从"添加"列表中选择 一个新元件。另外,元件可以从文件加载并且通过选择"打开"选项添加。 为了删除元件,确保元件被选中,正确在元件上右击,并且选择"删除"选项。 3.2 加载和保存元件 为了从文件加载元件,右击将要加载元件到的已经存在的树元件,并选择"打开" 选项。选择你的元件保存的文件。JMeter 会加载元件到树中。 为了保存树元件,在一个元件上右击,选择"保存"选项。JMeter 会保存已选的 元件,加上所有下面的子元件。用这种方法,你能够保存测试树的片段,单独元 件,或者整个测试计划。 工作台不会自动保存测试计划,但是它可以同上被单独保存 3.3 配置树元件 在测试树中的任何元件都在 JMeter 的右侧框架显示配置。那些配置允许你配置 测试元件的细节行为,对于一个元件什么能被配置依赖于它是一个什么类型的元 件。 可以通过拖拉测试树周围的元件操作测试树。 3.4 保存测试计划 虽然这不是必须的,我们推荐你在运行前保存测试计划。为了保存测试计划,从 文件菜单选择保存测试计划(使用最新版本,你不再需要首先选择测试计划元 件). JMeter 允许你保存整个测试计划树或者仅它的一部分.为了仅 保存测试计划树中特殊"支"位置的元件,从从这个"支"开始的 地方选择树中的测试计划元件 , 然后右击鼠标访问保存菜单 项.另外选择合适的测试计划元件并从编辑菜单选择保存. 3.5 运行一个测试计划 为了运行一个测试计划,从"运行"菜单项选择"开始"。为了停止你的测试计划, 从同样的菜单选择"停止"。JMeter 不会自动给它是否正在运行任何显示。如果 JMeter 运行,一些监听器使它变明显,但是唯一确定的方法是检查"运行"菜单。 如果"开始"不可用,"停止" 可用,证明 JMeter 正在运行你的测试计划(或者, 至少, 它认为它是)。 有两个类型的停止命令: 停止 (Control + '.') - 立刻停止所有的线程 关闭 (Control + ',')- 请求所有线程在当前任务结束后停止 3.6 作用域规则 JMeter 测试树包含元件总是分等级和顺序的。在测试树中的一些元件是严格分 级(监听器,配置元件,后置处理器,前置处理器,断言,定时器),一 些主要 是有序的(控制器,取样器)。当你创建测试计划时,你将创建一个有序的取样请 求(通过取样器)列表,那些请求描述了一组步骤的执行。那些请求常组织 在 也有序的控制器中。给出如下测试树: 测试树例子 请求的顺序是 One,Two,Three,Four。 一些控制器影响它的子元件的顺序,你可以在组件参考读到特定的控制器。 其他元素是分等级的。例如,一个断言在测试树中是分等级的。如果它的父元件 是请求,它就被应用于那个请求。如果它的父元件是控制器,它就影响所有那个 控制器下的所有请求。如下测试树: 分级例子 Assertion #1 仅被应用于请求 One, Assertion #2 仅被应用于 请求 Two 和 Three。 另一个例子,这次使用定时器: 复杂的例子 在这个例子里,请求的命名表现它们被执行的顺序。Timer #1 应用于 请求 Two, Three, 和 Four (注意对于分等级的元件怎样的顺序是不相关的)。Assertion #1 应用于请求 Three。Timer #2 对所有请求有效。 希望那些例子使你弄清了配置(分等级的)元件如何被应用。如果你想每个请求 都被树分叉拒绝,到它的父元件,到它的父元件的父元件,等等,每次收集所有 它的父元件的配置元件,你将看到它如何工作的。 元件首部管理器, Cookie 管理器和授权管理器的配置和默认元件的配置被视为 是不同的.默认元件配置的设置被并入取样器可以到达的一组值里了。然而来自 管理器的设置没有并入。如果多于一个管理器在一个取样器范围中,仅仅一个 被使用,但是现在没有办法指定那个被使用。 3.7 错误报告 JMeter 把警告和错误信息报告在 jmeter.log 文件中,也有一些测试运行本身的 信息.只是偶尔地,JMeter 对于某些错误是无法补捉和记录的,这些信息会 显 示在命令台上。如果一个测试的执行并不是你所期待的,请检查日志,也许错误 会被报告(例如:也许在函数调用上有语法错误)。 取样错误(例如:HTTP 404 - 找不到文件)是不会被正常的记录在日志中的,取 而代之的,他们会被当作取样结果的属性来储存,取样结果的状态能被许多不同 的监听器所得到。 4. 测试计划元件 测试计划对象有一个叫做"功能测试"复选框。如果被选择,它会使 JMeter 记录 来自服务器返回的每个取样的数据。如果你在测试监听器中选择一个文 件,这 个数据将被写入文件。如果你尝试一个较小的测试来保证 JMeter 配置正确并且 你的服务器正在返回期望的结果,这是很有用的。这样的后果就是这个文 件会 快速的增大,并且 JMeter 的效率会影响。如果你不做压力测试这个选项应该关 闭(默认关闭)。 如果你不记录数据到文件,这个选项就没有不同了。 4.1 线程组 线程组元件是任何测试计划的起点。一个测试计划的所有元件必须在一个线程组 下。由名字可以看出,线程组元件控制 JMeter 运行测试时使用的线程数。线程 组管理允许你: 设置线程数 设置 ramp-up period 设置执行测试的次数 每个线程会作为一个整体执行测试计划并完全独立于他测试线程。多线程用来模 拟到达服务器程序的同步连接。 Ramp-up period 告诉 JMeter 多久开始"ramp-up"选择的全部线程。如果使用 10 个线程,ramp-up period 是 100 秒,那么 JMeter 用 100 秒使所有 10 个线程启 动并运行。每个线程会在上一个线程启动后 10 秒( 100/10)启动。如果有 30 个 线程和一个 120 秒的 ramp-up period,那么每个连续的线程会延迟 4 秒。 Ramp-up 需要要充足长以避免在启动测试时有一个太大的工作负载,并且要充足 小以至于最后一个线程在第一个完成前启动(除非你想那样发生)。 使用 ramp-up=线程数启动,并上下调整到所需的。 默认,线程组被配置仅循环一次。 1.9 版本引入了一个测试运行*调度器*。 单击在线程组面板底部的复选框来显 示额外的文本域,在里面你可以输入启动和结束时间。当测试启动时,如果必须 JMeter 会等待启动时间到达。在每个周期 结束,JMeter 检验结束时间是否到达, 如果是,运行停止,如果不是测试被允许继续,直到迭代限制到达。 另外你可以使用启动延迟和持续时间文本域。注意启动延迟会覆盖启动时间,持 续时间会覆盖结束时间。 4.2 控制器 JMeter 有两种控制器:取样器和逻辑控制器。 取样器告诉 JMeter 发送请求到服务器。例如,如果你要 JMeter 发送一个 HTTP 请求添加一个 HTTP 请求取样器。你也可以通过添加一个或者多个配置元件到一 个取样器来定制一个请求。更多信息,见取样器。 逻辑控制器让你定制当发送请求时 JMeter 使用的判断逻辑。例如,你可以添加 交替控制器来在两个 HTTP 请求取样器之间交替 。更多信息,见逻辑控制器。 4.2.1 取样器 取样器告诉 JMeter 发送请求到服务器。JMeter 取样器包括: FTP 请求 HTTP 请求 JDBC 请求 Java object 请求 LDAP 请求 SOAP/XML-RPC 请求 WebService (SOAP) 请求 每个取样器有一些你可以设置的属性。你可以通过添加一个或多个配置元件到取 样器来进一步定制它。注意 JMeter 发送请求按照取样器出现在树中的顺序。 如果你想发送多个相同类型的请求(例如,HTTP Request)到相同的服务器,可 以考虑使用一个默认配置元件。每个控制器有一个或者多个默认配置元件(见 下)。 记得添加一个监听器到线程组来查看/保存你的请求结果到磁盘。 如果你对使用 JMeter 平台的基础验证器到你的请求响应感兴趣,添加一个断言 到请求控制器。例如, 在压力测试一个 web 程序时,服务器会返回一个成功的 HTTP 响应代码,但是这个页面有错误或者被忽略部分。你可以添加断言来检查 某个 HTML 标签,一些 错误字符串,等等。JMeter 允许你使用正则表达式创建 断言。 JMeter 內建取样器 4.2.2 逻辑控制器 保持 逻辑控制器让你定制当发送请求时 JMeter 使用的判断逻辑。逻辑控制器还可以 作为下列任何元件的子元件:取样器(请求)、配置元件、和其他逻辑控制器。 逻辑控制器可以改变来自它们的子元件的请求顺序。它们可以修改请求本身,导 致 JMeter 重复请求,等。 理解逻辑控制器在测试计划中的效果,考虑下列测试树: 测试计划 o 线程组 . 仅一次控制器 . 登录请求(一个 HTTP 请求) . 加载搜索页面(HTTP 取样器) . Interleave Controller . 搜索"A"(HTTP 取样器) . 搜索"B"(HTTP 取样器) . HTTP 默认请求(配置元件) . HTTP 默认请求(配置元件) . Cookie 管理器(配置元件) 这个测试的第一件事就是登录请求仅在第一次经过时被执行。随后的迭代会忽略 它。这应使用仅一次控制器。 登陆后,下一个取样器加载搜索页面( 假设一个用登录的 web 应用程序,并到 达搜索页面去搜索)。这仅是一个简单的请求,不会被任何逻辑控制器过滤。 加载搜索页面后,我们要做一个搜索。事实上,我们想做两个不同的搜索。然而, 在每个搜索之间我们想要自己重新加载搜索页面。我们通过 4 个简单 HTTP 元件 这样做。(load search, search "A", load search, search "B"). Instead, we use the Interleave Controller which passes on one child request each time through the test. It keeps the ordering (ie - it doesn't pass one on at random, but "remembers" its place) of its child elements. Interleaving 2 child requests may be overkill, but there could easily have been 8, or 20 child requests. 注意 HTTP 默认请求属于插入控制器。假如"Search A"和"Search B"共享同样的 PATH 信息(一个 HTTP 请求说明中包括域,端口,方法,协议路径和参数,附加 其他可选项)。两个搜索请求访问同样的后端搜索引擎(比方 说 Servle,或者 cgi 脚本),这样是说得通的。与其两者都配置使用相同信息的 HTTP 取样器, 我们可以抽象那些新到一个单独的配置元件。当内部控制 器通过"Search A"或 者"Search B"传递时,它会从 HTTP 默认请求配置元件中获得值填充空白。所以 我们可以为那些请求保留 PATH 域为空,然后把那些信息放到配置元件。在这个 例子中, 这至多是一个很小的好处,但它显示了这个特性。 在这个树中下一个元件是另一个 HTTP 默认请求,这个时间被添加到线程组本身。 这个线程组有一个内建的逻辑控制器,因此它正好使用这个配置元件做为 上面 的描述。它填充任何穿过的请求的空白。 在 web 程序中你所有的 HTTP 取样器元 件 DOMAIN 域为空,这是极度有用的,替代的,把那些信息放到 HTTP 默认请求元 件中,添加到线程组。通过这样 做,你可以在一个同的服务器通过改变你测试 计划中的一个域来测试你的程序。另外,你必须编辑每个取样器。 最后一个元件是一个 HTTP Cookie 管理器。一个 Cookie 管理器应该添加到所有 web 测试上-否则 JMeter 会忽略 Cookie。通过在线程组级添加它,我们可以确定 所有的线程分享同样的 Cookie。 逻辑控制器可以组合达到不同的结果。见内建逻辑控制器列表。 4.3 监听器 监听器提供访问 JMeter 收集当 JMeter 运行的关于测试计划的信息。图形结果监 听器在一张图上绘制响应时间。"查看结果树"监听器显示了请求和响应取样器的 细节,并且以基础的 HTML 和 XML 显示响应表现。其他监听器提供了摘要或者集 合信息。 另外,监听器可以指导它们收集的数据到一个文件供以后用。在 JMeter 中每一 个监听器提供一个域来指出存储数据的文件。 在测试中监听器可以添加到任何位置。它们仅仅会从它们等级或者它们以下等级 的元件收集数据。 伴随 JMeter 有很多有趣的监听器。 4.4 定时器 默认,JMeter 线程发送请求时不在请求间暂停。我们建议你通过添加一个可用 的定时器到你的线程组来指定一个延迟。如果你不添加延迟,JMeter 会在短时 间内产生太多请求,可能会压倒你的服务。 定时器会使 JMeter 在一个线程开始每个请求间延迟一段时间。 如果你选择添加多于一个定时器到一个线程组,JMeter 会在执行取样器前获得 定时器数量并暂停那个时间量。 4.5 断言 断言允许你断言关于从测试服务器收到的响应的行为。使用断言你本质上你可以 测试你的应用程序返回你期望的结果。 例如,你可以断言一个查询的响应会包含一些特殊的文本。你指定的文本可能是 Perl 风格的正则表达式, 并且你可以指出这个响应是包含这个文本,还是匹配 整个响应。 你可以添加一个断言到任何取样器。例如你可以添加一个断言到 HTTP 请求检查 文本"