Cucumber : 我想在所有场景执行后通过电子邮件发送报告,有没有像 'AfterAll' 这样的方法可以在 hooks.rb 中使用

Cucumber : I want to send report on email after my all the scenario get executed, Is there any method like 'AfterAll' which can be used in hooks.rb

我已经创建了邮件功能来发送我的报告

class Email
  include PageObject
  require 'mail'

  def mailsender
      Mail.defaults do
        delivery_method :smtp,{ 
          address: "smtp.gmail.com",
          openssl_verify_mode: "none",
          port: 587,
          domain: 'gmail.com',
          user_name: 'xxxxxxxx@gmail.com' ,
          password: '*******' ,
          authentication: 'plain'
        }
      end

      Mail.deliver do
        from     'xxxxxxx.com'
        to       'xxxxx@test.com'
        subject  'Execution report'
        body     'PFA'
        add_file 'Automation_report.html'
      end
  end
end

我希望这个函数在所有场景执行完后执行。

这是我的钩子文件

# frozen_string_literal: true

require watir

Before do |scenario|
  DataMagic.load_for_scenario(scenario)
  @browser = Watir::Browser.new :chrome
  @browser.driver.manage.window.maximize
end

After do |scenario|
  if scenario.failed?
    screenshot = "./screenshot.png"
    @browser.driver.save_screenshot(screenshot)
    embed(screenshot, "image/png",)
  end
  @browser.close
end

如果我在 After do 中使用此功能,那么它会在每次执行每个场景后发送电子邮件

您可以在 hooks.rb 文件中使用 at_exit

at_exit do
   # your email logic goes here
end

附加说明:After hook 将在每个场景后执行,这就是为什么它会在每个场景执行后发送电子邮件的原因。另一方面,at_exit 钩子只有在所有场景执行完后才会执行。

您可以直接在 at_exit 挂钩中实现电子邮件逻辑。如果您想调用 mailsender 方法但无法在 at_exit 挂钩中访问它,那么您可以创建电子邮件 class/module,如下所示。

考虑到您在 GenericModules 下有电子邮件模块

module GenericModules
  module Email
     def mailsender
         # implement your logic here
     end
  end
end

然后在env.rb中的world添加Email模块,如下图。

World(GenericModules::Email)

现在,即使在 at_exit 挂钩中,您也应该能够访问该方法。