如何使用套件创建并行测试,但取决于变量或组



我使用Selenium WebDriver、Java、TestNG、Maven和Surefire来启动自动化测试。我有很多测试,但它们是在两个独立的用户组上运行的。一组用于检查权限,另一组用于其他操作。我想创建并行测试,但不想向suiteXmlFiles添加任何新的测试。

目前,我在tensng.xml中只定义了一个包:

<suite thread-count="1" name="BrainshareItSuite">
<test name="AllTests" >
<packages>
<package name="com.brainshare.faktury.qa.*"/>
</packages>
</test>
</suite>

它工作得很好,因为所有新的测试表单包都会自动添加到我的套件中。我会保存这种自动化添加新的测试。

我可以创建两个平行的测试组吗?这将取决于变量,例如用户的登录。或者,我可以向@Test注释添加组,例如"特权"。然后启动组:第一组-有"特权",第二组-没有"特权"?但是我在哪里可以添加这个?

Phew!很多问题!我们从哪里开始?:)

从你的头衔来看,我认为你试图同时解决太多问题。不太清楚的部分是:

取决于变量或组

据我所知,您不能使用xml文件并行运行套件。然而,您可以通过cmd引用testNG文档:

5.10.1 - Parallel suites
This is useful if you are running several suite files (e.g. "java org.testng.TestNG testng1.xml testng2.xml") and you want each of these suites to be run in a separate thread. You can use the following command line flag to specify the size of a thread pool:
java org.testng.TestNG -suitethreadpoolsize 3 testng1.xml testng2.xml testng3.xml

在上面的示例中,线程计数为1,但我不确定这是否可以从xml应用于套件级别。再次引用testNG文档:5.10.2-平行测试、类别和方法

The parallel attribute on the <suite> tag can take one of following values:
<suite name="My suite" parallel="methods" thread-count="5">
<suite name="My suite" parallel="tests" thread-count="5">
<suite name="My suite" parallel="classes" thread-count="5">
<suite name="My suite" parallel="instances" thread-count="5">

最后,使用Maven的另一个可能的解决方案是:a) 在您的surefire插件中使用forkCount来定义线程数,因此在您的情况下为2,并且您还希望使用reuseForks(意味着当线程可用时开始新的测试)。b) 确保您在配置下指定了两个套件名称以及

作为mvn test启动

<plugins>                    
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId> 
<version>2.20.1</version>
<configuration>
<forkCount>2</forkCount>
<reuseForks>true</reuseForks>
<suiteXmlFiles>
<suiteXmlFile>BrainshareItSuite.xml</suiteXmlFile>
<suiteXmlFile>NotAprivilegedBunchSuite.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
<goals>
<goal>integration-test</goal>
</goals>  
</plugin> 
</plugins>

然而,我不认为以上是非常有效的(因为本质上你只有2个线程执行脚本。就我个人而言,我会尝试以不同的方式解决这个问题,但也许那就是我。

此外,你还提到了组(是的,你可以在测试类的顶部定义它们,这样你就不需要在每个方法中定义每个组),然后是的,同样,你可以并行运行单独的组,但在这种情况下必须是parallel="tests"

但为什么是团体呢?为什么不让一个xml同时执行里面的所有测试呢?毕竟,suite只是collection of test classes,您似乎不需要停止一个套件,直到另一个套件执行为止。所以,像这样的东西将是我:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Regression" parallel="tests" thread-count="15">

<parameter name="env" value="stage" />   
<parameter name="browser" value="chrome"/> 

<test name="login1">   
<classes>   
<class name="regression.login.emailLogin"/> 
</classes>
</test>   

<test name="login2">   
<classes>   
<class name="regression.login.fbLogin"/>    
</classes>
</test>

<test name="login3">    
<classes>   
<class name="regression.login.forgottenPassLink"/>
</classes>
</test>
[..]
</suite>

在上面的例子中,希望我能帮助解决您关于depending on variable的问题。您可以从xml传递params,然后在测试开始时使用if子句,这样您就可以从那里引导流。例如,我会把它放在一个before类中,这样我就可以加载我的环境并选择一种形式的网络驱动程序,但你可以从那里做任何你想做的事情:

@BeforeClass
@Parameters({"browser", "env"})
public void initialSetup(String browser, String env){       
login.setup(browser, env);
}

最后,我最好让您知道,您也可以使用data providers将所有用户加载到一个测试中。也许你就是这样:

5.6.2 - Parameters with DataProviders
Specifying parameters in testng.xml might not be sufficient if you need to pass complex parameters, or parameters that need to be created from Java (complex objects, objects read from a property file or a database, etc...). In this case, you can use a Data Provider to supply the values you need to test.  A Data Provider is a method on your class that returns an array of array of objects.  This method is annotated with @DataProvider:
//This method will provide data to any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
{ "Cedric", new Integer(36) },
{ "Anne", new Integer(37)},
};
}
//This test method declares that its data should be supplied by the Data Provider
//named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
System.out.println(n1 + " " + n2);
}
will print
Cedric 36
Anne 37

希望这能有所帮助,祝你好运!

最新更新