正如IS:
第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步: 我创建了一个类,它将读取servelet返回的用户平台选择(Say 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)我是否必须在testng
课程中将servelt
声明为静态并在此处使用相同的内容?
2)我是否需要在testng
中为class B
创建另一个实例?
3)有没有办法在setTestClasses
中传递参数构造函数?
我很困惑,因为我们可能会长期并行运行程序。
答案 0 :(得分:1)
如果每个POST调用基本上都代表了最终用户运行某些测试的意图,那么我建议你每次调用都要创建一个TestNG实例。这样,您就能够为每次调用隔离测试结果等
1)我是否必须在servelt类中将testng声明为static并在此处使用相同的内容?
不,不要那样做。你最终会导致竞争条件。您应该在POST方法实现中将TestNG对象声明为本地数据成员。如果你不希望你的POST调用是一个阻塞调用,你基本上可以让你的POST调用创建一个请求来运行一些测试到一个队列,你可以有一个轮询机制由一个单独的线程驱动,该线程从队列中提供并使用TestNG运行它们。
2)我是否需要在B类中为testng创建另一个实例?
是的,你需要。本质上,这里的想法是将TestNG实例本地化为它正在执行的测试集,这样就没有结果,监听器调用等的重叠。
3)有没有办法在setTestClasses中传递参数构造函数?
我不太明白这个问题。你这是什么意思?请详细说明。