【问题标题】:How to write automated tests - Test case as a function or test case as a class如何编写自动化测试 - 测试用例作为函数或测试用例作为类
【发布时间】:2012-10-03 23:54:47
【问题描述】:
我在测试自动化方面遇到了设计问题:-
要求 - 需要通过自动化框架测试不同的服务器(使用 unix 控制台而不是 GUI)。我要运行的测试 - 单元、系统、集成
问题:在设计测试用例时,我认为测试用例应该是测试套件的一部分(测试套件是一个类),就像我们在 Python 的 pyunit 框架中一样。但是,我们应该将测试用例保留为可扩展自动化框架的函数,还是应该将测试用例保留为单独的类(每个类都有自己的设置、运行和拆卸方法)?从自动化的角度来看,将测试用例作为一个类更具可扩展性、可维护性还是作为一个函数的想法?
【问题讨论】:
标签:
java
python
testing
frameworks
automation
【解决方案1】:
通常测试用例用作类而不是函数,因为每个测试用例都有自己的设置数据和初始化机制。将测试用例实现为单个函数不仅会使在运行任何测试用例之前设置测试数据变得困难,而且是的,如果您运行相同的测试场景,您可以在测试用例类中使用不同的测试方法。
【解决方案2】:
以下是我的看法:
将测试编写为函数的优点:
- 如果您需要该测试用例的任何先决条件,只需调用另一个提供先决条件的函数。对拆解步骤执行相同的操作
- 对于团队中的新人来说看起来很简单。通过将测试视为函数,可以轻松了解正在发生的事情
将测试编写为函数的缺点:
将测试用例编写为类的优点:
- 设置、运行和拆卸都有明确的定义。测试先决条件很容易理解
- 如果有测试 1 正在做某事,并且测试 1 的结果用作测试 2 和 3 中的设置先决条件,则很容易从测试 1 继承,并调用其设置,运行拆卸方法首先,然后,继续您的测试。这有助于使测试彼此独立。在这里,您无需努力维护代码的实际调用。由于继承,它将隐式完成。
- 有时,如果 Test 1 的 setup 方法和 Test 2 的 run 方法可能成为另一个 Test 3 的先决条件。在这种情况下,只需从 Test 1 和 Test 2 类以及 Test 3 的设置中继承方法,调用测试 1 的设置和测试 2 的运行。同样,您不需要维护实际代码的调用,因为您正在调用设置和运行方法,这些方法从框架的角度进行了尝试和测试。
将测试用例编写为类的缺点:
- 当测试数量增加时,您无法查看特定测试并说出它的作用,因为它可能继承了太多您无法回溯的级别。 但是,有一个解决方案 - 在每个测试用例的每个设置、运行、拆卸方法中编写文档字符串。并且,编写一个自定义包装器来为每个测试用例生成文档字符串。继承时/之后,您应该提供一个选项来将特定函数(设置、运行、拆卸)的文档字符串添加/删除到继承的函数中。这样,您可以运行该包装器并从其文档字符串中获取有关测试用例的信息