你好,
我正在处理一个相当DB重的Web应用程序,并计划使用Selenium设置自动化测试。然而,作为一名自动化测试新手,我不知道该从哪里开始。
- 你如何分类你的测试以确保它们在逻辑上合理且完整?
- 在测试时如何处理DB?在每次测试前构建一个全新的DB并在每次测试后删除表格吗?或者从一个测试数据库开始?
只是想了解在这方面的最佳实践点。
谢谢,
你好,
我正在处理一个相当DB重的Web应用程序,并计划使用Selenium设置自动化测试。然而,作为一名自动化测试新手,我不知道该从哪里开始。
只是想了解在这方面的最佳实践点。
谢谢,
总体而言...
如果您的主要目标是测试数据库的CRUD操作,我建议至少要“深入”一级,并编写某种不使用GUI进行测试的集成测试。如果将GUI排除在外,则测试更加专注于实际的CRUD操作。
如何处理数据库...
无论您选择Selenium还是集成测试,让测试彼此之间不依赖是个好主意。这意味着在每次测试前设置数据库并/或在测试后将其恢复到一个干净/已知状态。以这种方式编写的测试维护起来更容易。例如,您可以单独运行一个测试。
针对我们的集成和验收测试,我们使用dbunit来实现这一点。轻松设置和拆卸数据库并不是什么新鲜事物,您的技术堆栈中应该也有类似的工具。(您没有提及您使用的技术)
如何分类测试...
对于CRUD操作,我建议确保每个测试只测试一件事情。例如,我有一个员工表。您可以有一个测试套件,测试与员工有关的所有内容,但单个测试仅应测试一件事情。“成功保存员工”应该是不同于“尝试保存已存在的员工”或“删除员工”的测试用例。
编辑(回复评论):
我们基本上在测试开始时清空数据库并从头构建。(不确定这部分有多关键,但这可以确保我们的数据库与代码期望的一致。我们正在使用Hibernate...)
每个测试都需要不同的数据集进行插入。假设我们再次测试“员工”,如果我想测试删除“员工”,我将插入包含数据库中最少信息以使其发生的数据集。较小的数据集更容易维护。如果您对所有测试使用相同的数据集,则更改代码和更改或添加新测试将变得非常困难。
我们确实会针对那些需要相同信息的事物使用相同的数据集。例如,您想测试“尝试将员工保存到数据库”和“删除员工”。您可以重复使用一个数据集进行这些测试。
我想知道对于每个测试构建和拆除数据库是否在时间和计算方面都比较昂贵?
我不会过于担心这个问题。是的,它可能会为每个测试增加3-4秒钟的时间,但从宏观上看,这真的很重要吗?更重要的是,您要有针对维护的测试,因为作为开发人员,您的时间比这些测试花费5分钟而不是3分钟更有价值。