如何在不使用UI的情况下自动执行Java应用程序测试?

时间:2014-01-29 12:25:42

标签: grails testing automation

我可以访问代码库(从SVN检出我的本地机器)。它是使用Java和Groovy使用Grails框架(MVC架构)编写的。我是测试人员,作为自动化测试的一部分,我想编写将调用控制器的代码,作为回报,我可以查看数据库中的响应或条目。我基本上想跳过UI部分。

我该如何开始?我可能无法在开发项目中编写我的代码(我不允许这样做)。我需要为它创建一个单独的框架吗?或者我可以将所有jar文件包含在项目中并在其上面编写代码吗?

这个post中的答案实际上是我正在寻找的,但对于Java应用程序。我可以使用任何API吗?

如果您需要其他信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

如果应用程序不提供Json,XML或类似的API,您可以在jUnit测试方法中使用HtmlUnit之类的测试库。

来自"Getting Started"部分的示例:

@Test
public void homePage_Firefox() throws Exception {
    final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);
    final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
    Assert.assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText());

    webClient.closeAllWindows();
}

请注意,HtmlUnit尝试像虚拟浏览器一样工作(在Java中100%编写),但是在执行Javascript时它有点受限。

然后,使用其他库(如jsoupJericho HTML Parese)检查代码并获取要在数据库中检查的值。

另一方面,如果应用程序确实提供了获取数据的方法,则可以使用Jersey Client API发出REST请求并获取值。这很简单。看看这个例子:

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://localhost:9998").path("resource");

Form form = new Form();
form.param("x", "foo");
form.param("y", "bar");

MyJAXBBean bean =
target.request(MediaType.APPLICATION_JSON_TYPE)
    .post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE),
        MyJAXBBean.class);