pytest测试框架系列(2)-用例执行命令参数详解

2022-07-21 14:57:44 浏览数 (1)

接着上一篇pytest测试框架的分享

在上一篇主要讲解pytest的用例编写,但是我们在执行测试用例时,需要根据当前的测试情况执行不同类型的测试用例,所以我们需要了解相关命令参数来帮助我们更好的执行我们想执行的用例,那我们下面了解下常用的参数。

我们先新新建两个测试脚本分别是test_demo.py、test_sum.py

test_demo.py代码如下:

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest
class TestDemo:
    def test_demo(self):
        a = 1
        b = 1
        assert a == b
        
    def test_demo1(self):
        a = 1
        b = 2
        assert a != b

    def test_demo3(self):
        a = 1
        b = 2
        assert a != b

test_sum.py代码如下:

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest
class TestSum:

    def test_sum(self):
        a = 1
        b = 1
        assert a == b

    def test_sum1(self):
        a = 1
        b = 2
        assert a != b

    def test_sum2(self):
        a = 1
        b = 2
        assert a != b

1.执行所有测试用例

代码语言:javascript复制
pytest #pytest 执行目录下的所有测试用例,比如我们总共运行了6条测试用例

2.执行特定的测试文件

代码语言:javascript复制
pytest -v -s test_demo.py #-v 打印详细信息 -s指定测试文件,比如我们只执行了test_demo.py

3.执行特定某个测试函数(某个测试用例)

代码语言:javascript复制
pyest -v -s test_demo.py::TestDemo::test_demo #我们只执行Test_demo文件TestDemo类下test_demo测试方法

4.跳过某个测试用例不执行

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest

class TestDemo:
    @pytest.mark.skip(reason="no test") #在测试方法上装饰器@pytest.mark.skip
    def test_demo(self):
        a = 1
        b = 1
        assert a == b

    def test_demo1(self):
        a = 1
        b = 2
        assert a != b

    def test_demo3(self):
        a = 1
        b = 2
        assert a != b

被标记的测试方法不再被执行

5.符合某个条件跳过执行

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest

class TestDemo:
    @pytest.mark.skipif(1 == 2, reason="do not test")
    def test_demo(self):
        a = 1
        b = 1
        assert a == b

    @pytest.mark.skipif(1 == 1, reason="do not test") #第一个条件为true不执行
    def test_demo1(self):
        a = 1
        b = 2
        assert a != b

    def test_demo3(self):
        a = 1
        b = 2
        assert a != b

第二个测试方法条件为true不执行

6.执行某个标记的测试用例

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest

class TestDemo:
    @pytest.mark.smoke #通过@pytest.mark.xx标记测试方法
    def test_demo(self):
        a = 1
        b = 1
        assert a == b

    @pytest.mark.smoke
    def test_demo1(self):
        a = 1
        b = 2
        assert a != b

    @pytest.mark.web
    def test_demo3(self):
        a = 1
        b = 2
        assert a != b

#通过命令 pytest -v -s test_demo.py -m smoke 只执行标记了smoke的测试用例,一般用来区分用例,比如部分用用例冒烟,或者区分APP和Web等

只执行了其中两条,但是报了错误信息,因为我们没有注册标记到框架中

maker注册到框架有两种方法

第一种:在工程目录下新建pytest.ini,内容如下:

代码语言:javascript复制
[pytest]
markers =
    smoke: marks tests as smoke
    web: marks tests as web

再次执行不再报错

第二种:通过hook函数进行注册,在测试用例目录下,新建conftest.py文件,代码如下:

代码语言:javascript复制
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pytest
def pytest_configure(config):
    marker_list = ["smoke", "web"]
    for mark in marker_list:
        config.addinivalue_line(
            "markers", mark
        )

再次执行,效果如下:

7. 多线程执行测用例

代码语言:javascript复制
pytest -v -n 2 #开两个线程执行测试用例

需要安装pytes-xdist插件,执行效果如下:前面标记是执行的线程

上面就是常用的命令参数,更多的参数可以用过pytest --help查看帮助。明天更新关于pytest参数化使用。

0 人点赞