码迷,mamicode.com
首页 > Web开发 > 详细

TestNG测试框架在基于Selenium进行的web自动化测试中的应用

时间:2016-01-18 18:51:19      阅读:540      评论:0      收藏:0      [点我收藏+]

标签:

这个测试框架可以把写好的测试用例按自定义顺序执行,以Selenium WebDriver自动化测试用例为例:

1、新建一个名为forTestNg的java project,然后创建一个libs文件夹,导入所有和Selenium相关的jar包:

技术分享

2、安装TestNG,在Eclipse中点击Help->Install New Software,点击Add,Location填写“http://beust.com/eclipse”,然后点击OK:

技术分享

之后勾选TestNG,点击Next进行安装即可:

技术分享

之后点击Next:

技术分享

点击Accept并Finish:

技术分享

进行安装:

技术分享

点击OK:

技术分享

完成安装后点击Yes重启Eclipse:

技术分享

3、Eclipse重启后,可以在libs文件夹中发现多了一个TestNG的jar包:

技术分享

选中libs文件夹下所有的jar包,右键->Build Path->Add to Build Path:

技术分享

4、新建一个名为forTestNg的package:

技术分享

按下“Ctrl+N”选中TestNG类,点击Next:

技术分享

填写信息如下(选择Source folder,选择Package name,给你的TestNG测试类起一个Class name,勾选两个Annotations,给XML文件起个名字),点击Finish:

技术分享

NewTest类代码如下(@BeforeMethod的方法将在每个@Test的方法执行前执行,@AfterMethod的方法将在每个@Test的方法执行后执行):

package forTestNg;

import org.testng.annotations.Test;

import userInfo.UserInfo;

import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class NewTest {
    public WebDriver webDriver;
    UserInfo usrInfo = new UserInfo();

    @Test
    public void testA() throws InterruptedException {
        waitForLinkText(webDriver, "登录");
        webDriver.findElement(By.linkText("登录")).click();
        waitForId(webDriver, "input1");
        webDriver.findElement(By.id("input1")).sendKeys(usrInfo.usrName);
        webDriver.findElement(By.id("input2")).sendKeys(usrInfo.pwd);
        webDriver.findElement(By.id("signin")).click();
        System.out.println("Login successfully.");
    }

    @Test
    public void testB() throws InterruptedException {
        waitForLinkText(webDriver, "登录");
        webDriver.findElement(By.linkText("登录")).click();
        waitForId(webDriver, "input1");
        webDriver.findElement(By.id("input1")).sendKeys(usrInfo.usrName);
        webDriver.findElement(By.id("input2")).sendKeys(usrInfo.pwd);
        webDriver.findElement(By.id("signin")).click();
        System.out.println("Login successfully.");
    }

    @BeforeMethod
    public void beforeMethod() {
        System.out.println("Before method.");
        webDriver = new FirefoxDriver();
        String url = "http://cnblogs.com";
        webDriver.get(url);
        System.out.println("Navigate successfully.");
    }

    @AfterMethod
    public void afterMethod() {
        System.out.println("After method.");
        webDriver.quit();
        System.out.println("Quit successfully.");
    }

    private static void waitForId(WebDriver webDriver, String id) throws InterruptedException {
        try {
Thread.sleep(1000); webDriver.findElement(By.id(id)); }
catch (Exception e) { Logger log = Logger.getLogger("lavasoft"); log.setLevel(Level.INFO); log.info(e.toString()); } } private static void waitForLinkText(WebDriver webDriver, String linkText) throws InterruptedException { try {
Thread.sleep(1000); webDriver.findElement(By.linkText(linkText)); }
catch (Exception e) { Logger log = Logger.getLogger("lavasoft"); log.setLevel(Level.INFO); log.info(e.toString()); } } }

5、新建一个userInfo包,并创建一个UserInfo类,用于存储用户信息:

技术分享

代码如下:

package userInfo;

public class UserInfo {
    public String usrName;
    public String pwd;

    public UserInfo() {
        usrName = "用户名";
        pwd = "密码";
    }
}

6、修改xmlTest.xml文件,内容如下(指定了测试方法的执行顺序):

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
    <test name="Test" preserve-order="true">
        <classes>
            <class name="forTestNg.NewTest" />
            <methods>
                <include name="testB" />
                <include name="testA" />
            </methods>
        </classes>
    </test> <!-- Test -->
</suite> <!-- Suite -->

以上代码指定了先执行方法testB,然后执行方法testA;

7、在xml文件右键选择Run As->TestNG Suite运行测试:
技术分享

运行结果如下,我们可以在Console中看到相应方法的测试结果:

技术分享

从总结信息中可以看出,共运行了两个test方法,其中有一个失败了,我们可以看到是出现了locate不到link元素的异常,在“Results of running suite”栏下还可以看到测试结果是否通过的信息:

技术分享

方法testB测试失败了,这是由于在方法testB里输入了乱码的linkText导致的:

@Test
public void testB() throws InterruptedException {
    waitForLinkText(webDriver, "登录");
    webDriver.findElement(By.linkText("登录")).click();
    waitForId(webDriver, "input1");
    webDriver.findElement(By.id("input1")).sendKeys(usrInfo.usrName);
    webDriver.findElement(By.id("input2")).sendKeys(usrInfo.pwd);
    webDriver.findElement(By.id("signin")).click();
    System.out.println("Login successfully.");
}

*、如果运行出错,提示找不到classpath——创建“TESTNG_HOME”环境变量,值为“D:\TestNG”(这里我把“testng-6.9.9.jar”这个jar包放在了D盘的这个路径下):

技术分享

创建CLASSPATH环境变量,值为“%CLASSPATH%;%TESTNG_HOME%\testng-6.9.9.jar;”:

技术分享

之后重启Eclipse并运行测试。

8、进一步去看测试结果,首先找到项目所在的文件夹,发现有一个test-output的文件夹:

技术分享

在其下的Suite文件夹下打开“Test.html”:

技术分享

之后就可以看到测试结果了(红色的为失败,绿色的为通过):

技术分享

关于TestNG测试框架更多的用法,可以看这里

TestNG测试框架在基于Selenium进行的web自动化测试中的应用

标签:

原文地址:http://www.cnblogs.com/LanTianYou/p/5139744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!