- [获取测试用例对象](#Get-test-case-object)
- [将测试运行状态改为失败](#Fail-the-Test-Run)
- [终止测试](#Stop-Test-Execution)
- [通过测试步骤名称运行测试步骤](#Run-Test-Step-By-Name)
- [创建 context 对象的属性](#Create-Context-Related-Property)
- [分叉测试用例](#Branch-Test-Case)
- [创建断言](#Create-an-Assertion)
- [修改断言](#Modify-Assertion)
- [移除断言](#Remove-Assertions)
- [获取属性值](#Get-Property-Value)
- [设置属性值](#Set-Property-Value)
**<span id="Get-test-case-object">获取测试用例对象</span>**
```
def case = testRunner.testCase;
```
通过 [testCase](https://support.smartbear.com/readyapi/apidocs/soapui/com/eviware/soapui/model/testsuite/TestCase.html) 对象访问或操作项目的测试项。
**<span id="Fail-the-Test-Run">将测试运行状态改为失败</span>**
1、如果只是让 Groovy Script 测试步骤失败,在脚本中抛出一个异常:
~~~
throw new Exception("Result not as expected!")
~~~
如果测试用例中的 **Abort test if an error occurs** 选项被勾选, 那么测试将停止。否则,测试将继续执行。
2、如果要让整个测试运行失败,使用 `testRunner.fail` 方法。无论是否勾选 **Abort test if an error occurs** 选项,测试用例都将被标记失败并停止执行。
~~~
testRunner.fail("Result not as expected!")
~~~
**<span id="Stop-Test-Execution">终止测试</span>**
`testRunner` 脚本对象停止当前测试运行的两个方法:
- `cancel(String reason)` - 停止运行测试,并标记为 *Canceled* 。String 参数填写终止测试的原因。
- `fail(String reason)` - 停止运行测试,并标记为 *Fail* 。String 参数填写终止测试的原因。
~~~
if (testObject == null)
{
testRunner.fail("testObject was not found") // 停止运行测试
}
~~~
**<span id="Run-Test-Step-By-Name">通过测试步骤名称运行测试步骤</span>**
使用 `testRunner` 对象的 `runTestStepByName` 方法,运行当前测试用例中的任意一个测试步骤。该方法运行指定的测试步骤并返回结果。例如,下面的代码片段在脚本开始时运行了 10 个随机请求:
~~~
// 运行 10 个随机请求
for( i in 1..10 )
{
if( Math.random() > 0.5 )
testRunner.runTestStepByName( "Request 1")
else
testRunner.runTestStepByName( "Request 2")
}
// Do something else
~~~
**<span id="Create-Context-Related-Property">创建 context 对象的属性</span>**
创建一个 `foo` 属性,并在另一个 groovy 脚本中访问该属性(仅限当前测试用例):
~~~
// Script 1
context.foo = "My Value"
// Script 2
log.info(context.foo)
~~~
**<span id="Branch-Test-Case">分叉测试用例</span>**
使用 `testRunner` 对象的 `gotoStepByName` 方法,在脚本执行完后跳转到指定测试步骤继续执行。例如,随机选择下一个测试步骤:
~~~
if( Math.random() > 0.5 )
testRunner.gotoStepByName( "Request 1")
else
testRunner.gotoStepByName( "Request 2")
// do something else before executing one of the requests
~~~
**<span id="Create-an-Assertion">创建断言</span>**
创建断言的步骤:
1、通过 `testCase` 对象的 `getTestStepByName` 方法得到一个测试步骤。
2、使用 `addAssertion` 方法添加一个断言,并设置断言名称。
ReadyAPI 将使用指定的名称和默认的配置来创建一个新的断言。
>[warning]如果指定的名称已存在,你将被提示:断言名称不能重名。此时测试将停止,直到关闭对话框。
为 *Test Request* 步骤添加一个 [Valid HTTP Status Codes]() 断言:
~~~
// Get the test step object
def ts = testRunner.testCase.getTestStepByName("Test Request")
// Add the assertion
def vas = ts.addAssertion("Valid HTTP Status Codes")
~~~
**<span id="Modify-Assertion">修改断言</span>**
使用特定的断言方法,修改已创建的断言。例如,使用 `Assertion` 对象的 `setCodes` 方法,修改 [Valid HTTP Status Codes]() 和 [Invalid HTTP Status Codes]() 断言的预期值。
在创建断言时,获得 `Assertion` 对象:
~~~
// 获取测试步骤对象
def ts = testRunner.testCase.getTestStepByName("Test Request")
// 添加断言
def vas = ts.addAssertion("Valid HTTP Status Codes")
// 设置断言 code
vas.setCodes("200,202")
~~~
修改已创建的断言:
~~~
// 获取测试步骤对象
def ts = testRunner.testCase.getTestStepByName("Test Request")
// 遍历所有断言
for ( e in assertionsList)
{
// 如果断言名称匹配
if (e.getName() == "Valid HTTP Status Codes")
{
// 设置断言 code
e.setCodes("503, 504")
}
}
~~~
**<span id="Remove-Assertions">移除断言</span>**
使用 `removeAssertion` 方法移除断言,方法参数为要移除的断言对象。
移除上面创建的断言:
~~~
// 获取测试步骤对象
def ts = testRunner.testCase.getTestStepByName("Test Request")
// 遍历所有断言
for ( e in assertionsList)
{
// 如果断言名称匹配
if (e.getName() == "Valid HTTP Status Codes")
{
// 移除断言
ts.removeAssertion(e)
}
}
~~~
**<span id="Get-Property-Value">获取属性值</span>**
获取属性值的步骤:
1、获取包含该属性的对象。
2、使用 `getPropertyValue()` 方法获取属性对象。
获取测试套件的属性:
~~~
// 获取测试套件对象的 username 属性
def username = testRunner.testCase.testSuite.getPropertyValue( "Username" )
~~~
**<span id="Set-Property-Value">设置属性值</span>**
使用 `setPropertyValue()` 方法设置属性值。例如,设置 *HTTP Request* 步骤的 *Username* 参数的值:
~~~
// Write the username to the HTTP Request
testRunner.testCase.testSteps["HTTP Request"].setPropertyValue( "Username", username )
~~~
参考资料:
1. [Groovy Script - Working With](https://support.smartbear.com/readyapi/docs/soapui/steps/groovy.html#working-with)
---
:-: --- 贡献者名单(排名不分先后) ---
:-: **材料**
:-: **编写**
李云
:-: **校验**
:-: **支持**
- 基础知识
- 属性
- 属性分类
- 属性扩展
- Get Data 对话框
- 断言
- 关于断言
- 使用断言
- 断言类型
- Response SLA
- Script
- Property Content Assertions
- Contains
- Equals
- Equals Binary
- JSONPath Count
- JSONPath Existence Match
- JSONPath Match
- JSONPath RegEx Match
- Message Content
- Not Contains
- XPath Match
- XQuery Match
- Compliance Assertions
- Swagger Compliance
- Schema Compliance
- HTTP Header Exists
- HTTP Header Equals
- JDBC Assertions
- 复制断言
- 术语
- 脚本
- 关于脚本
- 脚本编辑器
- JSONPath
- Projects
- SoapUI
- 测试步骤
- Groovy Script
- DataSource
- Conditional GoTo
- REST Request
- ReadyAPI
- 环境
- 关于环境
- 创建环境
- Rest Services
- Custom Properties
- JDBC Connections
- 团队协作
- 集成
- GitLab
- 第三方库
- Groovy 库
- Java 库
- 自定义ReadyAPI
- 首选项
- 全局属性
- ReadyAPI
- Code Templates
- JVM 设置
- 修改
- 实战指导
- 项目属性
- Groovy
- 代码片段
- 开发规范 v0.1
- 属性
- inbox
- FAQ
- 安装配置
- 复合工程
- 修改文件夹或文件名称