1

我已经设置 SpecFlow 来执行一些 Selenium 测试来测试网站。这一切都很好!

我只是在考虑是否可能对 SpecFlow 功能的结构进行一些优化。

特定功能中的所有场景都应使用相同的登录名。这是我目前使用 [BeforeScenario()] 钩子在 StepDefinition 中硬编码的内容,因为我真的不想用登录信息污染场景。它与测试无关。

但同时,我想删除硬编码部分,并将其移至我的功能中。

我的问题是两部分。

  1. 我可以在我的功能描述中指定登录凭据吗?有点像给定的:

    Feature: As a user I want to be able to see my ongoing orders, and interact with them.
    Given I am logged in with username abc and password xyz
    
    Scenario: See list of ongoing order
    Given I place an order
    When I navigate to MyOrders page
    Then I can see at least one order in the list
    
  2. 这是好习惯吗?

    我的意思是在功能级别上这样做是否有意义。这些场景不依赖于特定的顺序,如果我不需要为每个场景登录,它们会执行得更快。

感谢您的输入。

4

3 回答 3

3

对于功能中所有场景的通用步骤,您可以使用背景:

    Feature: As a user I want to be able to see my ongoing orders, and interact with them.

    Background:
    Given I am logged in with username abc and password xyz

    Scenario: See list of ongoing order
    Given I place an order
    When I navigate to MyOrders page
    Then I can see at least one order in the list

过多滥用后台步骤可能是一种不好的做法,因为它会在您的场景之间引入耦合。

另一种解决方案是将登录部分直接放入“我下订单”步骤。这将消除有关登录内容的所有噪音,因为它暗示您需要登录才能下订单。

我还建议称它为“我已下订单”而不是“我下订单”。给定的步骤通常是描述使用功能之前发生的事情的前提条件(当步骤)

于 2013-01-10T12:54:32.940 回答
2

当我第一次阅读您的帖子时,我想到了Dan North:这到底是谁的域名?这使我认为我们应该尝试编写测试,以便它们坚持一个单一的知识领域。当您在列表中谈论特定用户、导航和订单时,这与他给出的示例非常相似,因为您的规范是跨域的。这种引导我几乎使您的规范不那么具体,即它不是关于导航和检查列表,您是否有订单!

场景:查看正在进行的订单列表假设我使用用户名 abc 和密码 xyz 登录并且我下订单然后应该至少有一个订单

我想为您提供另一个示例链接,该链接指向我找不到的帖子,其中讨论了团队通过实际定义一些示例用户获得的好处以及为他们提供测试的价值。因此,在您的业务领域中,您可能有一个名为 Jack 的用户,他将在系统中下了大笔订单,而另一个潜在客户 Jill 没有订单。通过这种方式进行测试,例如

Given I am Jack
When I search for my orders
Then I will find 1

Given I am Jill
When I search for my orders
Then I will find 0

可以保证您只是在测试您的搜索功能,而不是让设置到位。

我还建议您看一下Liz Keogh:Acceptance Criteria vs Scenarios,他断言更一般的广义定义不如非常具体的示例有价值。(毕竟是通过示例说明:-))

因此,要回答您的问题,我认为拥有指定的用户是一件好事,但是按照您的方式进行操作是一条非常复杂的路线。

于 2013-01-10T14:24:29.973 回答
0

给出的场景示例与 Feature 完全不符。

   Feature: As a user I want to be able to see my ongoing orders, and interact with them.

Background:
Given I am logged in as John Doe

Scenario: This is taking to long
And I have placed an order more than 29 days ago
When I navigate to MyOrders page
Then I can see my order in the list
and I am able to cancel it

Scenario: Track package
And I have been notified my order has been send
When I navigate to MyOrders page
Then I can see my order in the list
and I am able to navigate to the postman's site and see its status

Scenario: Review item
And I have received my package
When I navigate to MyOrders page
Then I can see my order in the list
and I am able to review the item

Scenario: Contact Seller
And I have placed an order two weeks ago
When I navigate to MyOrders page
Then I can see my order in the list
and I am able to ask the seller what is going on

如您所见,When 和 Then 开始自我复制,您可能需要考虑将它们收起来。

于 2020-12-16T15:23:58.690 回答