gpt4 book ai didi

java - 并行自动化测试和线程安全变量

转载 作者:行者123 更新时间:2023-12-02 06:12:58 25 4
gpt4 key购买 nike

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

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

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

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

实际上,我不是一个java开发人员,只是一个做自动化测试的QA,请建议,指导我如何实现它。

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

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

最佳答案

这听起来不像是线程安全问题,在我看来,您只是想在场景之间共享数据?答案很大程度上取决于您的应用程序以及您是否使用依赖项注入(inject)...您没有发布您的运行程序、功能文件、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. 将所有用户都保留在一个大型静态 map 中,您的场景可以通过测试 ID 或浏览器类型等获取自己的用户。不过,这两个选项都只是上述主题的变体..

关于java - 并行自动化测试和线程安全变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894843/

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