● Selenium IDE:Selenium-IDE 是快速开发 Selenium 测试用例的 Firefox 插件工具。可以利用它录制用户的基本操作,生成测试用例脚本,还可以将这些测试用例转化为其他编程语言的自动化测试脚本。通过点击回放按钮,可以回放录制的测试用例脚本。该工具还包含一个上下文菜单,测试工程师可以使用它从浏览器的当前显示页面选择页面元素,然后可以选择适配已选取元素的带预定义参数的 Selenium 命令来快速完成脚本编写。这一特性为自动化测试人员节省了花费在脚本编写上的时间、也提供了学习 Selenium 命令的快捷方法。
● Selenium Grid:Selenium Grid用于在不同的机器系统上、不同的浏览器上并行运行自动化测试。利用 Selenium Grid,可以轻松创建分布式自动化测试环境
下面,我们将会使用 JUnit4 和 Selenium Server 演示如何对前文提到的测试用例编写自动化测试脚本。准备项目依赖的 Jar 文件,如 Selenium、dom4j 等 Jar 包,启动 Eclipse 集成开发环境,创建项目名称为 SeleniumDemo 的 Java 项目,并创建一个 JUnit 4 单元测试类:dw.junit. DWloginJUnit.java,依次编写 @BeforeClass、@Test 、@AfterClass 方法。本文提供源代码下载,您可自行下载,导入到自己的 Eclipse 开发工作区。首先,创建 Selenium 实例,启动浏览器,使浏览器窗口大化,打开要访问的谷歌网站。代码如下:
清单 1. 创建初始化 Selenium 实例
private static Selenium selenium;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
selenium = new DefaultSelenium("localhost", 4444, "*iexplore",
http://www.google.com/);
System.out.println("正在启动 Selenium。。。");
selenium.start();
selenium.windowMaximize();
selenium.open("/");
}
然后在测试方法中实现演示用例,即在谷歌站点搜索输入框输入“ibm developerworks cn”,然后点击搜索按钮,后截图。Pause 和 captureScreenshot()方法在本文附带的源代码文件中可查。执行用例部分的代码清单如下:
清单 2. 执行用例的程序代码
@Test
public void test() {
// 在 Google 查询输入框,输入 ibm developerworks cn
String queryString="ibm developerworks cn";
selenium.type("//input[@name='q']", queryString);
pause(1000);
// 单击查询按钮,执行查询
selenium.click("//input[@name='btnK']");
pause(1000);
System.out.println("获取的页面标题:"+selenium.getTitle());
pause(2000);
SeleneseTestBase.assertTrue(selenium.getTitle().contains(
queryString));
// 测试截图函数
captureScreenshot("截图测试 JUnit");
}
后,执行用例完毕后调用 tearDownAfterClass() 方法销毁 Selenium 实例。
清单 3. 销毁 Selenium 实例
@AfterClass
public static void tearDownAfterClass() throws Exception {
if(selenium != null){
System.out.println("停止 Selenium !");
selenium.stop();
}
}
我们来演示如何执行这个单元测试类:先打开一个命令行窗口,并切换到 Selenium Server Jar 文件所在的目录,运行 java -jar selenium-server-standalone-2.{ 版本号 }.{ 修订版本号 }.jar 来启动 Selenium Server。在 Eclipse 工作区,右键选择 dw.junit.DWloginJUnit.java,选择 Run as — JUnit Test 来运行单元测试类。可以看到,浏览器自动启动起来,访问谷歌查询引擎主页,在搜索框自动输入了“ibm developerworks cn”,并点击查询按钮进行了查询。在 Eclipse 的 JUnit 视图,可以看到显示代表执行成功的绿色图标,在 SeleniumDemo 项目的根目录下生成了一个 png 格式的谷歌查询结果页面的截图文件。
自动化测试框架开发人员如何做
我们上文实现了演示用例的自动化回归测试,很多公司的测试工程师也是用这样的方法执行自动化测试的,但这不是好的方法。理由如下:
1、如果用例发生变更,比如界面的美化重构导致页面的某一控件元素信息变化,不得不修改 Java 脚本代码,重新编译打包。
2、擅长业务的测试人员很大一部分还是不熟悉 Java 编程的,他们期望有一种不需要编程的测试框架,这样他们可以根据对业务的把握,快速编写自动化测试用例脚本。
目前市场上还没有自动化测试工具可以直接识别传统的测试用例,继而直接执行自动化测试。也是说,现在还没有工具可以读取像“用户名输入框”这样的纯文字性描述内容,然后映射到页面上的输入框控件。那么,如何添加一些额外的信息到传统的用例里面,从而使自动化工具能执行业务测试人员写的这些用例呢?
先分析一下 Web 应用的测试用例及其测试步骤,显而易见,都包含下述几部分:Web 页面控件部分、用户执行动作部分、测试数据部分等。比如,演示用例中提到的用户输入框、密码输入框和登录按钮属于 Web 页面控件,动词输入、点击等属于用户执行动作,用户名和密码数据属于测试数据。我们需要把这几部分都添加额外信息、转化为测试工具能识别的形式。测试工具都提供定位 Web 页面控件的方式,以 Selenium 为例,它可以通过 CSS、JS 和 XPath 定位控件,方式非常丰富。用户执行动作对应着测试工具的应用编程接口 API,测试工具都提供类似单击 Click、双击 DoubleClick、拖拽 DragAndDown、输入数据 Type 等动作的 API。页面控件信息和测试数据对应着 API 的参数列表。比如,selenium.type(“//input[@id= ’ username ’ ]”,”我的用户名”)。