pytest接口测试自动化框架

2023-05-16

目录

pytest简介及安装

pytest的使用规则

pytest运行方式

主函数方式

命令行方式

跳过、标记及预期失败特殊场景处理

pytest前后置、夹具

pytest高级用法fixture

pytest接口断言

pytest结合allure-pytest生成allure测试报告


pytest简介及安装

        谈起用例管理框架:python中的unittest、pytest;java中的testng 、junit都是比较熟悉的,本篇文章从安装到使用到结合插件多样化等层面来学习和介绍pytest这个自动化测试框架。

        使用pytest来作为我们的用例管理框架,自然是因为它存在很多优势,总的来说就是:简单灵活,容易上手、支持参数化,如下列出:

        1. 能够支持简单的单元测试和复杂的功能测试,它可以和所以的自动化测试工具selenium、、appium结合实现web自动化、接口自动化(pytest+requests)以及app自动化

        2. 跳过用例以及失败用例重跑,测试用例的skip和xfail处理

        3. 结合allure生成美观的测试报告

        4. 和jenkins持续集成

        5. 有很多的强大的插件

                pytest-html 用于生成html测试报告

                pytest-xdist 多线程运行

                pytest-ordering 改变测试用例的执行顺序

                pytest-rerunfailures 失败用例重跑

                allure-pytest 生成allure测试报告

                pytest-selenium 集成selenium

        我们一般实际项目开发当中都会使用requrement.txt文件保存插件名称,然后通过pip install -r requirements.txt进行安装所以插件。

        这么好用的框架,安装是第一步,我们使用以下命令进行安装。

##安装
pip install pytest 
##查看版本号
pytest --version

pytest的使用规则

        安装完成,就可以使用该框架来帮助我们进行更高效率的测试,在测试前,我们必须明白使用该框架要遵循的一些规则:

  • py文件名必须以test_开头或者_test结尾
  • 类名必须以Test开头
  • 测试用例(类内的方法)/函数名(类外)必须以test_开头

        只有遵循这些规则,我们编写的用例pytest才能认识。才能更好的发挥它的作用:发现测试用例、执行测试用例、判断测试结果、生成测试报告。

pytest运行方式

        pytest的运行方式有两种:主函数方式和命令行方式。

主函数方式

if_name_ == '_main_':
    pytest.main(['-vs'])

        这种方式运行,有一些命令需要知道

                -v 输出更加详情的运行信息

                -s 输出调试信息

                -n=数字 多线程运行

                --reruns=数字 失败用例重新运行

                --html=./report.html 生成html报告

命令行方式

  • 运行包: pytest (pytest会自动检索当前目录下所有符合规则的测试用例)
  • 运行一个模块:pytest -vs test.py
  • 只执行某一条测试用例:pytest 目录/模块.py::类名::用例名

        使用命令行方式运行测试用例,也可以添加相应的参数,

                pytest --help: 获取所有参数列表

                -x: 用例一旦失败(fail/error),就立刻停止

                -m: 标记用例

                -k: 执行包含某个关键字的测试用例

                -v: 打印详细日志

                -s 打印输出日志(一般-vs一块使用)

                --collect-only:(测试平台,pytest 自动导入功能)

这些参数也不需要背过,但是要有个印象,需要的时候再进行查找,来辅助我们测试。

跳过、标记及预期失败特殊场景处理

当我们需要跳过一些测试用例时,可以这么操作:

  • ship: 始终跳过该用例
    • 方式1: @pytest.mark.skp(reason="代码没有实现")
    • 方式2:在测试用代码中添加判断的语句def test_demo(): if not login(): pytest.skip("未登录无法运行该用例")
  • skipif: 遇到特定情况跳过该测试用例,需要给定条件@pytest.mark.skipif(条件="", reason="打印提示信息内容")

当然需要标记一些用例的场景也很多:

  • 场景:只执行符合要求的某一部分用例,把项目分为多个模块,然后指定模块名称执行
  • 解决:在测试用例的上方加上pytest装饰器:@pytest.mark.标签名
  • 执行 -m 标记自定义的相关用例
    • pytest -s test_mark.py -m=标签名
    • pytest -s test_mark.py -m 标签名
    • pytest -s test_mark.py -m "not 标签名" (not:逻辑运算,表示不是标签名的都去执行

xfail: 遇到特殊情况,产生一个“期望失败”输出。

pytest前后置、夹具

        pytest可以实现前后置的效果。

        setup/teardown 在每个用例之前和之后执行一次

        setup_class/teardown_class 在每个类之前和之后执行一次

也可以实现部分用例的前置:

        @pytest.fixtrue(scope="作用域",params="数据驱动",autouse="自动执行",ids="自定义参数名字", name="重命名")

        作用域:function(默认)、class、module、package/session

        params :参数化( 支持,列表,元祖,字典列表,字典元祖)

        autouse=True :自动使用,默认False

        ids:当使用params参数化时 ,给每一个值设置一个交量名

        name:给表示的是被@pytest fixture标记的方法取一个别名

pytest高级用法fixture

1. fixture 作用

        Fixture是在测试函数运行前后,由pytest执行的外壳函数,代码可以定制,满足多变的测试需求,功能包括:

        定于传入测试中的数据集

        配置测试前系统的初始状态

        为批量测试提供数据源等

Fixture是pytest用于将测试前后进行预备,清理工作的代码分类核心测试逻辑的一种机制

2.  fixture用法

        类似setup teardown功能,但比setup teardown更灵活

        直接通过函数名调用或者装饰去@pytest.mark.usefixtures('test1')

        允许使用多个Fixture

        使用autouse自动应用,如果由返回值,需要穿fixture函数名

        作用域 session>module>class>function

3.  pytest yield

        以上fixture记录的仅仅是setup,即测试用例运行前的操作,如果需要加上teardown的操作,需要在fixture函数中加入 yield

pytest接口断言

assert 'access_token' in rep.json() and 1==1

pytest结合allure-pytest生成allure测试报告

1. 官网下载allure:https://github.com/allure-framework/allure2/releases

放到没有中文路径下,然后把bin目录配置到环境变量的path里面

配置完成,allure --version 可查看版本

2. 重启pycharm,通过allure --version 验证;安装allure-pytest

3. 执行命令

  • 生成临时的json文件的报告 在pytest.ini里加命令 addopts = -vs --alluredir ./temp
  • 通过临时的json文件生成allure报告 在main函数里 os.system("allure generate ./reports -clean")

4.allure报告可进行各种美化和定制

以上是学习记录,持续加更...今天好热,喝了芒果蛋蜜汁~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pytest接口测试自动化框架 的相关文章

  • 禁用特定 pytest 标记上的自动使用装置

    是否可以阻止执行 功能范围 的装置autouse True仅在特定标记上 我将以下固定装置设置为自动使用 以便自动模拟所有传出请求 pytest fixture autouse True def no requests monkeypatc
  • Pytest不收集静态方法

    我有一个测试类 其中包含一些静态方法和普通方法 问题是pytest不收集静态方法 我在文档中找不到与此相关的任何内容 我怎样才能让它也收集静态方法 class TestFoo object staticmethod def test bar
  • 如何使用 xdist 和 django_coverage_plugin 并行 pytest 运行覆盖率报告

    使用以下设置 计算出的覆盖率小于使用没有并行化的单线程的覆盖率 Coverage 仅在项目根目录中创建 1 个覆盖文件 我预计这就是问题所在 我无法确定我做错了什么 报告的覆盖范围比我简单地运行要少coverage m pytest 在单线
  • Pytest 不选取类内的测试方法

    一直使用Pythonunittest2 并且刚刚开始迁移到pytest 当然 我试图进行比较 但我无法弄清楚的一件事是 Question为什么 Pytest 不选择 测试 类中定义的测试方法 什么对我有用 login test py imp
  • pytest从不同的测试文件独立导入相同的模块

    以下主题模块包含两个函数 其中之一操作全局变量 mod py def global setter global x x 123 print setter x x def global getter print getter x x 每个功能
  • 即使有标记,pytest-django 也不允许数据库访问

    我很难找出我的设置出了什么问题 我正在尝试测试登录视图 无论我尝试什么 我都会得到 Database access not allowed use the django db mark or the db or transactional
  • 使用 unittest.mock 在 Python 中模拟 os.remove

    我该如何嘲笑os remove with unittest mock 我的尝试 使用pytest def test patch remove with patch os remove remove foo 给出错误 remove foo E
  • 如何针对不同版本的 python 运行 py.test?

    是否可以运行py test使用不带插件的不同版本的python 例如xdist or tox 最简单的方法是直接运行 pytest 模块 m 例如 python2 6 m pytest 请注意 您必须安装 pytest那个版本Python
  • 是否可以在 pytest_generate_tests() 中使用固定装置?

    我有一些固定装置conftest py在实际测试功能中运行良好 但是 我想使用参数化一些测试pytest generate tests 基于其中一些装置的数据 我想做的 简化 conftest py my fixture returns a
  • 测试 post 请求时 Django 消息中间件问题

    我正在尝试测试一个 UpdateView 它将一条消息添加到重定向的成功页面 看来我的问题来自messages因为 pytest 返回 django contrib messages api MessageFailure 如果不安装 dja
  • 如何在“pytest”框架中的固定装置中的“拆卸”中使用测试结果

    我正在尝试使用测试结果或状态来拆卸夹具 但是如果不使用 pytest 框架中的关键字 yield 我将无法找到代码 import pytest import requests pytest fixture def update result
  • 如何在 pytest 中仅运行未标记的测试

    我的 python 测试代码中有几个标记 pytest mark slowtest pytest mark webtest pytest mark stagingtest 我可以使用标记有选择地运行测试 例如pytest m slowtes
  • pytest 固定装置 - 获取值并避免错误“直接调用固定装置'X'”

    我已将 pytest 更新到 4 3 0 现在我需要重新编写测试代码 因为不推荐直接调用固定装置 我对 unittest TestCase 中使用的固定装置有疑问 如何获取从固定装置返回的值而不是对函数本身的引用 例子 pytest fix
  • 参数化测试也取决于 pytest 中的参数化值

    我有一个测试 我有一个设置方法 应该收到一个dataset和一个测试函数 应该为每个运行data in dataset 基本上我需要类似的东西 datasetA data1 a data2 a data3 a datasetB data1
  • 自定义 pytest junitxml 失败报告

    我正在尝试内省测试失败并将附加数据包含到 junit xml 测试报告中 具体来说 这是对外部产品的一套功能测试 我想将产品的日志包含到故障报告中 使用找到的方法here https stackoverflow com questions
  • 如何从视图中删除单元测试的“@oidc.login_required”?

    I use 烧瓶样机 questions tagged flask oidc用于用户登录和pytest questions tagged pytest供测试用 对于单元测试 我想 删除 oidc require login 我怎样才能做到这
  • 模拟导入失败

    我该如何制作import pkg失败moduleA py 我可以打补丁pkg如果从中导入某些内容则会失败 否则不会失败 test py import os import moduleA from unittest mock import p
  • 如何访问 pytest 夹具中的所有标记?

    我正在使用 pytest 我想用标记来标记我的测试 这些标记将指定固定装置要在驱动程序中加载哪个页面 这可以轻松地与行为上下文对象一起使用 但我找不到如何使用 pytest 来做到这一点 以这段代码为例 import pytest pyte
  • Pytest - 如何将参数传递给 setup_class?

    我有一些代码 如下所示 我得到了too few args当我运行它时出错 我没有打电话setup class明确地 所以不确定如何向它传递任何参数 我尝试用以下方法装饰该方法 classmethod 但仍然看到相同的错误 我看到的错误是这样
  • Pytest 插件:覆盖 pytest_runtest_call 和朋友

    我正在为我的一个项目使用 pytest 开发一个测试套件 由于项目的性质 我需要创建一个 Pytest 插件来控制测试的运行方式 它们不是在本地运行 而是发送到不同的进程来运行 我知道关于xdist但我认为这并不能解决我的问题 我一直在通过

随机推荐

  • 【华为机考】专题突破 第二周:前缀和与差分 1109

    刷题顺序参考于 2023华为机考刷题指南 xff1a 八周机考速通车 前言 前缀和是指某序列的前n项和 xff0c 可以把它理解为数学上的数列的前n项和 xff0c 而差分可以看成前缀和的逆运算 合理的使用前缀和与差分 xff0c 可以将某
  • ROS学习和树莓派小车遇到问题汇总

    垃圾问题汇总记录 这里写目录标题 垃圾问题汇总记录我的小车配置中间遇到的问题汇总问题 xff1a VM虚拟机突然卡死问题 xff1a Error opening serial could not open port dev rikibase
  • ROS官网使用方式以及问题?

    Rviz中官网的使用 这里写目录标题 Rviz中官网的使用前言 xff08 希望瞄到这篇文章的大佬能注意一下 xff09 各种自带变量的官网查询方式一些普通消息类型的查询 xff1a Rviz等工具中的变量查询 xff1a 前言 xff08
  • automake自动编译工具

    automake自动编译生成makefile文件 xff0c 使用automake xff0c 程序开发人员只需要写简单的宏文件 xff0c 生成configure xff0c 再生成Makefile in xff0c 最终生成一个惯例的m
  • ROS中TF广播和监听个人理解及消息查找

    ROS学习古月居TF使用总结 目录 ROS学习古月居TF使用总结大佬链接总代码目录The Code of TFboardcastThe Code of TFlistenerThe Code of launch 广播和监听者的使用总结广播的创
  • Latex自动化学报模板学习和问题解决总结

    根据自动化学报模板的自己摸索 目录 根据自动化学报模板的自己摸索1 前言2 模板内部文件简介3 生成自己的模板4 内部代码理解关于aas cls和aas cfg文件整个模板固定结构 5 编译时有用的模板双栏显示用的小表格插入小图片 6 遇到
  • SLAM算法总结1

    目录 前言旋转矩阵 xff0c 旋转向量 xff0c 四元数李群李代数BCH公式非线性最小二乘一阶和二阶梯度法一阶梯度法二阶梯度法 xff08 牛顿法 xff09 高斯牛顿法代码实现手写 xff08 片段 xff09 用Ceres实现 xf
  • ROS下使用串口发送数据

    ROS下使用串口发送数据 span class token macro property span class token directive keyword include span span class token string lt
  • 新手如何使用postman(新手使用,简单明了)

    如何使用postman 一 了解postman 1 什么是postman xff1f 软件测试用来做接口测试的工具 2 如何下载postman https www getpostman com xff08 官方下载 xff09 链接 xff
  • 字符串的截取、分割,截取指定字符前面(后面)所有字符

    关于字符串截取问题 xff0c 从网上搜到总结一下 xff1a 已知一个字符串 xff0c 截取第一个指定字符后面所有字符 首先得知道indexof 34 34 的用法 xff0c 例如String i 61 abcdefg xff0c 那
  • [资料分享] 好赢60A无刷电调设置说明书【详细】

    完全针对车模而设计的全新程序算法 xff0c 具有优异的启动效果 加速性能 刹车性能及线性度 xff1b 支持所有无感 xff08 即无霍尔传感器 xff09 无刷电机 xff1b 高品质用料 xff0c 具有强大的耐电流能力 xff1b
  • 单片机学习笔记 —— 串口通信原理

    一 串口通信电路 电路图 xff1a 说明 xff1a 当RXD TXD为低电平时 xff0c 对应的led灯会亮起 二 串口通信控制寄存器 下图为80C51串行口的结构 xff1a SCON serial Control Register
  • 四种方法计算字符串的长度

    在这里我提供四种方法计算字符串的长度 1 使用递归函数 2 数数 xff0c 从第一个字符开始数数 xff0c 没遇到一个字符 xff0c 长度加一 xff0c 直到遇到 34 0 34 停止数数 3 使用strlen函数 xff0c 使用
  • 汉诺塔问题—C语言实现

    一 题目描述 相传在古印度圣庙中 xff0c 有一种被称为汉诺塔 Hanoi 的游戏 该游戏是在一块铜板装置上 xff0c 有三根杆 编号A B C xff0c 在A杆自下而上 由大到小按顺序放置64个金盘 如下图 游戏的目标 把A杆上的金
  • linux三大剑客

    awk是一种很棒的语言 xff0c 适合文本处理和报表生成 使用方法 awk pattern 43 action filenames 尽管操作可能会很复杂 xff0c 但是语法总是这样 xff0c 其中pattern表示AWK再数据中查找的
  • 数据结构与算法之栈

    目录 顺序栈 xff1a 链式栈 xff1a 栈的使用 xff1a 首先 xff1a 栈是一个特殊的线性表 xff0c 只允许在一端进行插入 xff08 压栈 xff09 和删除元素 xff08 进栈 xff09 xff0c 这一端称为栈顶
  • 二叉树的典型习题总结

    二叉树的三种遍历方式 xff1a 1 给定一个二叉树 xff0c 返回它的前序遍历 root left right 递归实现 xff1a public List lt Integer gt preorderTraversal TreeNod
  • javascript简介及基本语法

    这两天了解到一门新的脚本语言 javascript xff0c 貌似能干的事情好多呀哈哈哈哈 xff0c 言归正传啧 目录 javascript简介 js的简介 js的特点 javascript和java的区别 javascript的组成
  • Postman~做接口测试

    在工作中 xff0c 接口测试势必是最有效的测试途径 因此 xff0c 学习接口测试的基础和工具是很有必要的 xff0c 从Postman开始吧 xff5e 目录 1 接口测试简介 2 接口测试流程及用例设计 3 使用Postman执行接口
  • pytest接口测试自动化框架

    目录 pytest简介及安装 pytest的使用规则 pytest运行方式 主函数方式 命令行方式 跳过 标记及预期失败特殊场景处理 pytest前后置 夹具 pytest高级用法fixture pytest接口断言 pytest结合all