在 Browserstack 中记录 rspec selenium/capybara 测试 运行
Logging for rspec selenium/capybara tests running in Browserstack
我正在使用 rspec 和水豚在 ruby 中构建一组自动回归测试。为了让您了解测试,想象一下登录网站,添加一个包含所有字段的新数据项,保存它,验证新行,更新行,更改字段,然后 updating/validating。
例如:
describe "auto regression test #1", :type => :feature, js: true do
it "should add and update my data" do
# login
# go to page
# press new button
# fill in fields
# etc.
end
end
这是一个简化版本,"it" 中可能会发生很多事情。起初我在想我应该将单个测试分成多个案例但是然后我必须登录并返回页面(我认为这是额外的时间我不需要浪费在我的自动化测试中 - 同意?)。
尽管如此,我想记录我正在做的事情,以便它显示在 Browserstack Automate 日志记录选项卡中。目前里面的都是selenium操作或者截图相关的。我想要一些自定义日志记录。原因是当我的测试失败时,我目前得到一个堆栈跟踪 - 行号(这很好)以及失败的测试。由于我的测试包括很多功能(因为我不想 rspec 一遍又一遍地登录)如果测试失败并且有人正在查看 Browserstack 以查看失败的地方,那么很难知道逻辑在哪里没有一些额外的自定义日志记录失败。我怎样才能输入自定义日志记录,以便我可以在浏览器堆栈中看到文本? (或者我是否完全错了,即使重新登录问题,我真的应该将我的测试分成小块)?
首先,我同意在每次 scenario/example 开始时登录会浪费时间,而且绝对是多余的。有关在每次测试之间保持 cookie 会话的信息,请参阅 this question。另请阅读此方法的 pros/cons。
您的测试需要正确编码。这意味着每一行代码都应与用户将执行的手动执行步骤保持一致。这应该允许您轻松跟踪和重现发生的任何故障。
测试绝对可能在任何地方失败,并且在您能想到的每个地方构建自定义 messaging/exception 处理的开销太大。首先编写可靠的、确定性的测试,然后再缩小(应该是少量的)失败的范围会更有用。
您可以可能做的是将每个 scenario/example 包装在一个异常块中,并在发生故障时截取屏幕截图。这比在整个套件中添加自定义错误消息的开销要少得多。
我可以给你的建议是:
1:.每个测试都应该是一个单一的用例场景。如果失败你知道为什么
2:.如果您需要执行许多步骤来实现用例场景,那么您应该将您的元素抽象为 类 代表一个页面 (https://code.google.com/p/selenium/wiki/PageObjects) 并且可能更进一步并添加抽象多个页面操作的流程.因此,如果它在验证之前的某个步骤中失败,您将知道哪个 element/page 它失败了,并知道出了什么问题。
3:.如果即使使用 BrowserStack 日志记录和屏幕截图,您仍然无法理解测试中出了什么问题,那么您的问题不是缺少日志记录,而是您的测试编写方式
您可以尝试在 BrowserStack 的 Automate 仪表板上生成的日志中创建您自己的自定义消息,方法是从您的 Selenium 测试中执行以下 JavaScript:
(例如,在 Ruby 中)
driver.execute_script("\" <Write your custom log here> \";")
我正在使用 rspec 和水豚在 ruby 中构建一组自动回归测试。为了让您了解测试,想象一下登录网站,添加一个包含所有字段的新数据项,保存它,验证新行,更新行,更改字段,然后 updating/validating。
例如:
describe "auto regression test #1", :type => :feature, js: true do
it "should add and update my data" do
# login
# go to page
# press new button
# fill in fields
# etc.
end
end
这是一个简化版本,"it" 中可能会发生很多事情。起初我在想我应该将单个测试分成多个案例但是然后我必须登录并返回页面(我认为这是额外的时间我不需要浪费在我的自动化测试中 - 同意?)。
尽管如此,我想记录我正在做的事情,以便它显示在 Browserstack Automate 日志记录选项卡中。目前里面的都是selenium操作或者截图相关的。我想要一些自定义日志记录。原因是当我的测试失败时,我目前得到一个堆栈跟踪 - 行号(这很好)以及失败的测试。由于我的测试包括很多功能(因为我不想 rspec 一遍又一遍地登录)如果测试失败并且有人正在查看 Browserstack 以查看失败的地方,那么很难知道逻辑在哪里没有一些额外的自定义日志记录失败。我怎样才能输入自定义日志记录,以便我可以在浏览器堆栈中看到文本? (或者我是否完全错了,即使重新登录问题,我真的应该将我的测试分成小块)?
首先,我同意在每次 scenario/example 开始时登录会浪费时间,而且绝对是多余的。有关在每次测试之间保持 cookie 会话的信息,请参阅 this question。另请阅读此方法的 pros/cons。
您的测试需要正确编码。这意味着每一行代码都应与用户将执行的手动执行步骤保持一致。这应该允许您轻松跟踪和重现发生的任何故障。
测试绝对可能在任何地方失败,并且在您能想到的每个地方构建自定义 messaging/exception 处理的开销太大。首先编写可靠的、确定性的测试,然后再缩小(应该是少量的)失败的范围会更有用。
您可以可能做的是将每个 scenario/example 包装在一个异常块中,并在发生故障时截取屏幕截图。这比在整个套件中添加自定义错误消息的开销要少得多。
我可以给你的建议是:
1:.每个测试都应该是一个单一的用例场景。如果失败你知道为什么
2:.如果您需要执行许多步骤来实现用例场景,那么您应该将您的元素抽象为 类 代表一个页面 (https://code.google.com/p/selenium/wiki/PageObjects) 并且可能更进一步并添加抽象多个页面操作的流程.因此,如果它在验证之前的某个步骤中失败,您将知道哪个 element/page 它失败了,并知道出了什么问题。
3:.如果即使使用 BrowserStack 日志记录和屏幕截图,您仍然无法理解测试中出了什么问题,那么您的问题不是缺少日志记录,而是您的测试编写方式
您可以尝试在 BrowserStack 的 Automate 仪表板上生成的日志中创建您自己的自定义消息,方法是从您的 Selenium 测试中执行以下 JavaScript:
(例如,在 Ruby 中)
driver.execute_script("\" <Write your custom log here> \";")