2

在我的功能文件中,我有这样的东西:

Background:
 Given I am on login screen
 Then I log in

Scenario:
 Given I am on a random account summary
 when I try feature-1
 Then I see some output-1

Scenario:
 Given I am on account summary
 When I try feature-2
 Then I see some message

当黄瓜执行第二个场景时,它会重新执行后台。

我的问题是 - 是否可以告诉 Cucumber 使用与先前场景相同的浏览器会话/状态?这将帮助我的测试节省一些执行时间。

4

3 回答 3

4

Capybara 在每个场景之前重置会话,因此您应该在每个场景之前显式登录。但是由于您不会在每种情况下都测试登录,因此我建议您自动执行此过程。

首先,您可以使您的背景更具说明性:

Background:
 Given I'm logged in

看看这篇文章,它说明了为什么这样做更好。

那么你也能:

  1. 在后端生成新会话
  2. 将会话 cookie 从后端发送到您的测试
  3. 将 cookie 设置为 Capybara。Capybara 没有针对它的跨驱动 API,因此您可以使用:

网络驱动程序

page.driver.browser.manage.add_cookie(name: 'name', value: 'value')

水豚网络套件

page.driver.browser.set_cookie('c_user=asdasdasd; domain=.domain.com')

闹鬼

page.driver.set_cookie('name', 'value')

RackTest似乎并不完全支持它。作为一种解决方法,您可以执行以下操作:

get new_service_request_path, {}, 'HTTP_COOKIE' => 'name=value'
于 2012-12-25T09:53:55.193 回答
0

我认为您有许多使用 Before 和 After 挂钩以及标记的选项。我会从这里开始阅读:https ://github.com/cucumber/cucumber/wiki/hooks

像这样的东西:

Before do
   AccessRandomAccountPage() #Assumes you're logged in already
end

或者,如果这特定于一组测试,例如您是“AlreadyLoggedIn”测试,您可以使用标记:

Before ('@AlreadyLoggedIn') do
   AccessRandomAccountPage()
end
于 2012-12-31T16:12:22.070 回答
-1

在您的功能文件中,您使用了 background:,它在所有场景中都执行,为了避免每次调用(Background 的详细信息),请将 Background: 更改为 Scenario: 并且告诉 Cucumber 使用相同的就足够了上一个场景中的浏览器会话

Scenario:
  Given I am on login screen
  Then I log in

Scenario:
 Given I am on a random account summary
 when I try feature-1
 Then I see some output-1

Scenario:
 Given I am on account summary
 When I try feature-2
 Then I see some message
于 2012-12-27T13:28:17.563 回答