Pytest基本用法

 我来答
清宁时光17
2022-07-06 · TA获得超过1.4万个赞
知道大有可为答主
回答量:7107
采纳率:100%
帮助的人:41万
展开全部
1、pytest的规则:

①pytest支持 pip安装。

> pip install pytest

②即测试文件和测试函数必须以“test”开头。这也是在执行

“pytest”命令时并没有指定测试文件也可以执行 test_sample.py文件的原因,因为该文件名

以“test”开头。

③通过 main()方法执行测试用例呢?当然可以,pytest同样提供了

main()方法。

import pytest

def inc(x):

return x + 1

def test_answer():

assert inc(3) == 5

if __name__ == '__main__':

pytest.main()

2、基本用法:

①Fixture通常用来对测试方法、测试函数、测试类和整个测试文件进行初始化或还原测试环境。

主要用到模块级别和函数级别的 Fixture。

 setup_module/teardown_module:在当前文件中,在所有测试用例执行之前与之后

执行。

 setup_function/teardown_function:在每个测试函数之前与之后执行。

 setup/teardown:在每个测试函数之前与之后执行。这两个方法同样可以作用于

类方法

主要用到类级别和方法级别的 Fixture。

 setup_class/teardown_class:在当前测试类的开始与结束时执行。

 setup_method/teardown_method:在每个测试方法开始与结束时执行。

 setup/teardown:在每个测试方法开始与结束时执行,同样可以作用于测试函数。

运行结果

②pytest是支持使用测试类的,同样必须以“Test”开头,注意首字母大写。

③调用顺序如下:setup_module>setup_class>setup_function>setup_method>setup>teardown>teardown_method>teardown_function>teardown_class>teardown_module

#coding:utf-8

import pytest

def multiply(a,b):

    return a*b

#-------------------Fixture------------

def setup_module(module):

    print("\nsetup_module,只执行一次,当有多个测试类的时候使用")

def teardown_module(module):

    print("\nteardown_module,只执行一次,当有多个测试类的时候使用")

def setup_function(function):

    print("\nsetup_function,在每个测试函数之前执行。")

def teardown_function(function):

    print("\nteardown_function,在每个测试函数之后执行。")

def setup():

    print("setup------每个测试方式都执行一次----------->")

def teardown():

    print("teardown-----每个测试方式都执行一次--------->")

def test_multiply_3_4():

    print('test_numbers_3_4')

    assert multiply(3,4) == 12

def test_multiply_2_3():

    print('test_strings_2_3')

    assert multiply(2,3) == 6

class TestPytest1(object):

    @classmethod

    def setup_class(cls):

        print("\nsetup_class,只执行一次")

    @classmethod

    def teardown_class(cls):

        print("\nteardown_class,只执行一次")

    def setup_method(self):

        print("\nsetup_method,每个测试方法都执行一次")

    def teardown_method(self):

        print("\nteardown_method,每个测试方式都执行一次")

    def setup(self):

        print("setup-----每个测试方式都执行一次------------>>")

    def teardown(self):

        print("teardown----每个测试方式都执行一次---------->>")

    def test_numbers_5_6(self):

        print('test_numbers_5_6')

        assert multiply(5,6) == 30

    def test_numbers_6_6(self):

        print('test_numbers_6_6')

        assert multiply(6,6) == 36

if __name__ == "__main__":

    pytest.main()

3、参数化:

当一组测试用例有固定的测试数据时,就可以通过参数化的方式简化测试用例的编写。

pytest本身是支持参数化的,不需要额外安装插件。

#pytest参数化

@pytest.mark.parametrize(

    "base,exponent,expected",

    [(2,2,4),

    (2,3,8),

    (1,9,1),

    (0,9,0)],

    ids=["case1","case2","case3","case4"]

)

def test_pow(base,exponent,expected):

    assert math.pow(base,exponent) == expected

if __name__ == "__main__":

    pytest.main()

4、运行测试:

“-s”参数用于关闭捕捉,从而从控制台输出打印信息;

“-v”参数用于增加测试用例冗长,打印详细的日志信息,方便定位问题。

1.运行名称中包含某字符串的测试用例

> pytest -k add test_assert.py

test_assert.py文件中,我们写了很多测试用例,其中有 4条是关于 add()功能的,并且在测试用例的名称上包含了“add”字符串,因此这里可以通过“-k”来指定在名称中包含“add”的测试用例。

pytest -k "类名"

pytest -k '方法名'

pytest -k ’类名 and not 方法名‘#运行类里面所有的方法,不包含某个方法

2.减少测试的运行冗长

> pytest -q test_assert.py

“-q”用来减少测试运行的冗长;也可以使用“--quiet”代替。

3.如果出现一条测试用例失败,则退出测试

> pytest -x test_fail.py

这在测试用例的调试阶段是有用的,当出现一条失败的测试用例时,应该先通过调试让这条测试用例运行通过,而不是继续执行后面的测试用例。

4.用例失败个数达到阈值停止运行。具体用法:

>pytest --maxfail=[num]

5.运行测试目录

> pytest ./test_dir

测试目录既可以指定相对路径(如 ./test_dir),也可以指定绝对路(D:\pytest\test_dir)

6.指定特定类或方法执行

> pytest test_fixtures_02.py::TestMultiply::test_numbers_5_6

这里指定运行 test_fixtures_02.py文件中 TestMultiply类下的 test_numbers_5_6()方法,文件名、类名和方法名之间用“::”符号分隔。

7.通过 main()方法运行测试

import pytest

if __name__ == '__main__':

pytest.main(['-s', './test_dir'])

创建 run_tests.py文件,在文件中通过数组指定参数,每个参数为数组中的一个元素。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式