如何基于TestNG测试用例优先级编写Java if else条件判断
TestNG根据用例优先级做分支判断的实现方案
TestNG原生支持获取测试用例的优先级属性,不需要第三方工具即可实现你的需求,有两种常用实现方式:
- 单测试类内使用
@BeforeMethod前置处理
在测试类的@BeforeMethod标注方法中注入ITestResult参数,调用result.getMethod().getPriority()即可拿到当前即将执行的测试用例的优先级数值,直接做分支判断即可,示例代码如下:
import org.apache.poi.hssf.usermodel.HSSFSheet; import org.testng.ITestResult; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; public class TestPriorityDemo { private HSSFSheet s; // 替换为你实际的sheetnum参数值 private int sheetnum = 1; private int sheetnum1 = 2; // 你自己实现的创建sheet方法,这里仅做示例 private HSSFSheet newsheet(int num) { // 实现创建sheet的逻辑 return null; } @BeforeMethod public void beforeMethod(ITestResult result) { int testNgPriorityNum = result.getMethod().getPriority(); if (testNgPriorityNum == 1) { s = newsheet(sheetnum); } else if (testNgPriorityNum == 2) { s = newsheet(sheetnum1); } } @Test(priority = 1) public void testCase1() { // 测试逻辑,直接使用初始化好的s对象 } @Test(priority = 2) public void testCase2() { // 测试逻辑,直接使用初始化好的s对象 } }
- 全局统一处理用
IInvokedMethodListener监听
如果需要对所有测试类的用例统一应用优先级分支逻辑,可以实现TestNG的IInvokedMethodListener接口,重写beforeInvocation方法,全局获取所有测试用例的优先级做对应操作,无需每个测试类单独编写前置逻辑。
注意:测试用例的
priority属性默认值为0,未显式设置优先级的用例取到的值为0。如果业务场景简单,也可以直接在测试方法内部硬编码判断优先级,但维护成本更高,更推荐使用上述第一种方案。
内容的提问来源于stack exchange,提问作者Pratik Pathare
相关产品推荐
相关产品推荐

