play手把手教你创建一个博客项目10完整的应用程序测试

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

play手把手教你创建一个博客项目10完整的应用程

序测试

现在,我们差不多终止了博客引擎的编码工作,但对项目来讲还没有完成,为了让我们的代码能够完全正确的工作,我们还需要对项目进行测试。

因此,我们之前差不多为yabe的模型层功能书写的单元测试,同时确信博客引擎的核心功能差不多进行了完好的测试,然而关于一个web应用程序来讲模型层只是其中的一部分,我们还需要确定web接口能否按预期的目标一样正常工作。也确实是讲还需要测试yabe博客引擎的操纵器层,甚至需要对UI自身进行测试,比如我们的JavaScript代码。

测试操纵器部分

Play提供了一种功能,确实是使用JUnit来直截了当测试应用程序的操纵器。我们把这些测试叫做‘功能性测试’,这是因为我们打算测试web应用程序的完整功能。

差不多上,一个功能性测试将直截了当调用Play的ActionInvoker,和一个HTTP 要求相似。因此我们需要给出一个HTTP方法、一个URI和多个HTTP参数。 Play 之后会路由这些要求,调用相应的action,同时回发到填写的响应(filled response)。之后,你就能够对之进行分析,以检查响应内容是否你所预期的。

import org.junit.*;

import play.test.*;

import play.mvc.*;

import play.mvc.Http.*;

import models.*;

public class ApplicationTest extends FunctionalTest {

@Test

public void testThatIndexPageWorks() {

Response response = GET("/");

assertIsOk(response);

assertContentType("text/html", response);

assertCharset("utf-8", response);

}

}

现在看,它依旧一个标准的JUnit测试。请注意,在那个地点我们使用Play的FunctionalTest超类,要紧是为了得到所有可用的工具。那个测试只对应用程序的主页进行了测试(/ URL渲染一个HTML响应,以‘200 OK’作为状态代码)。

接下来,我们将检查治理区域(administration area)的安全工作能否正常工作。在ApplicationTest.java里添加下面那个新测试:

@Test

public void testAdminSecurity() {

Response response = GET("/admin");

assertStatus(302, response);

assertHeaderEquals("Location", "/login", response);

}

现在,用play test命令把yabe应用程序运行于测试模式,打开, 选择ApplicationTest.java测试并运行。

是绿色的吗?

因此!通过这种方式,我们能够对所有的应用程序功能性进行测试,但把这用于测试一个基于html的web应用程序时,这并不是最好的方式。关于我们的博客引擎项目来讲,直截了当在真实的扫瞄器进行测试可能会更好。这确实是play 的‘Selenium tests’测试要干的事。

这种基于“功能性测试”的JUnit仍旧专门有用,专门是用于测试一个返回非html响应(比如JSON或XML)的Web services时。

书写Selenium测试代码

Selenium是一个专用于测试web应用程序的测试工具。那个工具最酷的确实是Selenium承诺我们在一个扫瞄器里直截了当运行测试套件,由于它使用的是真实的扫瞄器,因此,我们能够确定测试通过后,项目就能够在生产环境下完美的运行。

一个Selenium测试套件确实是一个专门的html文件。HTML syntax required by Selenium必须使用的HTML语句比较单调(使用HTML表格元素进行数据格式化显示),好消息是play将使用play模板引擎和一系列支持简单Selenium表示语法的标签来关心你生成这些元素)。使用模板最有味的特点是你全然不需要

‘static scenarios’,同时能够使用play模板强大的功能(如循环、条件块)来书写更复杂的测试。

然而,你仍旧能够连续在模板里使用原始的HTML Selenium语法,假如需要的话,还能够不记得特定的Selenium标签。假如你使用多个用于生成test

scenarios(比如Selenium IDE)的Selenium工具中的一个,这将变得专门有味。

新创建的play应用程序的默认测试套件差不多包含了一个Selenium测试,打开yabe/test/Application.test.html文件:

*{ You can use plain Selenium commands using the selenium tag }*

#{selenium}

// Open the home page, and check that no error occurred

open('/')

waitForPageToLoad(1000)

assertNotTitle('Application error')

#{/selenium}

运行那个测试应该可不能有任何咨询题。它只打开了主页,并检测页面内容是否包含了‘Application error’文本。

然而,和任何复杂的测试一样,在导航到应用程序并进行测试之前,你需要设置一系列众所周知的数据,我们因此需要重用fixture概念,同时在开始测试之前使用yabe/test/data.yml文件,#{fixture /}标签导入这些测试数据:

#{fixture delete:'all', load:'data.yml' /}

#{selenium}

// Open the home page, and check that no error occurred

open('/')

waitForPageToLoad(1000)

assertNotTitle('Application error')

#{/selenium}

相关文档
最新文档