pytest + yaml 框架 -11.全局 base_url 配置

2023-01-03 14:03:16 浏览数 (1)

前言

一个完整的url 地址由环境地址和接口地址拼接而成,环境地址是可变的,可以部署到测试环境,uat联调环境等不同的环境。 不管部署到哪个环境,接口的地址是不可变的,通常需要一个全局base_url 地址做到环境可切换。 pip 安装插件

代码语言:javascript复制
pip install pytest-yaml-yoyo

base_url 全局配置功能在 v1.0.9 版本上实现

环境地址

在接口测试中,通常会把环境 base_url 地址独立出来 比如一个完整的请求http://httpbin.org/get 那么可以分成环境地址http://httpbin.org 和 接口地址 /get

在 yaml 用例中,可以把 base_url 单独拿出来放到 config 下

代码语言:javascript复制
config:
  base_url: http://httpbin.org

get示例:
  name: get demo
  request:
    method: GET
    url: /get
  validate:
    - eq: [status_code, 200]

post示例:
  name: get demo
  request:
    method: POST
    url: /post
  validate:
    - eq: [status_code, 200]

全局 base_url 配置

从项目的角度讲,测试项目接口的 base_url 都是一样的,所以我们只需全局设置一个就行了,不需要每个yaml 文件中重复去写。 于是可以在pytest.ini 里面配置全局base_url

代码语言:javascript复制
[pytest]

base_url = http://httpbin.org

那么yaml用例就不需要写 base_url 了,默认会引用pytest.ini的全局配置

yaml 用例1

代码语言:javascript复制
config:
  name: demo1

get示例:
  name: get demo
  request:
    method: GET
    url: /get
  validate:
    - eq: [status_code, 200]

yaml 用例2

代码语言:javascript复制
config:
  name: demo2

post示例:
  name: get demo
  request:
    method: POST
    url: /post
  validate:
    - eq: [status_code, 200]

除了可以在pytest.ini 配置base_url 参数,也可以通过命令行参数--base-url去设置

代码语言:javascript复制
pytest --base-url=http://httpbin.org

复杂情况

当设置了全局base_url 后,有部分用例的环境地址不是同一个的时候,我们可以在yaml文件中config 配置 base_url 去覆盖全局配置环境地址。

代码语言:javascript复制
config:
  base_url: http://httpbin.org

get示例:
  name: get demo
  request:
    method: GET
    url: /get
  validate:
    - eq: [status_code, 200]

或者请求 url 地址用绝对地址

代码语言:javascript复制
config:
  name: demo

get示例:
  name: get demo
  request:
    method: GET
    url: http://httpbin.org/get
  validate:
    - eq: [status_code, 200]

使用优先级

环境地址优先级使用如下: 1.全局配置命令行参数--base-url优先级大于 pytest.ini 文件中的base_url 配置。 2.yaml 文件 config 中的base_url 优先级大于全局配置 3.request 请求的url 如果是绝对地址,那么base_url 无效

总的来说 : url 绝对地址 > config 中的base_url > 命令行参数--base-url > pytest.ini 文件中的base_url

0 人点赞