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. Mybatis-Plus update不存在的数据返回值一定为零?

    MP update不存在的数据返回值一定为零? 本文分为以下几个部分: 前言 验证过程 结论 前言 ​ MP(mybatis-plus),在 MyBatis 的基础上只做增强不做改变,为简化开发.提高 ...

  2. 在Windows上运行Rainbond,10分钟快速安装

    前言 Windows 桌面运行 Rainbond,Windows 开发者的新选择. 经过适配Mac以后,Windows的适配也是成为了近期的小目标,经过不断地测试,不断地研究.最后也是达成了完美运行的 ...

  3. nginx优化实践与验证

    nginx优化实践 实践场景1: 单台nginx 2核4G 实践场景2: 三台nginx 2核4G 压测工具:WRK 初始安装的nginx压测: yum install -y nginx 安装WRK压 ...

  4. Dockerfile-NGINX镜像制作

    1 NGINX镜像制作: 1.1 NGINX-dockerfile FROM centos:7 LABEL maintainer www.chenleilei.net RUN useradd www ...

  5. unaipp 发送验证码倒计时

    view代码 <view class="margin-top" @tap="getCheckNum()"> <view class=" ...

  6. react移动端组件antd-mobile

    使用react移动端组件antd-mobile完成底部导航功能实现. 官网:https://mobile.ant.design/docs/react/introduce-cn antd-mobile ...

  7. WPS WORD EXCEL 不合并显示

    WPS WORD EXCEL 不合并显示 版本:WPS 12 , 下载时间约是2023 年. 1.在开始菜单里找到 WPS OFFICE - 配置工具 2.点击"高级(A)". 3 ...

  8. 浅谈 DDD 领域驱动设计

    文章简介 在B端产品研发及项目实施中,DDD带给我们哪些思考?我们是如何应用的?本文不是科普贴,旨在分享我们的经历和思考. 背景 Domain Driven Design(简称 DDD),又称为领域驱 ...

  9. es6.6.1 rest常规操作

    ES 内置的REST接口/ 获取版本信息/index/_search 搜索指定索引下的数据 test/_search/_aliases 获取或者操作索引下的别名 _aliases/index/ 查看指 ...

  10. hdu4135题解 容斥

    Problem Description Given a number N, you are asked to count the number of integers between A and B ...