0

(我是非技术QA,请原谅我的技术无知)

图书馆:

  1. pytest ==6.2.4
  2. mysql-connector-python ==8.0.23
  3. ==3.141.0
  4. psycopg2 ==2.8.6
  5. 断言==1.1
  6. 请求==2.25.1
  7. sshtunnel ==0.4.0

(如果它解决了我的问题,我不介意切换到另一个 python 测试框架)

测试执行环境:目前在本地并手动触发。未来,通过 CI 管道。

用例:

我将使用 selenium 运行 E2E 测试,然后在 DB 中检查一些东西。一些检查会立即进行,而一些检查会延迟一些已知的持续时间。

这些检查被延迟,因为被测 API 创建了一个作业,该作业在 20 分钟后执行以在数据库表中插入/更新某些内容。

API 与前端 cookie 紧密耦合,因此无法通过 API 单元/集成测试单独测试此功能。

这些测试与合规性相关,因此不能忽略它们。现在每周手动测试一次。这是一个真正的痛苦......

假设我有 35 个这样的测试并且每个自动化测试需要等待 20 分钟,那么测试执行的总持续时间非常长。

考虑一个场景:

我的测试文件很少,其中有 5 个测试。在每个测试方法的末尾有 4 个断言。最后 2 个断言需要我在“x”分钟后验证数据库表中的某些内容。对于每种测试方法,最后 2 个断言的等待持续时间可能会有所不同(>=15 分钟),这将是事先知道的。

现在我试过了,

  1. time.sleep(duration) 这只是支撑整个测试。

  2. 即使并发/并行执行也无济于事,因为当它们到达每个测试方法中的最后 2 个断言语句时,它们都必须等待一段时间,并且它只会在给定的时间内停止测试。

  3. 考虑过将 RabbitMQ 与 Celery 一起使用并安排这些断言,但是在执行这些断言时,pytest 会为所有测试分配一个状态:(通过/失败)。因此,如果 test1 被标记为 Pass 并且在 10 分钟后,在执行断言语句后它失败,那么我将无法在 pytest 中更新 test1 的状态。

当前解决方法:

对于每种测试方法,我将所需的 id 存储在一个文件中,并在 30 分钟后手动检查它们。

我有几件事:

如果我能够:

  1. 延迟或计划执行测试方法中的语句。(这样的语句将是测试方法中的最后几条语句)

  2. 保持延迟语句执行完成的测试结果。

  3. 在延迟断言结束后更新此类测试或测试方法的结果。

  4. 在运行并行测试时安排这些延迟语句后,从下一个测试方法开始。(总是理解这样的延迟语句将是测试方法的最后几个语句)

这是可行和可实现的吗?

其他参考:https ://github.com/pytest-dev/pytest/issues/9012#issuecomment-900851702 (我真的没明白)

任何已解决类似问题的参考文档、伪代码、文章、博客将不胜感激。

4

1 回答 1

0

我们应该将这 1 个测试分成 2 个测试。

  1. 第一个测试应该驱动 UI,直到队列中添加一些内容并验证相同。

  2. 第二次测试应该检查消息是否被正确处理。

于 2021-08-20T19:31:48.140 回答