【问题标题】:Parallel Automation testing and thread safe variables并行自动化测试和线程安全变量
【发布时间】:2019-04-28 21:45:38
【问题描述】:

我正在并行运行自动化测试。不同的功能文件在专用的不同浏览器上运行。

在这个自动化测试过程中,在每个线程中创建了几个测试用户(5 个功能有 5 个浏览器)。

问题是 1 个功能创建了一个用户 = dave+timestamp 另一个创建了 dave+new-timestamp。一个功能文件在其执行过程中必须仅使用用户,但它使用由另一个功能(线程)创建的另一个用户。

我认为我需要使这些用户线程安全,以便每个功能(线程)可以使用 1 个用户。

其实我不是java开发者,只是做自动化测试的QA,请指教,指导如何实现。

这就是我传递新用户以提交注册表单的方式。 endUser.doRegistration(getNewUser(userType));

getNewUser(userType) = 如果它为空,则提供一个新用户,但它不会停止 feature2 为它创建一个用户,但执行之间的用户也会进入 feature1。

【问题讨论】:

    标签: java multithreading automation cucumber browser-automation


    【解决方案1】:

    这听起来不像是线程安全问题,在我看来你只是想在场景之间共享数据?答案很大程度上取决于您的应用程序以及您是否使用依赖项注入...您没有发布您的跑步者、您的功能文件、您的 stepdef 或任何有关您的依赖项的信息,因此这里的帮助将相对有限...

    不过,最简单的答案是创建一个包含用户的类。 像这样的东西可能有用吗?

    public class UserManager(){
    private static User user;
    
    public static User getUser(){
     if(user == null){
       //create your user here... Dave + Timestamp or whatever your user logic is
       user = new User();
      }
     return user;
     }
    }
    

    那么每个步骤def需要包含一个步骤 `然后获取用户'

    因为这里的用户对象是静态的,所以任何需要用户的 stepdef 只需简单地调用UserManager.getUser() 来获取用户,您将在每个步骤中取回相同的用户实例。

    如果需要,您可以在 userManager 类中定义方法来重置用户等。

    现在.. 如果您确实遇到跨线程边界的用户数据问题.. 那么您有两个选择。

    1. 使用线程本地存储来存储用户对象。这是一个指南:https://www.baeldung.com/java-threadlocal

    2. 将所有用户都保存在一个大的静态地图中,您的场景可以通过测试 ID 或浏览器类型等获取他们自己的用户。 不过,这两个选项都只是上述主题的变体..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多