# -*- coding: utf-8 -*-
# @Time : 2023/6/27 15:34
# @Author : yanfa
# @user : yanfa
# @File : test_pytest_for_develop_plugins.py
# @remark: Pytest 插件开发、参数详解、打包发布
""""""
import pytest
"""一、pytest编写插件1-修改默认编码
pytest_collection_modifyitems收集上来的测试用例实现定制化功能
解决问题:
1、自定义用例执行顺序
2、解决编码问题(中文的测试用例名称容易乱码)
3、自动添加标签
示例: 测试用例收集完成时,将收集的用例名name和用例标识nodeid的中文信息显示在控制台上-一般放在项目根目录的conftest.py
def pytest_collection_modifyitems(items):
print("hook: 编码处理开始")
for i in items:
i.name=i.name.encode("utf-8").decode("unicode_escape")
i._nodeid=i.nodeid.encode("utf-8").decode("unicode_escape")
print("hook: 编码处理结束")
"""
# 例子 配置见conftest.py,如果不处理会乱码
# @pytest.mark.parametrize('name',['张三'])
# def test_encode(name):
# print(f"name:{name}")
# 输出
# ================ test session starts ======================
# platform darwin -- Python 3.9.6, pytest-7.3.1, pluggy-1.0.0
# rootdir: /Users/yanfa/PycharmProjects/hogwarts
# configfile: pytest.ini
# plugins: ordering-0.6, xdist-3.3.1
# collecting ...
# hook: 编码处理开始
# hook: 编码处理结束
# collected 1 items
# thematic_courses/pytest_and_allure/pytest_L4/pytest_for_plugins/test_pytest_for_develop_plugins.py::test_encode[张三]
# hook: 前置处理
# hook: 执行用例
# name:张三 PASSED
# hook: 后置处理
# =============== 1 passed in 0.01s =================
"""二、pytest编写插件2-添加命令行参数
代码示例:
def pytest_addoption(parser):
# group 将下面所有的option都展示在这个group下,
# 什么是group,pytest -h查看帮助文档中,找到logging:,它下面又有 --log-level=LEVEL,那么这就是一个组
mygroup = parser.getgroup("hogwarts")
group.addoption(
'--env', #注册一个命令行选项
default='test', #参数默认值
dest = 'env', #存储的变量,为属性命令,可以使用option对象访问这个值
help='set your run env' # 帮助信息,参数的描述信息
)
@pytest.fixture(scope='session'):
def cmdoption(request):
return request.config.getoption("--env")
查看是否注册成功:点击conftest.py右键open in terminal找到hogwarts
效果:
hogwarts:
--env=ENV set your run env
"""
# 例子:逻辑见conftest.py,
# 直接执行会取test文件默认值,输出('test', {'username': 152155555555, 'password': 123456})
# 命令行执行:pytest --env=online xxx/xxx/.py 会取online文件值,输出 ('online', {'username': 15266666666, 'password': 123456})
def test_addoption(cmdoption):
print(cmdoption)
"""三、打包发布
1、打包发布到pypi
发布到:www.pypi.org
代码上传到:github
2、打包项目构成
源码包、setup.py、测试包
说明文档:www.pypi.org 点击help,找到Basics下点击How do I package and publish my code for PyPI?,点击packaging tutorial
3、打包命令
依赖包安装:
pip install setuptools python的包管理工具,负责安装和发布,尤其是安装拥有依赖关系的包
pip install wheel 生成*.whl格式的安装包,本质上是一个压缩包
打包命令:
python setup.py sdist bdist_wheel
查找包:pip list |grep pytest_encode
例子:setup.py见https://ceshiren.com/t/topic/14156
4、发布至https://pypi.org/
见https://packaging.python.org/en/latest/tutorials/packaging-projects/
mac:
python3 -m pip install --upgrade pip
python3 -m pip install --upgrade twine
python3 -m twine upload --repository testpypi dist/*
python3 -m pip install --index-url https://test.pypi.org/simple/ --no-deps example-package-YOUR-USERNAME-HERE
"""