如何在REST调用中省略参数

时间:2019-02-14 11:12:59

标签: groovy automation ready-api

对于我的自动化项目,我将有很多测试套件和测试用例,它们具有很多组合。为此,我使用ReadyAPI进行自动化。

对于每个测试套件,我都输入了必要的参数,以便可以在每个测试用例中使用。在ReadyAPI中,您可以在创建的Web服务上的“项目”标签中进行操作。

现在,对于特定的测试用例,并不是所有参数都可以填写,而REST请求无论如何都将所有参数作为emtpy字符串发送。

对于这个项目,这是有害的,因为空字符串可以给出答案,而这不是我想要的。

例如:

Testsuite参数:名称,cbe_number,国家/地区,市镇,邻居,街道,门牌号,po_box

测试用例:搜索公司名称

对于此测试用例,仅参数“名称”将被填充,但是当我发送请求时,所有其他参数也将被填充在URL中。 我的问题是:“如何在每个测试用例中省略其他参数?”

答案是,目前尚不可能,但应该进行一些工作。虽然这对我不起作用。我遵循了Kudoed主持人给我的步骤,其中缺少一个步骤,但是即使在修复此步骤之后,在调试之后GroovyScript仍然会显示错误消息。 “ wslite.rest.RESTClientException:URL和方法是必需的 第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]以及它们值,但仍然有错误消息..... 预先感谢您对此进行调查。

1 个答案:

答案 0 :(得分:0)

该代码可以正常工作:

@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}')为您提供了一个空或无效的值