WebDriver + TestNG 应用【转】

出自:http://magustest.com/blog/automationtesting/webdriver-testng/

Selenium 2 已经发布了一个多月,官方版本已经到了Selenium 2.3,并且在Google code里面可以找到2.4的下载。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的东西,它们本身不是单元测试,而且也没有太多单元测试的风格。

从一段简单的测试开始

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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的文件,文件名其实可以随便起,没有关系的。

1
2
3
4
5
6
7
8
9
10
11
<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. 配置搜索的关键字。修改后的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<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里面拼出不同的测试,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<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的更加简洁,会是以后的大趋势。

时间: 2024-07-31 04:56:30

WebDriver + TestNG 应用【转】的相关文章

Webdriver+testNG+ReportNG+Maven+SVN+Jenkins自动化测试框架的pom.xml配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersi

WebDriver+TestNG的一个典型例子

想让测试更加灵活,1. 可以配置使用任意支持的浏览器进行测试:2. 配置所有Google的URL:3. 配置搜索的关键字.修改后的代码: public class GoogleTest { WebDriver driver; @Parameters({"browser"}) @BeforeTest public void setupBrowser(String browser){ if (browser.equals("firefox")){ driver = ne

基于Selenium2和TestNG的自动化测试

基于Selenium2和TestNG的自动化测试 0条评论 2013-09-06 11:10    it168网站原创 作者: 皇甫鹏 陈宇 余新龙 编辑: 申安安 [IT168 技术]Selenium是时下很流行的面向web的自动化测试工具,它以执行效率高,覆盖的浏览器广泛等优点得到了很多人的亲睐.TestNG是一款测试 框架,它派生自JUnit和NUnit,除了继承了两者的优势之外,又额外的发展出了一些新的功能,让其更加强大和易用.文章会重点介绍 Selenium2结合TestNG如何做自动

Selenium WebDriver

Robot Framework (based on Python) + Selenium WebDriver NightWatch Framework (based on Node.js) + Selenium WebDriver Cucumber Framework (based on Ruby) + Watir WebDriver TestNG Frmework (based on Java) + Selenium WebDriver

第二章 TestNG环境搭建

------Web自动化测试之Webdriver+TestNG--从零到熟练(系列) TestNG是一个自动化测试框架,要使用这个测试框架编写我们的自动化测试用例,需要先行搭建对应的开发环境.本章我们就讲解WebDriver+TestNG开发环境的搭建. 2.1 环境配置 1,eclipse+jdk的安装 这个是比较基本的环境配置,如果你要使用eclipse开发你的代码,不管你是用java作为开发语言,还是用其他的如python作为开发语言,你都需要搭建这个环境.所以网上有很多Eclipse+j

Selenium2.0+TestNG+Ant+Jenkins自动化测试浅尝

当前常用自动化测试工具 Web自动化测试工具:QTP .selenium等 性能自动化测试工具:loadrunner.jmeter等 接口自动化测试工具:SoapUI.postman等 手机自动化测试工具:robotium.appium等 自动化脚本录制 Selenium 1.0包括:selenium IDE.selenium Grid.selenium RC三部分. Selenium IDE 是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能IDE录制的脚本可以可以

基于Selenium的自动化测试框架 - SeLion学习之一(基本介绍)

SeLion是一个基于Selenium的自动化测试框架,是Selenium下的一款非常优秀的框架结构,但是资料非常少,在国内使用的也就相对较少,本人会用一系列的文章,比较详细的介绍该框架结构,希望能给广大的自动化测试爱好者提供一个实现思路,如果对该本人文章感兴趣或者有什么问题,欢迎留言,我会尽量回答,也欢迎转载该系列文章.该文章是本系列第一节,SeLion的基本介绍,先让大家对SeLion有一个基本的认识. 一:SeLion是什么?SeLion是基于Selenium的一款开源测试框架,是对Sel

被误读的xpath

Selenium中被误用的XPath 用Selenium实现自动化测试的过程中,如果选择页面上的元素并且对之进行各种操作,是一个常见的任务.Selenium提供了多种定位方法: id:最有效.最方便的方法 name:跟id类似的 class name:对某些具有相同类的元素一网打尽的好方法 link text 和 partial link text: 用在定位超链接上比较多 tag name:与class name有点类似 css selector:如果你试用jQuery,这个一定是你喜欢的方法

jenkins执行自动化用例(详细、有用、mark 优先级高高高)

http://blog.sina.com.cn/s/blog_68f262210102vx8o.html 第七章 测试用例接入jenkins自动运行 ------Web自动化测试之Webdriver+TestNG--从零到熟练(系列) 自动化测试用例的最终目的就是无人值守的自动化回归测试,不管是用什么语言,什么框架编写的测试用例,如果想达到这个效果,都需要借助于Jenkins或是Hudson.根据业界的习惯,我们还是使用Jenkins.在本人的各个自动化测试教程中,已经多次介绍到了Jenkins