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. .NET7 gRPC JSON转码+OpenAPI

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

  2. 【Virt.Contest】CF1215(div.2)

    第二次打虚拟赛. CF 传送门 T1:Yellow Cards 黄色卡片 中规中矩的 \(T1\). 首先可以算出一个人也不罚下时发出的最多黄牌数: \(sum=a1*(k1-1)+a2*(k2-1) ...

  3. Debian Linux 的安装

    Debian Linux 的安装 作者:Grey 原文地址: 博客园:Debian Linux 的安装 CSDN:Debian Linux 的安装 说明 本安装说明是基于 Windows 10 下 V ...

  4. 2.3 Goland快捷键

    1 新建 Alt + Insert Alt + Enter 2 移动 Alt + 上下箭头:以函数为单位移动 Ctrl + G : 定位到行 Ctrl + W :可以选择单词继而语句继而行继而函数Ct ...

  5. mysql不需要密码,乱输入密码就能进去。。。。解决

    为什么MySQL 不用输入用户名和密码也能访问 今天后天连接数据库时密码写错了,却发现后台能够拿到数据库中的数据,又故意把用户名和密码都写错,结果还是可以.这就意味着任何一个人只要登入服务器,就可以轻 ...

  6. 10 STL-list

    ​ 重新系统学习c++语言,并将学习过程中的知识在这里抄录.总结.沉淀.同时希望对刷到的朋友有所帮助,一起加油哦!  生命就像一朵花,要拼尽全力绽放!死磕自个儿,身心愉悦! 写在前面,本篇章主要介绍S ...

  7. vue cli2安装

    安装nodejs npm install -g npm npm自动更新到最新版本 node -v或者npm -v 查看nodejs是否安装成功   1 2 配置淘宝镜像 npm config set ...

  8. Kafka教程(二)API开发-生产者、消费者、topic

    一.地址 1.实时更新的思维导图 https://www.mubucm.com/doc/4uqlpedefuj 2.图片 二.具体内容   5.producer生产者   demo   发送pro.s ...

  9. mysql下载及环境配置

    目录 mysql简介 mysql下载 启动mysql 系统mysql服务的启动 mysql虚拟环境配置 (可以直接看这个) 卸载说明 mysql简介 为什么是mysql? 虽然数据库软件有很多 但是操 ...

  10. .NET周报【12月第2期 2022-12-15】

    国内文章 九哥聊Kestrel网络编程第一章:开发一个Redis服务器 https://mp.weixin.qq.com/s/HJYnBE-7wbvkAYHxQaq3eQ 我和拥有多个.NET 千星开 ...