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

前言

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

pip install pytest-yaml-yoyo

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

环境地址

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

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

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

[pytest]

base_url = http://httpbin.org

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

yaml 用例1

config:
  name: demo1

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

yaml 用例2

config:
  name: demo2

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

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

pytest --base-url=http://httpbin.org

复杂情况

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

config:
  base_url: http://httpbin.org

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

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

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
网易云完整视频课程https://study.163.com/course/courseMain.htm?courseId=1213419817&share=2&shareId=480000002230338
报名咨询wx:283340479 (已报名的同学学习过程中有问题,都可以协助解决)

posted @ 2022-12-09 23:03  上海-悠悠  阅读(757)  评论(0编辑  收藏  举报