web自动化工具sahi
QTP,Rational Functional tester(RFT),Selenium和Webdrive是用于自动测试Web应用程序的许多商业工具和开源框架的一些示例。 在本文中,了解Sahi,这是一种在自动化测试领域中日益流行的工具。 Sahi是一个开源工具,它提供:强大的功能,可在浏览器之间进行记录和重放; 用于编写测试脚本的不同语言驱动程序(Java,Ruby); 并支持AJAX和高度动态的Web应用程序。 Sahi还支持https和NTLM身份验证。 图1显示了Sahi如何适应模拟用户操作。
图1.模拟的用户操作

关于沙希
Sahi具有以下强大功能:
-
Sahi控制器(IDE)
- 可跨浏览器工作并以两种模式记录脚本:Sahi或Java格式。 可靠的物体识别
-
独立于HTML结构。
它的直观API(例如
near
和in method
即使页面只有很小的变化,也可以帮助定位浏览器元素,从而消除了对XPath的需求(这很难理解)。
隐式等待
- 无需处理等待实现,即使对于AJAX和页面加载也是如此。 测试人员不需要了解应用程序的内部。
使用Sahi进行测试
本文的其余部分将通过一个示例应用程序向您展示如何使用Sahi进行测试。 您可以下载示例应用程序和测试用例,以进行后续操作。
安装与配置
要安装和配置Sahi:
- 下载最新版本(请参阅参考资料 ),然后解压缩文件。 Sahi需要Java 1.5或更高版本。
- 启动Sahi的代理服务器。 启动脚本位于<sahi_root> \ userdata \ bin中。
- 对于Windows:start_dashboard.bat
- 对于Linux:start_dashboad.sh
图2. Sahi仪表板
对于此示例,我们无需担心浏览器配置。 另外,Sahi还提供GUI工具供您启动浏览器。 运行start_sahi.bat/start_sahi.sh
以启动它,然后单击浏览器图标以启动代理服务器和浏览器进程。 - 输入
start_sahi.bat/start_sahi.sh
,这是在诸如Ant之类的构建工具的帮助下进行静默执行所必需的。注意:仅对于Internet Explorer(IE),您必须手动配置浏览器以使用Sahi的代理。 或者,您可以在启动Sahi代理服务器时使用Sahi提供的工具来设置浏览器的代理。 代理主机和端口是localhost:9999。 (可以通过<sahi_root> \ config \ sahi.properties修改端口。)
记录Java格式的测试脚本
Sahi提供了两种现成的脚本格式:Sahi和Java。 您可以在<sahi_root> \ config \ sahi.properties中修改默认选项Sahi。 Sahi格式是类似于Java脚本的格式,仅在Sahi Java脚本引擎中运行。 本文中的示例使用了更常见的Java格式,因为脚本可以轻松地与其他测试工具和大型测试项目的框架集成。 Java格式涉及可以与Junit和TestNG之类的工具集成的通用Java代码段。
要进行简短测试:
- 打开您要测试的Web应用程序。 按ALT键,然后双击页面上。 (使用Firefox 3进行演示。)
- 选择Record ,如图3所示:
图3.用于记录的Sahi控制器
选择后,它将变为停止按钮。 - 在Web应用程序中执行一些操作,然后选择“ 停止” 。 记录您在应用程序中执行的所有步骤,如图4所示:
图4.控制器记录的脚本
在记录操作时,您可以根据需要插入一些断言。 该工具还提供了一些插入选项,但是建议您手动添加它们。
与Junit集成
JUnit(单元测试框架)对于建立测试驱动的开发非常重要。 在许多情况下,您可以使用Junit格式创建测试脚本,以方便使用和报告。 前面的示例以Java格式记录了测试脚本。
要以Junit格式格式化上述脚本,请在Eclipse中创建一个Java项目,然后添加位于<sahi_root> \ lib中的junit4库和sahi.jar。 创建junit4格式的测试脚本时,您必须启动Sahi环境所需的一些变量。 本文中的示例扩展了BaseTestCase.java,以便可以通过扩展此类来执行所有其他测试用例。
demo4sahi
类扩展了BaseTestCase
类,以实现与Sahi代理相关的所有启动任务,然后验证两点:
- 如果电子邮件格式为OK,则将获得
OK
。 - 如果电子邮件格式不正确,您将收到
Error
。
清单1显示了一个典型的Junit4格式的测试脚本。
清单1. Junit4格式的测试脚本
public class test4demo extends BaseTestCase {
@Before
public void setUp() {
login();
}
@After
public void tearDown() {
logout();
}
@Test
public void testDemo1() {
browser.textbox("email").setValue("demo for sahi");
browser.submit("Submit").click();
assertTrue(browser.label("error").exists());
}
@Test
public void testDemo2() {
browser.textbox("email").setValue("demo@sahi.com");
browser.submit("Submit").click();
assertTrue(browser.label("ok").exists());
}
}
要在无人看管的情况下运行测试脚本,您需要为Sahi运行时实现所有初始化和完成。 有四个基本的初始化部分,如表1所示:
表1. Sahi环境的初始化
BaseTestCase中的方法 | 描述 |
---|---|
createConn() | 初始化SAHI_BASE_PATH , USER_DATA_PATH 和浏览器类型,并创建一个浏览器进程。 |
delConn() | 清理浏览器进程,并将系统还原到初始状态。 |
setIEProxy() | 在执行测试之前设置IE代理。 仅用于IE。 |
login() , logout() 和其他常用的高级实用程序 | 所有脚本的公共方法。 |
作为所有测试脚本的父类, BaseTestCase
将在运行时在所有其他方法之前调用createConn
方法,因此它可以打开浏览器以模拟用户的操作。 清单2显示了BaseTestCase
一些代码。
清单2. BaseTestCase
public class BaseTestCase {
protected Browser browser;
protected Proxy proxy;
protected boolean isProxyInSameProcess = false;
protected String browserType = "firefox";
@Before
public void createConn() throws Exception {
Configuration.initJava("f://Program/sahi", "f://Program/sahi/userdata/");
if (isProxyInSameProcess) {
proxy = new Proxy();
proxy.start(true);
}
browser = new Browser(this.browserType);
browser.open();
}
@After
public void delConn() throws Exception {
browser.setSpeed(100);
browser.close();
if (isProxyInSameProcess) {
proxy.stop();
}
}
public void login(){
browser.navigateTo("http://localhost:8080/demo");
browser.textbox("username").setValue("ligang");
browser.password("password").setValue("welcome");
browser.submit("Login").click();
}
/**
* Setting IE's proxy during testing environment initialization
*
* @param enable
*/
public void setIEProxy(boolean enable) {
try {
Runtime.getRuntime().exec(
new String[] {
SetEnv.sahiBasePath
+ "\\tools\\toggle_IE_proxy.exe",
(enable ? "enable" : "disable") });
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
......
}
用Ant测试
Apache Ant是一种常见的构建工具,尤其用于基于Java的项目。 Sahi框架包括可在build.xml文件中使用的Ant的JAR文件。 但是,此开箱即用的组件是为Sahi的结构设计的。 尽管您可能想使用Junit来设置整个基础架构,但是它不够灵活或不够强大。 为了对示例项目进行回归测试,编写了一个build.xml,其中包括:
- 启动和停止Sahi代理服务器,如清单3和4所示:
清单3.启动Sahi代理服务器
<target name="start_sahiserver"> <echo message="starting sahi server" /> <java fork="true" spawn="true" classname="net.sf.sahi.Proxy"> <classpath> <fileset dir="${sahi.dir}"> <include name="**/*.jar" /> </fileset> </classpath> <arg value="${sahihome.dir}" /> <arg value="${sahiuser.dir}" /> </java> <antcall target="proxyon" /> </target>
清单4.停止Sahi代理服务器
<target name="stop_sahiserver"> <echo message="going to stop Sahi server" /> <sahi stop="true" sahihost="localhost" sahiport="9999" /v <antcall target="proxyoff" /> </target>
- 打开和关闭IE代理设置,如清单5所示:
清单5.打开/关闭IE代理
<target name="proxyon"> <exec executable="${sahihome.dir}/tools/toggle_IE_proxy.exe"> <arg value="enable" /> </exec> </target> <target name="proxyoff"> <exec executable="${sahihome.dir}/tools/toggle_IE_proxy.exe"> <arg value="disable" /> </exec> </target>
- 正在报告。
这些动作可以分别执行,以便在Eclipse IDE中轻松调试。
进阶主题
在Web应用程序测试中,有效识别对象非常重要。 与许多其他测试工具不同,Sahi具有一些功能强大的API,可以在网页中定位对象。 表2列出了一些示例。 请参阅“ 相关主题”部分,以获取具有完整列表的联机文档的链接。
表2.特殊的定位方法
特征 | 方法 | 样例代码 |
---|---|---|
支持正则表达式 | 几乎所有元素的标识符 | browser.link(/Link to .*/) |
基于DOM关系定位 | 在附近 | browser.button("delete").in(browser.cell("item1")).click() |
根据位置关系进行定位 | 下 | browser.button("delete").under(browser.cell("item1")) |
摘要
本文探讨了Sahi(一种用于自动执行Web应用程序测试的工具)。 Sahi是一个开源工具,允许跨浏览器记录和重放。 在本文中,您了解了用于编写测试脚本的不同语言驱动程序。 一个示例应用程序和测试案例展示了如何格式化Junit的脚本以及如何使用Apache Ant进行测试。 还概述了Sahi的高级API。
翻译自: https://www.ibm.com/developerworks/web/library/wa-sahi/index.html
web自动化工具sahi