一、 把测试方法分优先级执行-----》(priority=索引)

1、新建一个testng方法

  1. package testclasses;
  2.  
  3. import org.testng.annotations.Test;
  4. import org.testng.annotations.BeforeMethod;
  5. import org.testng.annotations.AfterMethod;
  6. import org.testng.annotations.BeforeClass;
  7. import org.testng.annotations.AfterClass;
  8. import org.testng.annotations.BeforeTest;
  9. import org.testng.annotations.AfterTest;
  10.  
  11. public class TestNG_Prioritiy {
  12.  
  13. @Test
  14. public void test1() {
  15. System.out.println("在类中排序为第一的test");
  16. }
  17.  
  18. @Test
  19. public void test2() {
  20. System.out.println("在类中排序为第二的test");
  21. }
  22.  
  23. @Test
  24. public void test3() {
  25. System.out.println("在类中排序为第三的test");
  26. }
  27.  
  28. @Test
  29. public void test4() {
  30. System.out.println("在类中排序为第四的test");
  31. }
  32.  
  33. @BeforeClass
  34. public void beforeClass() {
  35. System.out.println("BeforeClass");
  36. }
  37.  
  38. @AfterClass
  39. public void afterClass() {
  40. System.out.println("AfterClass");
  41. }
  42. }

默认的运行顺序为:

3、如果我们需要让test按照我们规定的方法,只需要在备注的test后面加上(priority=?)即可(索引位从0开始)

  1. package testclasses;
  2.  
  3. import org.testng.annotations.Test;
  4. import org.testng.annotations.BeforeMethod;
  5. import org.testng.annotations.AfterMethod;
  6. import org.testng.annotations.BeforeClass;
  7. import org.testng.annotations.AfterClass;
  8. import org.testng.annotations.BeforeTest;
  9. import org.testng.annotations.AfterTest;
  10.  
  11. public class TestNG_Prioritiy {
  12.  
  13. @Test(priority=3)
  14. public void test1() {
  15. System.out.println("在类中排序为第一的test");
  16. }
  17.  
  18. @Test(priority=0)
  19. public void test2() {
  20. System.out.println("在类中排序为第二的test");
  21. }
  22.  
  23. @Test(priority=1)
  24. public void test3() {
  25. System.out.println("在类中排序为第三的test");
  26. }
  27.  
  28. @Test(priority=2)
  29. public void test4() {
  30. System.out.println("在类中排序为第四的test");
  31. }
  32.  
  33. @BeforeClass
  34. public void beforeClass() {
  35. System.out.println("BeforeClass");
  36. }
  37.  
  38. @AfterClass
  39. public void afterClass() {
  40. System.out.println("AfterClass");
  41. }
  42. }

打印结果为:

二、 如何给测试方法分组执行 -----》(groups= {"分组名"})

1、给test方法进行分组

一个test方法可以在多个分组内,格式(groups= {"分组名","分组名"})

  1. package testclasses;
  2.  
  3. import org.testng.annotations.Test;
  4. import org.testng.annotations.BeforeClass;
  5. import org.testng.annotations.AfterClass;
  6.  
  7. public class TestNG_Grouping {
  8.  
  9. @Test(groups= {"cars","suv"})
  10. public void testBMWx6() {
  11. System.out.println("Running Test - BMW X6");
  12. }
  13.  
  14. @Test(groups= {"cars","sedan"})
  15. public void testAudiA6() {
  16. System.out.println("Running Test - Audi A6");
  17. }
  18.  
  19. @Test(groups= {"bike"})
  20. public void testKawasakiNinja() {
  21. System.out.println("Running Test - Kawasaki Ninja");
  22. }
  23.  
  24. @Test(groups= {"bike"})
  25. public void testHondaCBR() {
  26. System.out.println("Running Test - Honda CBR");
  27. }
  28.  
  29. @BeforeClass
  30. public void beforeClass() {
  31. System.out.println("BeforeClass");
  32. }
  33.  
  34. @AfterClass
  35. public void afterClass() {
  36. System.out.println("AfterClass");
  37. }
  38. }

2、配置xml文件

  1. <!-- 没有此行配置运行时会报错 -->
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  3. <suite name="GroupsDemo">
  4. <!-- name中的值表示命名,可随意命名 -->
  5. <test name="Application Test">
  6. <!-- 使测试用例按照我们的分组执行 -->
  7. <groups>
  8. <run>
  9. <!-- name中的赋值需要填写的是我们在类中对test分组的名称 -->
  10. <include name="bike"></include>
  11. </run>
  12. </groups>
  13. <!-- name中的值为需要测试的具体类名,格式:包名.类名 -->
  14. <classes>
  15. <class name="testclasses.TestNG_Grouping"></class>
  16. </classes>
  17. </test>
  18. </suite>

运行结果:

从结果可知,只运行了TestNG_Grouping类中带注解groups=bike的test方法

3、但是,我们也可以从运行结果中得知,带了Beforeclass和afterclass注解的方法没有运行,按常理Beforeclass和afterclass会在类中的test方法执行前后给运行一次,此处没有运行时因为我们对test进行分组时未对class进行分组,如果我想让Beforeclass和afterclass注解的方法一起运行就需要在注解后面加上(alwaysRun=true)

运行结果为:

4、在xml配置文件中,我们不仅可以如上面1、2中演示的那样把test在xml文件中按照groups的名称来单独执行,也可以对groups再进行分组然后一次性执行多个groups。

  1. <!-- 没有此行配置运行时会报错 -->
  2. <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
  3. <suite name="GroupsDemo">
  4. <!-- name中的值表示命名,可随意命名 -->
  5. <test name="Application Test">
  6. <!-- 使测试用例按照我们的分组执行 -->
  7. <groups>
  8. <define name="all">
  9. <include name="suv"></include>
  10. <include name="bike"></include>
  11. <include name="sedan"></include>
  12. </define>
  13. <define name="nobike">
  14. <include name="suv"></include>
  15. <include name="sedan"></include>
  16. </define>
  17. <run>
  18. <!-- name中的赋值需要填写的是我们在类中对test分组的名称或者是xml文件中define标签的name名称 -->
  19. <include name="nobike"></include>
  20. </run>
  21. </groups>
  22. <!-- name中的值为需要测试的具体类名,格式:包名.类名 -->
  23. <classes>
  24. <class name="testclasses.TestNG_Grouping"></class>
  25. </classes>
  26. </test>
  27. </suite>

运行结果为:

如果有不明白的小伙伴可以加群“555191854”问我,群里都是软件行业的小伙伴相互一起学习。

内容具有连惯性,未标注的地方可以看前面的博客,这是一整套关于ava+selenium自动化的内容,从java基础开始。

欢迎关注,转载请注明来源。

章节十六、4-TestNG高级功能--把测试方法分优先级、分组执行的更多相关文章

  1. 章节十六、5-TestNG高级功能--Part2

    一.测试用例的依赖关系--->(dependsOnMethods = {"依赖方法名"}) 1.在实现自动化的过程中,有些测试用例必须在其它测试用例执行之后才能运行,两者之间 ...

  2. 章节十六、9-Listeners监听器

    一.IInokedMethodListener 1.实现一个类来监听testcase的运行情况. package listenerspackage; import org.testng.IInvoke ...

  3. 章节十六、3-TestNG方法和类注解

    一.Test Suite(测试套件) 我们通常认为一个testcase就是一个测试方法,但是会有很多的testcase,所以我们不可能把所有的testcase放到同一个测试类中,假如需要测试的页面有1 ...

  4. 章节十六、1-TestNG简介

    一.TestNG 介绍 1.TestNG 是一个来自 JUnit 和 NUnit 的测试框架,它具拥有更多的功能,提高了 执行的效率. 2.TestNG 是一个开源的自动化测试框架 去除了老框架的大部 ...

  5. 章节十六、10-TestNG报告和日志

    一.在进行自动化的过程中,日志一般采用log4j 2进行日志记录,但TestNG自己本身也带有日志记录功能(reporter),它的好处在于日志中记录的内容都是testng自动生成的. package ...

  6. Scrum立会报告+燃尽图(十一月十八日总第二十六次):功能开发与讨论贡献分配规则

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  7. 章节十六、2-TestNG注解和断言

    一.TestNG注解的testcease不是自上而下运行的,而是按照方法名的字母排序或数字的大小顺序运行的. 二.断言:判断返回的结果与我们的预期结果是否一致. 1.Assert.assertTrue ...

  8. 章节十六、6-xml参数化and并行case

    一.读取xml文件中参数 1.案例演示--->创建一个需要读取数据的类 package testclasses; import org.testng.annotations.Test; impo ...

  9. 章节十六、7-DataProviders

    一.当我们的同一个test有多套数据需要进行测试,那么我们就需要用到-->DataProviders package testclasses1; import org.testng.annota ...

随机推荐

  1. [分享] 一款极简单的 BaseEntity CRUD 方法

    前言 尝试过 ado.net.dapper.ef,以及Repository仓储,甚至自己还写过生成器工具,以便做常规CRUD操作. 它们日常操作不方便之处: 每次使用前需要声明,再操作: 很多人一个实 ...

  2. [leetcode] 20. Valid Parentheses (easy)

    原题链接 匹配括号 思路: 用栈,遍历过程中,匹配的成对出栈:结束后,栈空则对,栈非空则错. Runtime: 4 ms, faster than 99.94% of Java class Solut ...

  3. phpcms V9 常用的调用标签

    本文介绍phpcms v9中模板标签使用说明. >>调用根目录下phpcms\template\content\header文件 {template "content" ...

  4. mysql 不同版本下 group by 组内排序的差异

    最近发现网上找的 group by 组内排序语句在不同的mysql版本中结果不一样.   建表语句:   SET FOREIGN_KEY_CHECKS=0;   -- ---------------- ...

  5. RabbitMQ(三):RabbitMQ与Spring Boot简单整合

    RabbitMQ是目前非常热门的一款消息中间件,不管是互联网大厂还是中小企业都在大量使用.Spring Boot的兴起,极大地简化了Spring的开发,本文将使用Spring Boot与RabbitM ...

  6. Java 第四章

    switch选择结构 语法:switch(表达式){ case 常量 1: //代码块1:   break:  case 常量 2: //代码块2: break:    ......  default ...

  7. Kotlin学习快速入门(5)——空安全

    介绍 kotlin中,对象可分为两种类型,可为空的对象和不可为空对象 默认为不可为空对象,代码检测如果发现不可为空对象赋予了null,则会标红报错. 可为空的对象,如果调用了方法,代码检测也会标红报错 ...

  8. 疯子的算法总结(三) STL Ⅱ迭代器(iterator) + 容器

    一.迭代器(Iterator) 背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历. 定义:迭代器是一种检查容器内元素 ...

  9. Drawable 使用详解

    极力推荐文章:欢迎收藏 Android 干货分享 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android Drawable 是Android 中图像显示的常用方法. 概念:Drawable ...

  10. HiveQL DDL 常用QL示例资料

    hive-version2.1.1 DDL操作 Create/Drop/Alter/Use Database 创建数据库 //官方指导 CREATE (DATABASE|SCHEMA) [IF NOT ...