BDD 'Then' 步骤。我应该将应用程序和数据库视为黑盒吗?

BDD 'Then' step. Should I look at application and DB as an black box?

如果我正在编写 BDD 风格的测试。什么是更好的练习:

When User A creates new record
Then DB contain correct record

When User A creates new record
Then User A can get his new record by some API request
And Admin-user can get this new record by another API request

那么我应该检查数据库的内部状态还是只使用 API 并将应用程序 + 数据库视为黑盒?

您应该使用 API 尽可能多地测试您的应用程序,因为它给出了您的应用程序的实际行为。在你的情况下,它将是

When User A creates new record
Then User A can get his new record by some API request
And Admin-user can get this new record by another API request

原因是:

  1. 通过使用管理员 API,您可以确保记录在数据库中并且管理员 API 的行为符合预期
  2. 将来,如果您的数据库在您的应用程序内部发生变化,但 API 的行为没有改变,那么您的 BDD 将毫无问题地工作。换句话说,如果开发人员决定更改数据库而不是 API,则使用 API 的业务服务不会受到影响
  3. 如果您只测试数据库,但管理 API 发生变化,您的场景会通过,但使用管理 API 的业务服务会失败

唯一的情况是,当没有 API 来验证记录时,您会直接检查数据库中的记录而没有 API。您不应该纯粹为 BDD 开发 API。 Admin API 应该在业务服务中使用,如果不是这种情况,您可以直接检查数据库记录(您的第一个选项)。

PS: 我们开发了一款产品NoCodeBDD。顾名思义,您可以使用 NoCodeBDD 使 BDD 自动化,而无需任何代码。我很想从社区得到一些反馈。您可以从 www.nocodebdd.com/download

下载免费版本

一般来说,创建的东西应该是验证的东西。所以

  • 如果用户(人类与 UI 交互)创建

    • 然后与 UI 交互的用户将通过查看创建的事物进行验证。
  • 如果 api 客户端创建

    • 然后 api 客户端将通过检查创建调用的响应来验证
    • 此外,api 客户端可以在响应
    • 中使用 link 获取创建的内容

在这两种情况下,我只会考虑通过数据库验证作为您处理场景时的临时措施