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

2024-04-19

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

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

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

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

TestA

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(); 

    }

}

TestB

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");
    }
}

测试文件

<?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 ([email protected] /cdn-cgi/l/email-protection)
...

[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 类解决什么问题?

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止 TestNg 在并行测试之间共享数据 的相关文章

  • 使用 Surefire 和 TestNG 运行单个测试类或组

    我想使用 Maven 和 TestNG 从命令行运行单个测试类 不起作用的事情 mvn Dtest ClassName test 我已经在 pom xml 中定义了组 并且此类不属于这些组之一 因此它因这些原因被排除在外 mvn Dgrou
  • 如何使用 testng.xml 从大型 TestNG 套件执行一项测试?

    我有一个包含大量方法的 TestNG 套件 我使用构建在 TestNG 运行器之上的包装器来执行该套件 除了一个之外 套件中的所有测试均失败 我应该在 testng xml 中编写什么来执行那个失败的测试 明显的解决方案是为所有方法分配唯一
  • 空手道框架和 TestNG

    Karate 框架支持 TestNG 吗 Karate 框架是否会像使用 JUnit 一样为 TestNG 生成任何 json 文件 Karate 曾经支持 TestNG 但现已弃用 这应该不是问题 因为 a Karate 不需要任何 Te
  • 如何使用Appium驱动程序获取设备名称和应用程序版本

    我可以使用获取设备 Android 版本 driver getCapabilities getCapability platformVersion 同样 我将如何获取设备名称和应用程序版本 我尝试了以下但没有用 driver getCapa
  • 如何在测试失败后停止 TestNG 运行

    我正在尝试在 TestNG 中编写一个测试方法 在失败后 整个测试套件将停止运行 Test public void stopTestingIfThisFailed throws Exception someTestStesp if soft
  • TestNG BeforeMethod 与组

    我想知道 BeforeMethod与组的用法 在http testng org javadoc org testng annotations BeforeMethod html http testng org javadoc org tes
  • 如何更改Intellij IDEA中的默认测试框架?

    情况如下 我已经成功创建了测试IntellijIDEA with JUnit 然后 当我右键单击测试文件夹来运行测试时 我意外地选择了TestNG代替JUnit 现在 当我尝试通过右键单击测试文件夹并单击运行 所有测试 来运行测试时 它会尝
  • 在TestNG中使用@BeforeMethod时有没有办法获取方法元数据?

    我正在使用 TestNG 并有一套测试 我想在每个需要有关该方法的信息的测试方法之前执行一个操作 举一个简单的例子 假设我想在执行之前打印方法的名称 我可以编写一个带有注释的方法 BeforeMethod 如何将参数注入该方法 看看依赖注入
  • Maven:如何设置 testng 的线程数

    我正在使用 testng 并行运行测试 Xml 文件包含线程计数参数
  • TestNG - 如果满足条件,如何从 BeforeSuite 注释中强制结束整个测试套件

    如果满足 BeforeSuite 注释中的条件 是否有办法退出整个测试套件 也许有一种方法可以调用 AfterSuite 并绕过整个测试 我在 BeforeSuite 中进行数据库调用 如果查询返回任何结果 我会发送一封电子邮件 现在想要终
  • 在 TestNG 中使用 IMethodInterceptor 作为监听器时,仅执行最后一个 @Test

    我正在尝试使用 Factory创建类的多个实例并按照我们通过使用传递的相同顺序打印值IMethodInterceptor听众 public class MainFactoryClass implements IMethodIntercept
  • 黄瓜与 TestNG

    我们在 TestNG 中使用 Selenium WebDriver 有一个非常广泛的框架 我希望能够继续使用它 但使用 Cucumber BDD 我知道 Cucumber 可以与 JUnit 一起使用 但不确定它是否可以与 TestNG 一
  • 如何优化 testng 和 selenium 测试

    在我的实习中 我必须使用 TestNG 和 selenium 来测试 Web 应用程序 但我有一个问题 有时硒或浏览器由于某种随机原因无法工作 因此工作测试被标记为 失败 为了避免这种情况 我可以使用注释 Test invocationCo
  • @BeforeClass 注释:Junit 与 TestNG

    Why the BeforeClass中的方法JUnit is static而在TestNG its non static TestNG是作为改进而开发的JUnit 那么他们为什么选择这种实现方式呢 Since BeforeClass只运行
  • SLF4j 与 Log4j2 错误无法调用元素 RollingFile 的类 ...RollingFileAppender 中的工厂方法

    我在 TestNG 中并行运行一些 WebDriver 测试 我希望能够将在目录结构中运行的每个测试的日志记录到单独的文件中 如下所示 target logs TestNGSuiteName SuiteStartTime Test1Clas
  • 为什么 throw new SkipException() 会跳过我的所有方法?

    为什么 throw new SkipException 会跳过所有类中的所有方法 第一类有一个方法失败 因此该类中的其余方法将被跳过 并且跳过计数器设置为 0 第二类应该执行所有方法 并且所有方法都应该传入第二类 因为跳过计数器设置为 0
  • JUnit 4 与 TestNG - 更新 2013 - 2014 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 JUnit 4 和 TestNG 曾经具有可比性 这两个测试框架有何优缺点 我今天比较了 TestNG 和 JUnit4 以我有限的测试框架经验
  • 在 logback 中记录并行线程

    我将尝试对我的 Selenium 框架进行简要描述 以便我可以解释我的问题 I use 硒2 当前版本2 3 1 测试NG 5 14 我设置 testng xml 文件来并行运行测试套件中的测试 只有 2 个实例 出于记录目的 我使用log
  • 断言失败时如何继续执行

    我正在使用 Selenium RC 使用 Java 和 eclipse 和 TestNG 框架 我有以下代码片段 assertTrue selenium isTextPresent Please enter Email ID assertT
  • TestNG 与 DataProvider 并行执行

    我有一个从数据提供者接收数据的测试 我希望此测试与数据提供者的不同值并行运行 我尝试了这样的方法 public class IndependentTest Test dataProvider dp1 threadPoolSize 3 inv

随机推荐

  • 加入日历表 - 5 个工作日

    所以这是这里的一个常见问题 但我还没有找到真正适合我的特定需求的答案 我有 2 张桌子 其中有一个 ProjectClosedDates 列表 另一个表是一个类似于 2025 年的日历表 其中包含表示行日期是否为周末的列 以及另一列表示假日
  • php 中的 SVG 到 PNG 图像转换

    我想将 SVG 图像转换为具有透明背景的 PNG 文件 我使用下面的代码在 php 中使用 imagick 对其进行转换 但它给出了黑色背景的图像 image new imagick set transparent background i
  • 在 O(n) 中获取作为唯一给定索引的函数的排列

    我想要一个函数get permutation给定一个列表l和一个索引i 返回一个排列l这样排列对于所有人来说都是唯一的i大于0并低于n where n len l I e get permutation l i get permutatio
  • 如何在 OpenCV 中绘制图像的 3D 直方图

    更新 我找到更多例子 我现在可以做到 我可以在 3d 中绘制多个直方图吗 https stackoverflow com questions 35210337 can i plot several histograms in 3d 我知道这
  • 标准化浮点数 f 之后(之前)的下一个标准化浮点数是什么?

    给定一个标准化浮点数 f 下一个是什么归一化f 之后 之前的浮点数 通过一些调整 提取尾数和指数 我有 next normalized double if mantissa is not all ones maximally denorma
  • 如何快速过滤 Realm 中为当前日期创建的事件?

    如何快速过滤 Realm 中为当前日期创建的事件 我尝试了类似下面的方法 但是这是错误的 let dtSource datasource filter Create NSDate count Update 获取将我的日期创建为字符串的过滤器
  • Python json内存膨胀

    import json import time from itertools import count def keygen size for i in count 1 s str i yield 0 size len s str s de
  • 设置子视图以适合系统窗口

    我正在设置一个简单的视图 其中仅包含一个空的RelativeLayout
  • 如何启动第二个 Java 进程?

    如何启动第二个独立于平台的 Java 进程 理想情况下 它应该与当前运行的 Java 版本相同 有什么有用的系统属性吗 您可以使用java home系统属性来查找当前的 JVM String jvm new java io File new
  • 如何以编程方式获取 iOS 状态栏高度

    我知道目前 iPhone iPad 顶部的状态栏 包含时间 电池和网络连接 对于非视网膜屏幕为 20 像素 对于视网膜屏幕为 40 像素 但为了未来证明我的应用程序 我希望无需硬编码值即可确定这一点 是否可以通过编程计算出状态栏的高度 UI
  • Q_PROPERTY NOTIFY 信号及其参数

    我有写 propertyChanged 的习惯signals 带参数 这样接收端就不需要调用Q PROPERTY s READ明确地发挥作用 我这样做是出于清晰的考虑 并且假设在 QML 数据绑定情况下 不需要对 getter 进行 昂贵
  • 如何在 TypeScript 中创建本地模块

    我已经在文件夹中创建了src modules my module 其中有package json并定义了导出我们需要的所有内容的主文件 我现在可以从中导入import A from modules my module 我想将语法更改为imp
  • 如何通过sql查询在数据库中只保存时间而不保存日期

    此查询正在保存完整的日期和时间 但我只想在数据库中保存时间而不是日期 有什么查询可以做到这一点吗 update table set current time now 您的列必须设置为 DATETIME 或 TIMESTAMP 如果您使用 T
  • 使用 Google Apps 脚本抓取动态网页

    我想使用其他网站读取项目的一些数据谷歌脚本 https script google com 有问题的页面是Dyanmic 它们包含在初始页面加载后通过 JavaScript 调用服务器加载的内容 通常 对于一些静态内容 这工作得很好 但我对
  • 无法将 CSS 应用于 html 字符串

    我正在尝试将 evoPDF 集成到我的 asp net 应用程序上 我通过 ajax 从我的 html 文件 onclick 发送部分 html 直到这一部分一切正常 现在 当我从 EvoPdf API 调用这些方法时 1 GetPdfBy
  • 如何计算连续行的时间差

    原始数据如下所示 我想按访问者和时间对其进行排序 以计算行中的时间差 然后将其保存到新文件中 visitor v time payment items 1 Jack 1 2 2018 16 07 35 3 2 Jack 1 2 2018 1
  • 在 C++ 中使用 realloc

    std realloc如果 malloc 的内存包含非 Pod 类型 则在 C 中是危险的 看来only问题是std realloc如果无法在原位增加内存 则不会调用类型析构函数 一个简单的解决方法是try realloc功能 如果新内存无
  • 如何在java中获取大尺寸数组

    我是java新手 我想在java中获取大输入大小的数组 但给了我一些运行时错误 NZEC 我不知道它 我也对此错误做了一些研究 但没有找到与我的问题相关的任何内容 long n sc nextLong n can be upto 10 9
  • YouTube API 身份验证 - Iphone

    我正在尝试使用 youtube api 的示例代码上传视频 当我按下上传按钮时 进度条完成其过程 但是一旦到达终点我就会收到错误 错误描述如下 YouTubeTest 2149 f803 错误 错误 Domain com google GD
  • 防止 TestNg 在并行测试之间共享数据

    Goal 并行独立运行 2 个类 其中每个测试将方法名称存储到稍后可以在测试中访问的变量中 Issue 当测试并行运行时 它们开始在彼此之间共享数据 从而破坏测试 如果您看到控制台输出 则这是错误的 INFO Name of Test fr