multithreading - 使用Geb + Spock + Gradle + groovy的UI自动化中的方法同步

标签 multithreading gradle groovy synchronization geb

背景:我正在使用Geb + Spock + Gradle进行UI测试自动化并使用build.gradle文件
其中包含以下配置:

tasks.withType(Test) {
    maxParallelForks = 2
    forkEvery = 1
    include '**/*TestSuite*.class'
}
现在有两个套间->
  • TestSuite1.class

  • TestSuite2.class
    两者都在上述配置的帮助下使用multiForking并行运行。

  • 这两个套件均包含UI测试用例,旨在验证沙盒上的付款状态,
    实际问题:沙盒一次仅允许1次登录(如果其他线程尝试验证付款状态, session 将终止)
    我想以一种同步的方式运行付款验证方法,以便一次可以由一个线程完成付款验证(而另一个线程在等待)。
    问候
    尼克斯

    最佳答案

    首先,对于您显示的示例,Gradle的工作方式是为每个TestSuite启动一个新的JVM(一个单独的进程)。这意味着这不是多线程问题,而是一个进程同步问题。

    您将需要为进程创建某种类型的锁。
    我能想到的最基本的方法是在文件系统上创建一个锁定目录。

    编写一个实用程序方法,该方法检查锁目录是否存在,如果存在,请等待其消失以继续。
    如果目录不存在,请创建目录。
    然后,仅在创建目录后,才能访问付款沙箱。

    请注意,可能会出现争用情况,具体取决于您的实现。
    但这在实践中应该不是问题。由于UI测试相当缓慢,因此您可能不会以足够高的频率发出请求以至于无法注意到它。

    关于multithreading - 使用Geb + Spock + Gradle + groovy的UI自动化中的方法同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54419370/

    相关文章:

    c++ - 纯 C++ 中的多线程?

    android - ./Gradlew Build 需要 2 小时 40 分钟 - 是否有改进的余地?

    android - 使用 cordova 的 Gradle 构建错误

    具有自动柯里化(Currying)功能的 Groovy 闭包

    c++ - 错误 C3867 多线程 C++

    ios - 在 iOS 中暂停事件的后台线程

    c++ - 为什么可以在 C++ 中使用没有#include 线程的 std::thread ?

    java - 更新 gradle 包装文件会产生不同的结果

    jenkins - 在Jenkins Declarative Pipeline中,如何评估特定目录是否更改

    java - JOptionPane.showMessageDialog 和 swing.utils.invokeAndWait 的(事件调度)线程安全用法是什么?