问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Pytest基本用法

发布网友 发布时间:2023-04-11 10:58

我来回答

1个回答

热心网友 时间:2023-05-24 01:14

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_mole/teardown_mole:在当前文件中,在所有测试用例执行之前与之后

执行。

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

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

类方法

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

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

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

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

运行结果

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

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

#coding:utf-8

import pytest

def multiply(a,b):

    return a*b

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

def setup_mole(mole):

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

def teardown_mole(mole):

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

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文件,在文件中通过数组指定参数,每个参数为数组中的一个元素。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
女生多大后可以不在长身高? 如何不用软件把手机投屏到电脑上手机屏幕怎样投放到电脑上 战时拒绝、故意延误军事订货罪既遂的处罚? 战时故意延误军事订货罪处罚标准 名师1+1导读方案:汤姆·索亚历险记目录 三星sm-g7200打开微信慢,无法正常收看,网速不慢。 笔记本电脑如何调亮屏幕亮度 大伙说说洗衣机要不要带烘干好 热烘干洗衣机怎么样 ef英语哪个好 pytest 框架环境搭建 pytest之安装,导入相关依赖库 一个手机如何登两个? 一个手机如何登录两个微信一个手机上如何同时登陆两个 怎样清洗塑料水杯内壁 如何清洗塑料水杯内壁 水杯里有塑料怎么洗掉(塑料水杯里面的水垢怎么洗) 塑料水杯里水垢怎么去除(塑料水杯里面的污垢怎么样去除) 塑料杯子内壁污垢怎么去除塑料水杯污垢怎么洗掉 塑料杯内壁很污如何去掉 繦葆的解释 家里墙上贴的壁纸会不会受潮或出现其它问题 装修时要不要贴墙纸?贴墙纸的优缺点分别是什么 咖啡店培训计划书的开场应该怎么写呢 中餐厅服务员培训计划 抖音上佰花坊一套2000是真的吗 商品的平均价格变动幅度怎么算 夜来香移栽枯萎怎么救活? 我家的夜来香很久了都不怎么生长,3个月了还这么点大,新叶少,还发 夜来香买来没带土自己挖土种上了现在叶子有点黄能活吗 怎么让QQ视频不显示? 前后端分离怎么启动pytest测试框架 『德不孤』Pytest框架 — 4.pytest.ini文件和用例执行的顺序 pip下载不了pytest 从电影上截图怎么才能提取高清晰图片呢? 笔记本电脑用了9年后屏幕会伤眼睛吗? ORACLE分页查询SQL语句 古剑情韵的介绍 古剑奇谭结局动画的配乐是什么? 如何给应用改名 写意良缘小说txt全集免费下载 重生之绣锦如意_by长空映雪_txt全文阅读,百度网盘免费下载 《Dark Moon》长空映雪电子书txt全集下载 《安宁》长空映雪txt全集下载 强生沐浴露的缺点 马年的姓宋男孩取什么名字好听? 银绍杰名字好吗 植绍杰姓名评分标准表 专升本补报名是什么意思 专升本补录是看专业还是总分 专升本补录会被顶替吗