| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> pytest学习笔记 -> 正文阅读 |
|
[开发测试]pytest学习笔记 |
目录 前言: ????????对于做自动化测试的同学,基本都知道python的单元测试框架unitest,因其为python的内置库,曝光度较高,使用较广泛,进而广为人知,?只要有点开发基础的同学,都可以比较容易上手学习并进行二次开发,那就有人就问了,为什么还要学习pytest呢??其实可以用一个简单的比喻来形容,为什么现在手机经常换呢?答案是显而易见,技术的更新,使得功能更强大、使用更便捷。接下来重点讲解一下自己在学习pytest过程中的一些学习心得。 附pytest官方文档:https://docs.pytest.org/en/latest/contents.html 1、虚拟环境准备????????????? 前提:windows10,python3.7(已安装并加入环境变量) ????????????? 进入命令行窗口执行如下指令: ????????????? python -m venv? F:/my_venv(安装目录) 2、安装pytest????????????? 2.1 pycharm内安装 ???????????????????? ?1、filesettingProjectProject Interpreter进入如下图页面,点击 + ? ? ? ? ? ? ? ? ? ? ? 2、在弹出的页面搜索pytest,并选择你想要的版本,点击 Install Package 按钮即可 ? ????????????????2.2 命令行安装 ???????????????????? 1) 打开命令行窗口,进入步骤 1安装的虚拟环境目录下的Scripts目录中 ???????????????????? 2) 执行activate ????????????????????3) pip3 install pytest==(版本号), 版本号可不填写 直接执行pip3 install pytest ???????????????????? 4)关闭虚拟环境, 执行deactivate 3、pytest使用约束????????????? 3.1 文件命名约束 ???????????????????? 测试文件名必须以test_开头、或者以_test.py结尾 ????????????? 3.2 测试类 ???????????????????? 以Test开头,并且无init方法,需要测试的类方法,以test_开头命名 ????????????? 3.3 测试函数 ???????????????????? 以test_开头命名 ?????? 4、执行方式????????????? 4.1 函数方式 ???????????????????? pytest.main("test_zhc.py") ????????????? 4.2 命令行方式 ???????????????????? pytest test_zhc.py 执行单个测试文件 ???????????????????? pytest F:/TEST?? 执行测试文件夹(批量测试文件) ?????? 5、pytest常用运行参数介绍????????????? pytest???? help 查看帮助文档 ??????????????????????????? -v??? 打印详细运行日志 ??????????????????????????? -s??? 打印代码里面print 输出语句 ??????????????????????????? -k??? 跳过过运行某个或者某些用例, ?????????????????????????????????? 荔枝 pytest -k '类名' ????????????????????????????????????????? ?pytest -k '方法名' ????????????????????????????????????????? ?pytest -k "类名 and not 方法名" //运行类里所有的方法,不包含某个方法 ??????????????????????????? -x 遇到用例失败立即停止运行 ????????????????????????? maxfail=[num]? 用例失败个数达到阀值停止运行, 荔枝:pytest maxfail=5 //用例失败数达到5个即停止运行 ??????????????????????????? -m [标记名] 运行做标记的用例, 配合@pytest.mark.[标记名] 使用 荔枝:pytest -m slow ????????????? 6、解决大批量执行测试case问题多进程????????????? 安装pytest-xdist ????????????? pytest test_zhc.py -n 6(进程数) ?????? 7、失败重跑机制(以下两种均可)????????????? 使用场景:一些系统性因素导致结果未匹配期望值,引起测试case的失败,比如网络波动、断电等,给与重试机制以避免偶发性结果 ????????????? 7.1 插件pytest-repeat ???????????????????? 命令行使用方法:pytest reruns=num1 count=num2 ???????????????????? 参数说明:reruns 指失败后重跑次数,被测case直到成功或者达到num1次数重跑停止, ?????????????????????????????????? ? count? 指重复执行次数(与失败与否无关) ???????????????????? 荔枝: pytest reruns=5 count=2 test_zhc.py ???????????????????? 说明:test_zhc.py 该测试脚本中的测试函数 或者方法 会重复执行count=2次, ??????????????????????????? ? 另外每次执行时,当某个函数或方法执行错误时,都会重试reruns=5次,即最坏的情况会重试2*(5+1),加1是指程序默认执行的一次 ???????????????????? 发散运用:结合前面学到的 -x 遇到用例失败立即停止运行,我们可以解决实际测试中遇到的偶发失败情景 ???????????????????? 荔枝:pytest -s count=100000 -x test_zhc.py??? 重复执行1W次直至失败结束 ???????????????????? 标记使用: ??????????????????????????? @pytest.mark.repeat(3) ??????????????????????????? 标记某个测试方法,使其重复运行 ????????????????7.2 插件pytest-rerunfailures ???????????????????? 命令行使用方法:pytest reruns 5 reruns-delay 10 -s ???????????????????? 装饰器使用方法:@pytest.mark.flaky(reruns=5, reruns_delay=10) ???????????????????? 参数介绍:? ????????????????????????????reruns 失败后重跑次数 ????????????????????????????reruns-delay 失败后等待重跑秒数 8、前置动作、后置动作功能(预处理功能)????????????? 8.1? ?setup_function()、teardown_function() ???????????????????? 函数级别,即执行一次测试函数,setup_function()函数都会执行,并先于测试函数执行, ???????????????????? 同理teardown_function()也会执行一次,并后于测试函数执行 ????????????? 8.2? setup_class()、teardown_class() ???????????????????? 类级别,即执行一次测试类,setup_class()函数都会执行,并先于测试类执行, ???????????????????? 同理teardown_class()也会执行一次,并后于测试类执行 ????????????? 8.3? ?setup_method()、teardown_method () ???????????????????? 类方法级别,即执行一次测试类方法,setup_method()函数都会执行,并先于测试类方法执行, ???????????????????? 同理teardown_method()也会执行一次,并后于测试类方法执行 ????????????? 8.4? setup_module()、teardown_module () ???????????????????? 模块级别,即执行一次模块,setup_module()函数都会执行,并先于模块执行, ???????????????????? 同理teardown_module()也会执行一次,并后于测试模块执行 ??? ? ? ? ? ? ? ? ? 9、pytest配置文件之pytest.ini?????? ?? 当测试文件比较多时,可以建立测试文件夹,并把需要的配置文件放于测试文件夹根目录,命名为pytest.ini(存放位置和文件命名可以自定义) ????????????? 命令行模式 pytest -c 配置文件? ????????????? 荔枝:pytest -c f:/Test/zhc.ini ????????????? 配置文件如下图所示: 10、测试报告????????????? 10.1 pytest-html ???????????????????? 需要额外安装 pip3 install pytest-html ???????????????????? 使用方法:pytest -s test_zhc.py html="f:/report.html" ????????????? 10.2 allure-pytest ???????????????????? 可与jenkins集成,报告内容更丰富多样 ???????????????????? 需要额外安装 pip3 install allure-pytest ???????????????????? 使用方法: ??????????????????????????? 生成测试数据:pytest -s test_zhc.py alluredir? ./result/ ??????????????????????????? 根据数据生成报告:allure generate ./result/ -o ./report/ ?????? 11、pytest之精髓fixture(个人观点)????????????? 介绍:fixture作为测试前的初始化操作,前置条件,参数传递等,比如数据库连接,测试数据准备 ????????????? 11.1 fixture的使用方式 ???????????????????? 定义fixture ??????????????????????????? @pytest.fixture(scope="function", params=None, autouse=False, ids=None, name=None) ??????????????????????????? 被装饰函数 ??????????????????????????? 荔枝: ?????????????????????????????????? scope:被装饰方法的作用阈,参数可选如下 ????????????????????????????????????????? function(默认值), 作用于测试方法,即每个测试方法都会运行一次fixture ????????????????????????????????????????? class, 作用于测试类,即每个测试类都会运行一次fixture ????????????????????????????????????????? module,作用于模块,即模块里所有的用例执行前会运行一次fixture ????????????????????????????????????????? session,作用于会话,多个py文件调用一次fixture ???????????????????? 使用fixture ????????????????????????? 1、函数或类里面方法直接传fixture的函数参数名称 ??????????????????????????2、使用装饰器@pytest.mark.usefixtures()修饰需要运行的用例 ? ? ? ? ??11.2、scope='function' ? ? ? ? ? 输出结果? ? ? ? ? ? ? ? 11.3、scope='class' 输出结果 ? ? ? ? ? ? ? ? ????????????????11.4 scope='module'输出结果? ? ? ? ? ? ? ? ? ? ? ? ????????????????11.5 scope='session' ? ????????11.6、params之参数传递 ???????????????????? 介绍:params参数类型为list,即列表中的每一个数据会当做用例数据输入, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?可用于批量输入数据的测试 ???????????????????? 使用方法:@pytest.fixture(params=[1, 3]), @pytest.fixture(params=[(1, 3), (4, 5)]) ???????????????????? 荔枝: ? ? ? ? ? ? ? ? ? ? ? 12、skipif跳过执行????????????? 介绍: 跳过被标识的测试函数。 使用场景:被测功能未开发完毕、测试平台环境不容许 ????????????? 使用方法:skipif(condition, reason) ???????????????????? 参数condition:跳过的原因,参数类型为str、bool,当为字符串时,reason可以不填写,当为bool时必须填写reason ???????????????????? 参数reason:跳过原因,类参数类型为str ????????????? 荔枝: 13、xfail标记为预期失败????????????? 介绍: 指定被标识的测试函数失败, 被标记的case,后续代码不会被执行。 使用场景:功能依赖,例如前置功能失败,影响后续功能 ????????????? 使用方法:xfail(condition=None, reason=None, raises=None, run=True, strict=False) ???????????????????? 参数condition:预期失败除法条件,参数类型为str、bool,当为字符串时,reason可以不填写,当为bool时必须填写reason: ???????????????????? 参数reason:失败原因,参数类型为str ???????????????????? 参数raises:具体阐释失败原因,raises可以指定具体的异常类,例如 ???????????????????? 参数run:默认为True, 当为False时,被标记的case不会被执行 ???????????????????? 参数strict:默认为False, 当为True时,保证测试为XPASS时,测试记录为FAILED ????????????? 荔枝: 14、parametrize????????????? 介绍:测试用例参数化,有点类似于fixture中的params参数。 使用场景:同一case,执行大批量测试数据 ???????????? 使用方法:parametrize(argnames, argvalues, indirect=False, ids=None, scope=None) ???????????????????? 常用参数: ??????????????????????????? argnames:参数名,参数类型为str, 单个参数"a", 多个参数 "a, b, c" ??????????????????????????? argvalues:参数值,参数类型为list, 单个参数[1], 多个参数[(1, 2, 3), (2, 3, 4)] ?列表长度决定测试方法运行的次数 ????????????? 荔枝: 15、统计代码覆盖率 pytest-cov????????????? 使用方法:pytest cov=参数1 cov-report=html? cov-config=参数2 ???????????????????? 参数1:被测文件路径 ???????????????????? 参数2: 配置文件, 默认为 .coveragerc, 使用举例:跳过某些测试文件, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 不统计覆盖率 ? ? ? ? ? ? ? ? ? ? 荔枝: ? |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 18:28:27- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |