【问题标题】:Best way to handle batch jobs in selenium automation在硒自动化中处理批处理作业的最佳方法
【发布时间】:2017-06-22 04:01:48
【问题描述】:

我正在实现一个 Cucumber - 基于 JVM 的 Selenium 自动化框架。

我测试的 webapps 中的一个工作流需要长时间等待,以便每隔 3 分钟调度一次的批处理作业运行,并创建一个用户可以使用的登录 ID 以继续工作流程。

我目前的处理方式是先执行初始部分测试用例,然后继续执行其他测试用例,以便框架有足够的时间等待创建用户 ID。

在运行所有其他测试用例之后,运行测试用例的第二部分。但是,在运行测试用例的第二部分之前,我查询数据库并验证是否创建了 id。如果创建了 id,则继续执行,否则失败,说明未创建用户 id。

虽然这目前可行,但我相信有更好的方法来处理这种情况。有没有人遇到过这样的场景?你是怎么处理的?

【问题讨论】:

    标签: selenium selenium-webdriver cucumber automated-tests cucumber-jvm


    【解决方案1】:

    我想我理解你的问题。您实际上可能希望有这样的执行顺序:

    Test 1
    Test 2
    Test 3
    

    但是如果你“正确地”实现Test 1,那将需要很长时间,因为它必须等待被测系统做几件长时间运行的事情,对吧?

    因此,您将 Test 1 拆分为多个部分并像这样运行测试:

    Test 1 (Part A)
    Test 2
    Test 3
    Test 1 (Part B)
    

    让您的被测系统有时间完成Test 1 (Part A)触发的任务。

    正如您之前所承认的,这被认为是糟糕的测试设计,因为您的测试用例不再相互独立。 (一般来说,任何测试用例都不应依赖于事先由另一个测试用例产生的副作用。)

    我对这种情况的建议是保留Test 1 原子,即避免将其分成两部分,但仍并行运行其余测试。当然,这是否可行取决于您的环境以及触发测试的方式,但这将使您拥有更好的测试结构以及快速执行的好处。所以你最终会得到这个:

    Test 1 starts    Test 2 starts
    Test 1 waits     Test 2 finishes
    Test 1 waits     Test 3 starts
    Test 1 runs      Test 3 finishes
    Test 1 finishes  
    

    【讨论】:

    • 您的答案假定至少有两个线程。我们实现了功能的并行执行,因此您的答案就是我们将如何做。然而,对于单个执行线程,“坏”的方式可能是最好的。
    • 如果并行不可行,那么……?
    【解决方案2】:

    我不确定 start—>wait—>wait—>run 方法。它可能适用于少数测试,可能不适用于数百个测试,因为等待时间会更长。即使我们以并行模式运行它也会消耗一些时间。如果我们等待更多这样的时间在同一流程中获取组件怎么办?我猜,组件越多,等待时间越长。你可能还需要考虑系统超时,如果你等待的时间更长...

    我觉得即使是第一种方法也应该没问题。无需为测试用例创建多个文件。您可以以运行第一部分并结束它的方式在同一个文件中构造它。并且,在确保批处理之后,您可以从测试用例(文件)的第二部分开始。第一部分可以并行运行,等待时间后第二部分也可以并行执行。

    【讨论】:

    • 我不明白你怎么可能知道数据是否准备好,除非你能保证中间测试需要准确的时间。
    猜你喜欢
    • 2020-12-16
    • 2021-01-15
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 1970-01-01
    • 2017-01-20
    • 2019-11-16
    相关资源
    最近更新 更多