27. JUnit 采样器教程¶
本教程试图解释新的 JUnit Sampler for JMeter 的基本设计、功能和用法。采样器是在 JMeter 的 2.1.2 版本中引入的。早期版本没有采样器。
27.1 设计¶
当前实现支持标准 JUnit 约定和扩展,例如oneTimeSetUp 和oneTimeTearDown。可根据要求添加其他功能。采样器的工作方式与 JavaSampler 类似,但有一些区别。
- 它不使用 JMeter 的测试接口,而是扫描 jar 文件以查找扩展 JUnit 的 TestCase类的类。这意味着任何类或子类。
- JUnit 测试 jar 文件被复制到jmeter/lib/junit而不是 jmeter/lib
- JUnit 采样器不使用名称/值对进行配置。采样器假定
setUp和tearDown将正确配置测试。
注意:setUp和tearDown方法必须声明为public,以便 JMeter 可以使用它。
- 采样器仅测量测试方法的经过时间,不包括 setUp和tearDown。
- 每次调用测试方法时,JMeter 都会将结果传递给监听器。
- 对oneTimeSetUp和oneTimeTearDown的支持是作为一种方法完成的。由于 JMeter 是多线程的,我们不能像 maven 那样调用oneTimeSetUp / oneTimeTearDown 。
- 采样器将意外异常报告为错误。
27.2 功能¶
这是功能的描述。
- 姓名
- 样品的名称。这与所有 JMeter 采样器相同。
- 包过滤器
- 提供了一种按包名过滤类的方法。
- 班级名称
- 要测试的类的名称。采样器将扫描 jmeter/lib/ext和jmeter/lib/junit中的 jar 文件以查找扩展 JUnit 的TestCase的类。
- 构造函数字符串
- 要传递给测试类的字符串构造函数的字符串。
- 测试方法
- 在采样器中测试的方法的名称。
- 成功讯息
- 指示成功意味着什么的描述性消息。
- 成功代码
- 表示测试成功的唯一代码。
- 失败信息
- 指示失败意味着什么的描述性消息。
- 故障码
- 表示测试失败的唯一代码
- 错误信息
- 错误描述
- 错误代码
- 一些错误代码。不需要是唯一的
- 不要调用setUp和tearDown
- 设置采样器不调用setUp和tearDown。默认情况下,应该调用setUp和
tearDown 。不调用这些方法可能会影响测试并使其不准确。应谨慎使用此选项。
如果选择的方法是oneTimeSetUp或oneTimeTearDown,则应选中此选项。
- 附加断言错误
- 默认情况下,采样器不会将断言失败附加到失败消息中。要查看结果树中的消息,请选中该选项。
- 附加运行时异常
- 默认情况下,采样器不会将异常附加到失败消息中。要查看堆栈跟踪,请检查选项
采样器的当前实现将首先尝试使用字符串构造函数创建一个实例。如果测试类未声明字符串构造函数,则采样器将查找空构造函数。下面的例子:
构造函数示例¶
空构造函数:
public class myTestCase { public myTestCase() {} }字符串构造函数:
public class myTestCase { public myTestCase(String text) { super(text); } }
默认情况下,JMeter 将为成功/失败代码和消息提供一些默认值。用户应该定义一组唯一的成功和失败代码,并在所有测试中统一使用它们。
27.3 用法¶
这是一个简短的步骤。
- 编写您的 JUnit 测试并 jar 类
- 将 jar 文件复制并粘贴到jmeter/lib/junit目录中
- 启动 JMeter
- 选择测试计划
- 右键
- 选择线程组
- 右键
- 在名称中输入我的单元测试
- 输入你的 JUnit 测试包
- 选择您要测试的课程
- 选择要测试的方法
- 在成功消息中输入测试成功
- 成功码输入1000
- 在失败消息中输入测试失败
- 在故障码中输入0001
- 选择线程组
- 右键
JUnit 采样器的一个好处是它允许用户从各种单元测试中选择任何方法来创建测试计划。这应该会减少用户为创建各种测试场景而需要编写的代码量。从一组基本的测试方法中,可以使用 JMeter 的 GUI 创建不同的序列和测试。
例如:
测试计划1
TestCase1.testImportCustomer TestCase2.testUpdateRandomCustomer TestCase1.testSelect100 TestCase2.testUpdateOrder TestCase1.testSelect1000
测试计划2
TestCase1.testImportCustomer TestCase1.testSelect100 TestCase1.testSelect1000 TestCase2.testAdd100Customers
27.4 一般指南¶
以下是编写 JUnit 测试的一些通用指南,以便它们与 JMeter 一起工作。由于 JMeter 运行多线程,因此记住某些事情很重要。
- 编写setUp和tearDown方法,使它们是线程安全的。这通常意味着避免使用静态成员。
- 使测试方法成为离散的工作单元,而不是长序列的动作。通过将测试方法保持为离散操作,可以更轻松地组合测试方法来创建新的测试计划。
- 避免使测试方法相互依赖。由于 JMeter 允许对测试方法进行任意排序,因此运行时行为不同于默认的 JUnit 行为。
- 如果测试方法是可配置的,请注意属性的存储位置。建议从 Jar 文件中读取属性。
- 每个采样器都会创建一个测试类的实例,因此请编写您的测试,以便设置发生在oneTimeSetUp和oneTimeTearDown中。
- 如果您选择了一个类并且没有显示任何方法,则意味着采样器在创建测试类的实例时遇到了问题。最好的调试方法是将一些System.out添加 到你的类构造函数中,看看发生了什么。