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

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

4.3 自己编写测试用例

还以上面的那个众筹登录的测试用例为例,我们来讲解一下如何自己编写测试用例

(1)              在第二章我们创建了一下java工程Test,那下面我们就在这个工程中编写我们的测试用例。右击工程文件夹下的Src文件夹,选择“newà”other…”,在打开的对话框中选择“TestNGà”TestNG Class”,单击”next”。如图4.3.1所示:

 第四章 <wbr>TestNG测试用例分步解析(下)

4.3.1 新建TestNG Class文件

2)在打开的对话框中,输入“class nameà”LoginDemo”,然后选择我们测试用例用到的函数@BeforeTest,@AfterTest,然后单击finish按钮,则会创建对应的TestNG类文件。如图4.3.2所示:

 

第四章 <wbr>TestNG测试用例分步解析(下)
4.3.2创建TestNG 类文件

3)此时我们创建的LoginDemo.java的文件内容如下:

package Src;

 

import org.testng.annotations.Test;

import org.testng.annotations.BeforeTest;

import org.testng.annotations.AfterTest;

 

public class LoginDemo {

  @Test

  public void f() {

  }

  @BeforeTest

  public void beforeTest() {

  }

 

  @AfterTest

  public void afterTest() {

  }

 

}

只有一个框架,下面我们就需要填写相应的代码进去。测试用例执行前的操作放到beforeTest()函数中,测试用例执行后的清理操件放到afterTest()函数,而具体的测试用例放到f()函数中。

4)结合我们通过Selenium IDE录制的操作步骤,加上我们自己的优化,最终我们编写的的自动化测试用例代码如下:

//LoginDemo.java

package Src;

 

import static org.junit.Assert.assertEquals;

 

import org.testng.annotations.Test;

import org.testng.annotations.BeforeTest;

import org.testng.annotations.AfterTest;

import org.openqa.selenium.By;

//添加引用

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

 

public class LoginDemo {

  private WebDriver driver;

  private String baseUrl;

 

  @BeforeTest

  public void beforeTest() {

         driver = new FirefoxDriver();

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

         }

 

  @Test

  public void testlogin() throws Exception {

         driver.get(baseUrl);

         Thread.sleep(2000);//等待打开首页

         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();

         Thread.sleep(3000);//等待登录成功

         //验证登录是否成功

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

         //退出登录

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

  }

 

 

  @AfterTest

  public void afterTest() {

         //关闭浏览器

         driver.quit();

  }

 

}

代码分析:

Ø  首先为了清晰,我们将beforeTest()函数调整到具体的测试函数之前,这样一直就能看出先执行这个函数。

Ø  更改具体测试函数名f()testlogin(),这样比较清楚,而且在后续产生测试报告的时候,不至于产生混淆。

Ø  具体的操作步骤和Selenium IDE录制的一样,在此没有做出优化,以方便大家理解。

Ø  增加了Thread.sleep()函数。这个函数的功能就是等待参数毫秒,在页面操作过程中,有延迟现象,所以适当添加这个函数是确保自动化测试用例执行成功的必要条件。

5)运行测试用例文件,右击这个文件,“Run as-->”TestNG test”,查看运行输出结果。如图4.3.3所示:

 

第四章 <wbr>TestNG测试用例分步解析(下)
4.3.3 测试用例执行结果

   此时的程序简洁,运行比较快速。这才是希望中的自动化测试用例,不过好像也没有体现出TestNG的特点,TestNG有很多的优势嘛!不要着急,下面的章节我们将一步步讲解。

4.4 测试用例编写过程中常见的问题

   在我们编写测试用例的过程中,会经常遇到一些问题,这些问题会影响到我们测试用例的质量。所以我们要在编写之前就在脑海里对它们提高警惕,避免这样的错误:

(1)随意命名测试用例类和函数名。

这涉及到编码规范的问题,变量,函数,类的命名必须有意义,不可随意命名。在自动化测试用例中,不正规的命名,会影响测试用例的可读性,而且一旦执行出错,不便于定位问题。

(2)前提条件写到具体的测试用例中。

beforeTest()函数是每个测试用例执行之前都会调用的,所以这个函数里面写的是所有测试用例都要用到的前提条件。而有很多初学的同学,会把测试步骤都写到具体的测试函数中,这样就会造成把前提条件写了很多次,不符合代码重用机制。

(3)测试用例耦合度高。

测试用例之间应该没有太多的耦合性,各自执行完测试用例,判断检测点之后,退出浏览器。这样不影响其他测试用例的执行,如果我们测试用例之间有耦合,如使用相同的测试账号的话,单线程执行没有问题,多线程运行的时候,就会造成死锁或是相互影响。

(4)执行完测试用例,不对测试数据进行清理。

执行完测试用例后,要对测试数据是行清理。而执行线上回归任务的自动化测试用例原则是不产生测试数据的。如果本次执行的测试数据不清理,下次就算执行失败了,检测执行结果的时候,如果检测到上次产生的测试数据了,也不会报错的。

(5)测试用例中没有注释。

不管是什么样的语言写的程序,都要求有注释的。由于我们做自动化测试,大多没有经过详细的编码规范的培训,所有不喜欢写注释。可是如果不加注释,时间长了,你就不清楚这个测试用例是做什么的了,需要逐步地去看代码分析,多费时啊!如果加上注释,只需要看一下注释即可。

4.5 本章小结

    本章我们以众筹网的登录为例,讲解了用Selenium IDE录制自动化测试用例和手工编写自动化测试用例的方法。从具体的实例来分析如何使用WebDriver Api来完成我们的测试用例,以此来加深你对自动化测试用例的了解。最后我们还讲解了,自动化测试用例编写过程中应该注意的事情,从一开始就规范自己的代码,严格要求自己,养成良好的编码习惯!

原文地址:https://www.cnblogs.com/eagleking0318/p/6520815.html