使用click进行对测试工具进行封装

前情分析:

1. 当前被测系统被分为前端,调度层和数据层。每一层都有单独测试脚本进行测试。

2. 测试脚本没有进行统一管理,使用方式各异,且没有统一的文档对测试脚本进行解释。

3. 测试节点十几个,每个节点都需要进行部署,没有对测试脚本进行统一的管理。

完成封装后的效果:

1. 所有脚本都统一通过命令行进行调用 例如:test_tools scheduler smoke -h 192.168.1.1 (使用scheduler 下的smoke脚本 对h的参数传入值为192.168.1.1)

2. 所有测试工具都集成进入到test_tools中。可以通过二级参数进行区分调用 (test_tools scheduler smoke 和 test_tools manager smoke 是两个不同的脚本 分属于不同的模块中)

3. 通过对工程进行打包,实现包的分发及版本控制。新增节点安装, 使用pip3 install xxx 即可

具体实现:

主入口文件:test_tools.py

import os
import sys

sys.path.append(os.path.abspath(os.path.dirname(os.path.abspath(os.path.dirname(__file__)))))

import click

from tools.app_cmd import commands as group1
from tools.storage_cmd import commands as group2


@click.group()
def client():
    """欢迎使用工具

    可以添加参数scheduler、storage、进行查看相关模块的测试工具

    请使用 '--help' 查看具体传参
    """
    pass


client.add_command(group1.scheduler)
client.add_command(group2.storage)

if __name__ == '__main__':
    client()

该文件定义了命令行工具的主入口及二级命令的注入

二级命令菜单commands.py

import click


@click.group()
def scheduler():
    """调度层测试工具"""
    pass


@scheduler.command()
@click.option('--host', '-h', help='server addr as 10.10.96.10:30100', required=True, type=str)
@click.option('--access', '-a', help='access_id default 1006/1234', required=False, default='1006/1234', type=str)
@click.option('--secret', '-s', help='secret_key default abcd', required=False, default='abcd', type=str)
@click.option('--secure', '-ssl', help='if true use HTTPS connect ', required=False, default=False, type=bool)
@click.option('--filesize', '-size', help='file size default 4k', required=False, default='4k', type=str)
def smoke(host, access, secret, secure, filesize):
    """
    调度层冒烟测试
    """
    hosts = host.split(',')
    pool = Pool(len(hosts))
    for h in hosts:
        logger.info(f'host={h}, access={access}, secret={secret}, secure={secure}, fileSize={filesize}')
        pool.apply_async(app_smoke, (h, access, secret, secure, filesize,))
    pool.close()
    pool.join()

该文件定义了二级命令scheduler ,将smoke方法注入到scheduler中同时通过@click.option将所需要的参数从外部注入到smoke方法中

setup.py(打包文件)

from setuptools import setup,find_packages

setup(
    name='test-tools',
    version='2.5.5',
    description=' test tools',
    author='Tester',
    author_email='4@163.com',
    url='online.net',
    keywords='test_tools',
    platforms='Linux',
    # project_urls={
    #       'Documentation': 'https://packaging.python.org/tutorials/distributing-packages/',
    #       'Funding': 'https://donate.pypi.org',
    #       'Source': 'https://github.com/pypa/sampleproject/',
    #       'Tracker': 'https://github.com/pypa/sampleproject/issues',
    # },
    packages=find_packages(include=['Application','Application.*','Common','Common.*','Config','Config.*'],),
    include_package_data=True,
    py_modules=['Config.app_case'],
    # install_requires=['numpy>=1.14', 'tensorflow>=1.7'],
    python_requires='>=3',
    install_requires=[
        'Click',
        
        'pyyaml',
        'func-timeout',
        'ddt',
        'colorlog',
        'openpyxl',
        'prettytable',
        'paramiko'
    ],
    entry_points='''
             [console_scripts]
             iceberg=tools.iceberg:client
         ''',
   
    exclude_package_data={
        'bandwidth_reporter': ['*.pyc']
    }
)

MANIFEST.in(打包文件)

recursive-include Config/ *.ini
recursive-include Driver/function/RPCplus/ *.bin

在setup.py中 主要是对打包的信息进行了说明 其核心代码为entry_points 通过该命令可以将test_tools注入到系统命令行。MANIFEST.in中的recursive-include主要说明除去py文件 还应该打包那些文件。

完成以上代码编写后 ,可以通过一下命令完成打包操作

python -m setup check #先检测下setup本身是否有语法侧面错误
 
python -m setup build #编译文件
 
python -m setup sdist #打包

 打包完成后,对应的文件在当前目录下dist文件夹中生成对应的tar压缩文件

使用pip3 install xxx。tar安装即可

遇到的坑:

  1. 使用click 子命令最多可以添加20个子命令 再多就不展示了 
  2. 使用click.option 进行传参时 其中--xxx 中的xxx为下方方法的入参名  一定要保持一致  否则不认
  3. click中如果不是必填, 建议给个非空的默认值,方便调试
  4. 涉及到路径参数,不要使用click内置的类型去判断 直接使用type=str 进行解析
  5. 工程内文件夹都使用package 否则不会被setup 打包 
  6.  MANIFEST.in 内文件一定要有扩展名 直接写文件名好像不生效
  7. 配置文件尽量写到固定目录 ,然后手动去修改  否则你要一遍一遍的去系统目录找配置   神烦
  8. 在linux 中,setup成功 但是无法使用test-tools命令 解决办法:确认当前python3版本,使用whereis python3命令 查找python3的目录 逐一查找是否包含当前版本的python3.如果包含 查看其中的bin目录是否存在iceberg可执行文件 .如果存在 则编辑/etc/profile 增加一行export PATH="/usr/local/nginx/sbin/:$PATH"       source  /etc/profile

打包部分参考了打包带资源文件的Python项目到pypi_piglite的专栏-CSDN博客_python 打包 资源文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试小胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值