Pytest插件之pytest-base-url切换测试环境
2024-09-08 06:55:09
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.",
)
最新文章
- 二叉树的实现与一些基本操作(C++环境)
- C#之系统自带保存属性
- Autofac 的属性注入方式
- 从一个例子看现代C++的威力
- swift学习笔记之-函数
- JS 之高级函数
- C#类的成员初始化顺序
- js检测对象的类型
- Windows编程中的若干难点 - Windows程序设计(SDK)007
- SqlServer sysobjects_table
- 利用JAVA多线程来提高数据处理效率
- 使用mybatis assembly插件打成tar包,在linux系统中运行服务
- Docker容器的基本了解和命令
- (24)How generational stereotypes hold us back at work
- LeetCode--021--合并两个有序链表(java)
- Python sqlalchemy的基本使用
- how to istall virtualbox on centos
- MySql存储过程与函数详解
- 多种方法实现div两列等高(收集整理)
- Kubernetes v1.10----部署kubernetes-dashboard v1.83
热门文章
- JUC学习笔记——共享模型之内存
- 直播CDN调度技术关键挑战与架构设计
- 云原生之旅 - 12)使用 Kaniko 在 Kubernetes上构建 Docker 容器镜像
- 同步与异步、阻塞与非阻塞、创建进程的多种方式、进程间数据隔离、进程的join方法、IPC机制等
- CPU体系(1):内存模型 &; CPU Cache一致性 (待整理)
- Android Studio打开时报错if you already hava 64-bit JDK installed,define a JAVA_HOME
- 关于urllib.request解析网站不能decode
- 第2-4-8章 规则引擎Drools实战(1)-个人所得税计算器
- 第二章:seaborn调色板
- 乐观锁思想在JAVA中的实现——CAS