Selenium 在功能测试中只有一个断言语句?

Selenium 在功能测试中只有一个断言语句?,selenium,functional-testing,assertions,Selenium,Functional Testing,Assertions,这个问题类似于功能测试而不是单元测试 我目前正在使用Selenium测试UI,我想知道是否只需要一个断言语句,或者它是否取决于测试 例如,如果我想测试一个基本的Facebook登录,只需使用一个断言语句就足够了吗?例如:查找一个只在登录时存在的元素,或者测试应该更详细,包括多个断言语句检查您是否在正确的站点上,检查输入,检查仅在登录时存在的元素,等等。让我尝试逐一回答您的问题: 如果只需要一个断言语句,或者如果它依赖于测试,那么让我们说一个手动测试用例。一个测试用例由几个步骤组成,但最后我们会对

这个问题类似于功能测试而不是单元测试

我目前正在使用Selenium测试UI,我想知道是否只需要一个断言语句,或者它是否取决于测试


例如,如果我想测试一个基本的Facebook登录,只需使用一个断言语句就足够了吗?例如:查找一个只在登录时存在的元素,或者测试应该更详细,包括多个断言语句检查您是否在正确的站点上,检查输入,检查仅在登录时存在的元素,等等。

让我尝试逐一回答您的问题:

如果只需要一个断言语句,或者如果它依赖于测试,那么让我们说一个手动测试用例。一个测试用例由几个步骤组成,但最后我们会对照预期结果交叉检查实际结果。同样的思想通过断言在自动化中实现。因此,理想情况下,根据最佳实践,断言语句是必须的,但不是强制性的

如果测试更为详细,并且包含多个断言语句,那么在一个测试用例中始终可以有多个断言。没有问题。但是您必须记住,如果一个断言失败,那么其余的断言将不会执行。这会给你一个单一的结果,要么通过要么失败。现在,如果您想保留多个验证点,那么您必须借助if/else块,以便执行所有验证,而不管每个验证是否通过


如果这回答了您的问题,请告诉我。

对于功能测试,每个测试用例规则的一个断言有点过头了。对于功能端到端测试,我认为作为一般指南,应该只测试一种行为。使用您需要的尽可能多的断言来验证这一行为

如果测试失败,您希望在不阅读实际测试代码的情况下了解什么不起作用。在一个测试中有多个断言可能导致测试多个行为和多个失败原因。这是次优的

由于端到端的功能往往比较慢,所以一定要实用。使用相同的步骤测试稍微不同的断言似乎浪费了运行时间。如果希望在每次签入时运行测试套件,那么测试套件也应该很快。因此,不要在这个级别上编写太多测试。按照建议保持良好的平衡


就你的例子而言,我认为一个断言就足够了。其行为是检查用户是否已登录,而不是检查页面上是否有所有元素。还要记住,如果站点的实现发生了更改,则需要更新所有测试。您断言的越少,测试的可维护性就越高。

这取决于测试用例的目的。作为一个测试,有多个测试步骤,每个步骤都有预期的重用;因此,最好使用断言来确保aftre每个所需的步骤结果标准都得到满足。