靠这套pytest接口自动化测试框架,击败99%的人

Pytest 的下载安装

1、Python3 使用 pip install -U pytest 安装

2、查看 pytest 版本信息 pytest --version 

3、pytest 用例的执行规则:

①测试文件以 test_xx.py 命名需要以 test_开头(或_test 结尾)

②测试类以 Test_开头,并且不能带有 init 方法

③测试函数或方法以 test_xx 开头总体上分为三个阶段:

1、编写测试用例

2、执行测试用例

3、输出测试报告

同时,我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取

软件测试视频教程观看处:

字节大佬教你逼自己如何在15天内掌握自动化测试(接口自动化/APP自动化/Web自动化/性能测试),内含项目实战

第一步:编写测试用例

pytest 执行时默认是执行指定路径下以test_开头或者以_test 结尾的文件里的测试类或者方法,默认是执行以 Test_开头的类和 test_开头的方法

1、首先创建 py 文件命名以 test_开始或者以_test 结尾

2、若是新建类,测试类需要以 Test_开头

3、测试用例(方法)需要以 test_开头

靠这套pytest接口自动化测试框架,击败99%的人_第1张图片

1.1 测试用例的优化

1.1.1 assert 断言(判断执行结果是否满足预期):

Pytest 最常用的断言一般有以下五种:

assert xx:判断 xx 为真assert not xx:判断 xx 不为真assert a in b:判断 b 包含 a assert a == b:判断 a 等于 b assert a !=b:判断 a 不等于 b

添加断言在对应的方法里面,做判断测试用例结果是否满足预期,示例如下:

靠这套pytest接口自动化测试框架,击败99%的人_第2张图片

执行结果如下:断言失败的结果会显示出来

1.1.2 断言优化

如果想要在失败的时候看到更详细的信息,可以在断言上添加说明,示例如下:

执行结果如下图,可以看到失败时断言的说明信息

靠这套pytest接口自动化测试框架,击败99%的人_第3张图片

第二步、测试用例的执行

2.1 使用命令行执行

cmd 窗口,然后执行 pytest 文件路径/测试文件名例如 pytest ./test_tt.py

如果当前路径已经是放测试用例文件的文件夹下,想要测试文件,则直接可以  输入pytest 测试文件名 即可:

靠这套pytest接口自动化测试框架,击败99%的人_第4张图片

如果只输入 pytest,则会默认执行当前文件夹下所有以 test_开头(或_test 结尾)的文件。

2.2 IDE(PyChram)执行

写法如截图所示,pytest.main()(参数以列表的形式给出,如截图)

执行当前文件所在路径下的文件,指定文件名则执行指定的文件,若没指定,执行所有 test_

开头或者_test 结尾的文件。

靠这套pytest接口自动化测试框架,击败99%的人_第5张图片

2.3 执行指定文件指定方法

2.3.1 命令行编写方式

pytest路径/文件名::类名::方法名例如

靠这套pytest接口自动化测试框架,击败99%的人_第6张图片

2.3.2 pycharm 编写方式

如果是用 pycharm 写法如图,与上面的命令行等价:

靠这套pytest接口自动化测试框架,击败99%的人_第7张图片

2.4 带参数执行

常用的 pytest 带参数执行:列举几种,其余扩展可以自行百度

2.4.1 pytest -q简化控制台的输出

不带参数执行结果:

靠这套pytest接口自动化测试框架,击败99%的人_第8张图片

带参数执行结果:

靠这套pytest接口自动化测试框架,击败99%的人_第9张图片

2.4.2 Pytest -v 输出用例更加详细的执行信息,比如用例所在文件和用例名称

添加参数前执行结果:

添加参数后执行结果:

2.4.3 pytest -k 执行用例中包含‘关键字’的用例

待执行用例如截图所示:

靠这套pytest接口自动化测试框架,击败99%的人_第10张图片

执行代码和结果如图:(关键字需要用双引号)

靠这套pytest接口自动化测试框架,击败99%的人_第11张图片

2.4.4 pytest -s 输出用例中的调试信息,比如 print 打印信息,如果不加参数则不输出

待执行的用例:

靠这套pytest接口自动化测试框架,击败99%的人_第12张图片

添加参数前执行结果:

添加参数后执行结果:

2.4.5 pytest -m执行‘标记’的内容,执行特定的测试用例,执行有相同标记的测试用例,添加标记的方法如下:

需执行测试用例:

靠这套pytest接口自动化测试框架,击败99%的人_第13张图片

执行代码和结果如下:

靠这套pytest接口自动化测试框架,击败99%的人_第14张图片

执行有相同标记的用例,可以用于指定需执行的测试用例。

2.4.6 pytest -x执行失败则停止执行,后面的用例不会被执行

待执行用例:

靠这套pytest接口自动化测试框架,击败99%的人_第15张图片

带参数执行结果:

靠这套pytest接口自动化测试框架,击败99%的人_第16张图片

2.4.7 pytest --maxfail=n执行失败 n 次之后停止执行,n 是执行失败的次数

假设 n = 2 执行上面的用例:由于失败只有一次所以用例会继续执行完,直到两次失败才停止执行

靠这套pytest接口自动化测试框架,击败99%的人_第17张图片

2.4.8 pytest --count=n 执行用例 n 次,n=2 就是执行两次

如下执行 test_01 两次:

靠这套pytest接口自动化测试框架,击败99%的人_第18张图片

2.4.9 pytest --lf (last failed)重新运行上次失败的用例,若没有失败的会全部跑

靠这套pytest接口自动化测试框架,击败99%的人_第19张图片

2.4.10 pytest --ff (failed first)重新运行所有用例,但首先运行上次失败的用例

靠这套pytest接口自动化测试框架,击败99%的人_第20张图片

2.5 优质功能介绍

2.5.1 跳过用例的执行

根据特定的条件,不执行标识的测试函数. 方法:

skipif(condition, reason=None) 参数:

condition:跳过的条件,必传参数reason:标注原因,必传参数

使用方法:

@pytest.mark.skipif(condition, reason="xxx") condition 条件为真时跳过

@pytest.mark.skip()

示例如下:

靠这套pytest接口自动化测试框架,击败99%的人_第21张图片

2.5.2 标记为预期失败的用例

标记测试函数为失败函数

方法:

xfail(condition=None, reason=None, raises=None, run=True, strict=False)

常用参数:

condition:预期失败的条件,必传参数reason:失败的原因,必传参数

使用方法:

@pytest.mark.xfail(condition, reason="xx")condition 为真则标记失败

在某种条件不满足的时候, 预期它是失败的, 就将它标记为预期失败, 若

condition 条件不满足则正常执行

示例:

不带参数:

靠这套pytest接口自动化测试框架,击败99%的人_第22张图片

condition 条件满足的时候:

靠这套pytest接口自动化测试框架,击败99%的人_第23张图片

condition 条件不满足的时候:

靠这套pytest接口自动化测试框架,击败99%的人_第24张图片

2.5.3 参数化

方法:

parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

常用参数:

argnames:参数名

argvalues:参数对应值,类型必须为 list 当参数为一个时格式:[value]

当 参 数 个 数 大 于 一 个 时 , 格 式 为 : [(param_value1,param_value2.....),(param_value1,param_value2 )]

使用方法:

@pytest.mark.parametrize(argnames,argvalues) 参数名,参数值@pytest.mark.parametrize("a",[3,6])单参数@pytest.mark.parametrize("a,b",[(1,2),(0,3)])多参数

参数值为 N 个,测试方法就会运行 N 次

示例:

单参数:

靠这套pytest接口自动化测试框架,击败99%的人_第25张图片

多参数:

靠这套pytest接口自动化测试框架,击败99%的人_第26张图片

2.5.4 执行标记的用例多次

首先安装 repeat:

pip install pytest-repeat

@pytest.mark.repeat(n)执行当前用例 n 次 然后再往下执行其他用例

示例:

靠这套pytest接口自动化测试框架,击败99%的人_第27张图片

2.5.5 调整用例的执行顺序

使用:

安 装 pip install pytest-ordering 在测试方法上加装饰器@pytest.mark.last--最后一个执行

@pytest.mark.run(order=1)---第几个执行

示例:

最后一个执行:

靠这套pytest接口自动化测试框架,击败99%的人_第28张图片

指定执行顺序:

靠这套pytest接口自动化测试框架,击败99%的人_第29张图片

2.5.6 自定义测试用例预置条件--pytest 精髓fixture

@pytest.fixture()(scope="function",params=None,autouse=False, ids=None, name=None)

调用时被优先执行 预处理或者重复操作scope:被标记方法的作用域

function" (default):作用于每个测试方法,每个 test 都运行一次

"class":作用于整个类,每个 class 的所有 test 只运行一次

"module":作用于整个模块,每个 module 的所有 test 只运行一次

"session:作用于整个 session(慎用),每个 session 只运行一次

params:(list 类型)提供参数数据,供调用标记方法的函数使用

autouse:是否自动运行,默认为 False 不运行,设置为 True 自动运行

若不为 True 则需要调用才会优先执行。

2.5.6.1 fixture 用法一

定义 fixture 与定义普通函数差不多,命名不要以 test 开头与用例区分开,fixture 有返回值, 没有返回值默认为 None。用例调用 fixture 返回值,直接就是把 fixture 的函数名称当做变量名称。

示例:

会优先于测试用例 test_01 执行

靠这套pytest接口自动化测试框架,击败99%的人_第30张图片

2.5.6.2 fixture 用法二

fixture 标记的函数可以应用于测试类外部,每次都会优先执行

靠这套pytest接口自动化测试框架,击败99%的人_第31张图片

2.5.6.3 fixture 用法三

传参数作为标识

靠这套pytest接口自动化测试框架,击败99%的人_第32张图片

2.5.6.4 使用多个fixture

如果用例需要用到多个fixture 的返回数据,fixture 也可以返回一个元组,list或字典,然后从里面取出对应数据。

靠这套pytest接口自动化测试框架,击败99%的人_第33张图片

也可以分成多个 fixture 在用例中传值多个 fixture 参数

2.5.6.5 fixture 作用范围

2.5.6.5.1 、function 每个方法执行之前执行一次

靠这套pytest接口自动化测试框架,击败99%的人_第34张图片

2.5.6.5.2 class 类执行开始时执行一次

靠这套pytest接口自动化测试框架,击败99%的人_第35张图片

2.5.6.5.3 module 在当前.py 脚本里面所有用例开始前只执行一次

靠这套pytest接口自动化测试框架,击败99%的人_第36张图片

2.5.6.5.4 session 级别是可以跨.py 模块调用的

也就是当我们有多个.py 文件的用例的时候, 如果多个用例只需调用一次fixture,那就可以设置为 scope="session"。

2.5.6.5.5 conftest.py 文件

新建 conftest.py 文件,名称固定,与运行的用例在同一个 package 下面,不用导入 pytest 会自动查找,文件里面可以单独管理一些预置的操作场景,在执行用例的时候就会预置执行。示例:

靠这套pytest接口自动化测试框架,击败99%的人_第37张图片

第三步、 生成测试报告

想要生成测试报告,需要先安装 pytest-html 安装命令

pip install pytest-html

3.1 使用命令行生成报告

靠这套pytest接口自动化测试框架,击败99%的人_第38张图片

--html=路径/文件名.html 不写路径就默认为当前路径

3.2 使用 PyCharm 生成报告

靠这套pytest接口自动化测试框架,击败99%的人_第39张图片

生成的报告大概是这样的:

靠这套pytest接口自动化测试框架,击败99%的人_第40张图片

3.3 高大上的测试报告

想要生成高大上的测试报告自行百度 Pytest+Allure,可以集成到 Jenkins,自动生成高大上的自动化测试报告,效果图大概是这样的:

靠这套pytest接口自动化测试框架,击败99%的人_第41张图片

3.4 生成 xml 报告

--junit-xml=路径/文件名.xml

靠这套pytest接口自动化测试框架,击败99%的人_第42张图片

效果大概是这样的:

靠这套pytest接口自动化测试框架,击败99%的人_第43张图片

扩展

输出覆盖率报告

pytest 可以输出覆盖率的 html 报告使用命令如下:

pytest -vv --cov=./ --cov-report=html 有可能遇到报错:

pytest: error: unrecognized arguments: --cov-report=html

? inifile: None

? rootdir: /Users/joe/workspace/platform/mgap-mendel/mgap-mendel 原因:

缺少 pytest cov 的包

解决方法

pip install pytest-cov 大概是这样的:

靠这套pytest接口自动化测试框架,击败99%的人_第44张图片

设置重复执行的执行范围

--repeat-scope

--repeat-scope 类似于 pytest fixture 的 scope 参数,--repeat-scope 也可以设置参数:session , module,class 或者 function

function 范围针对每个用例重复执行,再执行下一个用例

class 以 class 为用例集合单位,重复执行 class 里面的用例,再执行下一个module 以模块为单位,重复执行模块里面的用例,再执行下一个

session 重复整个测试会话,即所有收集的测试执行一次,然后所有这些测试再次执行等等

示例:如下 scope=function --count=2 以用例为单位执行

执行每个用例两次,如果是 class 则以类为单位执行,是执行类里面的用例重复执行

靠这套pytest接口自动化测试框架,击败99%的人_第45张图片

重复测试直到失败

将 pytest 的-x 选项与 pytest-repeat 结合使用,以强制测试运行器在第一次失败时停止。例如:

pytest --count=1000 -x test_tt.py

这样将执行 1000 次用例,直到失败就停止,执行时可以带多个参数,更多的东西需自己去探索。

配置文件

配置文件可以改变 pytest 框架的运行规则,比如可以改变 pytest 收集用例的规则,添加命令参数。

如下配置 addopts = -s --html=./report.html 执行 pytest 时就能自动生成报告修改

python_files = test_*.py python_classes = Test_* python_functions = test_*

内容就可以改变 pytest 收集用例的规则,比如修改 python_files = test_*.py check_*.py则执行 pytest 时以 check_*.py 开头的文件也可以自动执行。

靠这套pytest接口自动化测试框架,击败99%的人_第46张图片

使用配置文件的方法,在项目根目录下新建 pytest.ini 文件,然后自行配置参数,常用的如下:

[pytest]

# 命令行参数addopts = -s # 搜索文件名

python_files = test_*.py # 搜索的类名python_classes = Test_* #搜索的函数名

python_functions = test_*

setup 与 teardown 函数

Pytest 是 unittest 的扩展,也可以实现 setup(开始时执行一次)和 teardown

(结束时执行一次)简单提及,详细内容可自行百度。

Pytest 支持 setup/teardown,但是更推荐使用 pytest.fixture

总结 

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

你可能感兴趣的:(软件测试,自动化测试,职场和发展,业务测试,测试用例,pytest,测试工具)