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

pytest-req插件:更简单的做接口测试的更多相关文章

  1. Xcode7使用插件的简单方法&&以及怎样下载到更早版本的Xcode

    Xcode7自2015年9上架以来也有段时间了, 使用Xcode7以及Xcode7.1\Xcode7.2的小伙伴会发现像VVDocumenter-Xcode\KSImageNamed-Xcode\HO ...

  2. javaCV开发详解之技术杂烩:javaCV能帮我们做什么?能实现什么功能?ffmpeg和openCV能实现功能,javaCV如何做到更快、更简单的实现相应的功能?等等一堆实用话题

    前言: 该篇文章旨在帮助刚接触javaCV的盆友系统的认识音视频.javaCV.图像处理相关的体系知识和一些实用的知识. 序: javaCV早期因为内置了openCV库,所以常用来做图像识别应用,现在 ...

  3. seldom 2.0 让接口自动化测试更简单

    前言 HTTP接口测试很简单,不管工具.框架.还是平台,只要很的好的几个点就是好工具. 测试数据问题:比如删除接口,重复执行还能保持结果一致,必定要做数据初始化. 接口依赖问题:B接口依赖A的返回值, ...

  4. Postman如何做接口测试,那些不得不知道的技巧

    Postman如何做接口测试1:如何导入 swagger 接口文档 在使用 postman 做接口测试过程中,测试工程师会往界面中填入非常多的参数,包括 url 地址,请求方法,消息头和消息体等一系列 ...

  5. PostCSS一种更优雅、更简单的书写CSS方式

    Sass团队创建了Compass大大提升CSSer的工作效率,你无需考虑各种浏览器前缀兼,只需要按官方文档的书写方式去写,会得到加上浏览器前缀的代码,如下: .row { @include displ ...

  6. gulp:更简单的自动化构建工具

    目前最流行的两种使用JavaScript开发的构建工具是Grunt和Gulp.为什么使用gulp?因为Gulp更简单.Grunt任务拥有大量的配置,会引用大量你实际上并不需要的对象属性,但是Gulp里 ...

  7. JQUERY插件JqueryAjaxFileUplaoder----更简单的异步文件上传

    异步上传相信大家都做过类似的功能,JqueryAjaxFileUploader为我们提供了更简单的实现和使用方式.不过既然是JQUERY的插件那么它所依赖的环境大家都懂得.JqueryAjaxFile ...

  8. Moq让单元测试变得更简单

    [ASP.Net MVC3 ]使用Moq让单元测试变得更简单 前几天调查完了unity.现在给我的任务是让我调查Moq. 以下是自己找了资料,总结并实践的内容.如果有表述和理解错误的地方.恳请指正. ...

  9. postman+jenkins+newman做接口测试的持续集成

    为何要做接口自动化测试的持续集成? 1. 接口相对稳定,改动少,比起GUI自动化测试来说性价比更加高些,不容易出现GUI自动化那种掉到维护脚本的坑里. 2. 接口测试比较简单,一个规范的接口,测试只需 ...

  10. python接口自动化(二)--什么是接口测试、为什么要做接口测试(详解)

    简介 上一篇和大家一起科普扫盲接口后,知道什么是接口,接口类型等,对其有了大致了解之后,我们就回到主题-接口测试. 什么是接口测试 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统 ...

随机推荐

  1. docker离线安装

    1. yum安装 #源添加 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ...

  2. SDWebImageCache缓存分析

      文字版本:  https://docs.qq.com/doc/DRVpPS3BBV3l0bEZ5  

  3. 算法金 | 再见!!!KNN

    大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 KNN算法的工作原理简单直观,易于理解和实现,这使得它在各种应用场景中备受青睐. 我们 ...

  4. 2024-06-08:用go语言,给定三个正整数 n、x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋。 在这座城市中,房屋通过街道相连。对于每个编号i(1 <= i < n), 存在一条

    2024-06-08:用go语言,给定三个正整数 n.x和y, 表示城市中的房屋数量以及编号为x和y的两个特殊房屋. 在这座城市中,房屋通过街道相连.对于每个编号i(1 <= i < n) ...

  5. vmware 和 hyper-v不兼容,此主机不支持64位客户机操作系统

    在控制面板中关闭hyper-v功能后,仍然提示此主机不支持64位客户机操作系统. 解决方法: 需要在开始按钮 - 右键  -打开Windows PowerShell(管理员). 输入: bcdedit ...

  6. 打开 gpedit.msc 组策略时弹出错误提示,"找不到资源 string.Advanced_EnableSSL3Fallback ”。

    原因是升级到 IE9 或者 IE 11 语言包没有及时更新. 解决方案一:用360再打补丁. 方案二:未尝试. https://www.microsoft.com/en-us/download/con ...

  7. Python3.7+Robot Framework+RIDE1.7.4.1安装使用教程

    一.解惑:Robot Framewprk今天我们聊一聊,Robot Framework被众多测试工程师误会多年的秘密.今天我们一起来揭秘一下,最近经常在各大群里听到许多同行,在拿Robot Frame ...

  8. redisTemplate缓存方法template code

    import com.alibaba.fastjson.JSONObject; @Autowired private RedisTemplate redisTemplate; String PREFI ...

  9. SQLite vs MySQL vs PostgreSQL对比总结

    开发业务系统时,是绕不开RDBMS(关系型数据库)的.虽然现在诞生了各种NoSQL的数据库,RDBMS在业务系统中的严谨和优势依然无法取代. 近几年大大小小的项目中,常用的三种RDBMS(SQLite ...

  10. 如何搭建私有的ChatGPT服务

    背景 是这样的,我们几个朋友众筹共享一个chatGPT4 Plus账号,且不想多人公用一个账号登录使用web版,想大家各自搞个本地的ChatGPT客户端,共用一个api-key. 我找了一圈,决定使用 ...