pytest可以自定义标签,在执行案例的时候,可以通过参数的方式,只执行该标签下的案例,这样,就能够在大量的案例中执行对应各种各样标签下测试案例
1.打标签的基本步骤
要使用标签,基本需要以下几个步骤
- 注册标签
- 给对应的案例打上标签
- 执行对应标签下的案例
以上步骤,并不是都是必须的,但如果没有做其中的步骤,执行测试用例的时候,程序会报警告,有些则会导致程序出现问题。
1.1 注册标签
第一步:创建一个conftest.py的文件,你需要注意以下几点:
- 创建路径:你要执行pytest命令的目录下创建
- 文件名:不允许进行修改!!(pytest固定的)
第二步:在conftest.py文件中重写pytest_configure(config)函数
可能pytest在执行主程序的时候,会去加载执行路径中conftest.py文件夹下的pytest_configure(config)函数,而这个函数,就是用来标签注册的函数。所以,要注册标签,就这样去写吧!
写法(直接上代码):
def pytest_configure(config):
config.addinivalue_line("markers", "demo")
config.addinivalue_line("markers", "案例1:我只是个标签")
我们可以看到传入的参数config中有一个addinivalue_line方法,第一个参数传入的是 固定的[markers],至少标签是这样加的,第二个传入的参数,是标签名,但是又两种写法一种是不加任何解释的,另一种,后面稍微解释了一下。
在上面的使用中,加了两个标签,标签名如下所示:
- demo
- 案例1
测试的时候,这里故意使用中文,说明,标签是支持中文的,但是配置文件的方式只支持英文,所以这里推荐使用这一种进行注册~~
当然,如果你能力足够,你可以尽情改造该函数,因为在注册标签的时候,你能够做很多其它的事情。不过如果你是小白的话,请不要乱修改该内容。
1.2 给对应的案例打上标签
测试案例是可以通过类,类中的函数,单独的函数以及文件的方式进行组织的。因此我们能够通过把标签打到不同的级别上。先看代码:
import pytest
@pytest.mark.案例1
def test_demoA():
print("函数级别的test_demo01")
@pytest.mark.案例1
@pytest.mark.demo
def test_demoB():
print("函数级别的test_demo02")
@pytest.mark.demo
class TestDemo:
@pytest.mark.案例1
def test_demoC(self):
print("运行测试1")
def test_demoD(self):
print("运行测试2")
该代码是写到同一个文件中的,我们可以看到如下的测试用例的分布如下所示:
- test_demoA
- test_demoB
- TestDemo
- test_demoC
- test_demoD
其中这里面既有单独的函数测试方法,又有类中的测试方法。
打标签的时候,需要清楚该标签是给哪个级别打。
- 写到类前面的标签,该类下的所有函数都有该标签
- 写到方法前面的标签,只会给对应的函数打该标签
所以标签【案例1】下的测试案例为 A、B、C
而标签【demo】下的测试案例为B、C、D
1.3 执行带有标签的案例
命令行输入【这里多加了-v -s的命令,用于查看打印】:
pytest -v -s -m=案例1
pytest 代码测试调用的方式:
import pytest
pytest.main(["-m=案例1", "-s", "-v"])
参数语法为: -m=标签名