WebDriver + TestNG应用

Selenium 2 最大的更新就是集成了WebDriver。这两者是什么关系呢?如果你搜索WebDriver,第一条结果是Selenium。其实WebDriver和Selenium可以说是在实现UI Automation的竞争对手。Selenium是运行在JavaScript的sandbox里面,所以很容易就支持不同的浏览器;而WebDriver则是直接操作浏览器本身,更接近用户的真实操作,但正因为如此,所以WebDriver在多浏览器/操作系统的支持上就要落后于Selenium。不过从Selenium 2开始,这两个项目合并了,可以继续用原来的Selenium,也可以考虑迁移到WebDriver。我个人认为WebDriver应该是以后的大趋势,还是值得迁移的。至于你信不信,我反正是信了。

  作为一个轻量级的UI Automation框架,需要写一些驱动它的代码,大部分人会选择JUnit,因为JUnit是单元测试的事实标准;但是我会用TestNG。这些UI Automation的东西,它们本身不是单元测试,而且也没有太多单元测试的风格。

  从一段简单的测试开始


public class GoogleTest  {

@Test

public void search(ITestContext context) {

WebDriver driver = new FirefoxDriver();

driver.get("http://www.google.com");

WebElement element = driver.findElement(By.name("q"));

element.sendKeys("magus");

element.submit();

Assert.assertTrue(driver.getTitle().contains("magus"), "Something wrong with title");

}

}

  TestNG应用了Java的Annotations,只需要在测试方法上面打上@Test就可以标示出search是一个测试方法。用TestNG运行测试还需要一个testng.xml的文件,文件名其实可以随便起,没有关系的。


<suite name="Magus demo" verbose="2">

<test name="Search function">

<classes>

<class name="test.GoogleTest">

<methods>

<include name="search" />

</methods>

</class>

</classes>

</test>

</suite>

  我想让测试更加灵活,1. 可以配置使用任意支持的浏览器进行测试;2. 配置所有Google的URL;3. 配置搜索的关键字。修改后的代码:


public class GoogleTest  {

WebDriver driver;

@Parameters({"browser"})

@BeforeTest

public void setupBrowser(String browser){

if (browser.equals("firefox")){

driver = new FirefoxDriver();

} else {

driver = new ChromeDriver();

}

}

@Parameters({ "url", "keyword" })

@Test

public void search(String url, String keyword, ITestContext context) {        driver.get(url);

WebElement element = driver.findElement(By.name("q"));

element.sendKeys(keyword);

element.submit();

Assert.assertTrue(driver.getTitle().contains(keyword), "Something wrong with title");        }

}

 testng.xml


<suite name="Magus demo" verbose="2">

<parameter name="browser" value="firefox" />

<parameter name="url" value="http://www.google.com" />

<parameter name="keyword" value="magus" />

<test name="Search function" preserve-order="true">

<classes>

<class name="test.GoogleTest">

<methods>

<include name="setupBrowser" />

<include name="search" />

</methods>

</class>

</classes>

</test>

</suite>

  利用TestNG的@Parameters标签,让测试方法从testng.xml里面读取参数,实现参数化。在testng.xml的配置中,test节点需要增加一个属性的配置: preserve-order=”true”。这个preserve-order默认是false,在节点下面的所有方法的执行顺序是无序的。把它设为true以后就能保证在节点下的方法是按照顺序执行的。TestNG的这个功能可以方便我们在testng.xml里面拼装测试。假设我们有很多独立的测试方法,例如

  navigateCategory

  addComment

  addFriend

  login

  logout

  就可以在testng.xml里面拼出不同的测试,例如


<test name="Add friend" preserve-order="true">

<classes>

<class name="test.GoogleTest">

<methods>

<include name="login" />

<include name="addFriend" />

<include name="logout" />

</methods>

</class>

</classes>

</test>

<test name="Add comment to category" preserve-order="true">

<classes>

<class name="test.GoogleTest">

<methods>                <include name="login" />

<include name="navigateCategory" />

<include name="addComment" />

<include name="logout" />

</methods>

</class>

</classes>

</test>

  TestNG比JUnit更加适合做一些非单元测试的事情,不是说JUnit不好,而是不能把JUnit当成万能的锤子,到处钉钉子。WebDriver的API比Selenium的更加简洁,会是以后的大趋势。

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-07-30 11:26:52

WebDriver + TestNG应用的相关文章

在Eclipse中使用Maven配置WebDriver+Testng(2)

建立一个简单的测试项目 package net.Maventest; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.Assert;

Selenium2(webdriver)入门之TestNG的安装与简单使用

 上一篇已经搭建好了Eclipse+selenium2的环境,这一篇主要记录下TestNG的使用. 一.在Eclipse中安装TestNG 1.打开eclipse-->help-->Install New Software-->Add,输入Name和Location后,点击OK. TestNG官方下载地址:http://testng.org/doc/download.html 2.然后选中TestNG,单击Next安装 3.安装好TestNG后重启eclipse查看是否安装好,Help-

TestNG开源插件Arrow介绍

TestNG是一个设计用来简化广泛测试需求的 测试框架,旨在涵盖所有类型的测试,包括单元测试.功能测试.端到端集成测试等,而我们在基于TestNG搭建自动化测试框架,编写测试用例时,为保证测 试用例的稳定性,需要增加测试用例失败自动重跑功能,这便促成了Arrow的诞生. Arrow是基于TestNG监听器扩展的插件,如果把TestNG比作一把强劲的弓,那么插件就是配合弓使用的箭,这也是Arrow命名的由来. 当前Arrow插件已开源,可通过以下地址访问:https://github.com/Ne

用Selenium WebDriver+Grid2实现浏览器端性能测试

在 Web 2.0 应用中,页面装载时间和浏览器渲染时间将成为决定性能的关键因素.我们在测试过程中不仅需要手动触发性能测试工具,而且需要模仿不同的用户行为,包括不同的浏览器.不同的网络条件和不同的使用习惯.在这种情况下我们需要新的方法与工具来覆盖特别是浏览器端的性能测试.用 Selenium WebDriver + Grid2 可以解决浏览器端性能测试中的自动化和并发性问题.本文介绍了这种新的测试框架和脚本的开发过程,并结合案例给出了具体的代码和结果分析.使用 Selenium WebDrive

基于TestNG 与Selenium 的自动化测试设计与实施

1.引言 软件测试是关系到软件开发和维护成本的重要环节.任何软件产品在正式发布之前都必须经过严格的测试.随着计算机技术的迅速发展,软件的结构越来越复杂,同业竞争越来越激烈.为了保证软件产品的高度可靠性和竞争力,很多软件开发机构都将其主要的研制力量投入到软件测试之中. 回归测试是软件测试中的重要组成部分,占有很大的比重.每次例行包发布前都需要对软件现有功能进行回归验证,确保无误以后才能发给各地现场,大家都知道电信业是个发展较快的行业,需求变更快.迭代周期短,从而导致回归测试十分频繁,这个时候如果单

总结Selenium WebDriver中一些鼠标和键盘事件的使用

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过程中,可能会遇到某些按键没办法使用 Actions.Keys 等类来

Selenium与Webdriver的对比

追踪溯源,WebDriver 和 Selenium 本是两个独立的项目,实现机制也是不同的.那 Selenium 团队为什么会在 Selenium 2 中将两者合并,这究竟有什么用意呢?WebDriver 比 Selenium 又有什么优势呢?我们该如何选择使用 Selenium 还是 WebDriver 呢?别着急,您将在本文中找到答案,并将了解一些 WebDriver 的基本知识和使用方法. 为方便表述,在本文中,我们称 Selenium 2 为 WebDirver,Selenium 为 S

selenium-webdriver(python) (十四) webdriver原理简介

之前看乙醇视频中提到,selenium 的ruby 实现有一个小后门,在代码中加上$DEBUG=1 ,再运行脚本的过程中,就可以看到客户端请求的信息与服务器端返回的数据:觉得这个功能很强大,可以帮助理解webdriver的运行原理. 后来查了半天,python并没有提供这样一个方便的后门,不过我们可以通过代理的方式获得这些交互信息: 一.需要安装java 虚拟机与selenium-server-standalone ,参考 <selenium + python自动化测试环境搭建>第7.8操作:

基于Selenium WebDriver实现多语言环境下自动化截图

TVT 的概念和 TVT 自动化的必要性 概念 翻译验证测试 (Translation Verification Testing,TVT) 是 IBM GSSC 部门为 IBM 的各种产品做本地化 (Localization) 的一个测试环节.众所周知,我们开发出一款产品,需要让全 球各地的用户都能够无障碍的使用,就必须精准的将产品 UI 和相关文档翻译成各种语言,这样不同国家和地区的用户才能 够顺畅使用.TVT 的过程就是一个产品翻译验证测试的过程. 必要性 从字面上看,TVT 是一个比较简单