一、为什么我用了pytest后就会喜欢上它
在使用unittest编写测试用例的时候,需要遵循先创建testclass,测试类继承unittest.TestCase的固定格式。
而pytest不需要,可以直接写def test_XXX()即可,写法是python原生。
pytest就可以大显身手了。
二、setUp与tearDown(pytest中的fixture)个人觉得fixture更灵活
对应unittest下的setUp与tearDown,pytest中的fixture显然更加灵活。可以任意自定义方法函数,只要加上@pytest.fixture()这个装饰器,那么被装饰的方法就可以被使用,如图所示的,为当test_login_success执行结束后,执行退出。fixture的详细使用,会在后面单独拿出来讲。
三、pytest的参数化用起来也更方便
pytest可以更好的参数化,如图所示测试登录失败的场景,这里即是4条测试用例。
四、pytest第三方插件非常丰富
pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)
五、兼容unittest
这么好用,还能兼容unittest
六、pytest是什么?
pytest是一款强大的python测试工具,可以胜任各种类型或级别的软件测试工作,及时和开发团队、QA团队、独立的测试小组使用,又适合练习测试驱动开发(TDD)的个人,以及开源团队使用。
比起unittest和nose,pytest会提供更丰富的功能,包括assert重写、第三方插件,以及其他测试工具无法比拟的fixture模型。
此外pytest还有一些优势:
1: 简答的测试可以很简单地编写
2: 复杂的测试也可以很简答地编写
3: 测试的可读性强
4: 易于上手
5: 断言测试失败仅使用原生assert关键字,而不是self.assertEqual(), 或者6: self.assertLessThan()
7: pytest可以运行由unittest和nose编写的测试用例。
七、测试的种类
单元测试:检查一小块代码(比如一个函数,或者一个类)的测试
集成测试:检查大段的代码(比如多个类,或者一个子系统)的测试。集成测试的规模介于单元测试和系统测试之间。
系统测试:检查整个系统的测试,通常要求测试环境尽可能接近最终用户的使用环境。
功能测试:检查单个系统功能的测试。比如一个任务的增、删、改、查。
皮下测试:不针对最终用户界面,而是针对用户界面以下的接口的测试。比如测试API。
第一个测试用例
下面我开始第一个测试用例的编写,首先新建一个项目,然后建一个叫test_one.py的文件,内容如下。
八、第一个测试用例
下面我开始第一个测试用例的编写,首先新建一个项目,然后建一个叫test_one.py的文件,内容如下。
def test_passing():
assert (1, 2, 3) == (1, 2, 3)
然后进入到项目目录,执行pytest test_one.py命令。
简单说一下控制台中的输出内容,第一个行是python版本,pytest版本等包的信息。第二行是运行pytest命令时所在的路径。第三行显示都安装了哪些pytest的插件。第四行,表明选取了多少个测试用例,我们这里是1个。然后空了一行,然后是模块名后跟个‘·’,表示一个测试通过,如果没有通过则是红色的‘F’。
最后一行,绿色的字体,对测试结果的汇总,显示通过了几个测试用例,总共耗时多久。
九、失败的测试用例
让我们添加一个明显的错误测试用例函数,故意让pytest测试失败,看看没通过的是什么样子的。
def test_passing():
assert (1, 2, 3) == (1, 2, 3)
def test_error():
assert 1 == 0
除了测试结果,还会显示没有用过的测试用例。会明确的告诉你在哪个模块的哪一行出了错误。
十、更详细的输出信息,-v --verbose
在执行pytest时还可以通过添加参数来看到更详细的信息。
-v和--verbose:其实都是指代同一个命令,只不过-v是--verbose的简写。