初识之UI自动化
上一篇 /
下一篇 2017-07-20 14:35:52
/ 个人分类:初识
自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序,用于生成1到100个测试数据。狭义上来讲,用工具记录或编写脚本的方式模拟手工测试的过程,通过回放或运行脚本来执行测试用例,从而代替人工对系统的功能进行验证。当然,我们更普遍的认为把"自动化测试"看做"基于产品或项目UI层的自动化测试"。
自动化测试可以分为UI测试,接口测试和单元测试。单元测试和接口测试可以从本质上保证产品质量,而UI测试可以解放重复的劳动力。从单元测试、接口测试到UI测试的维护成本会越来越高,所以三种测试比例要根据实际项目需求进行划分。这里我们只对UI自动化测试进行下探讨。从工具选用上来说,主流的两种类型工具,比如QTP(以录制脚本为主)和selenium(以编写脚本为主)。下文主要针对的也是对selenium工具的一些见解。
selenium工具分为selenium1和selenium2两个版本,selenium1是通过javascript来操作web页面,selenium2则是引入了webDriver技术,webDriver提供的API可实现直接与浏览器交互来操作web页面。selenium2工作原理采用的是server-client模式,server端启动driver(提供webService服务),client端为测试脚本,用户通过测试脚本请求webService服务,所用到的webDriver wire通信协议是用规定格式的字符串发请求告诉selenium我们希望浏览器做的事。
由于浏览器厂商不同,需安装不同的驱动,firefox内置驱动,所以也是自动化首推浏览器。seleniumIDE插件作为辅助工具,用来定位页面元素。
// 用Firefox driver创建一个新的的实例,使用firefox来运行测试用例
System.setProperty ( "webdriver.firefox.bin" , "E:/Program Files/Mozilla Firefox/firefox.exe" );
WebDriver driver = new FirefoxDriver();
webDriver API就是selenium所定义的一系列接口方法,用于定位,操作页面上的各种元素。定位元素的目的是为了操作元素,页面各种元素与操作有输入框,下拉框,对话框,警告框,按钮点击,文件上传、下载,分页等等。selenium提供了id、name、class name、tag name、link text、partial link text、xpath、css等定位方法。xpath和css 功能强大语法稍微复杂,需要了解更多的前端知识,比如xml ,javascript 等。
// 现在用这个来访问谷歌
driver.get("http://www.google.com");
// 也可以用下面的方式访问谷歌
// driver.navigate().to("http://www.google.com");
// 找到文本输入元件的名字
WebElement element = driver.findElement(By.name("q"));
// 在搜索框内输入“cheese!”
element.sendKeys("Cheese!");
// 现在递交表格. WebDriver会发现我们的形式元素
element.submit();
// 后台打印输出,检查网页的标题
System.out.println("Page title is: " + driver.getTitle());
使用单元测试框架(比如TestNG)就解决了用例的组织与运行,用例中有大量重复的操作,写到一个单独的文件中,需要的时候直接调用,每个用例中都有一些一样的数据,也可以写到一个单独的文件中进行读取,可选择驱动自动化的框架模式PageFactory进行设计。
//BasePage类封装页面定位元素通用方法
public abstract class BasePage {
public BasePage(WebDriverPlus webDriverPlus) {
}
public String getTitle() {
return driver.getTitle();
}
public WebElement findElement(By locator) {
if (isElementPresent(locator)) {
return driver.findElement(locator);
}
return null;
}
public WebElement findElement(By locator, String text) {
if (isElementMatch(locator, text)) {
return driver.findElement(locator);
}
return null;
}
public boolean isElementPresent(By locator) {
try {
WebElement result = wait.until(ExpectedConditions.presenceOfElementLocated(locator));
if (null != result) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return false;
}
}
//业务页面封装主要的业务功能操作
public class LoginPage extends BasePage{};
public class OrderPage extends BasePage{};
//测试类做验证
@Test
public void Test(String x, String y) {};
判断用例运行失败还是成功,需要在脚本中加一些断言来验证。
//验证页面主题是否含Suning
Assert.assertTrue(loginPage.getTitle().contains("Suning"));
自定义一张漂亮的测试报告,定时跑脚本,把每一次跑脚本的测试结果直接发到邮箱......
为了满足自己的需求解决这些问题后会发现我们设计的测试结构功能越来越强大,越来越灵活,产生了一定的通用性和移植性,一个有模有样的自动化测试框架诞生了。
收藏
举报
TAG: