首页 > 其他分享 >Pytest插件之pytest-base-url切换测试环境

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

时间:2022-10-12 11:00:36浏览次数:52  
标签:__ 插件 url -- pytest base config

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.",
    )
 ​
 

标签:__,插件,url,--,pytest,base,config
From: https://www.cnblogs.com/wuxianfeng023/p/16783761.html

相关文章

  • IDEA美化主题插件Xcode Dark theme & Material Theme UI插件保姆级教程
    目录......
  • 【精品】vue3中setup语法糖下通用的分页插件
    注意:本博客理论基础:https://blog.51cto.com/lianghecai/5743179效果自定义分页插件:PagePlugin.vue<scriptsetuplang="ts">//total:用来传递数据总条数//pageSize......
  • 特牛的win资源管理器PDF预览插件
    步骤一:下载控件包后解压(废话)步骤二:32位系统:将32位控件复制到C:\Windows\System32    64位系统:将64位控件复制到C:\Windows\SysWOW64  步骤三:win徽标+X  打开Win......
  • 基于Nonebot2搭建QQ机器人(三):插件高级
    目录Nonebot2插件高级一、工作流程1、概念2、简介3、事件处理4、调用协议端接口二、定时任务1、安装插件2、快速使用3、配置插件三、匹配规则1、创建规则2、创......
  • 一个有点像舔狗的插件
    小P读完需要3分钟速读仅需1分钟大家好,我是小P。你是否有这样的苦恼?给暗恋对象发消息等来的都是“嗯”和“我要去洗澡了”?工作中领导和同事只好指责,没有人关心你?就......
  • IDEA 使用 Docker 插件,实现一键自动化部署
    一、docker开启远程连接访问​首先我们要开启docker的远程连接访问。保证不是docker所在的服务器,也能够远程访问docker。Linux版的docker:修改docker.service文件,添加监听......
  • [免费]触控 UITouch 的 UE 虚幻引擎插件
    ##大家好!##我是:Aimo\_皑墨我来介绍一下这个插件!描述:插件一般用于触控设备的使用如(安卓手机,平板)等触控设备>GitHub下载地址:https://github.com/Aimo......
  • 记录一次关于使用leaflet draw 插件叠加图层删除绘制层无法删除的问题
    问题描述业务逻辑是这样的:再地图上已经绘制了一个多边形区域,然后需要再绘制的区域下再绘制下级区域,使用插件可以正常绘制并保存绘制数据,然后再回显编辑的时候,此时地图展示......
  • VS插件Git的使用
    1、克隆代码。2、新建自己的分支3、切换分支4、代码更改文件数5、代码暂存至本地6、本地代码暂存次数7、代码推送至远程8、查看修改记录9、查看某次提......
  • 将Curl转为Python的方法
    怎样将Curl转为Python的方法作为一名后端程序员,在服务器调试的过程中,使用curl命令为我们调试接口带来了很多的方便,极大地提高了效率;如下可以实现Get请求:curl'http://ba......