跳转到主要内容

pytest-play插件,用于驱动著名的Python requests库进行HTTP调用

项目描述

play requests

https://img.shields.io/pypi/v/play_requests.svg https://travis-ci.org/davidemoro/play_requests.svg?branch=develop Documentation Status https://codecov.io/gh/davidemoro/play_requests/branch/develop/graph/badge.svg

pytest-play插件,用于驱动著名的Python requests 库进行HTTP调用。

更多信息和示例请参考

特性

pytest-play命令提供程序允许您使用一个包含一组pytest-play命令的YAML配置文件来驱动Python requests HTTP库。

您可以看到一个由pytest-play插件提供的命令驱动的pytest-play脚本

- provider: play_requests
  type: GET
  assertion: "'pytest-play' in response.json()"
  url: https://www.google.it/complete/search
  parameters:
    headers:
      Host: www.google.it
      User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101
        Firefox/57.0
      Accept: "*/*"
      Accept-Language: en-US,en;q=0.5
      Referer: https://www.google.it/
      Connection: keep-alive
    params:
    - - client
      - psy-ab
    - - hl
      - it
    - - gs_rn
      - '64'
    - - gs_ri
      - psy-ab
    - - gs_mss
      - pytest-
    - - cp
      - '11'
    - - gs_id
      - '172'
    - - q
      - pytest-play
    - - xhr
      - t
    timeout: 2.5

以上示例

play_requests 支持由 requests 库支持的所有的 HTTP 方法

  • OPTIONS

  • HEAD

  • GET

  • POST

  • PUT

  • PATCH

  • DELETE

以下部分将提供其他 play_requests 命令示例。

认证 cookies

管理 cookies 并为您准备好,这样您就无需自己使用 auth=('username', 'password') 创建 cookie 头

- provider: play_requests
  type: GET
  url: http://something/authenticated
  parameters:
    auth:
      - username
      - password

上传文件

上传 csv 文件

- provider: play_requests
  type: POST
  url: http://something/1
  parameters:
    files:
      filecsv:
      - report.csv
      - some,data

上传带有自定义头的 csv 文件

- provider: play_requests
  type: POST
  url: http://something/1
  parameters:
    files:
      filecsv:
      - report.csv
      - some,data
      - application/csv
      - Expires: '0'

上传文件并提供路径

- provider: play_requests
  type: POST
  url: http://something/1
  parameters:
    files:
      filecsv:
      - file.csv
      - path:$base_path/file.csv

假设您有一个 $base_path 变量。

将响应保存到变量中

您可以将响应处理保存到 pytest-play 变量并在后续命令中重复使用

- provider: play_requests
  type: POST
  url: http://something/1
  variable: myvar
  variable_expression: response.json()
  assertion: variables['myvar']['status'] == 'ok'
  parameters:
    json:
      foo: bar
    timeout: 2.5

如果端点返回非 JSON 响应,请使用 response.text 代替。

默认负载

如果您所有的请求都有一个共同的负载,这可能会很麻烦,但多亏了 play_requests,您可以避免重复。

您可以使用多种方式在程序中设置变量,使用 pytest-play 执行命令或执行命令。您还可以使用 play_pythonexec 命令更新变量

- provider: python
  type: store_variable
  name: bearer
  expression: "'BEARER'"
- provider: python
  type: store_variable
  name: play_requests
  expression: "{'parameters': {'headers': {'Authorization': '$bearer'}}}"
- provider: play_requests
  type: GET
  url: "$base_url"

并且所有后续的 HTTP 请求都将使用默认负载中提供的授权 bearer 执行。

合并规则

  • 如果 play_requests 命令提供了任何其他头值,则结果 HTTP 请求将使用合并后的头值执行(例如:Authorization + Host

  • 如果 play_requests 命令提供了冲突的头值或任何其他默认选项,则命令提供的 Authorization 头将获胜,并且它将覆盖当前调用中默认的冲突头值

断言响应状态码

- provider: play_requests
  type: POST
  url: http://something/1
  variable: myvar
  variable_expression: response.json()
  assertion: response.status_code == 200
  parameters:
    json:
      foo: bar

或者如果您想,您可以使用表达式 response.raise_for_status() 来代替检查状态码的精确匹配。

raise_for_status 调用会在 HTTP 请求返回不成功的状态码时引发 HTTPError

发送原始数据

如果您想发送一些 POST 数据或发送一个未进行自动 JSON 编码的 JSON 负载

- provider: play_requests
  type: POST
  url: http://something/1
  parameters:
    data: '{"foo"  : "bar"    }'

重定向

默认情况下,requests 将为除了 HEAD 之外的所有动词执行位置重定向

您可以通过调整 allow_redirects 选项来禁用或启用重定向

- provider: play_requests
  type: POST
  url: http://something/1
  variable: myvar
  variable_expression: response.json()
  assertion: response.status_code == 200
  parameters:
    allow_redirects: false
    json:
      foo: bar

Twitter

pytest-play 的推文发生在这里

致谢

此包是用 Cookiecutter 和基于 audreyr/cookiecutter-pypackage 项目模板的 cookiecutter-play-plugin 创建的。

变更日志

0.0.5 (2019-04-08)

  • 管理 cookies 并为您准备好,这样您就无需自己使用 auth=('username', 'password') 创建 cookie 头

0.0.4 (2019-01-25)

  • 支持新的基于 YAML 的 pytest-play >= 2.0 语法(不再支持 json)

0.0.3 (2018-01-22)

  • 移除条件选项(已由 pytest-play 的 skip_condition 实现)

  • 文档改进

0.0.2 (2018-01-16)

  • 重构内部方法

  • 移除与默认负载合并的命令(已在 pytest-play >= 1.1.0 中实现)

0.0.1 (2018-01-10)

  • 首次发布

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

play_requests-0.0.5.tar.gz (21.6 kB 查看哈希)

上传时间

构建分发

play_requests-0.0.5-py2.py3-none-any.whl (9.9 kB 查看哈希)

上传时间 Python 2 Python 3

支持者