但凡有点经验的python自动化测试工程师或是测试开发工程师,或多或少都用过unittest。当使用unittest实现测试代码,首先必须定义一个测试类并继承unittest.TestCase, 然后在类中实现测试方法。然而在pytest中,却无需强制使用类声明,只要一个测试函数即可,就像这样:
就这样,两行就是实现了自动化测试,是不是很简单。
接下来我们看看,这段代码是如何在pytest中执行的。
首先我们定义了一个测试函数,函数名则以test开头。这很重要,当你用pytest 运行一个脚本时,它会收集test为前缀的函数名的函数作为测试方法去执行。如果我们把test_add改成tes_add,那么pytest就找不到任何测试用例了。
pytest有一套自己发现测试方法的规则,后面会细说哦。
之后我们在test_add函数中使用了断言去判断测试的检查点。如果你用过unittest,你知道unittest本身提供了很多断言函数比如assertEqual等等。而pytest则直接使用assert,少去了还要查找断言函数的麻烦,让代码更加简单和自由。同时你会发现断言如果出错,错误信息如此详细…当然pytest还提供了异常信息定制化功能。
讲到这里,大家是不是觉得这段测试代码里还缺点什么呢?没错,那就是大家熟悉的setup和teardown。pytest测试提供了几个级别的setup/teardown——模块,函数,类,方法。
我们定义了方法级别的setup/teardown, 运行结果就是你们看到的,熟悉的配方啊。然而除了传统的setup/teardown, pytest还提供了一个更强大的功能fixture——使用fixture简化了初始和清理代码的工作流程, fixture就像函数,有明确的名称,测试函数、模块、类或整个项目中都可以声明和激活它们。虽然pytest支持传统的setup/teardown, 但fixture是更加值得去使用的。
现在食材都已经搭配好了,那怎么开烧呢,说白了就是如何运行你的测试代码如何编写啦。pytest提供两种方法,一种就像unittest一样直接在code里指明,就像这样
至此,小艾已经为大家展示了测试框架中最重要的几个特性,测试方法、断言,异常信息,初始/清理,运行,测试报告。从下章开始小艾将会一一展开这些特性,详细介绍它们的用法。