IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 使用click进行对测试工具进行封装 -> 正文阅读

[开发测试]使用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 打包 资源文件

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-02-28 15:56:11  更:2022-02-28 15:56:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:20:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码