注:关于pytest的基础要点个人已经总结好了,

一. 启动:

  在主函数main下启动:pytest.main(['-q','test_demo.py'])

  在命令行启动:pytest ./test_demo.py

  按标签启动:pytest -m demo(前提是在pytest.ini里配上了标签)

  在命令行启动多个:pytest test_demo1.py test_demo2.py

  指定目录启动:pytest.main("d:/pyse/pytest/")

  运行模块中指定用例:pytest.main("-v -s spec_001_modul_test.py::test_001_spec")

  运行类中指定用例:pytest.main("-v -s spec_001_modul_test.py::Test_Class::test_003_spec")

  运行模块中包含demo名称的用例:pytest.main("-v -s -k demo test_demo.py")

  运行当前文件夹匹配Test_Class的用例:pytest.main('-s -v -k Test_Class')

  运行规则:pytest 目录/文件::类名::函数名 或者 pytest 目录/文件::函数名

二. 启动参数说明:

  -s: 显示程序中的print/logging输出

  -v: 丰富信息模式, 输出更详细的用例执行信息

  -q: 安静模式, 不输出环境信息,只给结果

  -k:关键字匹配,用and区分:匹配范围(文件名、类名、函数名)

三. setup/teardown:

  setup和teardown函数:运行在每个测试方法的始末

  setup_class和teardown_class函数:运行在类的始末

四. pytest.ini:

  参数最好都放配置文件里,不用再main里放。每个参数见名知意啦~。由于编码问题,配置文件里不要出现中文。

[pytest]

addopts = -v --html=report/report.html
# addopts = -v --html=report/report.html --rerun=1 --count=1
# addopts = -v --alluredir reports/raw_report testpaths = ./
python_files = test_*.py
python_classes = Test*
python_functions = test_*
norecursedirs = .venv log report common data .pytest_cache markers =
l1:level-1 # by priority
l2:level-2
l3:level-3 smoke:smoke test # by test type
integrate:integrate test demo:for demo # by logic
login:login module
upload:upload module
review:review module

五. pytest-html:

  安装它

  用法:配置文件里添加报告参数:addopts = -s --html=./report.html,若要生成xml文件改一下就行

六. pytest-ordering:

  安装它

  用法:函数上面加@pytest.mark.run(order=n)

  优先级:order值全为正数或全为负数时, 值越小,优先级越高;正数和负数同时存在,正数优先级高

七. pytest-rerunfailures:

  安装它

  用法:命令行格式,pytest --reruns n。n为重试的次数;或添加失败重试参数,即:addopts = -s --reruns 2 --html=./report.html

  记住命令行是reruns,最好配置参数

八. fixture:

  功能:通常会被用于完成预置处理和重复操作。如在测试网站的功能时,每个测试用例都要登录和退出,利用fixture就可以只做一次;完成setup和teardown操作,处理数据库或文件的打开、关闭操作;将数据提前写入数据库或通过params返回给测试用例。强大吧!

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

  参数解释:

  "scope": 被标记方法的作用域;

  "function": 默认值,表示每个测试方法都要执行一次

  "class": 作用于整个类, 表示每个类的所有测试方法只运行一次

  "module": 作用于整个模块, 每个module的所有测试方法只运行一次.

  "session": 作用于整个session, 每次session只运行一次. ️(此方法慎用!!)

  params: list类型,默认None, 接收参数值,对于param里面的每个值,fixture都会去遍历执行一次.

  autouse: 是否自动运行,默认为false, 为true时此session中的所有测试函数都会调用fixture

  以上的所有参数也可以不传。

  把返回值作为参数使用:某个功能用例上面放@pytest.fixture(),然后该函数名可以作为参数放别的函数里。

  直接使用:@pytest.mark.usefixtures("before")

九. skipif:

  @pytest.mark.skipif(condition, reason=None)

  参数解释:

  condition: 跳过的条件,必传参数

  eason: 标注原因,必传参数

十. xfail:

  @pytest.mark.xfail(condition=None, reason=None, raises=None, run=True, strict=False)

  常用参数:

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

  reason:失败的原因,必传参数

十一. parametrize:

  @pytest.mark.parametrize(argnames,argvalues)

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

  常用参数:

  argnames:参数名

  argvalues:

  参数对应值,类型必须为list

  当参数为一个时,参数格式:[value]

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

十二. 其他:

  不需要在main里面写pytest.main,只要是符合命名,默认为pytest启动,都会自动调用pytest

  如果两个测试函数体里面的内容一样,只会输出一次结果。

  改了哪儿,直接运行后测的就是哪儿。需要重新定位鼠标,一般把改了的测试函数放最后。这条很重要,不然会以为pytest框架有bug,只是写这个框架的人脑回路很奇怪,但这样很方便。

十三. 断言

  即python的断言:

    assert xx:判断xx为真

    assert not xx:判断xx不为真

    assert a in b:判断b包含a

    assert a == b:判断a等于b

    assert a !=b,"判断a不等于b"(加上括号后面有说明)

作者留言

  测试行业里不思进取的人太多了,哪怕整理好他们也不会用,可能觉得没多大用处吧~,此篇花费很长时间整理的,禁止转载否则见底部声明哈!

  原创不易,如果觉得本文对你有帮助,记得打赏噢O(∩_∩)O,您的支持是我创作路上最大的动力~

 

pytest基本使用指南的更多相关文章

  1. ApacheCN Python 译文集 20211108 更新

    Think Python 中文第二版 第一章 编程之路 第二章 变量,表达式,语句 第三章 函数 第四章 案例学习:交互设计 第五章 条件循环 第六章 有返回值的函数 第七章 迭代 第八章 字符串 第 ...

  2. pytest 10 skip跳过测试用例

    pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者你希望失败的测试功能 skip意味着只有在满足某些条件时才希望测试通过,否则pytest应该跳过运行测试.常见事例时非win ...

  3. pytest八:skip 跳过用例

    这是一个快速指南,介绍如何在不同情况下跳过模块中的测试1.无条件地跳过模块中的所有测试:pytestmark = pytest.mark.skip("all tests still WIP& ...

  4. pytest文档12-skip跳过用例

    前言 pytest.mark.skip可以标记无法在某些平台上运行的测试功能,或者您希望失败的测试功能 skip意味着只有在满足某些条件时才希望测试通过,否则pytest应该跳过运行测试. 常见示例是 ...

  5. Python 最强 IDE 详细使用指南!-PyCharm

    PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家. ...

  6. Pytest权威教程12-跳过(Skip)及预期失败(xFail): 处理不能成功的测试用例

    目录 跳过(Skip)及预期失败(xFail): 处理不能成功的测试用例 Skip跳过用例 xFail:将测试函数标记为预期失败 Skip/xFail参数设置 返回: Pytest权威教程 跳过(Sk ...

  7. 【转载】Python 最强编辑器PyCharm详细使用指南!

    PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家.机 ...

  8. Python 最强 IDE 详细使用指南!

    PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家.作 ...

  9. pytest学习纪要123-针对经常用到的内容详实记录

    pytest123 本文主要参考:https://www.cnblogs.com/yoyoketang/tag/pytest 如有侵权,请站内联系我 目录 pytest123 1.setup和tear ...

  10. Sentry 开发者贡献指南 - 配置 PyCharm

    概述 如果您使用 PyCharm 进行开发,则需要配置一些内容才能运行和调试. 本文档描述了一些对 sentry 开发有用的配置 配置 Python 解释器:(确保它是 venv 解释器)例如 ~/v ...

随机推荐

  1. 记录一次从linux移动一个项目到windows遇到的问题

    前言 这几天在linux平台写了一个垃圾软件,浪费了我10多天的时间,感觉很垃圾,然后我想在windows平台打包这个软件,然后出现了一个项目中有相同文件名的问题,导致一些文件相互覆盖 问题描述 我把 ...

  2. Datawhale组队学习_Task03:详读西瓜书+南瓜书第4章

    第4章 决策树 4.1 基本流程 #输入:训练集D={${(x_1,y_1),(x_2,y_2),...,(x_m,y_m)}$}; #属性集A=${{a_1,a_2,...,a_d}}$. #过程: ...

  3. JavaEE Day11 BootStrap

    之前:前端知识 HTML+CSS+JavaScript           不好写 今日内容:前端的开发框架,内部定义了丰富的CSS样式和JS代码,只需要拿来用就行 会用即可 一.BootStrap ...

  4. 【每日一题】【上右下左模拟&while循环体条件不满足时】54.螺旋矩阵-211110/220204

    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 解答:while循环内部不满足也会继续走到结尾 import java.util.ArrayList; ...

  5. .NET 6 实现滑动验证码(四)、扩展类

    为了能够通过配置文件(appsettings.json)或通过代码进行背景图片与模板进行配置.可自定义资源类型.自定义验证规则,本节创建一些扩展类,用来实现这些功能. 上一节内容:NET 6 实现滑动 ...

  6. eclipse启动一个Springboot项目

    1.准备一个Springboot项目 2.配置好maven 注:本地的maven-repository默认路径是在系统盘的.m文件夹.如果想要修改可参考: eclipse修改maven仓库的位置_本本 ...

  7. [常用工具] PyAutoGUI使用教程

    PyAutoGUI使用教程 目录 PyAutoGUI使用教程 1 基础知识 2 一般函数 3 故障保险 4 鼠标函数 4.1 鼠标移动 4.2 鼠标拖动 4.3 鼠标单击 4.4 鼠标滚动 4.5 鼠 ...

  8. Spark详解(01) - Scala编程语言

    Spark详解(01) - Scala编程语言概述 Scala官网:https://www.scala-lang.org/ 什么是Scala 从英文的角度来讲,Scala并不是一个单词,而是Scala ...

  9. B站地区限制破解方法

    B站地区限制破解方法 当我们观看bilibili番剧时,经常会看到"仅限港澳台地区"的字样.那么,有没有一种方法,不需要挂梯子,就可以观看这些被限制的番剧呢? 本教程只适用于bil ...

  10. DevExpress 的LayoutControl控件导致资源无法释放的问题处理

    现象记录 前段时间同事发现我们的软件在加载指定的插件界面后,关闭后插件的界面资源不能释放, 资源管理器中不管内存,还是GDI对象等相关资源都不会下降. 问题代码 问题的代码大概如下. public v ...