pytest 从百草园到三味书屋....

Posted android超级兵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytest 从百草园到三味书屋....相关的知识,希望对你有一定的参考价值。


底部会给出完整代码!

开发环境:

  • pytest 6.2.5
  • python 2.7.16
  • allure 2.14.0
  • PyCharm 2021.2.3
  • system mac

废话不多说,直接上干货!!

pytest简单认识:

pytest的默认规则

定义pytest时,包名,类名,默认必须以test开头.

先来看一个简单的例子!

执行结果为:

test_11.py ...                                                           [ 33%]
test_12.py ...                                                           [ 66%]
test_13.py ...                                                           [100%]

可以看出,默认执行是显示的进度

输出详细信息 [-s]

# 用于关闭捕捉信息, 从而输出打印信息
pytest.main(['-s'])


需要注意的是:

  • 执行成功用 . 表示
  • 执行失败用 F 表示

如果觉得这种方式不明显,可以采用:

显示具体测试用例信息[-v]

#T ODO -s 用于关闭捕捉信息, 从而输出打印信息
# TODO -v 用于显示具体的信息
pytest.main(['-s', '-v'])

简化测试用例信息[-q]

# TODO -q 简化输出信息
pytest.main(['-s', '-q'])


执行特定测试用例[-k]

# TODO -k 运行某个包含特定字符串的测试用例
pytest.main(['-s', '-v', '-k', 'b'])

test_13.py::test_function_b ======test_function !!!!!!!!b!!!!!!!!
PASSED

执行到失败的测试用例就终止[-x]

# TODO -x 只要执行到失败的测试用例就终止测试
pytest.main(['-x'])

执行某个特定用例

场景: test_demo1要执行test_demo2某个测试用例

现在是执行不到的…

# TODO 只执行某个特定用例
pytest.main(['-s', '.', '../test_demo2/test_21.py::test_function_01'])


还有一种简单粗暴的写法:用来执行所有的测试用例

# TODO 执行所有的测试用例
pytest.main(['-s', '..'])

测试用例失败%d个就结束[–maxfail=2]

# TODO 测试用例 失败2个就退出
pytest.main(['--maxfail=2'])


打标记[slow]

# TODO 打标记,只执行标记slow的测试用例
pytest.main(['-m', 'slow'])


注意这里的slow是随便写的,也可以写成其他的,例如这样:

pytest.main(['-m', 'abc'])


pytest最原始的测试报告[–junit-xml=./report/xxx.xml]

# TODO 生成最原始的测试报告
pytest.main(['--junit-xml=./report/最原始的测试报告.xml'])

单独执行某个用例

# TODO 单独执行某个用例
pytest.main(['-s', 'test_11.py'])


错误用例单独执行%d次[–reruns=2]

# TODO 失败用例执行2次
pytest.main(['-s', '--reruns=2', 'test_11.py'])

错误用例单独执行%d次,每次间隔%d秒[’–reruns=2’,’–reruns-delay=3’]

# TODO 失败用例执行2次 每次等待3秒
pytest.main(['-s', '--reruns=2', '--reruns-delay=3', 'test_11.py'])

函数中的 前置函数/后置函数 and 前置module/后置module

# TODO 测试用例最开始前执行
def setup_module():
    print("setup_module".format("*" * 20, "*" * 20, ))


# TODO 测试用例结束时执行
def teardown_module():
    print("teardown_module".format("*" * 20, "*" * 20, ))


# TODO 每个测试用例函数开始前执行
def setup_function():
    print("setup_function".format("-" * 20, "-" * 20, ))


# TODO 每个测试用例结束后执行
def teardown_function():
    print("teardown_function".format("-" * 20, "-" * 20, ))


# TODO 每个测试用例函数开始前执行 在setup_function() 之后执行
def setup():
    print("setup".format("+" * 20, "+" * 20, ))


# TODO 每个测试用例结束后执行 在 teardown_function() 之前执行
def teardown():
    print("teardown".format("+" * 20, "+" * 20, ))


def test_0():
    print("test0")


def test_1():
    print("test1")


def test_2():
    print("test2")


def test_3():
    print("test3")

运行结果为:

test_14.py ********************setup_module********************
--------------------setup_function--------------------
++++++++++++++++++++setup++++++++++++++++++++
test0
.++++++++++++++++++++teardown++++++++++++++++++++
--------------------teardown_function--------------------
--------------------setup_function--------------------
++++++++++++++++++++setup++++++++++++++++++++
test1
.++++++++++++++++++++teardown++++++++++++++++++++
--------------------teardown_function--------------------
--------------------setup_function--------------------
++++++++++++++++++++setup++++++++++++++++++++
test2
.++++++++++++++++++++teardown++++++++++++++++++++
--------------------teardown_function--------------------
--------------------setup_function--------------------
++++++++++++++++++++setup++++++++++++++++++++
test3
.++++++++++++++++++++teardown++++++++++++++++++++
--------------------teardown_function--------------------
********************teardown_module********************

这里都比较无脑,都是一些常规操作…细细品味一下就懂了!!

小结:

pytest说明
-s输出详细信息
-v显示具体测试用例
-q简化测试用例输出
-x执行到失败的测试用例就结束
-k执行特定的测试用例
-maxfail=2执行2条测试用例失败就结束
‘-m’ ‘slow’打标记
–junit-xml=./report/xxx.xml最原始的测试报告
–reruns=2错误用例单独执行2次
‘–reruns=2’, ‘–reruns-delay=3’错误用例单独执行2次,每次间隔3秒

pytest类中的操作

默认操作也是一样的

注意点:

  • 类名默认以Test开头
  • 方法名默认以test开头

这里说是默认以test开头,就证明这里可以修改,不要着急,一点点看,后面会介绍!

类中的前置函数/后置函数,and 前置module/后置module

测试代码:


class TestDemo31:
    # TODO 测试用例最开始前执行
    @staticmethod
    def setup_class():
        print("setup_class".format("*" * 20, "*" * 20, ))

    # TODO 测试用例结束时执行
    @staticmethod
    def teardown_class():
        print("teardown_module".format("*" * 20, "*" * 20, ))

    # TODO 每个测试用例函数开始前执行
    @staticmethod
    def setup_method():
        print("setup_method".format("-" * 20, "-" * 20, ))

    # TODO 每个测试用例结束后执行
    @staticmethod
    def teardown_method():
        print("teardown_method".format("-" * 20, "-" * 20, ))

    # TODO 每个测试用例函数开始前执行 在setup_function(self) 之后执行
    @staticmethod
    def setup():
        print("setup".format("+" * 20, "+" * 20, ))

    # TODO 每个测试用例结束后执行 在 teardown_function(self) 之前执行
    @staticmethod
    def teardown():
        print("teardown".format("+" * 20, "+" * 20, ))

    def test_01(self):
        print("测试数据1")

    def test_02(self):
        print("测试数据2")

    def test_03(self):
        print("测试数据3")

使用:

import pytest

if __name__ == '__main__':
    pytest.main(['-s', '-q', 'test_31.py'])

测试结果:

********************setup_class********************
--------------------setup_method--------------------
++++++++++++++++++++setup+++++++以上是关于pytest 从百草园到三味书屋....的主要内容,如果未能解决你的问题,请参考以下文章

pytest 接口自动化 从百草园到三味书屋...

android 图解 PhotoView,从‘百草园’到‘三味书屋’!

我想自学laraver,请诸位前辈给一些建议,谢谢

Java笔记-网络编程

爬虫实战零点书屋热门小说精选

python pytest片段