测试框架之pytest
[TOC]
本文是学习了《Selenium自动化测试完全指南》和其他网络上的教程写出的学习笔记
Pytest简介
Pytest是目前最成熟、功能最全面的Python测试框架之一。
简单灵活,容易上手,而且支持参数化与测试编排功能,对其他测试框架(例如Nose、UnitTest等)也能完全兼容。Pytest的第三方插件非常丰富,拥有非常良好的扩展性
安装
1 | pip install pytest |
使用
使用Pytest编写测试,必需遵守以下基本规则,否则测试无法正常运行
- 测试文件的名称以“test_”开头(或以“_test”结尾)
- 测试类的名称以Test开头,并且不能带有
__init__
方法 - 测试函数的名称以“test_”开头
- 断言使用基本的“assert {表达式}”即可。如果表达式为True,则断言通过;否则,断言失败。
举例:test_example.py
1 | class TestClass: |
运行方式
- 默认全部执行
在测试文件目录下打开命令行,输入pytest,即可执行该目录下所有测试文件
- 选择指定文件
1 | # 方法一:使用带参数的pytest命令 |
- 命令参数
参数 | 作用 | 描述 |
---|---|---|
-v | 显示每个函数的测试结果 | 默认只有模块的结果 |
-q | 只显示整体测试结果 | |
-s | 显示测试函数的print()输出 | 在命令行上 |
设定测试函数的先后顺序
Pytest默认的测试函数执行顺序:
文件级执行顺序:在Pytest中,文件级别的执行顺序为先从上到下依次执行同一个文件夹下的.py文件,然后依次执行同一个文件夹下的子文件夹。(正常的文件顺序)
函数级执行顺序:从上到下依次执行
自定义顺序:pytest-ordering插件
1 | #安装 |
ps:如果测试之间存在顺序依赖,通常是规划不合理导致的。这种顺序依赖不仅会导致维护困难,还会导致以后难以修改测试执行方式(例如执行并发测试)。如无特殊需求,请尽量不要设定测试的顺序。
测试粒度规划
小粒度的测试:功能,页面流程中的相续操作都被分散到各个测试函数当中,因此很可能需要考虑测试函数的先后顺序以及前后置操作的影响。
在小粒度的测试中,一个测试函数只对应一个功能点,看起来非常明确。但并不推荐粒度过小的测试,因为这种粒度的测试结构太过脆弱,比较难维护
中粒度的测试:一个类对应一个页面,因此可以考虑类级别的前后置操作
适用于非常多的场景,尤其适合大型的、专门的、独立的自动化测试项目。这类项目通常会要求较高的页面覆盖比例,对各个页面的功能往往挖掘得比较深入。
大粒度的测试:各个测试函数绝对独立,一个测试函数直接对应一个页面,测试函数通常会调用较多的非测试子函数,所以通常无须在类中添加前后置操作。
适用于应用程序研发流程中的快速回归测试。此时的测试并不要求高比例覆盖每个页面的每个功能点,而是要求快速验证应用程序中的重要业务点是否正确。