我正在并行运行自动化测试。不同的功能文件在专用的不同浏览器上运行。
在此自动化测试过程中,每个线程中创建了多个测试用户(5个功能具有5个浏览器)。
问题是1功能创建了一个用户= dave + timestamp,另一个创建了dave + new-timestamp。一个功能文件在执行过程中必须仅使用用户,但使用由另一功能(线程)创建的另一用户。
我认为我需要使这些用户线程安全,以便每个功能(线程)可以使用1个用户。
实际上,我不是Java开发人员,而只是进行自动化测试的质量检查人员,请提出建议,指导如何实现它。
这就是我通过新用户提交注册表的方式。
endUser.doRegistration(getNewUser(userType));
getNewUser(userType)
=给出一个新用户,如果它为null,但是它不会停止feature2来创建一个供其使用的用户,但是介于执行之间的那个用户也会进入feature1。
答案 0 :(得分:0)
这听起来不像是线程安全性问题,对我来说,这听起来像您只是想在场景之间共享数据?答案很大程度上取决于您的应用程序以及是否使用依赖项注入...您没有发布运行程序,功能文件,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类中定义方法以重置用户等,如果需要在测试之间进行。
现在。如果您确实遇到跨越线程边界的用户数据问题。那么您有两个选择。
使用线程本地存储来存储用户对象。这是一个指南:https://www.baeldung.com/java-threadlocal
将所有用户全部保留在一张大型静态图中,您的方案可以在其中通过测试ID或浏览器类型等来获取自己的用户。 但这两个选项只是上述主题的变体。