Pytest 标记测试用例
同学们大家好,这个章节我们来学习 pytest 框架中如何标记测试用例。
简介
在测试过程中,有时候需要对测试用例进行标记,以便在运行测试时选择性地执行或跳过某些测试。
Pytest 提供了一种灵活的测试标记功能,可以通过自定义的标记标签来对测试用例进行分类和标记。
什么是标记用例呢,其实就是要给测试用例打上不同的标签,这样就可以给用例进行分类,方便我们可以运行时只执行某些特定的测试,比如某些功能的测试或者跳过某些已知失败的测试。Pytest 提供了这种灵活的标记功能,我们可以使用自定义的标记标签将测试用例分类,帮助我们更有条理地执行测试。
标记测试用例的优点
- 组织和分类测试:标记测试用例可以将它们分组归类,便于组织和管理测试。例如,可以为功能测试、性能测试、回归测试等不同类型的测试案例创建不同的标记,使测试套件更加可读和易于维护。
- 灵活选择测试:通过标记测试用例,可以在运行测试时选择性地执行或跳过特定的测试用例。这对于执行特定类型或特定条件下的测试非常有用,提高了测试效率。
先来看看给用例作标记的优点都有哪些。首先,它可以帮助我们组织和分类测试,比如我们可以为功能测试、性能测试等分配不同的标签,便于管理。其次,它让我们可以灵活选择要执行的测试用例,比如只执行标记为 performance 的性能测试,或者跳过标记为 skip 的某些测试,提高测试效率。
使用步骤
- 在测试用例方法上加
@pytest.mark.标签名
。 - 命令行执行用例时使用
-m 标签名
来指定要执行的测试用例。
具体怎么使用这个标记功能呢?首先,在测试用例上方加上 @pytest点mark点标签名。这里的标签名可以自定义,想叫什么都可以。然后在命令行运行的时候,使用 杠m 后面加上标签名来指定要执行哪些带有特定标签的测试用例。简单来说,就是给测试用例加标签,然后在执行时根据标签筛选。
实战案例
场景:测试 double 方法,给不同的测试场景分类。
import pytest
def double(a):
return a * 2
@pytest.mark.int
def test_double_int():
assert 2 == double(1)
@pytest.mark.minus
def test_double1_minus():
assert -2 == double(-1)
@pytest.mark.float
def test_double_float():
assert 0.2 == double(0.1)
@pytest.mark.minus
def test_double2_minus():
assert -0.2 == double(-0.1)
@pytest.mark.zero
def test_double_0():
assert 0 == double(0)
@pytest.mark.bignum
def test_double_bignum():
assert 200 == double(100)
@pytest.mark.str
def test_double_str():
assert 'aa' == double('a')
@pytest.mark.str
def test_double_str1():
assert 'a$a$' == double('a$')
下面我们看一个具体的例子。假设有一个叫做 double 的被测函数。然后针对 double 函数编写了多个测试用例来测试不同的场景。我们根据传入 a 的不同数据类型来给每个测试用例添加了标签。比如整数加 @pytest点mark点 int,负数加 @pytest点mark点 minus,浮点数加 @pytest点mark点 float 等等。
执行标记为 str
的测试用例:
pytest test_command_param.py -m "str"
运行结果:
如果我们只想执行标记为 str 的测试用例,就可以在命令行输入 pytest 测试文件名 杠m 后指定要执行的标签为 str。这就相当于告诉 pytest 只运行所有带有 str 标签的测试用例。可以看到结果确实只执行了标记为 str 的用例,其他的都没有执行。下面我们来看一下具体操作。
项目里已经创建好了测试文件。在文件中写好了被测函数 double,它可以把传入的 a 参数乘以 2 之后返回相乘的值。下面就是这个函数的测试用例。有很多种场景,比如 a 为整数,为负整数,后面还有小数,负小数,为 0,比较大的整数,最后还有两个传入字符串的用例。
./assets/Pytest标记测试用例.mp4
接下来我们就来给这些用例分类。第一个用例测试的是整数,所以它的标签是 pytest点mark点int。第二个用例是负数,就用 pytest点mark点minus。再下面的这个用例测试的是浮点数,所以就标记为 pytest点mark点float。后面是负小数的场景,也标记为 minus。再后面的用例测试的是 a 为 0 的场景,给它标记为 zero。再往后看,下面的这个用例测试的是一个大一点的整数,我们就把它标记为bignum。最后的两个用例,都是传入字符串的场景,那我们就都标记为 str。这样我们就把标签都添加好了。
./assets/Pytest标记测试用例.mp4
接下来,我们就进入命令行工具来执行一下。先在文件上鼠标右键,点击 open in terminal,然后在命令行中执行一下 pytest 测试文件名,后面用 杠m 参数指定一下要执行的是标签为 str。然后来看一下执行结果,可以看到执行成功了 2 条,6 个没有被选择,也就是说不是 str 标签的都没有被执行。然后我们往上看一下,可以看到执行的 2 条都通过了,不过下面有很多警告的日志。这个其实是因为我们标记的这些 int 之类的标签没有在配置文件中注册过,所以会有这个提示信息,大家这里可以先忽略,警告不影响执行。后面的章节会介绍如何注册标签。
./assets/Pytest标记测试用例.mp4
总结
- 标记测试用例的优点。
- 标记测试用例的方法。
最后来总结一下。这个章节最主要学习了如何使用标记来执行特定的测试用例,通过在方法前加上 @pytest点mark点 标签名来标记测试用例,然后用命令行的 杠m 标签名来选择性执行。好,标记用例就先介绍到这里。