Testng测试框架(2)-测试用例@Test

测试方法用 @Test 进行注释,将类或方法标记为测试的一部分。

@Test()
public void aFastTest() {System.out.println("Fast test");
}
import org.testng.annotations.Test;public class TestExample {@Test(description = "测试用例1")public void testCase1(){System.out.println("Test Case 1");}@Test(priority = 2)public void testCase2(){System.out.println("Test Case 2");}@Test(priority = 1)public void testCase3(){System.out.println("Test Case 3");}@Testpublic void testCase4(){System.out.println("Test Case 4");throw new RuntimeException("Test Case 4 Failed");}@Test(groups = {"myGroup"})public void testCase5(){System.out.println("Test Case 5");throw new RuntimeException("Test Case 5 Failed");}@Test(enabled = false)public void testCase6(){System.out.println("Test Case 6");}@Test(dependsOnMethods = {"testCase4"},dependsOnGroups = {"myGroup"}, alwaysRun = true)public void testCase7(){System.out.println("Test Case 7");}
}

①description代表测试用例描述,控制台会打印输出该描述。
②priority代表优先级,数字越小,优先级越高,默认值为0。testCase2的priority值为2,会最后一个执行;testCase3的priority值为1,会倒数第二个执行。如果级别一样,则执行顺序默认按方法名排序。
③enabled的默认值为true,代表不启用。当enabled的值为false时,表示禁用,因此testCase6并未执行。
④testCase4和testCase5都抛出了运行时异常,因此执行失败。
⑤dependsOnMethods代表依赖一个或多个方法,dependsOnGroups代表依赖一个或多个分组。一旦被依赖的测试用例执行失败,则TestNG将跳过该测试用例。
但没有跳过testCase7,原因是testCase7加了alwaysRun方法,并将值设为true,代表始终执行,在默认情况下,该值为false。建议尽量不要使用dependsOnMethods和dependsOnGroups,因为违背了测试用例需要解耦的原则。

@Test的属性expectedExceptions

在TestNG中,@Test注解的expectedExceptions属性用于指定测试方法预期抛出的异常类型。如果测试方法执行时抛出了与expectedExceptions属性指定的异常类型相同的异常,那么测试会被认为是成功的;如果抛出了其他类型的异常或者没有抛出任何异常,那么测试会失败。

使用expectedExceptions属性的基本语法如下:

@Test(expectedExceptions = ExceptionClass.class)
public void testMethod() {// 测试逻辑,预期会抛出 ExceptionClass 类型的异常
}

其中,ExceptionClass.class应该替换为你预期测试方法会抛出的异常的具体类型。

以下是一个简单的例子:

import org.testng.annotations.Test;public class MyTestClass {@Test(expectedExceptions = NullPointerException.class)public void testThrowException() {String str = null;int length = str.length(); // 这行会抛出 NullPointerException}@Testpublic void testNoExceptionThrown() {String str = "hello";int length = str.length(); // 这行不会抛出异常}
}

在这里插入图片描述

在上面的例子中,testThrowException方法预期会抛出一个NullPointerException,因为尝试获取一个null字符串的长度。如果这个方法真的抛出了NullPointerException,那么测试就会通过。相反,testNoExceptionThrown方法不会抛出任何异常,所以它不需要(也不应该)使用expectedExceptions属性。

请注意,expectedExceptions属性只能指定一个预期的异常类型。如果你预期测试方法可能会抛出多种类型的异常,那么你需要使用更复杂的异常处理逻辑,而不是依赖expectedExceptions属性。

此外,TestNG还提供了expectedExceptionsMessage属性,用于检查抛出的异常是否具有特定的消息。这两个属性可以组合使用,以便更精确地控制测试的预期行为。

@Test(expectedExceptions = NullPointerException.class, expectedExceptionsMessage = "Cannot invoke \"String.length()\" because \"str\" is null")
public void testThrowExceptionWithMessage() {String str = null;int length = str.length(); // 这行会抛出带有特定消息的 NullPointerException
}

在这个例子中,测试不仅预期会抛出NullPointerException,还预期异常消息中包含特定的文本。

@Test的属性invocationCount

在TestNG中,@Test注解的invocationCount属性用于指定测试方法的调用次数。这允许你重复执行相同的测试方法多次,以确保测试的可靠性和稳定性。

invocationCount属性的值是一个整数,表示测试方法应该被调用的次数。每次调用都会作为单独的测试实例来执行,并且测试结果会分别记录。

下面是一个使用invocationCount属性的示例:

import org.testng.annotations.Test;public class invocationCountTest {@Test(invocationCount = 5,invocationTimeOut = 1000)public void testMethod() {// 测试逻辑// 这个方法会被调用5次System.out.println("testMethod");}
}

在上面的例子中,testMethod方法会被调用5次。每次调用都是独立的,并且测试结果会分别记录。如果其中任何一次调用失败,那么整个测试会被认为是失败的。

使用invocationCount属性可以帮助你发现那些可能在某些情况下通过,但在其他情况下失败的间歇性问题。通过重复执行测试,你可以增加捕捉到这些问题的机会。

需要注意的是,使用invocationCount属性会增加测试的执行时间,因为测试方法会被多次调用。因此,你应该谨慎使用这个属性,避免不必要的重复执行。

invocationTimeOut为超时时间。
invocationTimeOut属性用于设置测试方法每次调用的超时时间。这个属性指定了一个最大的毫秒数,用于限制测试方法单次调用的执行时间。如果测试方法在一次调用中的执行时间超过了这个设定的超时时间,那么TestNG会抛出异常,并标记该次调用为失败。

此外,invocationCount属性通常与其他TestNG属性(如dependsOnMethodspriority等)结合使用,以实现更复杂的测试执行策略。通过合理地组合这些属性,你可以构建出灵活且强大的测试套件。

@Test timeout属性

在TestNG中,@Test注解的timeout属性用于设置测试方法的超时时间。这个属性指定了一个最大的毫秒数,用于限制测试方法的执行时间。如果测试方法的执行时间超过了这个设定的超时时间,TestNG会抛出异常,并标记该测试方法为失败。

timeout属性的使用对于确保测试方法不会无限期地运行或者在执行过程中卡住是非常有用的。它可以帮助你识别那些可能由于各种原因(如外部资源不可用、无限循环等)导致执行时间过长的测试方法。

下面是一个使用timeout属性的示例:

import org.testng.annotations.Test;public class MyTestClass {@Test(timeout = 3000) // 设置超时时间为3000毫秒(即3秒)public void testMethod() {// 测试逻辑// 如果这个方法执行时间超过3秒,TestNG会抛出异常并标记测试为失败}
}

在上面的例子中,testMethod方法的执行时间被限制为3秒。如果这个方法在3秒内没有完成执行,TestNG会中断测试并标记它为失败。

需要注意的是,timeout属性是设置单个测试方法的超时时间,而不是整个测试套件或测试类的超时时间。如果你需要为整个测试套件或测试类设置超时时间,你可能需要编写自定义的逻辑或使用其他测试框架提供的功能。

此外,timeout属性的值应该根据测试方法的实际执行时间来合理设置。如果设置得太短,可能会导致一些正常但需要较长时间的测试方法被误判为失败。如果设置得太长,则可能无法有效地检测出那些执行时间过长的测试方法。因此,在设置timeout属性时,你需要根据测试方法的实际需求和预期执行时间来做出权衡。

class级别的注解

@Test不仅可以注解在测试方法上,还可以注解在类上。

@Test
public class Test1 {public void test1() {}public void test2() {}
}

类级别的@Test注解使这个类的所有公开方法称为测试方法,即使测试方法没有用@Test注解。如果想添加具体的属性,仍然可以使用@Test来注注解测试方法。

@Test
public class Test1 {public void test1() {}@Test(groups = "g1")public void test2() {}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/820059.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过Python向PDF添加文本水印_python给pdf文件加文字水印

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7 深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞…

频率传感器信号采集隔离转换模拟信号0-1KHz/0-5KHz/0-10KH转0-2.5V/0-5V/0-10V/0-10mA/0-20mA/4-20mA

主要特性: >> 精度等级&#xff1a;0.2 级 >> 全量程内极高的线性度&#xff08;非线性度<0.1%&#xff09; >> 辅助电源/信号输入/信号输出&#xff1a; 2500VDC 三隔离 >> 辅助电源&#xff1a;5VDC&#xff0c;12VDC&#xff0c;24VDC 等单…

Redis Desktop Manager 中文--强大的Redis数据库管理工具

Redis Desktop Manager&#xff08;简称RDM&#xff09;是一款开源且功能强大的图形化Redis管理工具。它支持Windows、macOS和Linux等多平台&#xff0c;为Redis数据库提供了直观友好的管理界面。通过RDM&#xff0c;用户可以轻松连接多个Redis服务器&#xff0c;管理连接信息&…

【自媒体创作利器】AI白日梦+ChatGPT 三分钟生成爆款短视频

AI白日梦https://brmgo.com/signup?codey5no6idev 引言 随着人工智能&#xff08;AI&#xff09;技术的快速发展&#xff0c;AI在各个领域都展现出了强大的应用潜力。其中&#xff0c;自然语言处理技术的进步使得智能对话系统得以实现&#xff0c;而ChatGPT作为其中的代表之一…

MyBatis操作数据库(3)

其它查询操作 #{}和${} MyBatis参数赋值有两种方式, 咱们前面使用了#{}进行赋值, 接下来来看两者的区别: #{}和${}的使用 1.先看Integer类型的参数: Select("select username, password, age, gender, phone from userinfo where id #{id}") UserInfo queryByI…

攻防世界---easyRE1

1.下载附件&#xff0c;打开后有两个文件 2.对32查壳 3.对64查壳 4.IDA分析&#xff0c;这里打开之后找到main函数点击main函数后按f5 5.看到了flag----拿去提交发现是对的&#xff0c;这道题是逆向中最简单的一道了 flag{db2f62a36a018bce28e46d976e3f9864}

LeetCode501:二叉搜索树中的众数

给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…

STL —— priority_queue

博主首页&#xff1a; 有趣的中国人 专栏首页&#xff1a; C专栏 本篇文章主要讲解 priority_queue 的相关内容 目录 1. 优先级队列简介 基本操作 2. 模拟实现 2.1 入队操作 2.2 出队操作 2.3 访问队列顶部元素 2.4 判断优先队列是否为空 2.5 获取优先队列的大小 …

什么是One-Class SVM

1. 简介 单类支持向量机&#xff0c;简称One-Class SVM(One-Class Support Vector Machine)&#xff0c;用于异常检测和离群点检测(无监督学习&#xff0c;其他svm属于有监督的)&#xff0c;可以在没有大量异常样本的情况下有效地检测异常。其目标是通过仅使用正常数据来建模&a…

【力扣 Hot100 | 第四天】4.15(括号生成)

文章目录 4.括号生成4.1题目4.2解法&#xff1a;回溯4.2.1回溯思路&#xff08;1&#xff09;函数返回值以及参数&#xff08;2&#xff09;终止条件&#xff08;3&#xff09;遍历过程 4.2.2代码 4.括号生成 4.1题目 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数…

三斜求积术 To 海伦公式 ← 三角形面积

【知识点&#xff1a;三斜求积术】 所谓秦九韶的三斜求积术&#xff0c;即如果已知三角形的边长a&#xff0c;b&#xff0c;c&#xff0c;可求得该三角形的面积为&#xff1a; 而由三斜求积术可推得海伦公式。过程如下&#xff1a; 其中&#xff0c; 上面推导公式的 Latex 代码…

​​​​网络编程探索系列之——广播原理剖析

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之广播原理剖析&#xff0c;在这篇文章中&#xff0c; 你将会学习到如何在网络编程中利用广播来与局域网内加入某个特定广播组的主机&#xff01; 希望这篇文章能对你有所帮助&#xff0c;大家要是觉得我写…

从零开始写 Docker(十一)---实现 mydocker exec 进入容器内部

本文为从零开始写 Docker 系列第十一篇&#xff0c;实现类似 docker exec 的功能&#xff0c;使得我们能够进入到指定容器内部。 完整代码见&#xff1a;https://github.com/lixd/mydocker 欢迎 Star 推荐阅读以下文章对 docker 基本实现有一个大致认识&#xff1a; 核心原理&…

「51媒体」如何有效进行媒体邀约,提升宣传传播效果?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 进行有效的媒体邀约&#xff0c;提升宣传传播效果的关键在于策略性和专业性。以下是具体的做法&#xff1a; 明确目标&#xff1a;要确立清晰的品牌推广目标和策略&#xff0c;包括确定目…

软考-系统集成项目管理中级--范围管理(输入输出很重要!!!)

本章历年考题分值统计 本章重点常考知识点汇总清单(掌握部分可直接理解记忆) 12、标杆对照将实际或计划的做法(如流程和操作过程)与其他可比组织的做法进行比较&#xff0c;以便识别最佳实践&#xff0c;形成改进意见&#xff0c;并为绩效考核提供依据。标杆对照所采用的可比组…

【YOLOv8改进[损失函数]】使用结合InnerIoU和Focaler的各种损失函数助力YOLOv8更优秀

目录 一 回归损失函数&#xff08;Bounding Box Regression Loss&#xff09; 1 Inner-IoU 2 Focaler-IoU&#xff1a;更聚焦的IoU损失 二 改进YOLOv8的损失函数 1 总体修改 ① ultralytics/utils/metrics.py文件 ② ultralytics/utils/loss.py文件 ③ ultralytics/uti…

亚马逊云科技直冲云霄训练营活动开始啦(送考试半价券)

小李哥分享的是亚马逊科技官方免费直冲云霄训练营学习活动&#xff0c;通过该活动可以薅到以下的羊毛 1️⃣免费系统性技能培训&#xff0c;成为AWS技术大牛 2️⃣考试半价券&#xff0c;最高可省1086元人民币 3️⃣分享活动获得精美礼品 4️⃣亚马逊云科技年度全球技术大会门票…

什么是T型槽铸铁平板中内应力——河北北重厂家

T型槽铸铁平板中的内应力指的是平板内部受到的内部力&#xff0c;包括拉应力和剪应力。在T型槽铸铁平板使用过程中&#xff0c;由于自身重量、外力加载等原因&#xff0c;会产生内部应力。这些内应力是平板内部各部分之间的相互作用力&#xff0c;使得平板各部分受到不同的拉伸…

FreeSWITCH 1.10.10 简单图形化界面1 - docker/脚本/ISO镜像安装[YouCanSee]

FreeSWITCH 1.10.10 简单图形化界面1 - docker/脚本/ISO镜像安装 0. 界面预览00. 使用手册在这里1. Docker安装1.1 下载docker镜像1.2 启动docker镜像1.3 登录 2. 脚本安装2.1 下载2.2 安装2.3 登录2.4 卸载程序 3. 镜像安装3.1 下载镜像3.2 安装镜像3.3 登录 0. 界面预览 网站…

基于SpringBoot+Vue的在线教育系统(源码+文档+包运行)

一.系统概述 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了在线教育系统的开发全过程。通过分析在线教育系统管理的不足&#xff0c;创建了一个计算机管理在线教育系统的方案。文章介绍了在线教育系统的系统分析部…