Pytest插件之pytest-base-url切换测试环境

安装

 pip install pytest-base-url

应用场景

  • 利用参数--base-url或者配置(pytest.ini中base_url)来切换url

用法:命令行参数

  • 测试代码:类似于fixture

     #test_baseurl.py
     import requests
     def test_baseurl(base_url):  #注意跟命令行的差别,下划线还是-
         assert requests.get(base_url).status_code == 200
  • 命令行

     pytest --base-url https://www.songqinnet.com/  test_baseurl.py
  • 一种典型的错误

     from selenium import webdriver
     import pytest
     def test_a01(base_url):
         driver = webdriver.Chrome()
         driver.get(base_url)
         from time import sleep
         sleep(5)
     #错误的做法,参数合并到一起
     if __name__ == '__main__':
         pytest.main(['-sv','--base-url https://cn.bing.com',__file__])
         #报这个错
         #INTERNALERROR> OSError: [WinError 123] 文件名、目录名或卷标语法不正确。: 'D:\\pythonProject\\AutoTest\\PublicLessson\\pytest常用插件实例演示\\test_baseurl\\--base-url https:\\cn.bing.com'
     ​
     #正确的做法,参数分开写,当然在命令行执行是ok的,不会有二义性
     if __name__ == '__main__':
         pytest.main(['-sv','--base-url','https://www.baidu.com',__file__])

用法:pytest.ini

  • pytest.ini示例

     [pytest]
     base_url = https://www.songqinnet.com/
  • 不要加引号

源码解读

pytest-base-url插件极其简单,是用来学习插件编写的非常好的DEMO

  • D:\Python39\Lib\site-packages\pytest_base_url\plugin.py

  • 从源码可以看出

    • base_url就是个fixture(前文提到类似fixture),看了源码你能肯定了

    • _verify_url是自动生效的

    • pytest_addoption中加了一些参数,是的多数插件都会去加一些命令行参数

      • --base-url

      • --verify-base-url

 # This Source Code Form is subject to the terms of the Mozilla Public
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 ​
 import os
 ​
 import pytest
 ​
 ​
 @pytest.fixture(scope="session")
 def base_url(request):
     """Return a base URL"""
     config = request.config
     base_url = config.getoption("base_url")
     if base_url is not None:
         return base_url
 ​
 ​
 @pytest.fixture(scope="session", autouse=True)
 def _verify_url(request, base_url):
     """Verifies the base URL"""
 ​
     verify = request.config.option.verify_base_url
     if base_url and verify:
         # Lazy load requests to reduce cost for tests that don't use the plugin
         import requests
         from requests.packages.urllib3.util.retry import Retry
         from requests.adapters import HTTPAdapter
 ​
         session = requests.Session()
         retries = Retry(backoff_factor=0.1, status_forcelist=[500, 502, 503, 504])
         session.mount(base_url, HTTPAdapter(max_retries=retries))
         session.get(base_url)
 ​
 ​
 def pytest_configure(config):
     if hasattr(config, "workerinput"):
         return  # don't run configure on xdist worker nodes
     base_url = config.getoption("base_url") or config.getini("base_url")
     if base_url is not None:
         config.option.base_url = base_url
         if hasattr(config, "_metadata"):
             config._metadata["Base URL"] = base_url
 ​
 ​
 def pytest_report_header(config, startdir):
     base_url = config.getoption("base_url")
     if base_url:
         return "baseurl: {0}".format(base_url)
 ​
 ​
 def pytest_addoption(parser):
     parser.addini("base_url", help="base url for the application under test.")
     parser.addoption(
         "--base-url",
         metavar="url",
         default=os.getenv("PYTEST_BASE_URL", None),
         help="base url for the application under test.",
    )
     parser.addoption(
         "--verify-base-url",
         action="store_true",
         default=not os.getenv("VERIFY_BASE_URL", "false").lower() == "false",
         help="verify the base url.",
    )
 ​
 

Pytest插件之pytest-base-url切换测试环境的更多相关文章

  1. pytest.8.使用pytest做简单的接口测试

    From: http://www.testclass.net/pytest/test_api/ 背景 我们现在需要测试v2ex网站的查看论坛节点信息的api.具体如下: 节点信息 获得指定节点的名字, ...

  2. iOS如何在一个包上切换正式环境和测试环境

    最近项目处于测试阶段,所以免不了每天都得打包给测试人员,由于我们公司规模比较大,项目环境也分为了三种:测试环境.预上线(预生产)环境.上线(生产)环境.所以每到了测试后期,每天打包的时间也占了不少,遇 ...

  3. 无需编译app切换线上、测试环境

    在咱们测试过程中,经常需要切换测试环境和线上环境.大致有如下几个方案. 一.服务器地址编译到app中 此种方式需要在代码里保存两套配置,一套指向线上,一套指向测试.通过编译参数分别生成测试包.线上包. ...

  4. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(25)-Fiddler如何优雅地在正式和测试环境之间来回切换-下篇

    1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考. 2.实际工作场景 2.1问题场景 (1)已发布 ...

  5. 【测试环境】java|jdk|ant

    很多文章都有写啊,我只是汇总一下:现在java已经是1.7+了,但是我们很多的时候开发环境还是在1.5.16左右,需要自己去配置: 0.为了方便切换测试环境,我们可以把jdk放到一个比较固定的位置.比 ...

  6. pytest一:pytest 框架介绍

    pytest 是 python 的一种单元测试框架,与python 自带的 unittest测试框架类似,但是比 unittest 框架使用起来更简洁,效率更高.根据pytest 的官方网站介绍,它具 ...

  7. pytest系列(四)- pytest+allure+jenkins - 持续集成平台生成allure报告

    pytest是什么 pytest是python的一款测试框架,拥有unittest的功能并比它更丰富. allure是什么 有非常多的优秀的测试框架,但却是有非常少优秀的报告工具可以展示非常清楚的用例 ...

  8. 《吐血整理》高级系列教程-吃透Fiddler抓包教程(24)-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇

    1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考. 2.实际工作场景 2.1问题场景 (1)已发布 ...

  9. 转 通过 spring 容器内建的 profile 功能实现开发环境、测试环境、生产环境配置自动切换

                                      软件开发的一般流程为工程师开发 -> 测试 -> 上线,因此就涉及到三个不同的环境,开发环境.测试环境以及生产环境,通常 ...

  10. 第一篇 Postman的初级使用之设置环境快速切换生成环境与测试环境

    POSTMAN是有谷歌的开源工具,在开发调试.测试执行过程中使用频率非常广泛,本文将记录一些postman在测试中常见的一些配置和使用方法 一.基本的页面区域 略,很简单,大家都会看,再有,学习下面的 ...

随机推荐

  1. LoadRunner11脚本小技能之添加请求头+定义变量+响应内容乱码转换打印+事务拆分

    一.添加请求头 存在一些接口,发送请求时需要进行权限验证.登录验证(不加请求头时运行脚本,接口可能会报401等等),所以需要在脚本中给对应请求添加请求头.注意:请求头需在请求前添加,包含url类.su ...

  2. .NET7 gRPC JSON转码+OpenAPI

    gRPC JSON转码 gRPC JSON 转码允许浏览器应用调用 gRPC 服务,就像它们是使用 JSON 的 RESTful API 一样. 浏览器应用不需要生成 gRPC 客户端或了解 gRPC ...

  3. windows socket网络编程--事件选择模型

    目录 事件选择模型概述 API详解 工作原理 代码实现 事件选择模型概述 Winsock提供了另一种有用的异步事件通知I/O模型--WSAEventSelect模型.这个模型与WSAAsyncSele ...

  4. Phalcon notes

    1. 半原生数据查询: echo $realUser->getReadConnection()->getSQLStatement();die;

  5. label studio 结合 MMDetection 实现数据集自动标记、模型迭代训练的闭环

    前言 一个 AI 方向的朋友因为标数据集发了篇 SCI 论文,看着他标了两个多月的数据集这么辛苦,就想着人工智能都能站在围棋巅峰了,难道不能动动小手为自己标数据吗?查了一下还真有一些能够满足此需求的框 ...

  6. 07#Web 实战:实现 GitHub 个人主页项目拖拽排序

    实现效果图 GitHub 和 Gitee 个人主页中可以对自己的项目进行拖拽排序,于是我就想自己实现一个.本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程. ...

  7. 一次MTU问题导致的RDS访问故障

    导语 VPN是一种通过公网连接两个或多个私网站点的专用网络,使得这些站点仿佛是通过专线连接在一起.IPSec是一套协议框架,用于保证数据传输的私密性,完整性,真实性.但是VPN网络经常会带来一些连通性 ...

  8. Fastjson漏洞+复现

    1.漏洞介绍 ​​FastJson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性.通过查找代码中相关的方法,即可构造出一些恶意利用链. ...

  9. JavaEE Day14 Servlet&HTTP&Request

    今日内容 1.Servlet 2.HTTP协议 3.Request 一.Servlet 1.概念 2.步骤 3.执行原理 4.生命周期 5.Servlet 3.0注解配置 6.Servlet体系结构 ...

  10. frp内网穿透(已验证)

    # 云服务器frp内网穿透教程 软件源码在https://github.com/fatedier/frp/releases上,根据系统类型,按需下载 教程术语描述 > A 是有固定IP的云服务器 ...