这一章介绍测试监听器,在Katalon左侧导航栏可以看到一个命名为Test Listeners的目录文件,在该目录下可以创建测试监听器,监听器功能很强大,文末我会举一个简单的例子,我们也可以用监听器来做数据恢复方面的工作。
-------------------------------
测试监听器是自5.2版以来引入的Katalon Studio的新功能。这是一种非常灵活的方式来帮助我们扩展当前的测试流程。简单来说,测试监听器是基于自己的标准创建的测试步骤,将在条件匹配时执行。
管理监听器
测试侦听器可以与其他测试用例一样对待,我们可以用其执行所有基本操作,如创建,复制/剪切,重命名或删除。测试监听器位于“测试资源管理器”窗格, 下面来创建测试监听器:
右键单击右侧导航栏中的Test Listeners。选择New > New Test Listener,如图:
创建新的测试侦听器时,我们可以看到New Test Listener对话框中有4个选项:
对应的意思应该很容易理解,如下图:
我们可以选择一个或多个选项,选择完成后,Katalon Studio将相应地生成示例模板:
class NewTestListener {
/**
* Executes before every test case starts.
* @param testCaseContext related information of the executed test case.
*/
@BeforeTestCase
def sampleBeforeTestCase(TestCaseContext testCaseContext) {
println testCaseContext.getTestCaseId()
println testCaseContext.getTestCaseVariables()
}
/**
* Executes after every test case ends.
* @param testCaseContext related information of the executed test case.
*/
@AfterTestCase
def sampleAfterTestCase(TestCaseContext testCaseContext) {
println testCaseContext.getTestCaseId()
println testCaseContext.getTestCaseStatus()
}
/**
* Executes before every test suite starts.
* @param testSuiteContext: related information of the executed test suite.
*/
@BeforeTestSuite
def sampleBeforeTestSuite(TestSuiteContext testSuiteContext) {
println testSuiteContext.getTestSuiteId()
}
/**
* Executes after every test suite ends.
* @param testSuiteContext: related information of the executed test suite.
*/
@AfterTestSuite
def sampleAfterTestSuite(TestSuiteContext testSuiteContext) {
println testSuiteContext.getTestSuiteId()
}}
从上面的代码中可以看出,生成的模板已经添加了必要的注释,来帮助我们将当前的测试流程扩展到更高的级别。
- 测试监听器没有限制,用户可以创建多个监听器。
- 如果存在超过一个测试监听器,监听器则按字母顺序在Katalon存储中实例化,自上向下执行。
- 测试列表中任何步骤的执行状态都不会影响已执行测试用例的整体状态(例如:如果在你的测试监听器中有一个失败的输出,但是执行的测试用例的状态是通过,那么最终测试用例的状态)。
监听器应用举例
假如我们需要在控制台输入一个测试套件中一共跑了多少条测试用例(带的测试分析报告中可以看到,这里只举例用)。思路是设置一个全局变量,因为每执行一条用例前,都会先执行监听器中的代码,执行一条用例,我们就在监听器中执行+1操作,最后打印变量到控制台,代码如下:
class NewTestListener {
/**
* Executes before every test case starts.
* @param testCaseContext related information of the executed test case.
*/
@BeforeTestCase
def sampleBeforeTestCase(TestCaseContext testCaseContext) {
GlobalVariable.abc++
println(GlobalVariable.abc)
}
}
我的测试套件中一共放了四条用例,如图:
控制台中输入全局变量abc的值,如图: