import config.DriverFactory;
import org.junit.Assert;
import org.testng.annotations.Test;
import org.openqa.selenium.WebDriver;
public class SecondTestClass {
WebDriver driver;
public SecondTestClass()throws Exception{
DriverFactory.getInstance().setDriver();
driver = DriverFactory.getInstance().getDriver();;
}
@Test
public void testInSecondClass() {
System.out.println("\n THREAD ID: " + Thread.currentThread().getId() + " " + "\n Name: " + Thread.currentThread().getName());
driver.get("https://www.allsaints.com");
System.out.println("CURRENT URL IS :" + driver.getCurrentUrl());
Assert.assertTrue(false);
}
}
package testParallel;
import config.DriverFactory;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;
public class FirstTestClass {
WebDriver driver;
public FirstTestClass()throws Exception{
DriverFactory.getInstance().setDriver();
driver = DriverFactory.getInstance().getDriver();;
}
@Test
public void testInFirstClass() throws Exception{
System.out.println("\n THREAD ID: " + Thread.currentThread().getId() + " " + "\n Name: " + Thread.currentThread().getName());
DriverFactory.getInstance().setDriver();
driver = DriverFactory.getInstance().getDriver();;
driver.get("https://pl.wikipedia.org");
System.out.println("CURRENT URL IS :" + driver.getCurrentUrl());
}
}
package config;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class DriverFactory {
private static DriverFactory instance = null;
public ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();
private DriverFactory() {}
@SuppressWarnings("varargs")
public static DriverFactory getInstance() {
if (instance == null) {
instance = new DriverFactory();
}
return instance;
}
public final void setDriver() throws Exception {
System.setProperty("webdriver.gecko.driver", "E:\\Projects\\allsaints\\tess\\drivers\\geckodriver.exe");
webDriver.set(new FirefoxDriver());
}
public WebDriver getDriver() throws Exception {
return webDriver.get();
}
}
import config.DriverFactory;
import org.openqa.selenium.WebDriver;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
public class testSetup extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult tr) {
System.out.println(
"\n THREAD ID: " + Thread.currentThread().getId() + " " +
"\n Name: " + Thread.currentThread().getName()
);
WebDriver driver;
try {
driver = DriverFactory.getInstance().getDriver();
System.out.println("CURRENT URL IS :" + driver.getCurrentUrl());
} catch (Exception e) {
e.printStackTrace();
}
super.onTestFailure(tr);
}
}
<?xml version="1.0"?>
<suite name="All Test Suite" parallel="tests" thread-count="5">
<listeners>
<listener class-name="testParallel.testSetup"/>
</listeners>
<test verbose="3" preserve-order="true" name="test1">
<classes>
<class name="testParallel.FirstTestClass"/>
</classes>
</test>
<test name="test2">
<classes>
<class name="testParallel.SecondTestClass"/>
</classes>
</test>
</suite>
类TestParallel.FirstTestClass线程ID:22名称:TestNG
类TestParallel.SecondTestClass线程ID:23名称:TestNG
类TestParallel.TestSetup线程ID:23名称:TestNG java.lang.NullPoInterException位于TestParallel.TestSetup.OnTestFailure(TestSetup.java:21)位于Org.TestNG.Internal.Invoker.RunTestListeners(Invoker.java:1895)位于Org.TestNG.Internal.Invoker.RunTestListeners(Invoker.java:1879)位于Org.TestNG.Internal.Invoker.InvokeMethod(Invoker.java:778)位于Org.TestNG.Internal.Invoker.InvokeMethod(Invoker.java:901)位于Org.TestNG.Internal.Invoker.InvokeMethod(Invoker.java InvokeTestMethods(invoker.java:1231)在org.TestNG.internal.testMethodworker.invokeTestMethods(testMethodworker.java:127)在org.TestNG.internal.testMethodworker.run(testMethodworker.java:111)在org.TestNG.testRunner.privaterun(testRunner.java:767)在org.TestNG.testRunner.run(testRunner.java:617)在org.TestNG.suiterunner.runtest(testRunner.java:334)在org.TestNG.suiterunner.access$000(suiterunner$suiteworker.run(suiterunner.java:368)在org.TestNG.internal.THREAD.threadutil$2。call(threadutil.java:64)在java.util.conCurrent.FutureTask.Run(FutureTask.java:266)在java.util.concurrent.ThreadPoolExecutor.RunWorker(ThreadPoolExecutor.java:1142)在java.util.concurrent.ThreadPoolExecutor$Worker.Run(ThreadPoolExecutor.617)在java.lang.Thread.Run(Thread.java:745)当前URL为:https://pl.wikipedia.org/wiki/wikipedia:strona_g%c5%82%c3%b3WNA
在侦听器中,我们不能直接访问其他类实例。因为,它会在执行开始时启动listen。如果我们需要获得某个特定的类实例,那么我们可以通过TestNG监听器(itestresult
)访问,如下所示,并且您的所有测试类都应该继承DriverFactory
类。
侦听器类代码:
public class testSetup extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult tr) {
System.out.println(
"\n THREAD ID: " + Thread.currentThread().getId() + " " +
"\n Name: " + Thread.currentThread().getName()
);
Object currentClass=tr.getInstance();
WebDriver driver;
try {
driver =((DriverFactory) currentClass).getDriver();
System.out.println("CURRENT URL IS :" + driver.getCurrentUrl());
} catch (Exception e) {
e.printStackTrace();
}
super.onTestFailure(tr);
}
}
测试类1:
public class FirstTestClass extends DriverFactory {
WebDriver driver;
public class SecondTestClass extends DriverFactory {
WebDriver driver;
我一个类有5到6个方法,想在不同的节点上并行运行方法,我有网格2设置,里面有4个节点。 下面是我的测试。xml 我有一个测试工具,它初始化了login、common和utils类 在我的测试类中,我扩展了测试工具,在@Beforemethod中,我调用了inilze方法 如果我运行测试,我会看到以下问题 两个浏览器在每个节点中打开一个,但只有一个浏览器启动应用程序,另一个不启动。 如果我遗漏了什么
我试图用TestNG并行运行一个示例测试项目。但它是在一个线程中顺序执行的。我漏掉什么了吗? 谢了。
我有4个@Test方法,希望每个方法都运行3次。我想在12个线程中同时执行所有这些。 我创建了一个testng。像这样的xml文件 如果我设置并行="方法",TestNG在Test1的4个线程中执行4个测试方法,之后对Test2执行相同的操作,然后对Test3执行相同的操作。但是我不想在运行Test2之前等待Test1完成。TestNG能够运行Test1、Test2 有没有办法告诉TestNG不要
我试图在Eclipse中使用Selenium运行TestNG。 当类文件作为TestNG测试运行时,我得到的测试Run=0。 问题会是什么? 我有testNg插件 testng。xml文件: 类: WebDriverTest类: BrowserInstance类: 注: 当我将testing.xml文件作为TestNG Suite运行时,结果是: 当我运行. java文件作为TestNG测试时,结
我有一个应用程序(使用注释的Spring 4 MVC Hibernate 4 MySQL Maven集成示例),使用基于注释的配置将Spring与Hibernate集成,但运行测试时出错! 上课时间到了 下面是即将到来的考验: 这是pom。xml文件: