乐于分享
好东西不私藏

如何像交付软件一样交付测试工具?这份SoloX一键安装器实战指南给了满分答案

如何像交付软件一样交付测试工具?这份SoloX一键安装器实战指南给了满分答案

点击蓝字

关注我们

接上篇《移动端测试提效:把SoloX打包成一键安装器,团队直接拿走用》,本篇我们将继续学习:

第五部分:执行打包

 5.1 使用 spec 文件打包

确保你在项目根目录下,并且虚拟环境已激活:

pyinstaller SoloX安装器.spec

打包过程输出:

5.2 打包输出目录结构

打包完成后,会生成以下目录:

solox-installer/├── build/                    # 构建临时文件(可删除)│   └── SoloX安装器/├── dist/                     # 最终输出目录│   └── SoloX安装器.exe      # 可执行文件

5.3 验证打包结果

在`dist`目录下找到`SoloX安装器.exe`,双击运行测试,此时会:

1.弹出命令行窗口

自动执行 4 个步骤:

[1/4] 检查 Python → 没有就提示下载安装

[2/4] 检查 ADB → 自动配置(已打包在 exe 里)

[3/4] 安装 SoloX → 用 pip 从网上下载安装

[4/4] 启动 SoloX → 运行性能测试服务

2.最终结果:

我们可以:打开浏览器访问  http://172.25.16.1:50003 使用 SoloX

 5.4 创建自动化打包脚本(可选)

为了简化打包流程,可以创建 `build_exe.py`:

"""自动化打包脚本"""import osimport subprocessimport shutildef clean_build():    """清理旧的构建文件"""    dirs_to_clean = ['build''dist']    for dir_name in dirs_to_clean:        if os.path.exists(dir_name):            print(f"清理 {dir_name} 目录...")            shutil.rmtree(dir_name)def check_dependencies():    """检查依赖文件"""    ifnot os.path.exists('release/adb'):        print("警告: 未找到 release/adb 文件夹")        print("请确保 ADB 工具已放置在正确位置")        response = input("是否继续打包? (y/n): ")        if response.lower() != 'y':            return False    return Truedef build():    """执行打包"""    print("开始打包 SoloX 安装器...")    cmd = ['pyinstaller''SoloX安装器.spec']    try:        subprocess.run(cmd, check=True)        print("\n✓ 打包成功!")        print(f"输出文件: dist/SoloX安装器.exe")        return True    except subprocess.CalledProcessError:        print("\n✗ 打包失败")        return Falsedef main():    print("=" * 50)    print("SoloX 安装器打包工具")    print("=" * 50)    # 检查依赖    ifnot check_dependencies():        return    # 询问是否清理    response = input("\n是否清理旧的构建文件? (y/n): ")    if response.lower() == 'y':        clean_build()    # 执行打包    if build():        print("\n打包完成!可以在 dist 目录找到生成的 exe 文件")    else:        print("\n打包失败,请检查错误信息")if __name__ == "__main__":    main()

使用方法:

python build_exe.py

第六部分:常见问题与解决方案

 6.1 问题:找不到模块

错误信息:

ModuleNotFoundErrorNo module named 'xxx'

解决方案:

在 spec 文件中添加隐藏导入:

a = Analysis(    ...    hiddenimports=['urllib.request''pathlib'],    ...)

 6.2 问题:打包后文件过大

原因:

PyInstaller 会打包所有依赖,包括不需要的模块。

解决方案:

1. 使用虚拟环境,只安装必要的包

2. 在 spec 文件中排除不需要的模块:

a = Analysis(    ...    excludes=['tkinter''matplotlib''numpy'],    ...)

3. 启用 UPX 压缩:

exe = EXE(    ...    upx=True,    ...)

 6.3 问题:ADB 文件未打包

症状:

运行 exe 时提示找不到 ADB。

排查步骤:

1. 检查 spec 文件中的 datas 配置是否正确

2. 确认 release/adb 目录存在且包含必要文件

3. 重新打包并检查 build 日志

验证方法:

解压 exe 文件(使用 7-Zip 等工具),检查是否包含 adb 文件夹。

6.4 问题:sys.executable 指向错误

症状:

打包后程序调用 pip 时出现死循环或错误。

解决方案:

使用本文提供的 `get_system_python()` 函数,而不是直接使用 `sys.executable`。

6.5 问题:杀毒软件误报

原因:

PyInstaller 打包的程序可能被杀毒软件误判为病毒。

解决方案:

1. 使用代码签名证书对 exe 进行签名

2. 向杀毒软件厂商提交白名单申请

3. 在 spec 文件中添加版本信息:

exe = EXE(    ...    version='version_info.txt',    ...)

创建 `version_info.txt`:

VSVersionInfo(  ffi=FixedFileInfo(    filevers=(1000),    prodvers=(1000),    mask=0x3f,    flags=0x0,    OS=0x40004,    fileType=0x1,    subtype=0x0,    date=(00)  ),  kids=[    StringFileInfo(      [      StringTable(        u'040904B0',        [StringStruct(u'CompanyName'u'Your Company'),        StringStruct(u'FileDescription'u'SoloX Installer'),        StringStruct(u'FileVersion'u'1.0.0.0'),        StringStruct(u'ProductName'u'SoloX Installer'),        StringStruct(u'ProductVersion'u'1.0.0.0')])      ]),     VarFileInfo([VarStruct(u'Translation', [10331200])])  ])

6.6 问题:打包后启动慢

原因:

单文件模式需要解压到临时目录。

解决方案:

1. 改用多文件模式(onedir)

2. 减少打包的文件数量

3. 使用 SSD 硬盘

第七部分:优化与进阶

7.1 添加图标

为 exe 文件添加自定义图标:

exe = EXE(    ...    icon='icon.ico',  # 图标文件路径    ...)

图标要求:

● 格式:.ico

● 推荐尺寸:256×256 或 128×128

 7.2 隐藏控制台窗口

如果你的程序有 GUI 界面,可以隐藏控制台:

exe = EXE(    ...    console=False,  # 隐藏控制台    ...)

注意:隐藏控制台后,print 输出将不可见,需要使用日志文件或 GUI 显示信息。

 7.3 添加启动画面

对于启动较慢的程序,可以添加启动画面:

exe = EXE(    ...    splash='splash.png',  # 启动画面图片    ...)

 7.4 多平台打包

PyInstaller 不支持交叉编译,需要在目标平台上打包:

● Windows exe:在 Windows 上打包

● macOS app:在 macOS 上打包

● Linux 可执行文件:在 Linux 上打包

跨平台代码示例:

import sysimport platformdef get_platform_specific_path():    if sys.platform == 'win32':        return'C:\\Program Files\\MyApp'    elif sys.platform == 'darwin':        return'/Applications/MyApp'    else:        return'/usr/local/bin/myapp'

 7.5 自动更新机制

为安装器添加版本检查和自动更新功能:

import requestsdef check_update():    """检查是否有新版本"""    current_version = "1.0.0"    update_url = "https://api.example.com/version"    try:        response = requests.get(update_url, timeout=5)        latest_version = response.json()['version']        if latest_version > current_version:            print(f"发现新版本: {latest_version}")            return True    except Exception as e:        print(f"检查更新失败: {e}")    return False

第八部分:发布与分发

8.1 测试清单

在发布前,请完成以下测试:

● [ ] 在干净的 Windows 系统上测试(无 Python 环境)

● [ ] 测试所有功能是否正常

● [ ] 检查 ADB 工具是否可用

● [ ] 测试异常情况处理(如网络断开)

● [ ] 检查文件大小是否合理

● [ ] 使用杀毒软件扫描

 8.2 创建发布包

创建一个完整的发布包:

SoloX-Installer-v1.0/├── SoloX安装器.exe├── 使用说明.txt└── README.md  

使用说明.txt 示例:

========================================SoloX 一键安装器 v1.0========================================【功能说明】本程序将自动完成以下操作:1. 检测并安装 Python 环境2. 配置 ADB 调试工具3. 安装 SoloX 性能测试工具4. 启动 SoloX 服务【使用方法】1. 双击运行"SoloX安装器.exe"2. 按照提示完成安装3. 等待 SoloX 服务启动4. 在浏览器中访问 http://localhost:50003【系统要求】- 操作系统:Windows 10/11 (64位)- 磁盘空间:至少 500MB- 网络连接:需要联网下载依赖【常见问题】Q: 安装失败怎么办?A: 请检查网络连接,或尝试使用管理员权限运行Q: 如何卸载?A: 运行命令:pip uninstall solox

 8.3 压缩与分发

使用 7-Zip 或 WinRAR 压缩发布包:

# 创建 ZIP 压缩包7z a SoloX-Installer-v1.0.zip SoloX-Installer-v1.0/

8.4 发布渠道

推荐的发布渠道:

1. GitHub Releases

● 创建 Release

● 上传 exe 文件和说明文档

● 添加版本说明

2. 网盘分享

● 百度网盘

● 阿里云盘

● 蓝奏云

3. 官方网站

● 提供下载链接

● 添加使用教程

第九部分:完整工作流程总结

9.1 开发阶段

# 1. 创建项目目录mkdir solox-installercd solox-installer# 2. 创建虚拟环境python -m venv venvvenv\Scripts\activate# 3. 安装依赖pip install pyinstaller# 4. 编写代码# 创建 solox_installer.py# 5. 准备外部文件# 下载 ADB 工具到 release/adb/# 6. 测试程序python solox_installer.py

9.2 打包阶段

# 1. 生成 spec 文件pyi-makespec solox_installer.py# 2. 修改 spec 文件# 添加 datas=[('release/adb''adb')]# 3. 执行打包pyinstaller SoloX安装器.spec# 4. 测试 execd distSoloX安装器.exe

9.3 发布阶段

# 1. 创建发布目录mkdir release_packagecopy dist\SoloX安装器.exe release_package\copy 使用说明.txt release_package\# 2. 压缩打包7z a SoloX-Installer-v1.0.zip release_package\# 3. 上传发布# 上传到 GitHub Releases 或其他平台

第十部分:实战技巧与最佳实践

 10.1 开发技巧

1. 使用虚拟环境

● 避免打包不必要的依赖

● 保持环境干净

2. 模块化设计

● 将功能拆分成独立函数

● 便于测试和维护

3. 日志记录

  import logging   logging.basicConfig(       filename='installer.log',       level=logging.INFO,       format='%(asctime)s - %(levelname)s - %(message)s'   )

4. 配置文件

● 使用 JSON 或 INI 文件存储配置

● 便于修改而无需重新打包

10.2 打包优化

1. 减小文件体积

 # 排除不需要的模块   excludes=['tkinter''test''unittest']   # 启用 UPX 压缩   upx=True

2. 加快启动速度

● 使用多文件模式(onedir)

● 延迟导入大型模块

3. 提高兼容性

● 在较旧的 Windows 版本上打包

● 避免使用最新的 Python 特性

10.3 安全建议

1. 代码混淆

● PyInstaller 打包的程序可以被反编译

● 敏感信息不要硬编码在代码中

2. 权限控制

● 尽量不要求管理员权限

● 使用用户目录存储数据

3. 网络安全

● 使用 HTTPS 下载文件

● 验证下载文件的完整性

……

本文节选自第八十八期《51测试天地》

原创文章

《移动端性能测试工具分发实战:用PyInstaller打造SoloX一键安装器》

文章后续为大家详细讲解了:

用户体验优化、进一步学习资料等。

想继续阅读全文

或查看更多《51测试天地》的原创文章

请点击下方 阅读原文或扫描二维码 查看

声明:本文为51Testing软件测试网 blues_C 用户投稿内容,该用户投稿时已经承诺独立承担涉及知识产权的相关法律责任,并且已经向51Testing承诺此文并无抄袭内容。发布本文的用途仅仅为学习交流,不做任何商用,未经授权请勿转载,否则作者和51Testing有权追究责任。如果您发现本公众号中有涉嫌抄袭的内容,欢迎发送邮件至:editor@51testing.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 如何像交付软件一样交付测试工具?这份SoloX一键安装器实战指南给了满分答案

猜你喜欢

  • 暂无文章