如何在 REST 调用中省略参数
How to omit parameters in a REST call
对于我的自动化项目,我会有很多测试套件和测试用例,它们有很多组合。为此,我使用 ReadyAPI 进行自动化。
对于每个测试套件,我都输入了必要的参数以便能够在每个测试用例中使用。在 ReadyAPI 中,您可以在创建的网络服务的选项卡 "Projects" 中执行此操作。
现在,并非所有参数都将为特定测试用例填写,而 REST 请求无论如何都会将所有参数作为空字符串发送。
对于这个项目,这是有害的,因为空字符串可能会给出答案,而这不是我要找的。
例如:
测试套件参数:姓名,cbe_number,国家,自治市,邻居,街道,门牌号,po_box
测试用例:按名称搜索公司
对于这个测试用例只有参数'name'会被填入,但是当我发送请求时,所有其他参数也被填入URL。
我的问题是:"How can I, per testcase, omit the other parameters please?"
答案是目前这不可能,但应该有变通办法。虽然它对我不起作用。我已经按照 Kudoed 版主给我的步骤进行操作,我错过了 1 步,但即使在修复了这一步之后,GroovyScript 在调试后仍然给出错误消息。
"wslite.rest.RESTClientException: URL 和方法是必需的
line:26
时出错
这是 GroovyScript:
import wslite.rest.*
def getMap = { key ->
def props = context.testCase.propertyNames.findAll { it.startsWith(key)}
def result = [:]
props.each { result [it.split('_').last()] = context.testCase.getPropertyValue(it) }
result
}
def headerz = getMap('HEADER')
def queriez = getMap('QUERY')
log.info headerz
log.info queriez
def serviceHost = context.expand('${#Project#SERVICE_HOST_PORT}')
def urlPath = '/agents/organizations'
def client = new RESTClient(serviceHost)
def response = client.get(path: urlPath,
accept: ContentType.JSON,
query : queriez,
headers: headerz
)
assert response.statusCode == 200
log.info groovy.json.JsonOutput.prettyPrint(response.text)
我已经在 SmartBear>bin>ext 文件夹中安装了 jar 包 wslite,我创建了一个带有端点的新 Web 服务,我在测试用例级别添加了参数 HEADER_[value] 和 QUERY_[value]与他们的价值观,但我仍然有错误信息.....
在此先感谢您对此的调查。
代码工作正常:
@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='1.1.3')
import wslite.rest.*
def client = new RESTClient('https://httpbin.org:443')
def response = client.get([
path: '/get',
accept: ContentType.JSON,
query : [aaa:1,bbb:2],
headers: [ccc:'333',ddd:'444']
])
assert response.statusCode == 200
println groovy.json.JsonOutput.prettyPrint(response.text)
但是对于下面的代码
def client = new RESTClient('')
你会得到异常 wslite.rest.RESTClientException: URL and Method are required
所以,这意味着 context.expand('${#Project#SERVICE_HOST_PORT}')
给你一个空值或无效值
对于我的自动化项目,我会有很多测试套件和测试用例,它们有很多组合。为此,我使用 ReadyAPI 进行自动化。
对于每个测试套件,我都输入了必要的参数以便能够在每个测试用例中使用。在 ReadyAPI 中,您可以在创建的网络服务的选项卡 "Projects" 中执行此操作。
现在,并非所有参数都将为特定测试用例填写,而 REST 请求无论如何都会将所有参数作为空字符串发送。
对于这个项目,这是有害的,因为空字符串可能会给出答案,而这不是我要找的。
例如:
测试套件参数:姓名,cbe_number,国家,自治市,邻居,街道,门牌号,po_box
测试用例:按名称搜索公司
对于这个测试用例只有参数'name'会被填入,但是当我发送请求时,所有其他参数也被填入URL。 我的问题是:"How can I, per testcase, omit the other parameters please?"
答案是目前这不可能,但应该有变通办法。虽然它对我不起作用。我已经按照 Kudoed 版主给我的步骤进行操作,我错过了 1 步,但即使在修复了这一步之后,GroovyScript 在调试后仍然给出错误消息。 "wslite.rest.RESTClientException: URL 和方法是必需的 line:26
时出错这是 GroovyScript:
import wslite.rest.*
def getMap = { key ->
def props = context.testCase.propertyNames.findAll { it.startsWith(key)}
def result = [:]
props.each { result [it.split('_').last()] = context.testCase.getPropertyValue(it) }
result
}
def headerz = getMap('HEADER')
def queriez = getMap('QUERY')
log.info headerz
log.info queriez
def serviceHost = context.expand('${#Project#SERVICE_HOST_PORT}')
def urlPath = '/agents/organizations'
def client = new RESTClient(serviceHost)
def response = client.get(path: urlPath,
accept: ContentType.JSON,
query : queriez,
headers: headerz
)
assert response.statusCode == 200
log.info groovy.json.JsonOutput.prettyPrint(response.text)
我已经在 SmartBear>bin>ext 文件夹中安装了 jar 包 wslite,我创建了一个带有端点的新 Web 服务,我在测试用例级别添加了参数 HEADER_[value] 和 QUERY_[value]与他们的价值观,但我仍然有错误信息..... 在此先感谢您对此的调查。
代码工作正常:
@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='1.1.3')
import wslite.rest.*
def client = new RESTClient('https://httpbin.org:443')
def response = client.get([
path: '/get',
accept: ContentType.JSON,
query : [aaa:1,bbb:2],
headers: [ccc:'333',ddd:'444']
])
assert response.statusCode == 200
println groovy.json.JsonOutput.prettyPrint(response.text)
但是对于下面的代码
def client = new RESTClient('')
你会得到异常 wslite.rest.RESTClientException: URL and Method are required
所以,这意味着 context.expand('${#Project#SERVICE_HOST_PORT}')
给你一个空值或无效值