自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。通常,在设计了测试用例并通过评审之后,由测试人员根据测试用例中描述的规程一步步执行测试,得到实际结果与期望结果的比较。在此过程中,为了节省人力、时间或硬件资源,提高测试效率,便引入了自动化测试的概念。
录制一个简单的web计算器功能,export到junit模式,保存为selJava.java文件,如下:
package com.example.tests;
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
public class selJava extends SeleneseTestCase {
public void setUp() throws Exception {
setUp(”http://change-this-to-the-site-you-are-testing/”, “*chrome”);
}
public void testSelJava() throws Exception {
selenium.open(”/calc.htm”);
selenium.click(”//input[@name='alex' and @value='1']“);
selenium.click(”//input[@name='alex' and @value='+']“);
selenium.click(”//input[@name='alex' and @value='2']“);
selenium.click(”//input[@name='alex' and @value='=']“);
verifyEquals(”3″, selenium.getValue(”display”));
}
}
以上Selenium case继承SeleneseTestCase,SeleneseTestCase的父类是Junit TestCase。
因此,在默认模式下,Selenium Case实际上是以Junit Runner方式运行的。
Junit本身是java单元测试框架,并不完全满足我们selenium的测试需求,比如对case之间的依赖关系及数据交互,web测试抓图等等,junit并不能胜任。
代码从Junit模式转化到AC模式
可遵循以下步骤,将junit模式的selenium 代码转化成在AC模式:
1. 在java环境中的classPath添加ac_framework.jar
2. 在case文件头添加 import framework.JobDOM.ACSeleniumJob;
将selJava 的父类改为ACSeleniumJob,
public class selJava extends ACSelniumJob
Ok,到这里,新的selenium case已经完成了(红色为修改处),如下:
package com.example.tests;
import com.thoughtworks.selenium.*;
import java.util.regex.Pattern;
import framework.JobDOM.ACSeleniumJob
public class selJava extends ACSeleniumJob {
public void setUp() throws Exception {
setup(”http://change-this-to-the-site-you-are-testing/”, “*firefox”);
}
public void testSelJava() throws Exception {
selenium.open(”/calc.htm”);
selenium.click(”//input[@name='alex' and @value='1']“);
selenium.click(”//input[@name='alex' and @value='+']“);
selenium.click(”//input[@name='alex' and @value='2']“);
selenium.click(”//input[@name='alex' and @value='=']“);
verifyEquals(”3″, selenium.getValue(”display”));
}
}
将Selenium case添加到TestJobFile中,运行AC,获得测试结果
TestJobFile中添加Selenium Job,按如下格式定义
<Selenium name=”selenium_demo” description=”Test calc” depends=”" >
<TestData type=”xml” location=”seleniumconfig.xml”/>
<JobInput name=”$MAIL_SUBJECT”/>
<ClassPath location=”seleniumselenium-java-client-driver_self_extended_oracle.jar”/>
<ClassPath location=”seleniumorajtst.jar”/>
<ClassPath location=” seleniumqa.jar”/>
<ClassPath location=” seleniumselJava.class”/>
<SelTestCase path=”selJava”>
<SelTest name=” testSelJava “/>
</SelTestCase>
</Selenium>
运行AC framework,即可执行selenium Job,并获得测试报告
我们常用的是Selenium RC模式,即先启动一个selenium server,然后才能运行selenium脚本。
java启动selenium server的命令行语句如下:
java –jar selenium-server.jar –port 4444 – proxyInjectionMode –log selServer.txt
如何把启动 selenium server的java命令行也集成到AC中来呢?
这里要用到AC的Ant Engine。
创建基于Ant Engine的TestJob,TestJob内容遵循Ant语法,如下:
<Ant name=”Ant_StartSelenium” description=”selenium initialization” depends=”" daemon=”true”>
<java fork=”true” spawn=”true” jar=”D:selenium-server.jar”>
<arg line=”-port 4444 “/>
<arg line=”-proxyInjectionMode”/>
<arg line=”-log sel.txt”/>
</Java>
</Ant>
启动Selenium server的TestJob可与Selenium Test Job做一个dependence的定义,保证每次运行selenium测试的时候,selenium server是处于启动状态的
<Ant name=”Ant_StartSelenium” description=”selenium initialization” depends=”" driver_type=”ANT” daemon=”true”>
………………………
</Ant>
<Selenium name=”selenium_demo” description=”Test calc” depends=” Ant_StartSelenium “ >
…………………….
</Selenium>
pass(String msg): 向AC汇报当前运行状态,为成功
fail(String msg):向AC汇报当前运行状态,为失败
reportWarning(String msg):向AC汇报当前运行状态,为警告
getDataProperty(String key):获得测试数据
getEnvProperty(String key):获得环境变量
getConfProperty(String key):获得配置数据
getInputValue(String key):从全局数据通道中获得输入数据
setOutputValue(String key,String value): 向全局数据通道输出数据