背景:我正在使用Geb + Spock + Gradle进行UI测试自动化并使用build.gradle文件
其中包含以下配置:
tasks.withType(Test) {
maxParallelForks = 2
forkEvery = 1
include '**/*TestSuite*.class'
}
现在有两个套间->和
两者都在上述配置的帮助下使用multiForking并行运行。
这两个套件均包含UI测试用例,旨在验证沙盒上的付款状态,
实际问题:沙盒一次仅允许1次登录(如果其他线程尝试验证付款状态, session 将终止)
我想以一种同步的方式运行付款验证方法,以便一次可以由一个线程完成付款验证(而另一个线程在等待)。
问候
尼克斯
最佳答案
首先,对于您显示的示例,Gradle的工作方式是为每个TestSuite启动一个新的JVM(一个单独的进程)。这意味着这不是多线程问题,而是一个进程同步问题。
您将需要为进程创建某种类型的锁。
我能想到的最基本的方法是在文件系统上创建一个锁定目录。
编写一个实用程序方法,该方法检查锁目录是否存在,如果存在,请等待其消失以继续。
如果目录不存在,请创建目录。
然后,仅在创建目录后,才能访问付款沙箱。
请注意,可能会出现争用情况,具体取决于您的实现。
但这在实践中应该不是问题。由于UI测试相当缓慢,因此您可能不会以足够高的频率发出请求以至于无法注意到它。
关于multithreading - 使用Geb + Spock + Gradle + groovy的UI自动化中的方法同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54419370/