第四章 TestNG测试用例分步解析(上)

------Web自动化测试之Webdriver+TestNG--从零到熟练(系列)css

      通过前三章咱们对自动化相关内容的学习,咱们了解了什么是自动化测试,测试环境的搭建和WebDriver API的介绍,定位方法及检测点儿设置等相关知识点。从本章开始,咱们讲探讨测试用例的编写,以及其相关的知识点。java

4.1 第一个测试用例

     虽然咱们在第二章在搭建测试环境的时候,写了一个简单的测试用例检测环境,不过那不算是一个完整的测试用例。下面咱们以登陆众筹网为例,开始咱们测试用例的编写之旅!编程

   首先咱们先写一下这个测试用例的手工测试步骤:浏览器

(1)用浏览器打开众筹网首页www.zhongchou.com。模块化

(2)单击右上角的登陆按钮,弹出登陆浮层。函数

(3)输入用户名和密码,单击登陆按钮,进行登陆。学习

(4)检测是否登陆成功,并打开了首页。测试

(5)退出登陆。网站

   这是咱们手工测试的步骤,若是要转化成自动化测试用例,须要转化成咱们须要的脚本语言编写的程序。ui

4.2 Selenium IDE录制测试用例

   如咱们前面讲到的,能够利用Selenium IDE来录制测试步骤,而后添加上检测点,就能够造成一个测试用例。转化成咱们须要的脚本语言格式,如java,而后保存文件,放到咱们的开发环境下就能够调试运行了。

具体的录制方法以下:

(1)打开火狐浏览器,打开Selenium IDE,在IDE的Base URL中输入要录制的网站地址:http://www.zhongchou.com

(2)IDE默认是处于录制状态的,若是没有,单击红色按钮,录制。在火狐浏览器的地址栏中输入http://www.zhongchou.com,打开百度首页。

(3)单击右上角的登陆按钮,弹出登陆浮层。

(4)在弹出的浮层中输入 用户名:183****8905,密码:a****00,而后单击登陆按钮。

(5)在打开的首页中,右击右上角的昵称,如图4.2.1所示,选择assert判断项,设置检测点。而后退出登陆。

 


4.2.1 设置检测点

(6)单击Selenium IDE的回放按钮,检测录制的测试步骤,如图4.2.2所示,不过此时检测点会报错,缘由是执行太快,页面没有刷新出来。

 


4.2.2 回放录制的测试步骤

(7)为了解决这个问题,咱们在检测点前添加一个等待。等待咱们要检测的内容出现后,再去执行判断。如图:4.2.3所示,回放验证成功。

 


4.2.3 添加等待命令

(8)如今说明咱们录制的测试用例没有问题,导出录制的测试用例为java/Junit/WebDriver格式的,保存为login.java.如图4.2.4所示:

 


4.2.4 导出录制的测试用例

(9)检查导出的代码,Selenium IDE帮咱们导出的代码以下:

 

#login.java

package com.example.tests;

 

import java.util.regex.Pattern;

import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;

import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.openqa.selenium.support.ui.Select;

 

public class Login {

  private WebDriver driver;

  private String baseUrl;

  private boolean acceptNextAlert = true;

  private StringBuffer verificationErrors = new StringBuffer();

 

  @Before

  public void setUp() throws Exception {

    driver = new FirefoxDriver();

    baseUrl = "http://www.zhongchou.com/";

    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

  }

 

  @Test

  public void testLogin() throws Exception {

    driver.get(baseUrl + "/");

    driver.findElement(By.id("headerLogin")).click();

    driver.findElement(By.name("username")).clear();

    driver.findElement(By.name("username")).sendKeys("18311338905");

    driver.findElement(By.name("user_pwd")).clear();

    driver.findElement(By.name("user_pwd")).sendKeys("a000000");

    driver.findElement(By.cssSelector("a.zc")).click();

    for (int second = 0;; second++) {

           if (second >= 60) fail("timeout");

           try { if ("潜龙9527".equals(driver.findElement(By.cssSelector("div.siteLgInner")).getText())) break; } catch (Exception e) {}

           Thread.sleep(1000);

    }

 

    assertEquals("潜龙9527", driver.findElement(By.cssSelector("div.siteLgInner")).getText());

    driver.findElement(By.cssSelector("div.siteLgInner")).click();

driver.findElement(By.linkText("退出")).click();

  }

 

  @After

  public void tearDown() throws Exception {

    driver.quit();

    String verificationErrorString = verificationErrors.toString();

    if (!"".equals(verificationErrorString)) {

      fail(verificationErrorString);

    }

  }

 

  private boolean isElementPresent(By by) {

    try {

      driver.findElement(by);

      return true;

    } catch (NoSuchElementException e) {

      return false;

    }

  }

 

  private boolean isAlertPresent() {

    try {

      driver.switchTo().alert();

      return true;

    } catch (NoAlertPresentException e) {

      return false;

    }

  }

 

  private String closeAlertAndGetItsText() {

    try {

      Alert alert = driver.switchTo().alert();

      String alertText = alert.getText();

      if (acceptNextAlert) {

        alert.accept();

      } else {

        alert.dismiss();

      }

      return alertText;

    } finally {

      acceptNextAlert = true;

    }

  }

}

 

代码讲解:

  • Ø 最前面是引用Webdriver相关的一些儿函数或方法。
  • Ø 建立一个测试类Login,类里是具体的测试方法testLogin()。
  • Ø 函数中是一步步的具体操做。
  • Ø 函数setUp()和tearDown,是测试用例执行前和执行后要作的操做。
  • Ø 函数isElementPresent(),isAlertPresent()和closeAlertAndGetItsText()是selenium IDE本身产生的,对测试用例没有任何用处,能够忽略。

(10)      将代码导入到开发环境中。打开Eclipse,新建java工程如:Test。将刚刚保存的login.java文件导入到这个工程中,如图4.2.5所示:

 


图4.2.5导入保存的文件

(11)      运行验证刚刚导入的代码,右击这个文件,“Run as”-->”TestNG test”,查看运行结果。程序没有任何输出,经分析,咱们得出缘由:由于咱们导出的是WebDriver格式的,TestNG不识别,若是咱们直接导出TestNG格式的,又没有WebDriver相关的引用。因此,咱们就修改一下代码,将“@Before,@After”修改为“@BeforeTest,@AfterTest”便可运行。但运行过程当中会报错,如图4.2.6所示:

 


图4.2.6 程序运行结果

这个错误缘由是:咱们退出时,先须要将鼠标移到昵称,会拉出下拉菜单,而后单击退出菜单进行退出。而Selenium IDE是录制不到鼠标over到昵称上的操做的,因此找不到退出按钮。而mouseover()操做须要导入另外的包,因此咱们采出如下操做来完成退出:

//退出连接:http://www.zhongchou.com/usernew-loginout

driver.get(baseUrl + "usernew-loginout");

(12)      再次执行测试用例,则会打开火狐浏览器,登陆到众筹网,而后检测登陆是否成功,然后退出。此是测试用例会有如图4.2.7所示的输出结果:

 


图4.2.7 修改后的测试用例输出

(12)至此,利用Selenium IDE来录制测试用例,而且在开发环境下运行经过。但是咱们发现这样录制测试用例仍是存在问题的,转化后会有不少用不到的代码存在,并且不符合模块化编程的规范,有些功能还实现不了。因此咱们仍是喜欢本身编写测试用例,录制转化只能看成参考。

相关文章
相关标签/搜索