Тестовые приоритеты плагина delayed_job в rails

Я хочу проверить, как работают приоритеты в плагине delayed_job. Я использую приложение mailit из railscasts. Я думаю, что хочу отправить 100 сообщений с высоким приоритетом и 100 с более низким приоритетом. И я хочу посмотреть, будут ли сообщения с более низким приоритетом доставлены вовремя или они будут отложены.

Как мне сделать такой тест.


person bartligthart    schedule 09.09.2009    source источник


Ответы (3)


Создание такого теста не должно быть большой проблемой. Сгенерируйте 100 писем с высоким приоритетом, затем 100 с низким. Или наоборот. Не запускайте своих воркеров, пока не проверите базу данных, чтобы убедиться, что каждое задание есть и учтено. Запустите своих рабочих и посмотрите, как выполняются задания — и в правильном порядке. Помните, что приоритет в d_j является возрастающим, поэтому приоритет 1 выше, чем 10.

Сейчас 200 рабочих мест — это не так уж и много. Ваши работники, скорее всего, выполнят их все довольно быстро. Если вы действительно хотите проверить, отправляются ли ваши низкоприоритетные электронные письма, вам, вероятно, придется зависеть от того, что еще у вас есть в вашей очереди — при условии, что вы используете d_j не только для электронной почты. Я бы посоветовал заполнить очередь как минимум парой тысяч заданий — или чем угодно, что вы можете себе представить в качестве «наихудшего сценария», — и запустить тест с этим. Если задания, не связанные с электронной почтой, имеют более высокий приоритет, чем низкоприоритетные электронные письма, они с большей вероятностью повлияют на доставку электронной почты, чем 100 высокоприоритетных.

person vonconrad    schedule 17.03.2010

Если вам интересно узнать, как быстро эти письма дойдут до реальных получателей, вы можете просто сделать одну вещь: отправить эти письма. Без фактического прохождения полного процесса доставки абсолютно невозможно определить, сколько из этих писем будет задержано из-за занесения в серый список, неисправных MX, перегруженных MX, неработающих сканеров содержимого (или, что еще хуже, неработающих сканеров содержимого в режиме SMTP-прокси), разорванное интернет-соединение на принимающих серверах и так далее.

person cite    schedule 09.09.2009

На самом деле я реализовал тест для проверки обработки отправки электронных писем DelayedJob. На самом деле тест довольно простой.

Вы должны поставить в очередь 2 задания (вместо 100), одно с высоким приоритетом и одно с более низким приоритетом. Затем вы можете использовать метод «Delayed::Job.work_off» для выполнения первого задания, а затем утверждать, что задание с более низким приоритетом все еще находится в ожидании db. Если вы все еще не знаете, как выполнить задание, взгляните на библиотеку. Код довольно хорошо написан.

Вот фрагмент кода из моего приложения. По сути, мне нужно рассылать электронные письма с напоминаниями пользователям, поэтому мне нужно убедиться, что задания выполняются правильно, а почтовая программа не вылетает из строя. Я поместил этот тест в файл модульного теста memoryr_test.rb, поскольку модель Reminder знает все о том, как ставить в очередь и отправлять электронные письма.

# enqueue the jobs here

assert_difference 'Delayed::Job.count', -1, 'Job should execute successfully' do
  assert_difference 'ActionMailer::Base.deliveries.count' do
    Delayed::Job.work_off
  end 
end

# make sure the email was properly delivered
email = ActionMailer::Base.deliveries.last
assert_equal email.to[0], @user.email
assert (Time.now - @reminder.reload.sent_at) < 1.seconds

Ваше здоровье! Надеюсь, это поможет

Алекс

person Alex Le    schedule 02.08.2010