我正在试验测试。我的目标是在几个类中拥有测试方法,并在一个单独的类中为准备和总结一堆测试提供“支持”方法。
另一个要求是,在测试套件中,必须为多个测试部件调用支持方法。例如,第一部分包含testA和testB,第二部分包含testC和testD。这将导致以下步骤:
支持,测试,测试,支持,支持
我的第一个(部分)有效的方法是使用@Test
注释所有方法,使用组并定义组之间的依赖关系,例如,测试方法依赖于组“setUp”,这是上例中一组支持方法“support1”。
这种方法的问题是,支持的方法计为测试,因此生成的报告显示了错误的“真实”测试数。
下一个想法是使用@BeforeGroups
和@AfterGroups
,将支持的方法放在一个组中,并使用组依赖项。支持方法不应再被视为测试。但我在一开始就被困住了。比如我试过
@BeforeGroups (groups = {"setUp"})
对于类支持中的设置方法,以及
@Test(groups = { "TestA" }, dependsOnGroups = { "setUp" })
在一个“真实”的测试课上。这会导致以下(简单化的)错误:
[testng] DependencyMap::Method "TestClass.testSomething()[...]" depends on nonexistent group "setUp"
为什么组"setUp"不存在?我是不是忽略了什么?
或者还有其他可行的方法?
谢谢你的帮助!
编辑:测试是从Ant开始的,我使用testng。如下所示的xml:
<test name="TestA">
<groups>
<run>
<include name="setUp" />
<include name="TestA"/>
<include name="tearDown"/>
</run>
</groups>
<classes>
<class name="seleniumtest.test.technical.Support"/>
<class name="seleniumtest.test.business.TestClassA"/>
</classes>
</test>
<test name="TestB">
<groups>
<run>
<include name="setUp" />
<include name="TestB"/>
<include name="tearDown"/>
</run>
</groups>
<classes>
<class name="seleniumtest.test.technical.Support"/>
<class name="seleniumtest.test.business.TestClassB"/>
</classes>
</test>
package com.test.MySample;
import org.testng.annotations.*;
public class TestNGTest1 {
@BeforeTest
public void BeforeTest() {
System.out.println("@BeforeTest");
}
@BeforeClass
public void BeforeClass() {
System.out.println("@BeforeClass");
}
@BeforeGroups (groups = {"My group"})
public void BeforeGroups() {
System.out.println("@BeforeGroups");
}
@BeforeGroups (groups = {"My group1"})
public void BeforeGroups1() {
System.out.println("@BeforeGroups1");
}
@AfterGroups (groups = {"My group1"})
public void AfterGroups1() {
System.out.println("@AfterGroups1");
}
@BeforeMethod
public void BeforeMethod() {
System.out.println("@BeforeMethod");
}
@Test(groups = {"My group"})
public void test1() {
System.out.println("test1");
}
@Test (groups = {"My group", "My group1"})
public void test2() {
System.out.println("test2");
}
@AfterMethod
public void AfterMethod() {
System.out.println("@AfterMethod");
}
@AfterGroups (groups = {"My group"})
public void AfterGroups() {
System.out.println("@AfterGroups");
}
@AfterClass
public void AfterClass() {
System.out.println("@AfterClass");
}
@AfterTest
public void AfterTest() {
System.out.println("@AfterTest");
}
}
我想我已经想出了我想要的解决办法。
我需要在支持类中分别使用@BeforeTest
和@AfterTest
而不是@BeforeGroup
和@AfterGroup
:
@BeforeTest(groups = {"setUp"})
public void beforeTest() {[...]}
@AfterTest( groups = {"tearDown"})
public void afterTest() {[...]}
在测试类中:
@Test(groups = { "TestA" })
public void testSomething() {[...]}
与巴顿的方法一样,依赖组已经消失。
测试正在进行。与我的问题相比,xml没有改变。也就是说,可以在testng中配置测试。xml文件,无需更改java代码。
此外,这个解决方案还解决了BeforeGroup方法的另一个问题,至少巴顿认为是这样(@巴顿,我无意冒犯你)。对于后者,使用几个测试组的测试不能按预期运行,因为beForeTest()
方法将在任何组之前运行。例如,如果你有以下测试(testng.xml摘录):
<groups>
<run>
<include name="TestA"/>
<include name="TestB"/>
</run>
</groups>
...执行的结果步骤是:
beForeTest(),TestA,beForeTest(),TestB,postTest()。
使用带有BeforeTest的解决方案,您将进行以下测试:
<groups>
<run>
<include name="setUp" />
<include name="TestA"/>
<include name="TestB"/>
<include name="tearDown"/>
</run>
</groups>
... 执行的结果步骤是:
setUp=beforeTest()、TestA、TestB、tearDown=afterTest()。
我有故障!!
问题出在注释上
@Test(groups = { "TestA" }, dependsOnGroups = { "setUp" })
基本上,您的错误消息是试图说,没有@Test方法将groupname设置为setUp
!!对于您的问题,解决方案是修改测试方法的注释,如下所示
@Test(groups = { "TestA" })
并在支持方法中修改注释
@BeforeGroups (groups = {"TestA"})
我使用这个设置运行了一个示例
public class TestSupport {
@BeforeGroups(groups = { "sample","sample1" })
public void beforeTest() {
System.out.println("Before test");
}
@AfterGroups(groups = { "sample","sample1" })
public void afterTest() {
System.out.println("after test");
}
}
我的测试课是
public class TestClassA {
@Test(groups = { "sample" })
public void superTestA() {
System.out.println("This is the actual test");
}
@Test(groups = { "sample" })
public void superTestB() {
System.out.println("This is the another test under sample group");
}
@Test(groups = { "sample1" })
public void superTest() {
System.out.println("This is another test");
}
}
还有我的测试。xml,如下所示
<test name="sampletest" >
<groups>
<run>
<include name="sample" />
<include name="sample1" />
</run>
</groups>
<classes>
<class name="test.global.testng.TestClassA"/>
<class name="test.global.testng.TestSupport"/>
</classes>
</test>
现在测试是这样运行的:beForeGroups-
主要内容:1. 在方法上的分组,2. 在类上的分组,3. 其它分组分组测试是TestNG中的一个新的创新功能,它在JUnit框架中是不存在的。 它允许您将方法调度到适当的部分,并执行复杂的测试方法分组。 您不仅可以声明属于某个分组的方法,还可以指定包含其他组的组。 然后调用,并要求其包含一组特定的组(或正则表达式),同时排除另一个分组。 组测试提供了如何分区测试的最大灵活性,如果您想要背靠背运行两组不同的测试,则不需要重新编译任何内容。 使用标记在文件中指定分组
这是驱动程序类,它将为每个测试方法创建驱动程序实例。
你可以为特定 variant 运行 lint,例如 ./gradlew lintRelease,或为所有 variants 运行(./gradlew lint),这种情况下会生成一份包含特定版本存在的问题的详细报告。你可以像下面的代码片段那样通过配置 lintOptions 节点来配置 lint。一般只能配置小部分选项,查看 DSL reference 了解所有可修改的选项。 android {
5.5 Lint支持 从0.7.0版本之后,你可以为一个特定的变种版本运行 lint ,也可以为所有变种版本都运行.在这种情况下,它会产生一个报告指出给定的变种版本的问题. 你可以像下面一样通过 lintOptions 自定义 lint .一般情况下,你只需要配置其中的一部分.以下是展示所有可用的 lint 配置项. android { lintOptions { // s
12.10 测试 因为所有基于JSR-352的作业都是异步执行的,所以很难确定一项作业什么时候完成。为了辅助测试,Spring Batch提供了 org.springframework.batch.core.jsr.JsrTestUtils。这个工具类可以启动一个job,或者重新启动一个job,以及等待作业完成。当作业完成后, 就返回相关联的JobExecution。
11.3 JDBC测试支持 org.springframework.test.jdbc是包含JdbcTestUtils的包,它是一个JDBC相关的工具方法集,意在简化标准数据库测试场景。特别地,JdbcTestUtils提供以下静态工具方法: countRowsInTable(..):统计给定表的行数。 countRowsInTableWhere(..):使用提供的where语句进行筛选统计给定表