当前位置: 首页 > 知识库问答 >
问题:

如何使用TestNG动态地将测试组设置为@testmethods?

陈欣荣
2023-03-14

我想在运行时根据某些条件将组设置为特定的@测试方法

假设我有以下课程

public class MyTest1{
  @Test
  public void test1(){
    System.out.println("test1 called");
  }
}

public class MyTest2{
  @Test(groups={"group1"})
  public void test2(){
    System.out.println("test2 called");
  }

  @Test(groups={"group2"})
  public void test3(){
    System.out.println("test3 called");
  }
}

现在,在运行测试时,我正在命令行中将“-groups group1”或“-groups group2”发送到TestNG。因此,testng根据传递的组名运行test2()或test3()。现在,我的要求是运行test1(),它不应该附加任何组。无论我向testng runner提供什么组,每次都应该运行这个test1()。我尝试了实现IAlterSuiteListener的alter方法,但我无法获得所有的测试方法,包括未考虑运行的测试方法。因此,我无法在运行时设置组名。

那么,有没有其他方法可以在运行时将组设置为@测试方法(没有定义组)?

共有2个答案

屈宏爽
2023-03-14

如果要指定组,则没有直接的方法。然而,还有两种方法可以做到这一点。

  1. 您可以在名为“nogroups”的组中标记所有测试,并且在运行或

<代码>公共void转换(ITestanotation注释,类testClass,构造函数testConstructor,方法testMethod){if(annotation.getGroups().length==0){annotation.setGroups(新字符串[]{“noGroups”});}}

鲜于承基
2023-03-14

您可能应该开始探索TestNG为此提供的beanshell方法选择方式。

不久前,我写了一篇博客文章,讨论了如何在TestNG中使用Beanshell表达式。您可以在这里阅读更多关于它的信息,并参考这里的官方TestNG文档。

引用TestNG文档,

TestNG为方便起见定义了以下变量:

  • java。朗,反思一下。方法方法:当前的测试方法
  • 组织。测试NG。ITestNGMethod testngMethod:当前的测试方法
  • java。util。映射组:当前测试方法所属组的映射

以您的示例为例,我创建了一个套件xml文件,如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="1265_Suite" parallel="false" verbose="2">
    <test name="92" parallel="false" preserve-order="true">
        <method-selectors>
            <method-selector>
                <script language="beanshell">
                    <![CDATA[whatGroup = System.getProperty("groupToRun");
                (groups.containsKey(whatGroup) || testngMethod.getGroups().length ==0);
                ]]>
                </script>
            </method-selector>
        </method-selectors>
        <classes>
            <class name="com.rationaleemotions.stackoverflow.MyTest1"/>
            <class name="com.rationaleemotions.stackoverflow.MyTest2"/>
        </classes>
    </test>
</suite>

我使用maven通过命令提示符运行它,如下所示:(测试类基本上是您在问题中共享的)

mvn clean test -DsuiteXmlFile=dynamic_groups.xml -DgroupToRun=group2

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running TestSuite
...
... TestNG 6.11 by Cédric Beust (cedric@beust.com)
...

test1 called
test3 called
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.377 sec - in TestSuite

Results :

Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
 类似资料:
  • 本文向大家介绍如何在TestNG中为测试用例设置优先级?,包括了如何在TestNG中为测试用例设置优先级?的使用技巧和注意事项,需要的朋友参考一下 通过为每种测试方法赋予优先级,我们可以按其执行顺序设置优先级。先运行优先级较低的测试方法,然后再执行优先级较高的测试方法。 示例 在Java类文件中,将首先运行,然后运行。

  • 我是React的新手,并试图了解函数组件中的挂钩。我在应用程序的公共目录中的本地. json文件中有一个Products对象数组。在我的src目录中,我有我的Products组件。我需要将. json数据带入该组件并在页面上呈现它。我使用useState()挂钩来设置产品和setProducts const。然后我使用getData函数获取json数据,该函数使用该数据调用setProducts(

  • 主要内容:1. 在方法上的分组,2. 在类上的分组,3. 其它分组分组测试是TestNG中的一个新的创新功能,它在JUnit框架中是不存在的。 它允许您将方法调度到适当的部分,并执行复杂的测试方法分组。 您不仅可以声明属于某个分组的方法,还可以指定包含其他组的组。 然后调用,并要求其包含一组特定的组(或正则表达式),同时排除另一个分组。 组测试提供了如何分区测试的最大灵活性,如果您想要背靠背运行两组不同的测试,则不需要重新编译任何内容。 使用标记在文件中指定分组

  • 我试图在反射的帮助下执行我的测试脚本,反射注释为@test,如下所示: 但是,问题是无法按照优先级值运行@测试方法。它是随机执行的。谁能告诉我如何根据优先级值运行@测试方法吗。 此外,我也尝试了dependsOnMethods。但它仍然是随机执行的。 示例代码: A类 输出: 键入包名称com。测验建筑ClassA测试3测试4测试5测试6测试1测试2通过:executeTestMetods ===

  • 我的任务是单独使用TestNG测试应用程序,该应用程序在tomcat服务器上运行。该应用程序是用JAVA编写的。我有应用程序的APIendpoint,但是如何使用POST和GET方法测试应用程序? 我想测试,例如:<代码>http://localhost:8080/sportsbetting-web/登录,我应该发布用户凭据。如何测试登录是否有效?

  • 我正在开发springboot应用程序,在该应用程序中,我需要为请求API添加一个标头,它们使用org.springframework.http.HttpHeaders将标头值设置为请求。 我可以看到他们使用下面的代码来设置字符串值标题。 https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframe