G'day,
我正在使用一个相当数据库的Web应用程序,并着眼于使用Selenium为其设置自动化测试。但是,作为一个自动测试新手,我不知道从哪里开始。
只是寻找一些关于这方面最佳实践的指示。
谢谢,
答案 0 :(得分:10)
一般......
如果您的主要目标是测试数据库CRUD操作,我至少会“降低一级”并编写某种不使用GUI进行测试的集成测试。如果您将GUI取出,测试将更加关注实际的CRUD操作。
如何处理数据库......
无论您使用Selenium还是集成测试,测试都不依赖于是个好主意。这意味着在每次测试之前设置数据库和/或在测试之后将它们拆分为干净/已知状态。维护以这种方式编写的测试要容易得多。例如,您可以单独运行单个测试。
对于我们的集成和验收测试,我们使用dbunit来实现这一目标。轻松设置和拆除数据库并不是一件新鲜事,应该为您的技术堆栈提供一些可用的东西。 (你没有提到你正在使用的技术)
如何对测试进行分类......
对于CRUD操作,我会确保只测试一件事和一件事。例如,我有一个 Employee 表。您可以拥有一个测试套件来测试与 Employee 有关的所有内容,但是单个测试应该只测试一件事。 '成功保存员工'应与“尝试保存已存在的员工”或“删除员工”的测试案例不同。
编辑:(回复评论)
我们基本上会杀死数据库并在测试开始时从头开始构建它。 (不确定这部分有多重要,但是这确保我们的数据库与代码期望的一致。我们正在使用hibernate ...)
然后,对于每个测试,我们都要插入不同的数据集。所以我们再说一遍,我们正在测试员工。如果我想测试删除 Employee ,我会插入一个包含数据库中信息量最少的数据集来实现这一点。较小的数据集更易于维护。如果对所有测试使用相同的数据集,则很难更改代码并更改或添加新测试。
我们对似乎需要相同信息的事物使用相同的数据集。例如,您要测试“尝试将员工保存到数据库”和“删除员工”。您可以为此重用一个数据集。
我想知道是否建设和 每次测试都会拆掉数据库 将是昂贵的时间和计算 明智?
我不会太担心这个。是的,它可能会增加,比方说,每次测试3-4秒,但从大局来看,这真的很重要吗?更重要的是,您有针对维护的测试,因为您作为开发人员的时间比这些测试花费5分钟而不是3分钟更有价值。
答案 1 :(得分:1)
我对Selenium一无所知,但我发现a JavaRanch article that was really well-done.在标题为“单元测试模拟基础知识”的部分中,作者展示了一种创建模拟对象的好方法,以避免< strong>任何数据库调用。显然,您需要一些涉及数据库调用的集成测试,但对于普通的单元测试,概述的方法效果很好。
请记住,运行单元测试应该非常快。