当前位置: 首页 > article >正文

pytest基础学习

前言

pytest是单元测试框架,python当中比较流行的单元测试框架,一个是pytest,一个是unittest,用来做
自动化,无论是UI还是接口,主要是可以配合对应的测试工具,使其有精美的报告,丰富的断言和参数
化。unittest这个框架是官方库,pytest是在unittest框架基础上进行的进一步封装。pytest框架是可以
兼容运行unittest写的脚本的。

好处

  1. 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
  2. 能够支持简单的单元测试和复杂的功能测试
  3. 支持参数化
  4. 执行测试过程中可以将某些测试跳过(skip),或者对某些预期失败的case标记成失败
  5. 支持重复执行(rerun)失败的 case
  6. 支持运行由 nose, unittest 编写的测试 case
  7. 可生成 html 报告
  8. 方便的和持续集成工具 jenkins 集成
  9. 可支持执行部分用例
  10. 具有很多第三方插件,并且可以自定义扩展
    安装命令
    pip install pytest

查看request版本
pytest --version

pytest用例的设计原则
用Pytest写用例时候,一定要按照下面的规则去写,否则不符合规则的测试用例是不会执行的
文件名以 test_.py 文件和test.py
以 test
开头的函数
以 Test 开头的类,不能包含 init 方法
以 test_ 开头的类里面的方法
所有的包 pakege 必须要有 init.py 文件

pycharm设置执行用例配置
在这里插入图片描述
查看pytest命令行参数
在pycharm中的terminal面版中输入:pytest -h 或者pytest -help

1,执行当前文件夹下面的所有文件:
pytest 文件名/
2,执行具体的某一测试文件:
pytest 脚本名称.py
3,执行测试用例名称包含qq的所有用例
pytest -k qq test_1.py
4,执行测试用例名称不包含qq的所有用例
pytest -s -k “not qq” test_1.py
5,执行同时匹配不同的用例名称
pytest -s -k “wechat or webo” test_1.py

6,执行运行.py模块里面的某个函数
pytest test_mod.py::test_func
7,运行.py模块里面,测试类里面的某个方法
pytest test_mod.py::TestClass::test_method
8,遇到错误时停止测试
pytest -x test_class.py
9,简单打印,只打印测试用例的执行结果
pytest -q test_1.py
10,详细打印
pytest -v test_1.py
或者:pytest -s test_1.py

断言
pytest 里面断言实际上就是 python 里面的 assert 断言方法,常用的有以下几种
在这里插入图片描述
用例执行状态:
passed:测试通过
failed:断言失败
error:用例本身写的质量不行,本身代码报错(譬如:fixture不存在,fixture里面有报错)
xfail:预期失败,加了 @pytest.mark.xfail()

特殊的函数
模块级别:
setup_module:在每个模块执行前执行
teardown_module:在每个模块执行后执行
(有几个模块就有几对)
函数级别:
setup_function:在每个函数执行前执行
teardown_function:在每个函数执行后执行
(有几个函数就有几对)
类级别:
setup_class:在每个类执行前执行
teardown_class:在每个类执行后执行
(有几个类就有几对)
方法级别:
setup_method:在类里面的每个方法执行前执行
teardown_method:在类里面每个方法执行后执行
方法细化级别:
setup
setdown
(和方法级别一致)

跳过测试用例:
(跳过执行测试用例,有可选参数reason:跳过的原因,会在执行结果中打印)

@pytest.mark.skip
def test_wechat():
print('此测试用例不会被执行')

注意:condition需要返回True才会跳过

@pytest.mark.skipif(sys.platform == 'win32', reason="does not run on windows")
def test_function(self):
print("不能在window上运行")

参数化:
@pytest.mark.parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

常用插件:
1,失败重试:pip install pytest-rerunfailures
2,allure报告插件:pip install allure-pytest
3,多断言插件:pip install pytest-assume
4,html报告插件:pip install pytest-html
5,用例重复执行插件:pip install pytest-repeat

项目中的conftest.py文件
conftest.py配置fixture注意事项:
pytest会默认读取conftest.py里面的所有fixture
conftest.py 文件名称是固定的,不能改动
不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
测试用例文件中不需要手动import conftest.py,pytest会自动查找

fixture优势:
命名方式灵活,不局限于 setup 和teardown 这几个命名
conftest.py 配置里可以实现数据共享,不需要 import 就能自动找到fixture
scope=“module” 可以实现多个.py 跨文件共享前置
scope=“session” 以实现多个.py 跨文件使用一个 session 来完成多个用例

@pytest.fixture(scope="function", params=None, autouse=False, ids=None,
name=None)
def fixture_name():
print("fixture初始化的参数列表")

参数含义:
scope:可以理解成fixture的作用域,默认:function,还有class、module、package、session
四个【常用】
autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都
会自动调用该fixture
name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name


http://www.kler.cn/a/593570.html

相关文章:

  • 【北京迅为】iTOP-RK3568开发板OpenHarmony系统南向驱动开发UART接口运作机制
  • Python IP解析器 ip2region使用
  • P1540 [NOIP 2010 提高组] 机器翻译
  • cmake 之 CMakeLists.txt 中的函数是从哪里来的
  • 再学:ERC20-Permit2、SafeERC20方法 详解ERC721,如何铸造一个NFT以及IPFS的作用
  • Linux Vim 寄存器 | 从基础分类到高级应用
  • python学智能算法(八)|决策树
  • Deepseek结合企业数据挖掘平台能够给企业提升哪些效益?
  • 深入理解Python闭包与递归:原理、应用与实践
  • 【工具】huggingface 模型下载过程
  • 网络空间安全(37)获取webshell方法总结
  • RabbitMQ 集群降配
  • mysql-DELETE、DROP 和 TRUNCATE区别
  • Java protected 关键字详解及探究过程(详细、准确)
  • FastGPT 社区版快速部署指南
  • 计算机网络:(一)详细讲解互联网概述与组成 (附带图谱更好对比理解)
  • 第1章:云原生时代:容器技术的发展历程与核心价值
  • Oracle 数据库 HugePages 配置详解:提升性能的关键步骤
  • 图论——kruskal算法
  • 【Leetcode刷题随笔】206.反转链表