【问题标题】:Ruby on Rails and Sidekiq redis connection pool with parallel tests?Ruby on Rails 和 Sidekiq redis 连接池与并行测试?
【发布时间】:2021-07-27 00:36:26
【问题描述】:

我想并行运行我的 Rails 测试。我目前正在使用 Sidekiq 自己的连接池与 redis 通信。这里的问题是,如果我运行并行测试,它们会相互冲突。 Rails 有一个非常好的内置测试数据库系统,它为执行测试的每个线程创建 postgresql 的数据库克隆。我将如何使用 Sidekiq redis 连接池来做到这一点?

【问题讨论】:

    标签: ruby-on-rails ruby testing redis sidekiq


    【解决方案1】:

    您的测试根本不应该连接到 redis。就像在测试环境中处理电子邮件的方式一样,默认情况下,Sidekiq 将为测试环境中的任何计划作业使用假队列。

    基本上 - 并行运行测试不会导致 Sidekiq 作业出现任何问题。

    您应该首先阅读有关测试的文档 - https://github.com/mperham/sidekiq/wiki/Testing

    基本上,您可以通过以下方式测试作业是否已安排:

    HardWorker.perform_async(1, 2)
    HardWorker.perform_async(2, 3)
    assert_equal 2, HardWorker.jobs.size
    

    如果您需要运行作业,只需排空队列即可:

    HardWorker.drain
    assert_equal 0, HardWorker.jobs.size
    

    更多详情请点击以上链接。

    【讨论】:

    • 1.用于测试的 sidekiq fake 不是线程本地的。所以每个测试不能有它自己的数组。 2、我使用Redis直接存储东西的情况怎么办?
    • 1.为什么你的并行测试在同一台机器上运行? 2. 那是另外一回事,肯定与 sidekiq 无关?
    • 1.因为启动线程比启动 docker 容器更容易、更快捷。
    猜你喜欢
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2014-01-31
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多