适当的功能/验收测试结构

whi*_*aaa 5 selenium structure acceptance-testing functional-testing jboss-arquillian

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

例如,假设我有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);
Run Code Online (Sandbox Code Playgroud)

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

由于这些是用户验收测试,我的想法是他们应该完成用户会做的事情并在必要时登录,但我不确定这是否是不必要的重复,应该以不同的方式处理(即,像功能,类似于标准单元测试)我希望得到在这方面有更多经验的人的反馈.

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

Arr*_*ran 4

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

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

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

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

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