0

我需要进行一个测试,以调用一个生成安全令牌的 REST 端点,然后再对被测的实际系统进行第二次调用。为了做到这一点,我使用 smartrics.rest.fitnesse.fixture.RestFixture 并将实例化中的 baseurl 设置为第一个基数。我正在尝试进行此调用,然后将新的 baseurl 设置为新位置,但这样做时遇到了麻烦。

通过仔细阅读代码,似乎有一个方法 setBaseUrl(Url url) 但我找不到使用它的示例,并且我自己无法弄清楚。

有没有人对此有任何运气,或者是否有另一种更好/更简单的方法来实现这一目标?

4

2 回答 2

1

我们有一个听起来类似的要求——我们需要使用 RestFixture(POST) 来检索一个 URL,以便在后续的 RestFixture 调用 (GET) 中使用。(请注意,我们使用的是古老的 RestFixture 1.1)

我因此修改了 RestFixture.java 中的 processArguments() 方法:

// baseUrl = new Url(args[0]); // original line baseUrl = new Url(resolve(args[0])); // modified

进行此修改后,我的 Fitnesse 测试如下所示:

`!| 休息夹具 | http:///fds |
| setBody |{"param1":"blah","param2":"blather"} |
| 发布 | /GetThatUrl | 200 | | |
| 让 | $url结果| 身体 | |

!| 休息夹具 | $url结果|
| 获取| | 200 | 内容长度:[\d]+ | ||`

如果没有更改代码,$urlresult 就无法解析,我无法将 URL 作为变量传递。

于 2014-03-07T00:24:56.343 回答
1

问题在于 RestFixture:processRow - 因为它使用 Java 反射,所以它尝试调用不带参数的方法。这将失败,因为 setBaseUrl 接受一个参数 (Url)。我尝试了一种修改,虽然不是实现它的最佳方法 - 当前代码 RestFixture v3.0 (RestFixture.processRow()):

method1 = getClass().getMethod(methodName);
method1.invoke(this);

RestFixture.processRow() 中的修改代码:

Method[] methods = getClass().getMethods();

int i = 0;
for(i = 0; i < methods.length; i++){
    if(methodName.equals(methods[i].getName())){
        method1 = methods[i];
        break;
    }
}

Class[] paramTypes = method1.getParameterTypes();

List<Object> params = new ArrayList<Object>();

for(i = 0; i < paramTypes.length; i++){
    String cellText = row.getCell(i+1).text();
    Object param = paramTypes[i].getConstructor(String.class).newInstance(cellText);
    params.add(param);
}

method1.invoke(this, params.toArray());

完成此修改后(您可能需要添加所需的导入 - java.lang.InstantiationException、java.lang.Object、java.util.ArrayList;以及 InstantiationException 的异常处理程序),重新构建 RestFixture 并且应该可以工作。

于 2014-01-30T15:22:52.617 回答