selenium - 功能/验收测试的正确结构

标签 selenium structure functional-testing acceptance-testing jboss-arquillian

我目前正在为一个项目构建一个自动化的功能/验收测试套件,但我没有太多编写这些类型的测试的经验,所以我想获得一些关于正确构建它们的输入。具体来说,我正在使用 Arquillian 的 Graphite 烯扩展。

例如,假设我有 3 个测试,A、B 和 C。

TestA:测试登录应用程序中的帐户。因此,如果测试成功,浏览器应该位于帐户的主页/信息页面上。

TestB:测试修改帐户密码。这需要登录帐户,然后测试密码更改功能。

TestC:测试修改帐户的电子邮件。这将再次需要登录帐户,然后测试电子邮件更改功能。

如果 TestA 由于登录代码问题而失败,显然 TestB 和 TestC 也应该失败,因为它们需要登录帐户。

问题:自动化功能/验收测试是否应该重复完成测试所验证的任何内容所需的流程?在这种情况下,TestB 和 TestC 需要先登录该帐户才能执行其他操作。每个测试是否应该显式调用如下内容:

/* ...initial test setup code here */
LoginPage.login(username, password);
assertTrue(onCorrectAccountPage);
AccountModification.changePassword(newPassword);

或者我应该使用某种方式将帐户模拟到测试 B 和 C 可以使用的 session 中,这样即使 TestA(实际的登录测试)失败,它们也不会失败?

由于这些是用户接受测试,我的想法是他们应该完全按照用户会做的事情进行操作并在必要时登录,但我不确定这是否是不必要的重复,应该以不同的方式处理(即,处理像功能单元,类似于标准单元测试),我想从在该领域有更多经验的人那里获得反馈。

提前致谢。希望我的问题不是太复杂。 :)

最佳答案

我个人是这样做的,以便每个测试用例尽可能地复制用户的操作,但删除需要的地方。例如,TestA:登录,转到正确的网站,转到其管理系统,找到用户,并删除部分用户信息(例如姓名),TestB:登录,转到正确的网站,转到它是管理系统,查找用户,并尝试通过按钮完全删除用户。

TestA 和 TestB 最终位于同一页面 - 用户详细信息页面。因此,在测试 A 中,我可以正确地完成所有操作,完全按照用户的方式进行,但在测试 B 中,我直接进入该用户的详细信息页面,而不是手动进行正确的导航。为什么?

节省时间,当测试 A 已经测试了导航时,为什么我应该在测试 B 中重新进行导航?

请记住,测试不应相互依赖 - 如果所有三个测试都因您无法登录而失败 - 这就是重点,您无法登录,因此您无法执行任何其他操作。

像用户一样思考。每个测试都有自己正在测试的用户可查看功能,但如果您无法登录,则用户无论如何都无法看到其中任何内容或对该功能执行任何操作。如果我无法登录,我就无法更改我的密码或电子邮件 - 因此从逻辑上讲,测试应该以相同的方式失败。

关于selenium - 功能/验收测试的正确结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10536891/

相关文章:

ios - UIAutomation类的函数 ` performTaskWithPathArgumentsTimeout`如何使用?

continuous-integration - Concourse CI - 如何运行功能测试?

selenium - 如何使用 Selenium IDE 从数据池中读取变量?

selenium - 如何使用selenium选择框架?

python - 如何在 Python 中使用 Selenium 检查复选框

Selenium WebDriver : Fluent wait works as expected, 但隐式等待不会

c - 传递 struct* 并在其他函数中加载该结构

css - 出于 CSS 目的,如何命名我的 DOM 元素

C - fread 似乎没有将数据读回内存

java - 如何系统测试 Java 桌面应用程序?