如何使用java,RestAssured测试Web服务自动替换Json目标文件中的两个单独的ID

时间:2014-08-06 15:18:44

标签: java json groovy

我正在使用java,RestAssured,groovy表示法等测试Web服务。

我有单独的模块,它们在传递请求方法方面相互依赖。比如POST,PUT。当我想在模块上执行POST请求时,在json模式中,我必须将现有的id从两个不同的模块传递到文件中。分别是site_id和group_id。

下面是我存储在文件中的json架构:

{
"site_id": 10,
"permission": "admin.client.add",
"group_id": 3
}

下面是我的代码:从我的页面类开始使用Page对象框架。

    public String postpermission(String siteid, String grpid)
    throws FileNotFoundException, IOException, ParseException {

    Object obj = parser.parse(new FileReader(path
            + "/resources/permission/postpermission.json"));
    String d = obj.toString();

    Object objecc = parser.parse(d.replaceFirst("3", grpid));

    Object objec = parser.parse(d.replaceFirst("10", siteid));
    JSONObject jsonPostBody = (JSONObject) objec;

    jsonPostBody = (JSONObject) objecc;

    return postRequest(jsonPostBody, permissionURI, 201, "data.id",
            "postpermission()", false);

    }

以下是我的测试类的代码:

@Test
public void postpermission() throws FileNotFoundException, IOException,
        ParseException {

    String siteid = sites.postsites();
    String grpid = group.postGroup();
    String permid = permission.postpermission(siteid, grpid);
    permission.deletepermission(permid);

    }

注意:使用此代码,我可以替换一个ID,但它不会替换第二个ID。请任何人都可以为我提供更好的工作方式。

感谢您的期待。

1 个答案:

答案 0 :(得分:1)

您需要注意replaceFirst方法不会更改原始String,它会将结果作为新String返回。

因此,在您的情况下,您需要将第一个replaceFirst结果重新分配给变量d。代码如下:

d = d.replaceFirst("3", grpid);

Object objec = parser.parse(d.replaceFirst("10", siteid));

或者你可以使用更简单的一个:

Object objec = parser.parse(d.replaceFirst("3", grpid).replaceFirst("10", siteid));

关于JSON模式的另一个建议(我想称之为json模板),最好有占位符而不是使用数字。

{
"site_id": {site_id},
"permission": "admin.client.add",
"group_id": {group_id}
}

如果您需要在json模板上做更多的事情,也可以签出这个JSON template项目。