自动化测试中有多少断言?

Posted

技术标签:

【中文标题】自动化测试中有多少断言?【英文标题】:How much is too much assertions in automation testing? 【发布时间】:2019-07-10 12:43:52 【问题描述】:

我的任务是使用 testcafe 构建一个测试套件,在我编写测试时,我偶然发现了一个特定的问题“有多少断言是太多了?”。 基本上,测试完成后,会生成一份报告。看报告并不直观。例如, 如果在网页上找不到某个元素,我会看到如下内容:

>Selector('tads') does not exist in the DOM. 

这迫使我手动进行测试以验证失败的原因。

根据 testcafe 文档,您可以在断言中添加可选消息。 as seen here

截至目前,我在一些地方有一些关于消息的断言。在每次点击或每次操作之后都有一个断言(带有简洁的错误消息)是否明智? (即点击登录按钮,做一个断言看看登录模态是否出现。现在登录,断言登录模态消失)

代码看起来像这样:

await t.click(this.loginButton);
await t.expect(this.loginButton.exists).ok("I don’t see the login button");

await signup.newUserSignUp();
await t.expect(this.loginButton.exists).notOk("The login modal didn’t disappear"); 

任何反馈都会很棒。

【问题讨论】:

【参考方案1】:

TestCafe 断言既可用于断言测试中的预期内容,也可用作等待机制以确保元素在对其进行操作之前已准备好。

这意味着您最终可能会在单个测试中得到许多断言。

就个人而言,我以这样的 BDD 风格编写每个测试:

fixture("Feature <feature-id>: description of the feature ");

test("Scenario <scenario-id>: description of the scenario", async (t) => 
  // Given 
  await t
   .<any action>
   .<any action>
   ...

  // When
  await t
   .<any action>

  // Then
  await t
   .expect ... 
   .expect ...
   ...

);

GivenWhen 部分中,您可以使用 t.expect() 但只能作为等待机制。

我也从未在.ok().notOk() 中留言,因为当测试失败时,我总是必须手动完成测试以验证失败的原因。

因此,以 BDD 样式构建测试将帮助您从这个问题:how much assertions is too much? 切换到这个问题:how much tests is too much?

【讨论】:

以上是关于自动化测试中有多少断言?的主要内容,如果未能解决你的问题,请参考以下文章

Web自动化测试:测试用例断言

如何为自定义 XCTest 断言编写自动化测试?

接口自动化测试实践指导(下):接口自动化测试断言设置思路

Postman和接口自动化测试5-断言

Postman和接口自动化测试5-断言

Postman和接口自动化测试5-断言