统一请求封装和pytest入门使用

news2024/12/31 3:59:40

统一请求封装解决的问题

    1. 解决多个py文件共享session的问题
    1. 统计请求的数据
    1. 统一异常处理
    1. 统一日志监控

封装

在项目文件中创建一个common文件夹, 用来进行统一接口封装

import requests

class RequestUtil:
    # 调用底层的requests.session()方法进行封装
    sess = requests.session()

    def all_send_request(self, method, url, **kwargs):
        result = self.sess.request(method, url, **kwargs)
        return result

pytest 框架入门

默认的pytest测试用例规则

  • 模块名必须以test_或者_test结尾
  • 类名必须以Test开头
  • 测试用例名必须以test_开头

pytest 可以 结合 selenium、appium、requests 分别实现 web自动化,app自动化,接口自动化

pytest常用插件

pytest		本身
pytest-html		生成html报告
pytest-xdist	多线程执行用例
pytest-ordering		控制测试用例的执行顺序
pytest-rerunfailures	失败用例重跑
allure-pytest			生成美观的allure报告

当我们想一次性下载多个插件时, 我们会创建一个requirements.txt文件, 文件内容大概如下
在这里插入图片描述

然后在终端中输入命令

pip install -r requirements.txt[文件名]

按下回车,即可安装文件中所输入的插件

pytest运行方式详解

  1. 通过main方法运行
import pytest

if __name__ == "__main__":
	pytest.main()
  1. 通过命令行运行
    参数
    • -vs -v输出详细信息,-s输出调试信息

在这里插入图片描述

  • -n 表示多线程执行
  • –reruns 失败用例重跑
  • 这里我在程序中抛出一个异常
  • raise Exception("reruns测试异常重跑!!!!")
  • 运行命令 : pytest --reruns=2
    3在这里插入图片描述
  • –html 生成html文件 : 会在当前目录下生成一个report的html文件
  • 命令: pytest --html="./reports/report.html"
  1. 通过pytest.ini文件运行
    • 不管主函数运行还是命令行运行,都是通过pytest.ini全局配置文件执行
    • 如果需要执行多个标记markers中的内容,可以在addopts中输入
    • addopts = -vs -m "smoke or ocean"
      在这里插入图片描述

pytest 前后置固件

  • 前置函数固件
    • 第一种夹具
      在这里插入图片描述
  • 第二种夹具: fixtrue(常用,实现指定用例执行前后置), 完全可以替换上面的方法
  • 装饰器:
@pytest.fixtrue(scope="作用域", params="参数化", autouse="自动执行", ids="参数名别名", name="fixture别名" )

@pytest.fixture(scope="function", autouse=False)
def connect_database():
    print("链接数据库")
    yield  # 生成器,获取它的后置处理结果
    print("关闭数据库")
    
# 单独调用,只在一个函数中生效
    def test_001(self, connect_database):
        """
        :param connect_database: fixture执行函数
        :return:
        """
        print("测试001号函数")

执行结果
在这里插入图片描述

  • scope 参数
    • function 用例级别
    • class 类
    • package/session 会话级别

fixture中的参数化 parmas

  1. 在fixture中使用参数话
@pytest.fixture(scope="function", autouse=False, params=[["name", "百里"], ["age", 18]])
def connect_database(request):
    print("链接数据库")
    yield request.param  # 当有参数化时的固定写法,在后置使用函数中打印即可
    print("关闭数据库")
  1. 在test函数中调用参数话,并打印输出信息
    在这里插入图片描述

fixture独立(重要!)

想要将fixture独立,必须使用conftest.py文件进行操作
在这里插入图片描述

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

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

相关文章

超详细的R语言svykm函数绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier)

我们在既往的文章《R语言绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier)》中介绍了怎么使用jskm包的svykm函数绘制复杂抽样设计数据cox回归生存曲线(Kaplan-Meier),但是有粉丝觉得讲得不够详细,希望讲得详细一点,今天我们继续来介绍一下…

flinkCDC在Delta.io中是什么 是CDF

类似flink CDC databricks 官方文档: How to Simplify CDC With Delta Lakes Change Data Feed - The Databricks Blog delta.io 官方文档: Change data feed — Delta Lake Documentation 概述 更改数据馈送 (CDF) 功能允许 Delta 表跟踪 Delta 表版本之间的行级更改 在…

vue+element-plus角色权限管理分配

这里的图片是截图这个老师的项目 在src/uitls/permission.js加入以下内容 本段代码讲解: 参数一:后台传来的路由 参数二:前端所有的路由 先遍历前端所有路由,在里面继续遍历后台路由,通过二者某一个关键字的是否相同判断用户是否有权限(这里老师使用的是title关键字),关键字相…

21安徽练习

题目分为4部分 APK 集群 流量 exe 我尽量都做一下,逆向不是很会,就当提升自己。 [填空题]请获取app安装包的SHA256校验值(格式:不区分大小写)(10分) e15095d49efdccb0ca9b2ee125e4d8136cac5…

树莓派Pico W无线开发板MQTT协议通信MicroPython编程实践

本博文介绍采用ThonnyMicroPython和umqtt.simple库MQTTClient类的对象方法编制树莓派Pico W无线开发板MQTT协议通信程序,将Pico W无线开发板、电脑或Android手机无线连接到远程MQTT服务器,给出采用电脑MQTTX应用程序及手机Android MQTT客户端App远程控制…

用python的QT做界面

文章目录 入口文件界面参数调整数据从dat解析出来的文件从界面点击打开文件夹的功能实现主要功能代码网络参数存图替换功能,比如把倒频谱替换成倒频谱2 入口文件 入口文件,主要用来实例化窗口(不重要),只要知道从这里…

每日学术速递4.30

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Masked Frequency Modeling for Self-Supervised Visual Pre-Training(ICLR 2023) 标题:用于自监督视觉预训练的掩蔽频率建模 作者:Jiahao Xie, Wei Li, Xi…

SwiftUI 设计和调试复杂界面的基本技巧示例

功能需求 对于比较复杂的 SwiftUI 界面,我们需要在充分了解 SwiftUI 各个视图基本特性的同时,合理利用 Xcode 强大的预览(Preview)机制,实时且全面的测试所有场景下的显示情况。 如上图所示:我们在 App 支持的每种语言环境中都对界面进行了全面的测试,并解决了 Cell 里…

使用Lambda表达式mutable有感

使用Lambda表达式mutable有感 在学Qt的时候,我看着mutable陷入了沉思,总觉得它和C中的某个特性很像?没错,就是 深拷贝 如果你忘记了深拷贝和浅拷贝是什么,那跟着我来一起回忆一下吧。首先来看深拷贝与浅拷贝的概念 浅…

从零开始学习Linux运维,成为IT领域翘楚(四)

文章目录 🔥Linux路径🔥Linux处理文件目录的常用命令🔥Linux文件编辑工具vi/vim🔥Linux文件内容查看命令 🔥Linux路径 路径,顾名思议,是指从树形目录中的某个目录层次到某个文件的一条道路。 Li…

设计模式-工厂、装饰模式

一. 设计模式-工厂模式 package com.factory.pattern;/**目标:工厂模式。什么是工厂设计模式?工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的方…

Spring 5 笔记 - AOP

1. AOP 简介 AOP:Aspect Oriented Programming, 面向切面编程或面向方面编程。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。 将日志…

【英语】大学英语CET考试,写作部分(论述文+应用文,6篇范文)

文章目录 3项评分标准(内容&结构,语言)0.1 论述文个人小结 1、论述文:审题与功能句2、论述文:修饰内容和名言模板3、论述文:现象作文&利弊分析4、论述文:给出权威论据和有侧重的现象5、…

新老stp的配置和安全总结部分

老stp只有根桥没有备份桥 老stp的五种接口状态: disable 接口down没开stp blocking 阻塞 listening 发bpdu,比较bpdu优劣 leraning 开始学习mac地址表 forwardding 转发 老stp直接拓扑变化30秒,间接拓扑变化50秒 RSTP只有3种端口状态&#…

每日学术速递4.28

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.StepFormer: Self-supervised Step Discovery and Localization in Instructional Videos(CVPR 2023) 标题:StepFormer:教学视频中的自我监督步骤发现和定位…

vue diff算法与虚拟dom知识整理(1) 概念叙述

今天开始 我们来学习 虚拟dom和diff算法 首先 我们要简单了解 虚拟dom和diff算法在vue中的作用 例如 下图左侧是我们的加 然后 我们要将 家按图右改造一下 我们先来找一下不同 如图卷出来的效果 我们起居室想多装一个沙发 卧室床改了位置 电视不要了 阳台小改了一下 其实改…

每日学术速递4.27

Subjects: cs.CV 1.End-to-End Spatio-Temporal Action Localisation with Video Transformers 标题:使用视频转换器进行端到端时空动作定位 作者:Alexey Gritsenko, Xuehan Xiong, Josip Djolonga, Mostafa Dehghani, Chen Sun, Mario Lučić, Corde…

IS-IS协议基础知识

文章目录 前言介绍地址格式报文格式区域及路由器类型区域类型路由器类型Level-1 路由器Level-2 路由器Level-1-2路由器 IS-IS 网络类型DIS及伪节点伪节点DIS与OSPF的DR/BDR不同之处 IS-IS 邻接关系握手报文邻接关系的建立 IS-IS 链路状态数据库概述数据库同步报文泛洪机制数据库…

【网络编程】socket套接字

文章目录 一、源IP和目的IP二、端口号port三、TCP/UDP协议3.1 网络字节流 四、socket套接字4.1 socket常见接口4.2 sockaddr结构体 五、总结 一、源IP和目的IP 如果我们的台式机或者笔记本没有IP地址就无法上网,而因为每台主机都有IP地址,所以注定了数据…

Prometheus Exporter开发

Prometheus Exporter开发 Exporter数据格式介绍 Exporter徒手开发 Exporter4种指标类型演示 Exporter自定义注册表 Exporter 基于Collector的模块开发 Exporter介绍 数据格式 通讯协议 HTTP协议服务端实现了gzip 数据格式 text/plain:文本协议 数据格式 prometheus…