接口自动化——初识pytest

缩写单词含义
.passed通过
Ffailed失败(用例执行时报错)
Eerror出错(fixture执行报错)
sskipped跳过
Xxpassed预期外的通过(不符合预期)
xxfailed预期内的失败(符合预期)


1.pytest 配置

1.查看pytest的所有配置项

在pycharm的terminal中 输入下面的代码,即可查看所有的配置项

pytest -h                                                                                                                                    usage: pytest [options] [file_or_dir] [file_or_dir] [...]

部分配置项 :


-v, --verbose         Increase verbosity   # 增加输出详细程度
-q, --quiet           Decrease verbosity   # 减少输出详细程度-x, --exitfirst       Exit instantly on first error or failed test   # 在第一个错误或测试失败时立即退出markers (linelist):   Register new markers for test functions # 注册新标记
addopts (args):       Extra command line options  # add options:添加额外的命令行选项,在使用ini文件配置时使用 
2.配置:配置有两种方法:
  • 命令行参数
  •  ini配置文件
3.命令行参数

命令行参数就是每次执行测试的时候在 pytest 命令后面添加 参数:下面是一个简单的测试代码:

def test_pass():assert (10 == 10)

在terminal中执行  pytest 输出为 

接下来在terminal中执行 pytest -v 命令,输出为:

        可以看到  pytest -v 命令的输出比 pytest 命令的输出更详细,而且 -v  是可以叠加的,也就是可以使用多个v来尽可能的增加详细程度 ,-vv,-vvv,-vvvv都是可以的。同理,-q 也是一致,并且 -v -q 还可以同时使用,不过一个增加详细程度,一个减少详细程度,同时使用效果就抵消了。多个v 和多个q也可以同时使用,例如:pytest -vvv -qqqq  就看哪个多了。鉴于这里的用例比较简单,在减少/增加详细程度也不会有太大的变化,就不再放图了。

4.ini配置文件

      每次都要在命令后加相应的配置项很麻烦,更加方便的方法是使用ini配置文件,将需要使用的配置项放进去,这样每次在执行的时候,由系统自动的将配置项加到命令后面,就不需要在手动添加了。

  1. 根目录中创建   pytest.ini 文件
  2. 创建 pytest 选择器 [pytest]
  3. 按行添加需要的配置项(addopts)
[pytest]
addopts = -s -v

2.标记mark

mark的主要作用是让用例变得不同,实现用例的筛选。标记有两种,一种是pytest框架内置的标记,一种是用户自定义的标记

1.用户自定义的标记

1.注册:在ini配置文件中实现,例如

markers =apiuiut

2.标记,标记是可以叠加的。

import pytest@pytest.mark.ut   # 标记
def test_pass():assert 1 == 1@pytest.mark.api   标记
def test_fail():assert 1 == 2@pytest.mark.ut   # 标记
@pytest.mark.ui   # 标记
def test_skip():assert 1 == 1

3.筛选

可以根据标记对用例进行筛选,terminal / ini配置文件中均可实现。例如, 只执行拥有api标记的用例

ini 文件配置 

addopts = -s -v -m api

terminal中实现

pytest -m api  # 只执行拥有api标记的用例

D:\python_project\API_Auto\API1\venv\Scripts\python.exe D:\python_project\API_Auto\API1\run.py 
============================= test session starts =============================
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API1\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API1
configfile: pytest.ini
collecting ... collected 3 items / 2 deselected / 1 selectedtest_mark.py::test_fail FAILED================================== FAILURES ===================================
__________________________________ test_fail __________________________________@pytest.mark.apidef test_fail():
>       assert 1 == 2
E       assert 1 == 2test_mark.py:11: AssertionError
=========================== short test summary info ===========================
FAILED test_mark.py::test_fail - assert 1 == 2
======================= 1 failed, 2 deselected in 0.09s =======================Process finished with exit code 0

      可以看到,一共有三个用例,但是只执行了拥有api标记的用例,并且这个用例执行结果是失败的。

      另外,标记支持逻辑运算。

pytest -m ("ut or api")    # 执行标记为 ut 或者 api 的用例

D:\python_project\API_Auto\API1\venv\Scripts\python.exe D:\python_project\API_Auto\API1\run.py 
============================= test session starts =============================
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API1\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API1
configfile: pytest.ini
collecting ... collected 3 itemstest_mark.py::test_pass PASSED
test_mark.py::test_fail FAILED
test_mark.py::test_skip PASSED================================== FAILURES ===================================
__________________________________ test_fail __________________________________@pytest.mark.apidef test_fail():
>       assert 1 == 2
E       assert 1 == 2test_mark.py:11: AssertionError
=========================== short test summary info ===========================
FAILED test_mark.py::test_fail - assert 1 == 2
========================= 1 failed, 2 passed in 0.11s =========================Process finished with exit code 0

     可以看到,三个用例都符合条件,所以三个用例都被执行了。 

pytest -m ("ut and ui")    # 执行同时具有标记为 ut 和 ui 的用例

D:\python_project\API_Auto\API1\venv\Scripts\python.exe D:\python_project\API_Auto\API1\run.py 
============================= test session starts =============================
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API1\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API1
configfile: pytest.ini
collecting ... collected 3 items / 2 deselected / 1 selectedtest_mark.py::test_skip PASSED======================= 1 passed, 2 deselected in 0.01s =======================Process finished with exit code 0

 可以看到,只有一个用例符合要求,所以只执行了这一个用例

@pytest.mark.ut   # 标记
@pytest.mark.ui   # 标记
def test_skip():assert 1 == 1
2.框架内置标记
  1.  不需要注册,直接使用
  2.  不仅用于筛选,还有特殊效果
  3.  不同的标记,拥有不同的效果
    1. skip:无条件跳过
    2. skipif:有条件跳过
    3. xfail:预期失败
    4. parametrize:参数化: 框架为用例传递参数
    5. usefixture:使用fixture
import pytest@pytest.mark.skip  # 跳过
def test_skip():assert 1 + 1 == 2@pytest.mark.skipif(1 == 1, reason="1=1,结果为真,所以skip")  # 跳过
def test_skipif():assert 1 + 1 == 4@pytest.mark.xfail   # 预期结果是失败,实际结是失败。是预期内的失败
def test_xfail():assert 1 + 1 == 3@pytest.mark.xfail   # 预期结果是失败,实际结是成功。是预期外的成功
def test_xpass():assert 1 + 1 == 2@pytest.mark.parametrize(   # 参数化"a, b, c",  # 列出参数[# 准备参数的值[1, 1, 2],[1, 1, 3]]
)
def test_param(a, b,  c):assert (a + b) == c
缩写单词含义
.passed通过
Ffailed失败(用例执行时报错)
Eerror出错(fixture执行报错)
sskipped跳过
Xxpassed预期外的通过(不符合预期)
xxfailed预期内的失败(符合预期)

输出结果 :

D:\python_project\API_Auto\API1\venv\Scripts\python.exe D:\python_project\API_Auto\API1\run.py 
============================= test session starts =============================
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API1\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API1
configfile: pytest.ini
collecting ... collected 6 itemstest_mark.py::test_skip SKIPPED (unconditional skip)
test_mark.py::test_skipif SKIPPED (1=1,结果为真,所以skip)
test_mark.py::test_xfail XFAIL
test_mark.py::test_xpass XPASS
test_mark.py::test_param[1-1-2] PASSED
test_mark.py::test_param[1-1-3] FAILED================================== FAILURES ===================================
______________________________ test_param[1-1-3] ______________________________a = 1, b = 1, c = 3@pytest.mark.parametrize(   # 参数化"a, b, c",  # 列出参数[# 准备参数的值[1, 1, 2],[1, 1, 3]])def test_param(a, b,  c):
>       assert (a + b) == c
E       assert (1 + 1) == 3test_mark.py:32: AssertionError
=========================== short test summary info ===========================
FAILED test_mark.py::test_param[1-1-3] - assert (1 + 1) == 3
======== 1 failed, 1 passed, 2 skipped, 1 xfailed, 1 xpassed in 0.10s =========Process finished with exit code 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76151.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode日记(100)填充每个节点的下一个右侧节点指针

和层序遍历差不多的思路,将节点储存在队列里,一边取出节点一边放入取出节点的左右节点,直到队列空。 /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node* next;Node() : val(0), left(NULL), right(NU…

MySQL配置文件my.cnf详解

目前使用的服务器系统是CentOS8.5 ,针对MySql8.4的配置示例,自己根据实际情况修改。 安装MySql8.4时,MySql8.4没有默认的my.cnf,需要用户根据需要自行配置my.cnf文件,大概可看到下面这样的参数列表,可能不同版本的mysql参数多少会…

【解决】XCode不支持旧版本的iOS设备

办法: 手动添加设备支持文件(暂时解决方式) 如果您无法立即升级 Xcode,也可以通过下载设备支持文件来暂时解决问题。 检查当前设备的 iOS 版本: 连接设备到 Mac,打开 Xcode 查看提示的 iOS 版本。例如&…

每日c/c++题 备战蓝桥杯(全排列问题)

题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列,每行一个序列。 每个数字保留 5 个场…

注意力蒸馏技术

文章目录 摘要abstract论文摘要简介方法预备知识注意力蒸馏损失注意力引导采样 实验结论总结参考文献 摘要 本周阅读了一篇25年二月份发表于CVPR 的论文《Attention Distillation: A Unified Approach to Visual Characteristics Transfer》,论文开发了Attention Distillation…

flutter android端抓包工具

flutter做的android app,使用fiddler抓不了包,现介绍一款能支持flutter的抓包工具Reqable,使用方法如下: 1、下载电脑端安装包 下载地址为【https://reqable.com/zh-CN/download/】 2、还是在上述地址下载 android 端apk&#xf…

PyTorch单机多卡训练(DataParallel)

PyTorch单机多卡训练 nn.DataParallel 是 PyTorch 中用于多GPU并行训练的一个模块,它的主要作用是将一个模型自动拆分到多个GPU上,并行处理输入数据,从而加速训练过程。以下是它的核心功能和工作原理: 1、主要作用 数据并行&am…

PyTorch中的Tensor

PyTorch中的Tensor‌ 是核心数据结构,类似于 NumPy 的多维数组,但具备 GPU 加速和自动求导等深度学习特性。 一、基本概念 ‌核心数据结构‌ Tensor 是存储和操作数据的基础单元,支持标量(0D)、向量(1D&am…

基于Python的图书馆信息管理系统研发

标题:基于Python的图书馆信息管理系统研发 内容:1.摘要 在数字化信息快速发展的背景下,传统图书馆管理方式效率低下,难以满足日益增长的信息管理需求。本研究旨在研发一款基于Python的图书馆信息管理系统,以提高图书馆信息管理的效率和准确性…

RCE复现

1.过滤flag <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__);代码审计过滤了"flag"关键词&#xff0c;但限制较弱&#xff0c;容易绕过 ?csystem("ls&…

FPGA_YOLO(四) 部署yolo HLS和Verilog 分别干什么

首先,YOLO作为深度学习模型,主要包括卷积层、池化层、全连接层等。其中,卷积层占据了大部分计算量,尤其适合在FPGA上进行并行加速。而像激活函数(如ReLU)和池化层相对简单,可能更容易用HLS实现。FPGA的优势在于并行处理和定制化硬件加速,因此在处理这些计算密集型任务时…

自动化发布工具CI/CD实践Jenkins介绍!

1. 认识Jenkins 1.1 Jenkins是什么&#xff1f; Jenkins 是一个开源的自动化服务器&#xff0c;主要用于持续集成和持续部署&#xff08;CI/CD&#xff09;。 它由Java编写&#xff0c;因此它可以在Windows、Linux和macOS等大多数操作系统上运行。 Jenkins 提供了一个易于使用…

【愚公系列】《高效使用DeepSeek》039-政务工作辅助

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…

深度学习篇---模型训练评估参数

文章目录 前言一、Precision&#xff08;精确率&#xff09;1.1定义1.2意义1.3数值接近11.4数值再0.5左右1.5数值接近0 二、Recall&#xff08;召回率&#xff09;2.1定义2.2意义2.3数值接近12.4数值在0.5左右2.5数值接近0 三、Accuracy&#xff08;准确率&#xff09;3.1定义3…

Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十一)

注册表设置 GPU虚拟化标志 GpuVirtualizationFlags 注册表项用于设置半虚拟化 GPU 的行为。 密钥位于&#xff1a; DWORD HKLM\System\CurrentControlSet\Control\GraphicsDrivers\GpuVirtualizationFlags 定义了以下位&#xff1a; 位描述0x1 ​ 为所有硬件适配器强制设置…

Vue 的 nextTick 是如何实现的?

参考答案&#xff1a; nextTick 的本质将回调函数包装为一个微任务放入到微任务队列&#xff0c;这样浏览器在完成渲染任务后会优先执行微任务。 nextTick 在 Vue2 和 Vue3 里的实现有一些不同&#xff1a; 1. Vue2 为了兼容旧浏览器&#xff0c;会根据不同的环境选择不同包装策…

安卓开发之LiveData与DataBinding

LiveData——生命周期感知 LiveData 是 Android Jetpack 提供的一个生命周期感知的数据持有者类&#xff0c;它可以用于持有数据并在数据发生变化时通知观察者。LiveData 常与 ViewModel 配合使用&#xff0c;帮助简化 UI 层和数据层之间的交互&#xff0c;确保 UI 在合适的生…

TCP协议与wireshark抓包分析

一、tcp协议格式 1. 源端口号 &#xff1a; 发送方使用的端口号 2. 目的端口号 &#xff1a; 接收方使用的端口号 3. 序号: 数据包编号 &#xff0c; tcp 协议为每个数据都设置编号,用于确认是否接收到相应的包 4. 确认序列号 : 使用 tcp 协议接收到数据包&#xff0c…

《HelloGitHub》第 108 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对开源感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

VITA 模型解读,实时交互式多模态大模型的 pioneering 之作

写在前面:实时交互llm 今天回顾一下多模态模型VITA,当时的背景是OpenAI 的 GPT-4o 惊艳亮相,然而,当我们将目光投向开源社区时,却发现能与之匹敌的模型寥寥无几。当时开源多模态大模型(MLLM),大多在以下一个或多个方面存在局限: 模态支持不全:大多聚焦于文本和图像,…