项目测试
一个项目,首先得经过一系列的测试(开发人员自测,专门的测试人员测试,客户测试)才能上线运行。
尽早发现问题对大家都有好处,作为一个开发人员,自己写的代码最好充分自测后再提交测试。
测试从不同业务层面分:
unit test 单元测试
Basic Test
functional test 功能性测试
Application Test
selenium test
Application
核心模块的测试---yabe项目的模型层,前面已经进行测试了。
Web接口测试,即yabe项目的控制器层还未测试。
UI测试也未做,即javascript代码的测试。
测试控制器部分
Play基于JUnit可以直接测试应用程序的控制器,这种测试称为“功能性测试”。
一个功能性测试将直接调用play的ActionInvoker,相当于模拟一个HTTP请求;
play接收到请求后,会路由这些请求,调用相应的action,并且响应结果到客户端。
客户端接收到响应后,即一个Response对象,就可以对结果进行分析了!
该部分是在未开发出具体模板的情况下用的(就是还没有页面的时候)?
否,对于返回类型为json或者xml格式的webservice时,这样很方便查看结果!
如果页面都开发好了,直接从页面测试不是更直观吗?
是,能够在页面进行测试,那更好,play提供的selenium测试就是这样的!
第1个测试,对应用程序的主页进行测试
预期:
访问主页,返回状态码200,数据类型text/html,编码为UTF-8
import org.junit.*;
import play.test.*;
import play.mvc.*;
import play.mvc.Http.*;
import models.*;
/**
* FunctionalTest 由Play提供
* 继承它可以获得很多方法,进行测试工作
*
*/
public class ApplicationTest extends FunctionalTest {
@Test
public void testThatIndexPageWorks() {
//请求应用程序的主页
Response response = GET("/");
//判断响应码是否为200
assertIsOk(response);
//响应内容类型是否为text/html
assertContentType("text/html", response);
//响应内容的编码是否为utf-8
assertCharset(play.Play.defaultWebEncoding, response);
}
}
第2个测试,测试Admin控制器
预期:
访问/admin,由于未登陆,Security会进行身份验证
身份验证失败,会跳转到登陆页面/login
请求的路径发生了改变,会返回302状态码
@Test
public void testAdminSecurity() {
Response response = GET("/admin");
assertStatus(302, response);
assertHeaderEquals("Location", "/login", response);
}
运行 play test 命令启动yabe项目,打开http://localhost:9000/@tests
选择要运行的测试项,点击Start,开始测试!
测试这部分暂时放一下,空了回来再学!