前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TestNG,你想要的都在这里

TestNG,你想要的都在这里

作者头像
软测小生
发布2019-07-22 17:00:33
1K0
发布2019-07-22 17:00:33
举报
文章被收录于专栏:软测小生软测小生

TestNG parallel 属 性:

由TestNG 运行不同的线程来运行。

  • methods method 级别的多线程测试,每个方法都将采用独立的线程进行测试
  • classes 不同<class>标签下的用例可以在不同的线程执行,相同<class>标签下的用例只能在同一个线程中执行
  • tests test级别的多线程测试,每个<test>标签下的所有方法将在同一个线程中执行,不同的<test>是在不同的线程来运行的

TestNG之DataProvider的用法:

DataProvider用于提供测试数据,主要有两种方式:

一.返回类型是Iterator<Object[]>,不用管有多少组测试数据,可以抽取出来以map的id为参数作为公用的提取数据方法。

代码语言:javascript
复制
@DataProvider(name="DataProvider")
private Iterator<Object[]> LoginDataProvider() throws IOException {
  List<Object[]> result=new ArrayList<Object[]>();
  SqlSession session=DatabaseUtil.getSqlSession();
  List<Object> alldata=session.selectList("loginTestAll");
  Iterator it=alldata.iterator();
  while(it.hasNext()){
  result.add(new Object[] { it.next() });
}
return  result.iterator();
}

二.返回类型是Object[][],明确知道有几组测试数据

代码语言:javascript
复制
@DataProvider(name="DataProvider")
private Object[][] LoginDataProvider() throws IOException {
Object[][] result=null;
SqlSession session=DatabaseUtil.getSqlSession();
result=new Object[][]{{session.selectOne("loginTest",1)},{session.selectOne("loginTest",2)}};
return  result;
}

测试调用

代码语言:javascript
复制
@Test(groups="login",dataProvider = "DataProvider")
public void loginTestCase(LoginTest loginTest) throws IOException {
//用测试数据发起请求,获取响应
String response=getResult(loginTest);
 
//响应断言
JSONObject rj=new JSONObject(response);
String code=rj.getInt("code")+"";
Assert.assertEquals(code,loginTest.getExpected());
}

往期关于TestNG推荐:

测试框架TestNG使用介绍

使用TestNG listener实现Case失败重跑功能

【TestNG快速上手】一、接口自动化

Java接口测试之ExtentReport测试报告

下面内容摘自CSDN博客@fengke1813:

1、什么是TestNG

TestNG(Next Generation)单元测试框架比JUnit单元测试框架更强大,它提供了更多的扩展功能,可以通过注解、分组、序列和参数化组织和执行自动化测试脚本,因此它适合运行更复杂的自动化测试用例。

TestNG的优点:

(1)漂亮的HTML格式测试报告

(2)支持并发测试

(3)参数化测试更简单

(4)支持输出日志

(5)支持跟过功能的注解

2、编写TestNG测试用例的步骤

(1)使用eclipse生成TestNG的测试程序框架

(2)在生成的程序框架中编写测试代码逻辑

(3)根据测试代码逻辑,插入TestNG注解标签

(4)配置Testng.xml文件,设定测试类、测试方法、测试分组的执行信息

(5)执行TestNG的测试程序

3、安装TestNG

见另一篇博客“Eclipse安装TestNG插件”, https://blog.csdn.net/fengke1813/article/details/80264880

4、在TestNG中运行第一个WebDriver测试用例

单击选中的新建文件,按下Ctr+N组合键,选择“TestNG”文件下的“TestNG class”,点击“next”,在弹出的对话框中选择输入工程、包名和类名。注意选择工程时,具体到工程文件的下一层\src文件,因为系统默认是找到src下的class文件运行,可以到设置里面改路径。

生成测试框架代码以后,将selenium的jar包导入到工程中,在代码中填充Webdriver的测试逻辑代码:

代码语言:javascript
复制
package cn.gloryroad;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.AfterMethod;

public class FirstTestNGDemo {
  public WebDriver driver;
  String baseUrl = "http://www.sogou.com/";
  @Test
  public void testSearch() {
      //打开搜狗首页
      driver.get(baseUrl);
      //在搜索框输入“光荣之路自动化测试”
      driver.findElement(By.id("query")).sendKeys("光荣之路自动化测试");
      //单击搜索按钮
      driver.findElement(By.id("stb")).click();
  }
  @BeforeMethod
  public void beforeMethod() {
      //若无法打开Firefox浏览器,可设定Firefox浏览器的安装路径
      System.setProperty("WebDriver.firefox.bin", "C:/Program Files/Mozilla Firefox");
      //打开Firefox浏览器
      driver = new FirefoxDriver();
  }

  @AfterMethod
  public void afterMethod() {
      //关闭浏览器
      driver.quit();
  }
}

以“TestNG Test”命令运行后的结果:

TestNG也会输出HTML格式的测试报告,访问工程目录下的“test-output”目录,打开“emailable-report.html”文件:

TestNG也会在“test-output”目录中生成index.html文件的报告,提供更加详细的测试用例执行信息:

4、TestNG的常用注解

(1)TestNG的常见测试用的组织结构:

Test Suit由一个或者多个Test组成;

Test由一个或者多个测试Class组成;

一个测试Class由一个或者多个测试方法组成;

(2)常用注解

@BeforeSuit:表示此注解的方法会在当前测试集合(Suit)中的任一测试用例开始运行之前执行;

@AfterSuit:表示此注解的方法会在当前测试集合(Suit)中的任一测试程序结束之后执行;

@BeforeTest:表示此注解的方法会在Test中任一测试用例开始运行之前执行;

@AfterTest:表示此注解会的方法在Test中任一测试用例运行结束之后执行;

@BeforeGroup:表示此注解的方法会在分组测试用例的任一测试用例开始运行前执行;

@AfterGroup:表示此注解的方法会在分组测试用例的所有测试用例运行结束后执行;

@BeforeClass:表示此注解的方法会在当前测试类的任一测试用例开始运行前执行;

@AfterClass:表示此注解的方法会在当前测试类的所有测试用例结束后执行;

@BeforeMethod:表示此注解的方法会在每个测试方法开始运行前执行;

@AfterMethod:表示此注解的方法会在每个测试方法结束后执行;

@Test:表示此注解的方法被认定为是一个测试方法,即一个测试用例。

5、测试集合

在自动化测试的执行过程中,通常会产生批量运行多个测试用例的需求,此需求被称为运行测试集合(Suit)。TestNG的测试用例可以是独立的,也可以按照特定的顺序来执行。

通过TestNG.xml的配置,可实现运行多个测试用例的不同组合。

操作步骤:

(1)右击工程名,选择“new”->“file”命令,在弹出的对话框的“file.name”输入框中输入“testng.xml”,点击“finish”创建TestNG的XML配置文件。

(2)双击testng.xml的文件,选择sourse标签栏进行编辑。

代码语言:javascript
复制
<suite name = "TestNGSuite">
     <test name = "test1">
         <classes>
              <class name = "cn.gloryroad.FirstTestNGDemo"/>
              <class name = "cn.gloryroad.TestBaidu"/>
         </classes>
     </test>
</suite> 

(3)执行testng.xml文件名,在测试结果中可验证两个测试类的测试方法均被执行。

6、测试用例的分组

使用group关键字进行分组,用来执行多个Test的测试用例。

操作步骤:

(1)新建一个名为Grouping的测试类,编写如下代码:

代码语言:javascript
复制
package cn.gloryroad;
import org.testng.annotations.Test;


public class Grouping {
  @Test(groups = {"人"})
  public void student() {
      System.out.println("学生方法被调用");
  }
  @Test(groups = {"人"})
  public void teacher(){
      System.out.println("老师方法被调用");
  }
  @Test(groups = {"动物"})
  public void cat(){
      System.out.println("小猫方法被调用");
  }
  @Test(groups = {"动物"})
  public void dog(){
      System.out.println("小狗方法被调用");
  }
  @Test(groups = {"人","动物"})
  public void feeder(){
      System.out.println("饲养员方法被调用");
  }
}

(3)testng.xml的内容配置如下:

代码语言:javascript
复制
<suite name = "TestNGSuite">
     <test name = "Grouping">
     <groups>
        <run>
           <include name = "动物"/>
        </run>
     </groups>
     <classes>
     <class name = "cn.gloryroad.Grouping"/>
     </classes>
     </test>
</suite> 

(4)运行testng.xml文件,结果如下:

(5)如果想同时执行两个分组中的所有测试用例,修改testng.xml文件为:

代码语言:javascript
复制
<suite name = "TestNGSuite">
     <test name = "Grouping">
     <groups>
        <define name = "All">
           <include name = "人"/>
           <include name = "动物"/>
        </define>
        <run>
           <include name = "All"/>
        </run>
     </groups>
     <classes>
     <class name = "cn.gloryroad.Grouping"/>
     </classes>
     </test>
</suite>    

7、依赖测试

对于具有依赖性的测试用例,需要保证某个测试用例执行完之后才执行其他测试用例,此测试场景运行需求称为依赖测试。通过测试,可在不同测试方法间共享数据和程序状态。使用dependsOnMethods参数来实现。

代码语言:javascript
复制
package cn.gloryroad;
import org.testng.annotations.Test;
public class DependentTest {
  @Test(dependsOnMethods = {"OpenBrowser"})
  public void SignIn() {
      System.out.println("SignIn方法被调用");
  }
  @Test
  public void OpenBrowser(){
      System.out.println("OpenBrowser方法被调用");
  }
  @Test(dependsOnMethods = {"SignIn"})
  public void LogOut(){
      System.out.println("LogOut方法被调用");
  }
}

运行结果:

8、特定顺序执行测试用例

对于非依赖性的测试用例也可以实现按指定顺序执行,使用priority来实现。

测试代码:

代码语言:javascript
复制
package cn.gloryroad;
import org.testng.annotations.Test;
public class SequenceTest {
  @Test(priority = 2)
  public void test3() {
      System.out.println("test3");
  }
  @Test(priority = 3)
  public void test4() {
      System.out.println("test3");
  }
  @Test(priority = 0)
  public void test1() {
      System.out.println("test3");
  }
  @Test(priority = 1)
  public void test2() {
      System.out.println("test3");
  }
}

测试结果:

9、跳过某个测试方法

使用参数enabled=false来跳过某个参数。

代码语言:javascript
复制
package cn.gloryroad;
import org.testng.annotations.Test;
public class SequenceTest {
  @Test(priority = 2)
  public void test3() {
      System.out.println("test3");
  }
  @Test(priority = 3)
  public void test4() {
      System.out.println("test3");
  }
  @Test(priority = 0)
  public void test1() {
      System.out.println("test3");
  }
  @Test(priority = 1,enabled = false)
  public void test2() {
      System.out.println("test3");
  }
}

10、测试报告中的自定义日志

日志功能可通过自定义的方式记录测试脚本的运行信息。一般使用两种模式进行记录,及高层级和低层级。低层级模式日志会记录所有测试步骤信息,高层级模式日志只记录测试脚本中的主要时间信息。可根据需求选择日志信息的记录层级。

代码语言:javascript
复制
package cn.gloryroad;
import org.testng.Reporter;
import org.testng.annotations.Test;
public class TestngReporter {
  @Test
  public void OpenBrowser() {
      System.out.println("OpenBrowser方法被调用");
      Reporter.log("调用打开浏览器的方法");
  }
  @Test
  public void SignIn() {
      System.out.println("SignIn方法被调用");
      Reporter.log("调用登录的方法");
  }
  @Test
  public void LogOut() {
      System.out.println("LogOut方法被调用");
      Reporter.log("调用注销的方法");
  }
}

可在index.html测试报告中查看运行的Report Log信息。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软测小生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档