gpt4 book ai didi

java - 如何将 testNG 实例传递到另一个类

转载 作者:行者123 更新时间:2023-12-02 13:36:51 25 4
gpt4 key购买 nike

原样:

第1步:我在servelt.doPost方法中创建testng实例。

public void  dummyDoPost(){


TestListenerAdapter adapter = new TestListenerAdapter();

testNG = new TestNG();
List<Class> listnerClasses = new ArrayList<Class>();
List<String> suiteNameList = new ArrayList<String>();
Class[] classList = new Class[]{
csvOperation.class
};
listnerClasses.add(straight2bank.csvOperation.class);
testNG.setDefaultSuiteName("suite");
testNG.setListenerClasses(listnerClasses);
testNG.setTestClasses(classList);
testNG.run();

第 2 步:我创建了一个类,该类将读取用户选择的 serverlet 返回的平台(例如 ios、Android 或 Chrome)。

程序如下。 那是另一个操作

Class B{
public void platformController (Map<String,String> testDataValues){

System.out.println("Platform Controller started.");
String platformToBeExecuted = testDataValues.get("JourneyId");
System.out.println("Journey ID returned to platformController " +platformToBeExecuted);

if(platformToBeExecuted.contains("chrome")){
System.out.println("Platform to be executed: Chrome");
System.setProperty("webdriver.chrome.driver",pathToChromeDriver);

/****
To remove message "You are using an unsupported command-line flag: --ignore-certificate-errors.
Stability and security will suffer."
Add an argument 'test-type'
ChromeOptions options = new ChromeOptions();
options.addArguments("test-type");
*****/


driver = new ChromeDriver();
driver.get(urlOfApplication);
System.out.println("3");

}else if(platformToBeExecuted.contains("ie")){
System.setProperty("webdriver.ie.driver", pathToIEDriver);
driver = new InternetExplorerDriver();
driver.get(urlOfApplication);
System.out.println("2");

}else if(platformToBeExecuted.contains("iOS")){
System.out.println("Platform to be executed: iOS");
System.out.println("Platform to be executed: iOS");
suites.add(".//iostestng.xml");<-----------------
dummyServletClass.testNG.setTestSuites(suites);
dummyServletClass.testNG.run();


}

这里我使用 testng 执行了 iosTestng.xml。

要执行此操作:-

1) 我是否必须在 servelt 类中将 testng 声明为静态并在此处使用相同的内容?
2) 我是否需要在class B中为testng创建另一个实例?
3)有没有办法在setTestClasses中传递参数构造函数?

我很困惑,因为我们可能正在努力长期并行运行该程序。

最佳答案

如果每个 POST 调用基本上代表最终用户运行某些测试的意图,那么我建议您在每次调用时创建一个 TestNG 实例。这样,您就可以为每次调用隔离测试结果等

1) Do I have to declare testng as static in servelt class and use the same here ?

不,不要这样做。你最终会导致竞争条件。您应该在 POST 方法实现中将 TestNG 对象声明为本地数据成员。如果您不希望您的 POST 调用成为阻塞调用,您基本上可以让您的 POST 调用创建一个请求以在队列中运行一些测试,并且您可以拥有一个由队列中的单独线程驱动的轮询机制并使用 TestNG 运行它们。

2) Do I need to create an another instance for testng in class B?

是的,你需要这样做。本质上,这里的想法是将 TestNG 实例本地化到它正在执行的测试集,以便结果、监听器调用等不会重叠。

3) Is there any way to pass an argument constructor in setTestClasses?

这个问题我不太明白。你这是什么意思?请详细说明。

关于java - 如何将 testNG 实例传递到另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42944924/

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