2009-09-09 3 views
2

delayed_job 플러그인에서 우선 순위가 어떻게 작동하는지 테스트하고 싶습니다. 메신저 앱을 railscasts에서 사용하고 있습니다. 나는 내가 우선 순위가 높은 100 개의 메시지와 우선 순위가 낮은 100 개의 메시지를 보내고 싶다고 생각한다. 그리고 우선 순위가 낮은 메시지가 제 시간에 배달되는지 또는 제쳐 둘지 알고 싶습니다.레일에서 delayed_job 플러그인의 우선 순위 테스트

어떻게 이런 테스트를 할 수 있습니까?

답변

0

메일 수신자가 실제 수신자에게 도달하는 속도를 알아내는 데 관심이 있다면 다음 중 하나만 할 수 있습니다. 실제로 전체 배달 프로세스를 거치지 않고서도 그레이 리스팅, 오작동 MX, 정체 된 MX, 깨진 콘텐츠 스캐너 (또는 SMTP 프록시 모드에서 깨진 콘텐츠 스캐너)로 인해 얼마나 많은 메일이 지연 될지 알 수있는 방법이 전혀 없습니다. 수신 서버에서 깨진 인터넷 연결 등등.

1

그런 테스트를 만드는 것은 큰 문제가 아니어야합니다. 우선 순위가 높은 이메일 100 개를 생성 한 다음 100 개를 생성합니다. 혹은 그 반대로도. 데이터베이스를 점검하여 모든 작업이 있는지 확인하고 계정을 처리 할 때까지는 작업자를 시작하지 마십시오. 작업자를 시작하여 작업이 어떻게 실행되고 있는지 그리고 올바른 순서로 실행되는지 관찰하십시오. d_j의 우선 순위는 오름차순이므로 우선 순위 1은 10보다 높습니다.

이제 200 개의 작업이 많지 않습니다. 당신의 근로자들은 그들 모두를 상당히 신속하게 처형 할 것입니다. 우선 순위가 낮은 전자 메일이 여전히 전송되는지 여부를 테스트하려면 전자 메일 이외의 다른 용도로 d_j를 사용하는 경우 대기열에있는 다른 항목에 의존해야합니다. 최소한 2 ~ 3 만개의 작업으로 대기열을 채우는 것이 좋습니다. 또는 "최악의 시나리오"가 무엇인지 상상할 수 있습니다. 그런 다음 테스트를 실행하십시오. 전자 메일 이외의 작업이 우선 순위가 낮은 전자 메일보다 우선 순위가 높으면 우선 순위가 높은 전자 메일보다 전자 메일 배달에 영향을 줄 가능성이 큽니다.

0

실제로 이메일을 보내는 DelayedJob 처리를 테스트하는 테스트를 구현했습니다. 이 테스트는 실제로 매우 간단합니다.

우선 순위가 높은 작업과 우선 순위가 낮은 작업을 두 개 (100 개 대신) 대기열에 넣어야합니다. 그런 다음 "Delayed :: Job.work_off"메서드를 사용하여 첫 번째 작업을 실행 한 다음 우선 순위가 낮은 작업이 db 대기 상태임을 계속 주장 할 수 있습니다. 작업을 수행하는 방법에 대해 여전히 확신이 없으면 라이브러리를 살펴보십시오. 코드는 꽤 잘 쓰여졌습니다.

다음은 내 애플리케이션에서 발췌 한 코드입니다. 기본적으로 사용자에게 미리 알림 이메일을 보내야하므로 작업이 제대로 실행되고 메일러가 폭탄을 내지 않는지 확인해야합니다. Reminder 모델은 전자 메일을 대기열에 넣고 보내는 방법을 모두 알고 있으므로 reminder_test.rb 단위 테스트 파일에이 테스트를 적용합니다.

# 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 

건배! 희망이 도움이

알렉스