请求在 ReadyAPI 中不起作用,尽管它在 swagger 或 Postman 中有效

Request not working in ReadyAPI though it works in swagger or Postman

我从 swagger 导入的请求有问题。

我有一个看起来像 /m2m/fim/items?filter=(tags=DEVICE)&exclude=tags,objectClass,href,operations,attributes,metadata,factory&expand=properties&limit=20

的请求

swagger 我可以测试它,如果我在 Postman 中导入它,它也能正常工作。它给了我当前的请求:

curl -X GET \ 'http://xx.xx.xxx.xxx/m2m/fim/items?filter=(tags%3DDEVICE)&exclude=tags%2CobjectClass%2Chref%2Coperat...' \

我的 SOAP 请求看起来像

"GET /m2m/fim/items?filter=%28tags%3DDEVICE%29&exclude=tags%2CobjectClass%2Chref%2Coperations%2Cattributes%2Cmetadata%2Cfactory&expand=properties&limit=20 HTTP/1.1[\r][\n]"

看起来 'filter' 参数的括号被转换为请求(这不会发生在 Postman 中),那么我的请求失败了。

任何人都可以告诉我可以使用哪种语法以使括号不会被解释吗?

谢谢

EDIT :在我的 HTTP 日志中,我可以看到 "Accept-Encoding: gzip,deflate" 这不是我想要的。在邮递员中,我有 header Accept: application/json.

我知道如何从首选项中删除我当前的 header,但我不知道如何设置想要的 header。有人知道吗?

解决方案但未完成。

我找到了问题所在,我需要一个 header Accept: application/json

现在我的问题是以一种简单的方式将它添加到我所有测试用例中的所有请求中(我有 400 多个请求)

亚历克斯

几种加法header:

  • 在请求本身中:select header 选项卡并添加它

  • 在资源级别: 在“项目”选项卡中 select 资源。

在资源路径的右侧,select“参数”选项卡,然后单击“添加参数”。

设置名称和值以及select样式为HEADER。

这将对 SoapUI 选项卡中此资源下的所有请求设置 header

  • 在项目级别,为了更新所有测试用例中的所有请求:

在“项目”选项卡中,在事件处理程序管理器中添加一个事件。 使用以下内容添加 RequestFilter.filterRequest 事件:

def headers = request.requestHeaders headers.put( "Accept", "application/json" ) request.requestHeaders = headers

警告!仅使用一次,否则 header 将在每个请求的启动时添加

最后 我使用了以下 groovy 脚本:

` 导入 com.eviware.soapui.support.types.StringToStringMap

testRunner.testCase.testSuite.project.testSuites.each {

suite ->
suite.getValue().testCases.each
{
    q1->
    q1.getValue().testSteps.each
    {
        it->
        if (it.getValue().config.type.equals("restrequest"))
        {
            //Get the headers of the current teststep
            def headers = it.getValue().getHttpRequest().getRequestHeaders()
            //log.info "headers = " + headers
            def list = []
            //Append the new header to the existing list
            list.add("application/json")
            log.info "list = " + list
            headers["Accept"] = list;
            //Set the updated header list
            it.getValue().getHttpRequest().setRequestHeaders(headers)
        }
    }
}

}
`

虽然我觉得一定有方法可以做出之前的解法one-shot(但是我groovy不够熟练,找不到)