gpt4 book ai didi

testng - 防止 TestNg 在并行测试之间共享数据

转载 作者:行者123 更新时间:2023-12-05 02:23:35 29 4
gpt4 key购买 nike

目标:并行独立运行 2 个类,其中每个测试将方法名称存储到一个变量中,该变量稍后可以在测试中访问。

问题:当测试并行运行时,它们开始在它们之间共享数据,从而破坏测试。

如果您看到控制台输出这是错误的:

INFO: Name of Test from Before Method: classB_Method1
INFO: Name of Test from Before Method: classB_Method1

因为这是两个独立的类和正在运行的方法。和我在这里设置了正确的名称:

  !! Setting Method name to: classA_Method1
!! Setting Method name to: classB_Method1

输出应该是这样的:

INFO: Name of Test from Before Method: classA_Method1
INFO: Name of Test from Before Method: classB_Method1

测试A

import java.lang.reflect.Method;
import org.testng.annotations.*;
import com.xxxx.util.*;

public class TestA {


@Test(/*dataProvider = "DP_MVPLoan_Login",*/ groups = {"parallel_test" }, invocationCount = 1, priority = 2, enabled = true)
public void classA_Method1(/*String... excelData*/) throws Exception {

}

/////////////////////////////////////////////////////////////////////////////
// ****SetUp and Tear Down

@BeforeTest(alwaysRun=true)
public void setupClass() throws Exception {
}


@BeforeMethod(alwaysRun=true)
public void setupMethod(Method method) throws Exception {
SeleniumHelperDebug.setCurrentMethodName(method.getName());
SeleniumHelperDebug.defaultBeforeMethod();

}

}

测试B

import java.lang.reflect.Method;
import org.testng.annotations.*;
import com.xxxx.util.*;

public class TestB {


@Test(/*dataProvider = "DP_MVPLoan_Login",*/ groups = { "parallel_test" }, invocationCount = 1, priority = 2, enabled = true)
public void classB_Method1(/*String... excelData*/) throws Exception {

}

/////////////////////////////////////////////////////////////////////////////
// ****SetUp and Tear Down

@BeforeTest(alwaysRun=true)
public void setupClass() throws Exception {
}


@BeforeMethod(alwaysRun=true)
public void setupMethod(Method method) throws Exception {
SeleniumHelperDebug.setCurrentMethodName(method.getName());
SeleniumHelperDebug.defaultBeforeMethod();

}

}

辅助方法

public class SeleniumHelperDebug { 



//Name of the method/Test being run
private static String currentMethodName;
public static String getCurrentMethodName() {
return currentMethodName;
}
public static void setCurrentMethodName(String currentMethodName) {
System.out.println("!! Setting Method name to: "+ currentMethodName);
SeleniumHelperDebug.currentMethodName = currentMethodName;
}

//Setup Method. BeforeTest
public static void defaultBeforeMethod() throws Exception {
Thread.sleep(500);
/*setCurrentMethodName(method.getName());*/
System.out.println("INFO: Name of Test from Before Method: " +getCurrentMethodName() );


System.out.println("REMINDER: Keep Browser Window in Foreground to Help prevent F@ilures");
}
}

Testng.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="classes" verbose="2" thread-count="2">

<!--
<listeners>
<listener class-name="com.progressfin.util.WebDriverListener"></listener>
</listeners -->>
<tests>
<test name="Test" preserve-order="true">
<!-- <parameter name="browserName" value="firefox"></parameter> -->

<groups>
<run>
<include name="parallel_test"/>
</run>
</groups>


<classes>

<class name="com.xxxx.test.TestA" />
<class name="com.xxxx.test.TestB"/>
</classes>


</test> <!-- Test -->
</tests>
</suite> <!-- Suite -->

控制台输出

...
... TestNG 6.8.6 by Cédric Beust (cedric@beust.com)
...

[TestNG] Running:
C:\Users\samuel.safyan\workspace\JavaSelenium2\testNgParallelism2.xml

[TestRunner] Starting executor for test Test with time out:2147483647 milliseconds.
!! Setting Method name to: classA_Method1
!! Setting Method name to: classB_Method1
INFO: Name of Test from Before Method: classB_Method1
REMINDER: Keep Browser Window in Foreground to Help prevent F@ilures
INFO: Name of Test from Before Method: classB_Method1
REMINDER: Keep Browser Window in Foreground to Help prevent F@ilures
PASSED: classB_Method1
PASSED: classA_Method1

===============================================
Test
Tests run: 2, Failures: 0, Skips: 0
===============================================

最佳答案

您的Seleniumhelperdebug类是静态的,因此不是安全的。有什么原因为什么您不能每个测试实例?

您试图用Seleniumhelperdebug类解决什么问题?

可能有一个更好的解决方案,即线程安全,但尚不清楚该类试图实现什么

关于testng - 防止 TestNg 在并行测试之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20713847/

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