gpt4 book ai didi

java - 在 TestNG 中控制测试顺序的更简单方法?

转载 作者:行者123 更新时间:2023-11-30 09:18:30 26 4
gpt4 key购买 nike

我看到过一些类似的问题,但没有一个能直接回答我的问题......我将 Selenium Webdriver 2.0 与 TestNg 和 Java 一起使用,我正在寻找一种更好的方法来控制测试运行的顺序。我真正想要的只是测试用例按照它们在类中编写的顺序运行。这是直观的。这很容易。它是可维护的。我真的很惊讶它不是 testNg 的默认值。(为什么在编码器未明确要求时应用一些随机排序?)

无论如何,我知道我可以向我的 testng xml 添加一个方法列表,但是到目前为止我有 130 个测试(还有数百个!),这样的方法列表对于 future 的维护来说太多了。例如,当我添加十个测试方法时,我必须记住将所有这些方法添加到我的 xml 文件中。如果我错过添加一个会怎样?我永远不会注意到它从未运行过......

所以这个解决方案将是一场维护噩梦:

<test name="BVTQA01">
<classes>
<class name="TestPackage.BVT">
<methods>
<include name="testLogin"></include>
<include name="testAddToCart"></include>
...
<include name="test999 etc"></include>
</methods>
</class>
</classes>
</test>

我也试过保留顺序:

<test name="BVTQA01" preserve-order="true">
<classes>
<class name="TestPackage.TestBVT" />
</classes>
</test>

但如果我不添加方法列表和“包含名称”列表的维护噩梦,它显然会被忽略......

所以目前我只是在 xml 文件中列出我的测试类(如上所述 - TestBVT 有 20 个方法等),并使用测试本身的“取决于”注释控制测试运行顺序。然而,这并不理想,因为我正在为每个方法创建依赖项。而且我想删除不是真正必要的依赖项。我只想在存在真正的依赖关系时使用“取决于”。

我还搜索了如何从我的 @Test 注释方法中自动创建 xml。但是发布的解决方案并不清楚如何实际实现。

任何关于如何让 testNg 按顺序从上到下运行我的测试类的反馈,没有任何随机排序或维护繁重的列表生成将是非常好的。提前致谢,

小红书

最佳答案

一种方法是以编程方式运行 TestNG。

package com.shn.test;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.xml.parsers.ParserConfigurationException;

import org.testng.TestNG;
import org.testng.xml.XmlClass;
import org.testng.xml.XmlSuite;
import org.testng.xml.XmlTest;
import org.xml.sax.SAXException;

import com.shn.demos.RunDemo;

public class RunSuite{

public static void main(String[] args) {

TestNG testNG = new TestNG();
List<XmlSuite> suites = new ArrayList<XmlSuite>();

//pass the name of Suite, Name of the groups to be executed & name of test
suites.add(createSuite("SuiteDemo", "groupName1", "testName"));

testNG.setSuiteThreadPoolSize(1);
testNG.setXmlSuites(suites);

testNG.run();
}

public static XmlSuite createSuite(String suiteName, String groupName, String testName) {
XmlSuite suite = new XmlSuite();
suite.setName(suiteName);
suite.setParallel(XmlSuite.PARALLEL_NONE);

LinkedHashMap<String, String> suiteParams = new LinkedHashMap<String, String>();
//Put in the parameters out here which are required @ suite level
suiteParams.put("SuiteKey1", "SuiteValue1");
suiteParams.put("SuiteKey2", "SuiteValue2");
suite.setParameters(suiteParams);

XmlTest test = new XmlTest(suite);

test.setName(testName);
test.addIncludedGroup(groupName);
//Put in the parametes out here wich are required @ test level
test.addParameter("testKey1", "testValue1");
test.addParameter("testKey2", "testValue2");

List<XmlClass> clazzes = new ArrayList<XmlClass>();

//This is your class under test
XmlClass clazz = new XmlClass(Foo.class);
clazzes.add(clazz);
test.setClasses(clazzes);
List<XmlTest> tests = new ArrayList<XmlTest>();
tests.add(test);
suite.setTests(tests);
return suite;
}
}

我只知道 setPreserveOrder() 但还没有真正尝试过。让我知道它是否适合你

关于java - 在 TestNG 中控制测试顺序的更简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com