6.2 JSP表现层测试
表现层的测试主要针对JSP本身代码逻辑以及页面元素。JSP代码中引用的外部对象,根据测试隔离的原则将单独进行单元测试。
6.2.1 index.jsp
访问http://localhost:8080/luceneweb的首页(index.jsp),主要包括搜索和分页功能。对应的源代码如下:
<html> <head> <title> Apache Lucene Example - Intranet Server Search Application </title> </head> <body> <p align="center"> Welcome to the Lucene Template application. (This is the header) </p> <center> <form name="search" action="results.jsp" method="get"> <p> <input name="query" size="44" /> Search Criteria </p> <p> <input name="maxresults" size="4" value="100" /> Results Per Page <input type="submit" value="Search" /> </p> </form> </center> <p align="center">Apache Lucene Template WebApp 1.0</p> </body> </html> |
可以看出index.jsp的代码相当简单,不包含任何逻辑,只是一个简单的页面展示以及提交。测试的工作重点也集中在UI的验证上,例如经过测试分析,可以设计出以下5个测试用例:
Case1:标题为“Apache Lucene Example - Intranet Server Search Application”。
Case2:存在搜索的表单,表单提交给result.jsp。
Case3:表单中存在搜索条件输入框,name=query且默认值为空。
Case4:表单中存在分页输入框,name=maxresults且默认值为100。
Case5:表单中存在搜索按钮,name=submit,value=“Search”。
这里以Case4为例,说明进行表现层的单元测试。Case4中使用HtmlUnit向服务端请求index页面,HtmlUnit会将请求的响应封装成HtmlPage对象。通过调用该对象的相关方法,我们可以获取到页面的所有元素完成校验。
代码6.2 IndexJspTest 代码片段——Case4
01 public class IndexJSPTest{ 02 private static HtmlPage page; 03 04 @BeforeClass 05 public static void setUp() throws Exception { 06 WebClient webClient = new WebClient(); 07 URL url = new URL("http://localhost:8080/luceneweb"); 08 page = (HtmlPage)webClient.getPage(url); 09 } 10 11 @Test 12 public void testMaxResults() throws Exception { 13 HtmlForm searchForm = page.getFormByName("search"); 14 assertNotNull(searchForm); 15 assertEquals("100", searchForm.getInputByName("maxresults"). getValueAttribute()); 16 } 17 } |
第4行,创建WebClient对象,完成向URI 标识的资源发送数据和从 URI 标识的资源接收数据的功能。
第5行,创建URL对象,指向http://localhost:8080/luceneweb。
第6行,将WebClient返回的数据封装成HtmlPage对象。
第11行,testMaxResults方法对每页显示的记录数进行测试。
第13行,获取name属性值为search的表单。
第14行,因为每页显示输入框应该存在于表单中,所以这里先判断对应表单是否存在。
第15行,getInputByName方法根据name属性找到输入框。getValueAttribute方法获取输入框的值。最后断言该输入框的默认值应该是100。
当搜索表单提交后,生成的request请求被发送给result.jsp页面。这里的测试只需验证form的属性值是正确的。提交url请求的测试在下一节result.jsp的测试中完成。
本文选自:《51Testing软件测试作品系列》之三的《互联网单元测试及实践》 ,本站经电子工业出版社和作者的授权,近期将进行部分章节的连载,敬请期待!
版权声明:51Testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流,如果有任何有关内容方面的合作事宜,请联系我们。