TestNG-常用注解参数
注解@Test标签
1 2 3 4 5 6 7 8 9 10 | package com.course.testng; import org.testng.annotations.Test; public class BasicAnnotation { @Test public void testCase01(){ System.out.println( "ddd" ); } } |
@Test:是最基本的注解,用来把方法标记为测试的一部分,是最基本的注解
注解@BeforeMethod和@AfterMethod标签
1 2 3 4 5 6 7 8 9 | @BeforeMethod public void beforeMethod(){ System.out.println( "在测试方法之前运行" ); } @AfterMethod public void afterMethod(){ System.out.println( "在测试方法之后" ); } |
@BeforeMethod 在每个方法之前运行;@AfterMethod 在每个方法之后运行
注解@BeforeClass和@AfterClass标签
1 2 3 4 5 6 7 8 | @BeforeClass public void beforeClass(){ System.out.println( "在类之前" ); } @AfterClass public void afterClass(){ System.out.println( "在类运行之后" ); } |
@BeforeClass 在类之前运行;@AfterClass 在类之后运行
注解@BeforeSuit和@AfterSuit标签
1 2 3 4 5 6 7 8 | @BeforeSuite public void beforeSuite(){ System.out.println( "在套件suit之前" ); } @AfterSuite public void afterSuite(){ System.out.println( "在套件suit之后" ); } |
类在运行之前运行suit
注解运行顺序总结:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | package com.course.testng; import org.testng.annotations.*; public class BasicAnnotation { @Test public void testCase01(){ System.out.println( "ddd" ); } @Test public void testCase02(){ System.out.println( "ddd2" ); } @BeforeMethod public void beforeMethod(){ System.out.println( "在测试方法之前运行" ); } @AfterMethod public void afterMethod(){ System.out.println( "在测试方法之后" ); } @BeforeClass public void beforeClass(){ System.out.println( "在类之前" ); } @AfterClass public void afterClass(){ System.out.println( "在类运行之后" ); } @BeforeSuite public void beforeSuite(){ System.out.println( "在套件suit之前" ); } @AfterSuite public void afterSuite(){ System.out.println( "在套件suit之后" ); } } |
运行结果:beforesuit->beforeclass->beforemethod->方法1->aftermethod->beforemethod->方法2->aftermethod->afterclass->aftersuit
1 2 3 4 5 6 7 8 9 10 | 在套件suit之前 在类之前 在测试方法之前运行 ddd 在测试方法之后 在测试方法之前运行 ddd2 在测试方法之后 在类运行之后 在套件suit之后 |
忽略测试
1 2 3 4 | @Test (enabled = false ) public void testCase02(){ System.out.println( "ddd2" ); } |
在标签@Test后面加关键字enabled = false,该方法就不被执行了
组测试
组测试:方法分组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | @Test (groups = "server" ) public void testCase02() { System.out.println( "server端测试方法1" ); } @Test (groups = "server" ) public void testCase03() { System.out.println( "server端测试2" ); } @BeforeGroups ( "server" ) public void beforeGroups() { System.out.println( "***这个是组运行之前的方法" ); } @AfterGroups ( "server" ) public void afterGroups() { System.out.println( "这个是组运行之后的方法***" ); } |
- 在注解@Test后加groups="组名" ,一个组的方法,都要加上
- 如果需要@BeforeGroups和@AfterGroups这两个注解,要在这两个注解后,加上指定的组名("组名")
组测试:类分组
- 在每个类上方加注解@Test
- 编写对应的xml文件,其中可以指定运行全部,也可以指定运行某一个分组
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="suitename"> <!--运行所有类--> <test name="runAll"> <classes> <class name="com.course.testng.groups.Groups1"></class> <class name="com.course.testng.groups.Groups2"></class> <class name="com.course.testng.groups.Groups3"></class> </classes> </test> <!--运行指定的分组--> <test name="runGroup1"> <groups> <run> <include name="client"></include> </run> </groups> <classes> <class name="com.course.testng.groups.Groups1"></class> <class name="com.course.testng.groups.Groups2"></class> </classes> </test> </suite>
异常测试
1 2 3 4 5 6 | //异常测试 @Test (expectedExceptions = RuntimeException. class ) public void testCase01() { System.out.println( "Groups1-01" ); throw new RuntimeException(); } |
@Test(expectedExceptions = 异常类),放在方法上
依赖测试
方法二依赖方法一:先执行方法一,如果方法一失败了,方法二就不执行了
1 2 3 4 5 6 7 8 9 10 | @Test public void testCase02() { System.out.println( "Groups1-testCase02" ); throw new RuntimeException(); } @Test (dependsOnMethods = { "testCase02" }) public void testCase03() { System.out.println( "方法三" ); } |
@Test(dependsOnMethods = {"被依赖的方法"})
多线程测试
一、使用xml文件实现
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="threadSuiteName" parallel="methods" thread-count="2"> <!--多线程的级别是method方法级别的:parallel="methods"--> <!--多线程的数量是2:thread-count="2"--> <!-- tests级别:不同的test tag 下的用例,可以在不同的线程下执行;相同的test tag下的用例,只能在同一个线程中执行 classes级别:不同的class tag 下的用例,可以在不同的线程下执行;相同的class tag下的用例,只能在同一个线程中执行 methods级别:所有用例都可以在不同线程中执行 thread-count:代表最大并发线程数 xml:这种使用xml配置的多线程,不能指定线程池,只能在方法上指定线程池 --> <test name="thread"> <classes> <class name="com.course.testng.multiThread.Thread01"></class> <class name="com.course.testng.BasicAnnotation"></class> </classes> </test> </suite>
超时测试
@Test(timeOut = 3000) //在3000毫秒,期望得到响应值 public void test01() throws InterruptedException { Thread.sleep(2000); //sleep了2000毫秒,在3000内有响应值,该用例通过 } @Test(timeOut = 3000) //在3000毫秒,期望得到响应值 public void test02() throws InterruptedException { Thread.sleep(3500); //3500毫秒之后,才响应,该用例报错 }
@Test(timeOut = 毫秒数) 表示期望多少毫秒内,取得响应值;如果没有,该用例就报错
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤