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

最新文章

  1. 二叉树的实现与一些基本操作(C++环境)
  2. C#之系统自带保存属性
  3. Autofac 的属性注入方式
  4. 从一个例子看现代C++的威力
  5. swift学习笔记之-函数
  6. JS 之高级函数
  7. C#类的成员初始化顺序
  8. js检测对象的类型
  9. Windows编程中的若干难点 - Windows程序设计(SDK)007
  10. SqlServer sysobjects_table
  11. 利用JAVA多线程来提高数据处理效率
  12. 使用mybatis assembly插件打成tar包,在linux系统中运行服务
  13. Docker容器的基本了解和命令
  14. (24)How generational stereotypes hold us back at work
  15. LeetCode--021--合并两个有序链表(java)
  16. Python sqlalchemy的基本使用
  17. how to istall virtualbox on centos
  18. MySql存储过程与函数详解
  19. 多种方法实现div两列等高(收集整理)
  20. Kubernetes v1.10----部署kubernetes-dashboard v1.83

热门文章

  1. JUC学习笔记——共享模型之内存
  2. 直播CDN调度技术关键挑战与架构设计
  3. 云原生之旅 - 12)使用 Kaniko 在 Kubernetes上构建 Docker 容器镜像
  4. 同步与异步、阻塞与非阻塞、创建进程的多种方式、进程间数据隔离、进程的join方法、IPC机制等
  5. CPU体系(1):内存模型 & CPU Cache一致性 (待整理)
  6. Android Studio打开时报错if you already hava 64-bit JDK installed,define a JAVA_HOME
  7. 关于urllib.request解析网站不能decode
  8. 第2-4-8章 规则引擎Drools实战(1)-个人所得税计算器
  9. 第二章:seaborn调色板
  10. 乐观锁思想在JAVA中的实现——CAS