设计一个CRUD测试套件

4
我正在为我们的应用程序编写一套黑盒自动化测试。我一直遇到同样的设计问题,所以我想知道这里的人们对此有何看法。
基本上,这是一个简单的CRUD系统。举个例子,让我们看看你正在测试创建、查看、编辑和删除用户账户的屏幕。我想做的是编写一个测试,测试用户创建是否正确,另一个测试检查查看用户是否显示与您最初输入的相同数据,另一个测试检查编辑用户是否有效,最后一个测试检查删除用户是否OK。
问题在于,如果我这样做,那么测试必须按特定顺序运行,否则它们将无法工作。(例如,您无法删除尚未创建的用户。)现在有些人说,测试设置应该创建测试需要的所有内容,拆卸应该将系统恢复到一致状态。但是想一想……创建用户测试之后要删除该用户,而删除用户测试将首先创建用户……因此,两个测试现在具有相同的代码,唯一的区别是该代码位于设置/主体/拆卸中。这似乎就是错误的。
简而言之,我似乎面临着几种选择,所有这些选择都似乎有缺陷:
1.使用设置来创建用户并使用拆卸来删除它们。这会将所有创建用户和删除用户测试代码复制为设置/拆卸代码。
2.强制测试按特定顺序运行。这违反了测试应该在隔离中工作并且可以按任何顺序运行的原则。
3.编写一个巨大的测试,它创建用户、查看用户、编辑用户,然后删除用户,所有这些都是一个巨大的单块。
请注意,创建用户不是一件微不足道的事情;涉及许多步骤。同样,当删除用户时,您必须指定其分配的项目等要做的事情。这绝非一项微不足道的操作。
现在,如果这是一个白盒测试,我可以模拟用户帐户对象,或模拟保存它们的数据库,甚至可以在磁盘上检查真实数据库。但这些都是黑盒测试,只测试外部可见接口。(即,在屏幕上单击按钮。)这个想法是测试整个系统,从端到端,而不修改它[除了通过GUI命令,显然]。
1个回答

4
我们有相同的问题。我们采用了两种测试方式。在第一种测试的样式中,我们像您建议的那样使用设置和拆卸来创建测试所需的数据(用户、票务等)。在另一种测试样式中,我们使用数据库中预先存在的测试数据。因此,例如,如果测试是AdminShouldBeAbleToCreateUser,我们不会执行上述任何操作,因为这就是测试本身。但如果测试是ExistingUserShouldBeAbleToCreateTicket,我们会在测试数据中使用预定义的用户。如果测试是UserShouldBeAbleToDeleteOwnTicket,我们使用一个预定义的用户并在设置中创建该票。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接