首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Selenium RC 测试 web 应用程序(1)

使用 Selenium RC 测试 web 应用程序(1)

单元测试框架,比如 JUnit,允许您测试在您的服务器上运行的代码。但是,在一个典型 web 应用程序中,服务代码只是应用程序中的全部代码的一小部分。这样的应用程序也可能拥有大量代码,只有使用一个使用浏览器来测试应用程序的工具才能测试这样巨大的代码量。        
测试 web 应用程序更困难的一个方面是测试应用程序 UI — 应用程序的这个代码部分通常从 HTML 和 JavaScript 代码生成。UI 在浏览器中、而不是在服务器进程中运行,因此只能从一个 Internet 浏览器来测试它。这种类型的代码示例包括 JavaServer Pages (JSP) 页面、PHP 代码和 Ruby。        
本文介绍社区中的一个工具 — Selenium — 它可用于创建和自动化 web 测试。您将了解到如何快速创建一些样例测试,如何扩展它们,以及如何使用 Selenium Remote Control 来将它们作为自动测试运行。        
了解 Selenium RCSelenium RC 是来自 Selenium 项目的一个工具套件的一部分。它允许您运行您创建的自动化测试。Selenium RC 支持许多不同的操作系统,能够启动不同浏览器的实例,比如 Windows® Internet Explorer®、Mozilla Firefox 和 Opera。               
使用 Selenium RC,您可以随意多次自动运行测试。这个工具还支持您创建比单独使用 Selenium IDE 创建的测试更复杂的测试。您可以添加条件语句和迭代以进行测试,如果您想使用一个数据集运行测试,这个功能就会有所帮助。您还可以使用 JUnit 这样的单元测试框架中可用的构件来处理预期的异常。               
下载和安装 Selenium RC要开始使用 Selenium RC,首先必须下载并安装它。Selenium 服务器只是一个 JAR 文件,可以使用 Java™                                Runtime Environment (JRE) 运行。您可以从 SeleniumHQ 站点(参见  中的链接)下载这个 JAR 文件和其他支持文件。                        
下载完成后,解压缩包含 Selenium RC 的存档文件,将其保存到一个位置,您需要记住这个位置,以便稍后使用。可以通过运行以下命令来执行 Selenium 服务器:                        
1
java -jar selenium-server.jar




要测试的样例应用程序本文使用一个简单的动态 web 应用程序,借助一些 JSP 页面来展示 Selenium RC 如何工作,以及如何用于自动化测试。这个简单的 web 应用程序拥有两个页面:一个登录页面和一个输入页面;后者用于输入您的姓名和生日等信息,应用程序从该页面计算您的年龄并说 “Hello”。               
这个样例应用程序提供了一个机会来展示如何执行一些测试来处理不同的情况。第一个页面如清单 1 所示。这是一个简单的登录页面,允许您登录到这个 web 应用程序。为了简化这个示例,登录信息将与一些硬编码的字符串进行比较。               
清单 1. index.jsp 页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%

    if ("process".equals(request.getParameter("action")))
    {
        if ("user".equals(request.getParameter("username")) &&
                "secret".equals(request.getParameter("password")))
        {
            response.sendRedirect("enterInfo.jsp");
            return;
        }
    }

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test Login Page</title>
</head>
<body>
<form action="<%= request.getRequestURI() %>" method="OST">
<input type="hidden" value="process" name="action" />
<label for="username">Username:<br />
<input type="text" id="username" name="username" />
</label>
<br />
<label for="password">assword:<br />
<input type="password" id="password" name="password" />
</label>
<br />
<input type="submit" value="Login" />
</form>
</body>
</html>




第二个页面如清单 2 所示。当您输入您的名和生日时,该页面将说 “Hello” 并告知您今天您的年龄。这个示例有一点勉强,因为在大多数 web 应用程序中,这样的信息将需要一个登录,数据将被存储以便下次登录使用。               
清单 2. enterInfo.jsp 页面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.Date"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.text.ParseException"%>
<%!

private Date parseDate(String dateValue)
{
    Date returnDate = null;
     
    try
    {
        // this is not the most efficient of methods, and try...catch
        // statements ideally should not be used as business exception
        // processing...
        SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
        returnDate = dateFormat.parse(dateValue);
         
    } catch (ParseException pe)
    {
        // do nothing...
    }
     
    return returnDate;
}

%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="<%= request.getRequestURI() %>" method="OST">
<input type="hidden" value="process" name="action" />
<label for="name">Your name:<br />
<input type="text" id="name" name="name" />
</label>
<br />
<label for="birthdate">Your birth date (in MM/DD/YYYY format):<br />
<input type="text" id="birthdate" name="birthdate" />
</label>
<br />
<%

    if ("process".equals(request.getParameter("action")))
    {
        // verify the date
        Date birthDate = parseDate(request.getParameter("birthdate"));
         
        if (birthDate == null)
        {
            // display the error messages...
            out.write("<p class=\"error\">lease enter a valid date.</p>");
        } else {
            // display the nice messages...
        }
         
    }

%>
<input type="submit" value="Submit" />
</form>
</body>
</html>

返回列表