pytest参数

1、安装 pip install pytest

2、pytest默认规则

- 读取以test开头文件夹、文件,函数作为识别函数对象

- 控制台不显示打印

- pytest.main(['参数1','参数2'])

import pytest
def test_01():
    print("test01")

def test_02():
    print("test02")

if __name__ == '__main__':
    pytest.main()

- 如果加 -s 就能看见,测试案例print打印内容

pytest.main() 加参数必须是列表

import pytest
def test_01():
    print("test01")

def test_02():
    print("test02")

if __name__ == '__main__':
    pytest.main(['-s'])

 

 

 

 -v是详情

import pytest
def test_01():
    print("test01")

def test_02():
    print("test02")

if __name__ == '__main__':
    pytest.main(['-v'])

  

 

 

 - q 是简化报告

import pytest
def test_01():
    print("test01")

def test_02():
    print("test02")

if __name__ == '__main__':
    pytest.main(['-q'])

  

 -x :用例失败时立即停止测试,一共3条案例,第二条案例是失败,第三条案例停止执行

import pytest
def test_01():
    print("我是test01成功的案例")

def test_02():
    assert 1==0
    print("我是test02失败的案例")

def test_03():
    print("我是test03成功的案例")

if __name__ == '__main__':
    pytest.main(['-x'])

  

 --maxfail=num 用例运行时 允许的最大失败次数,超过则立即停止。原来应该执行3条案例,但 --maxfail=2,前2条失败了,第3条就不执行。

import pytest
class Testdemo(object):
    def test_01(self):
        assert 1 == 3
        print("我是test01成功的案例")

    def test_02(self):
        assert 1==0
        print("我是test02失败的案例")

    def test_03(self):
        assert  1==2
        print("我是test03成功的案例")

if __name__ == '__main__':
    pytest.main(["--maxfail=2"])

  

 

 

 -k :只运行与给定字符串表达式匹配的测试用例

   可以跟类名,可以跟方法名,可以跟类名 and not 方法名

跟方法名,只执行第2条案例

import pytest
def test_01():
    print("我是test01成功的案例")

def test_02():
    assert 1==0
    print("我是test02失败的案例")

def test_03():
    print("我是test03成功的案例")

if __name__ == '__main__':
    pytest.main(['-k test_02'])

  跟类名,3条案例全部执行

import pytest
class Testdemo(object):
    def test_01(self):
        print("我是test01成功的案例")

    def test_02(self):
        assert 1==0
        print("我是test02失败的案例")

    def test_03(self):
        print("我是test03成功的案例")

if __name__ == '__main__':
    pytest.main(['-k Testdemo'])

  类名 and not 方法名,执行整个类下面的所有案例,但test_03除外

   -k Testdemo and not test*  代表执行这个类下面全部案例,但以test开头除外
import pytest
class Testdemo(object):
    def test_01(self):
        print("我是test01成功的案例")

    def test_02(self):
        assert 1==0
        print("我是test02失败的案例")

    def test_03(self):
        print("我是test03成功的案例")

if __name__ == '__main__':
    pytest.main(['-k Testdemo and not test_03'])

  

参数:--tb=选项(选项:'auto', 'long', 'short', 'no', 'line', 'native')

用例运行失败时,展示错误的详细程度

import pytest
class Testdemo(object):
    def test_01(self):
        assert 1 == 3
        print("我是test01成功的案例")

    def test_02(self):
        assert 1==0
        print("我是test02失败的案例")

    def test_03(self):
        assert  1==2
        print("我是test03成功的案例")

if __name__ == '__main__':
    pytest.main(["-k test_01","--tb=no"])

  

 

-l 或--showlocals

用例运行失败时,打印相关的局部变量,pytest -l

import pytest
class Testdemo(object):
    def test_01(self):
        a=1
        b=2
        assert 6 == (a+b)
        print("我是test01成功的案例")

    def test_02(self):
        assert 1==0
        print("我是test02失败的案例")

    def test_03(self):
        assert  1==2
        print("我是test03成功的案例")

if __name__ == '__main__':
    pytest.main(["-k test_01","-l"])

  

 

 

 

--lf / --last-failed

只执行上次执行失败的测试

--ff / --failed-first

先执行完上次失败的测试后,再执行上次正常的测试

-- 运行指定的函数(使用两对冒号 :: 分隔)

pytest 模块名::类名::函数名

文件名 test_case_01.py 

class Testdemo2(object):
    @pytest.mark.parametrize("data", [("zhangsan")])
    @pytest.mark.usefixtures("fix_a")
    def test_01(self,data):
        print(data)

    @pytest.mark.parametrize("data", [("lisi")])
    def test_02(self,data):
        print(data)

if __name__ == '__main__':
    pytest.main(["-v", "test_case_01.py::Testdemo2::test_02"])

-h 查看 pytest 的所有选项

 

-r option 生成简略的指定需求的报告

option f E s x X P  p a A
Des failed error xkipped xfailed xpassed passed passed with output all except pP all

 

pytest --durations=10 获取执行最慢的10个测试用例

-vv 展示时间小于0.01s的用例

posted @ 2021-10-19 08:49  呆呆蒙蒙  阅读(145)  评论(0编辑  收藏  举报