首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

pytest-req插件:更简单的做接口测试

编程知识
2024年07月26日 11:24

pytest-req插件:更简单的做接口测试

背景

我们经常会用到 pytest 和 requests 进行接口自动化测试。 pytest 提供了非常方便的插件开发能力,在pytest中使用requests库首先会想到是否有已经封装好的插件,就像pytest-playwrightpytest-selenium一样。可惜找了一下没有。

于是,自己动手实现了一个,本来命名为pytest-requestspypi 仓库搜索了一下被被占用了。pytest-requests是一个用YAML写接口用例的库,类似httprunner。最终命名为pytest-req

整个插件的设计思路比较简单,将requests常用的请求方法设计成pytest.fixture钩子函数;增加请求响应日志,从seldom框架封装的代码,使用pytest-base-url 实现基础URL的全局设置。最终使用起来比 直接在 pytest写requests请求简单了很多。

简介

pytest requests plugin

pytest 使用 requests 库的插件。

特点

  • 完全兼容Requests库的使用。
  • 提供详细的请求/响应日志,并支持可配置。
  • 轻量级,非侵入。

安装

支持pip安装pytest-req插件。

pip install pytest-req

使用

pytest-req 完全兼容 Requests API 如下:

pytest-req(fixture) requests
get() requests.get()
post() requests.post()
put() requests.put()
delete() requests.delete()
patch() requests.patch()
options() requests.options()
head() requests.head()
session() requests.session()

session IDE无法自动补全。可以正常使用session下面的get()/post()/put()...

👉︎ [查看测试]https://github.com/SeldomQA/pytest-req/tree/main/tests

⭐ 支持简单的请求

# test_req.py

def test_post_method(post):
    """
    test post request
    """
    s = post('https://httpbin.org/post', data={'key': 'value'})
    assert s.status_code == 200


def test_get_method(get):
    """
    test get request
    """
    payload = {'key1': 'value1', 'key2': 'value2'}
    s = get("https://httpbin.org/get", params=payload)
    assert s.status_code == 200

⭐ 支持Session

# test_session.py

def test_session(session):
    """
    test session, keep requests cookie
    """
    s = session
    s.get('https://httpbin.org/cookies/set/sessioncookie/123456789')
    s.get('https://httpbin.org/cookies')

⭐ 支持base-url

# test_base_url.py

def test_req_base_url(get):
    """
    test base url
    pytest --base-url=https://httpbin.org
    """
    payload = {'key1': 'value1', 'key2': 'value2'}
    s = get("/get", params=payload)
    assert s.status_code == 200

更多的使用方式参考 requests 文档。

✅ 运行测试

> pytest -s  # 运行当前所有用例
> pytest -s test_req.py # 运行指定文件
> pytest -s --base-url=https://httpbin.org  # 指定base-url

-s 查看详细日志

--base-url 指定请求基础URL,用例中可以不设置。

更多的运行方式请参考 pytest 文档。

🗒 运行日志

> pytest -qs --base-url=https://httpbin.org test_base_url.py

2024-07-24 12:18:39 | INFO     | plugin.py | -------------- Request -----------------[🚀]
2024-07-24 12:18:39 | INFO     | plugin.py | [method]: GET      [url]: /get 
2024-07-24 12:18:39 | DEBUG    | plugin.py | [params]:
{
  "key1": "value1",
  "key2": "value2"
}
2024-07-24 12:18:40 | INFO     | plugin.py | -------------- Response ----------------[🛬️]
2024-07-24 12:18:40 | INFO     | plugin.py | successful with status 200
2024-07-24 12:18:40 | DEBUG    | plugin.py | [type]: json      [time]: 1.655213
2024-07-24 12:18:40 | DEBUG    | plugin.py | [response]:
 {
  "args": {
    "key1": "value1",
    "key2": "value2"
  },
  "headers": {
    "Accept": "*/*",
    "Accept-Encoding": "gzip, deflate",
    "Host": "httpbin.org",
    "User-Agent": "python-requests/2.32.3",
    "X-Amzn-Trace-Id": "Root=1-66a080a0-2cb150485a260ae75b34b32f"
  },
  "origin": "171.10.176.209",
  "url": "https://httpbin.org/get?key1=value1&key2=value2"
}
.2024-07-24 12:18:40 | INFO     | plugin.py | -------------- Request -----------------[🚀]
2024-07-24 12:18:40 | INFO     | plugin.py | [method]: GET      [url]: /cookies/set/sessioncookie/123456789 
2024-07-24 12:18:43 | INFO     | plugin.py | -------------- Response ----------------[🛬️]
2024-07-24 12:18:43 | INFO     | plugin.py | successful with status 200
2024-07-24 12:18:43 | DEBUG    | plugin.py | [type]: json      [time]: 0.807398
2024-07-24 12:18:43 | DEBUG    | plugin.py | [response]:
 {
  "cookies": {
    "sessioncookie": "123456789"
  }
}
2024-07-24 12:18:43 | INFO     | plugin.py | -------------- Request -----------------[🚀]
2024-07-24 12:18:43 | INFO     | plugin.py | [method]: GET      [url]: /cookies 
2024-07-24 12:18:44 | INFO     | plugin.py | -------------- Response ----------------[🛬️]
2024-07-24 12:18:44 | INFO     | plugin.py | successful with status 200
2024-07-24 12:18:44 | DEBUG    | plugin.py | [type]: json      [time]: 1.226137
2024-07-24 12:18:44 | DEBUG    | plugin.py | [response]:
 {
  "cookies": {
    "sessioncookie": "123456789"
  }
}
.
2 passed in 5.36s
From:https://www.cnblogs.com/fnng/p/18325060
本文地址: http://shuzixingkong.net/article/450
0评论
提交 加载更多评论
其他文章 【VMware VCF】VMware Cloud Foundation Part 05:部署 SDDC 管理域。
之前文章(“VMware Cloud Foundation Part 03:准备 Excel 参数表。”和“VMware Cloud Foundation Part 04:准备 ESXi 主机。”),我们已经知道了对于部署一个 VMware Cloud Foundation 来说,需要准备部署参数配
【VMware VCF】VMware Cloud Foundation Part 05:部署 SDDC 管理域。 【VMware VCF】VMware Cloud Foundation Part 05:部署 SDDC 管理域。 【VMware VCF】VMware Cloud Foundation Part 05:部署 SDDC 管理域。
《左耳听风 传奇程序员练级攻略》读书笔记
本书是程序员大牛陈皓的文章汇总,内容包括技术、沟通、工程师文化等,通读之后摘录其中精华部分。开卷有益,能读到摘录部分也会收益,当然最好是去读原文,知识转化效率更高。除本书之外,还有一些他的文章也非常值得阅读,包括程序员如何变现,如何学习英语主题等。
《左耳听风 传奇程序员练级攻略》读书笔记 《左耳听风 传奇程序员练级攻略》读书笔记
Vue入门记录(一)
效果 本文为实现如下前端效果的学习实践记录: 实践 入门的最佳实践我觉得是先去看官网,官网一般都会有快速入门指引。 根据官网的快速上手文档,构建一个新的Vue3+TypeScript,查看新建的项目结构: 现在先重点关注components、views、App.vue与main.ts。 compon
Vue入门记录(一) Vue入门记录(一) Vue入门记录(一)
一下午连续故障两次,谁把我们接口堵死了?!
唉。。。 大家好,我是程序员鱼皮。又来跟着鱼皮学习线上事故的处理经验了喔! 事故现场 周一下午,我们的 编程导航网站 连续出现了两次故障,每次持续半小时左右,现象是用户无法正常加载网站,一直转圈圈。 用户很快就在群里炸开锅了,甚至有用户表示 “我提前进去了,都不敢刷新。。” 看到这些我真的非常难受,
一下午连续故障两次,谁把我们接口堵死了?! 一下午连续故障两次,谁把我们接口堵死了?! 一下午连续故障两次,谁把我们接口堵死了?!
记一次NACOS开放公网访问导致服务器被挖矿的解决流程 [kdcflush] acosd
我要在这里放一段代码块 // 这是一段防爬代码块,我不介意文章被爬取,但请注明出处 console.log("作者主页:https://www.hanzhe.site"); console.log("原文地址:https://www.cnblogs.com/hanzhe
记一次NACOS开放公网访问导致服务器被挖矿的解决流程 [kdcflush] acosd 记一次NACOS开放公网访问导致服务器被挖矿的解决流程 [kdcflush] acosd 记一次NACOS开放公网访问导致服务器被挖矿的解决流程 [kdcflush] acosd
Linux服务器PBS任务队列作业提交脚本的使用方法
本文介绍在Linux服务器中,通过PBS(Portable Batch System)作业管理系统脚本的方式,提交任务到服务器队列,并执行任务的方法~
Linux服务器PBS任务队列作业提交脚本的使用方法 Linux服务器PBS任务队列作业提交脚本的使用方法 Linux服务器PBS任务队列作业提交脚本的使用方法
基于.NET开源、强大易用的短链生成及监控系统
前言 今天大姚给大家分享一个基于.NET开源(MIT License)、免费、强大易用的短链生成及监控系统:SuperShortLink。 项目介绍 SuperShortLink是一个基于.NET开源(MIT License)、免费、强大易用的短链生成及监控系统,包含了短URL的生成、短URL跳转长
基于.NET开源、强大易用的短链生成及监控系统 基于.NET开源、强大易用的短链生成及监控系统 基于.NET开源、强大易用的短链生成及监控系统
PixiJS源码分析系列:第三章 使用 canvas 作为渲染器
使用 canvasRenderer 渲染 上一章分析了一下 Sprite 在默认 webgl 渲染器上的渲染,这章让我们把目光聚集到 canvasRenderer 上 使用 canvas 渲染器渲染图片的 demo 要使用 canvas 作为渲染器,我们需要引用 pixi-legacy.js /bu
PixiJS源码分析系列:第三章 使用 canvas 作为渲染器 PixiJS源码分析系列:第三章 使用 canvas 作为渲染器 PixiJS源码分析系列:第三章 使用 canvas 作为渲染器