news 2026/4/18 7:14:04

命令行critic.sh在开源鸿蒙PC平台的实现解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
命令行critic.sh在开源鸿蒙PC平台的实现解析

critic.sh是一个简单易用的 Bash 测试框架,支持代码覆盖率报告。本文档深入解析 critic.sh 在开源鸿蒙PC平台的适配技术细节,从架构分析到实现落地,全面展示纯脚本项目的跨平台移植方法论,为 Bash 测试工具在鸿蒙生态的应用提供最佳实践。

📋 目录

  • 一、项目概述
  • 二、适配设计
  • 三、实现细节
  • 四、构建与部署
  • 五、技术亮点
  • 六、总结

一、项目概述

1.1 项目简介

critic.sh是一个简单易用的 Bash 测试框架,由 Srinath Sankar 开发并维护。它提供了简洁的 API 和代码覆盖率报告功能,使得编写和运行 Bash 脚本测试变得简单高效。

核心特性:

  • 简洁的 API:提供_describe_test_assert等高级函数,API 设计与其他测试框架一致
  • 代码覆盖率:支持生成 LCOV 格式的覆盖率报告,追踪行覆盖和函数覆盖
  • 灵活的断言:支持自定义断言表达式,不局限于内置断言函数
  • 丰富的断言函数:提供_return_true_output_equals_output_contains等常用断言
  • 易于集成:可以单独运行测试脚本,也可以批量运行多个测试文件

1.2 项目信息

项目信息详情
项目名称critic.sh
版本0.1.1(适配版本)<br>0.1.0(原始版本)
许可证MIT License
源码仓库https://github.com/Checksum/critic.sh
适配平台开源鸿蒙PC (aarch64-linux-ohos)
项目类型纯 Bash 脚本(无需编译)
依赖Bash 4.1+(必需)

1.3 为什么需要 critic.sh?

在日常 Bash 脚本开发中,我们经常需要:

  1. 验证脚本功能:确保脚本按预期工作
  2. 回归测试:修改后快速验证功能未破坏
  3. 代码覆盖率:了解测试覆盖情况,发现未测试的代码
  4. 文档化行为:测试即文档,清晰说明脚本功能
  5. CI/CD 集成:自动化测试流程

critic.sh提供了简洁的 API 和代码覆盖率报告功能,让 Bash 脚本测试变得简单高效。

二、适配设计

2.1 适配目标

🎯核心目标:将critic.sh测试框架适配到开源鸿蒙PC平台,使其能够在鸿蒙PC终端环境中正常运行,为鸿蒙生态的 Bash 脚本测试提供支持。

适配价值:

  • ✅ 为鸿蒙PC提供专业的 Bash 脚本测试工具
  • ✅ 提升 Bash 脚本开发的测试效率和质量
  • ✅ 展示纯脚本项目的鸿蒙化适配方法
  • ✅ 支持代码覆盖率分析,提升代码质量

2.2 技术方案

2.2.1 架构分析

critic.sh是一个纯 Bash 脚本项目,不依赖任何编译型语言或外部库,但需要 Bash 4.1+ 支持:

critic.sh 项目结构: ├── critic.sh # 主测试框架脚本 ├── entrypoint.sh # Docker 入口脚本 ├── examples/ # 示例测试脚本 │ ├── lib.sh # 示例库文件 │ └── test.sh # 示例测试文件 ├── scripts/ # 测试脚本 │ ├── fixtures/ # 测试固件 │ └── test.sh # 测试脚本 ├── hnp.json # HNP 包配置文件 ├── build_ohos.sh # 鸿蒙构建脚本 └── README.md # 项目说明文档
2.2.2 适配策略

由于critic.sh是纯 Bash 脚本,但需要 Bash 4.1+ 支持,适配工作主要包括:

  1. Bash 依赖处理:创建包装脚本,自动查找系统中的 Bash
  2. 脚本兼容性检查:确保脚本在鸿蒙PC的 Bash 环境中运行
  3. 路径适配:确保脚本中的路径处理符合鸿蒙PC的文件系统规范
  4. 打包配置:创建 HNP(HarmonyOS Native Package)包配置文件
  5. 构建脚本:编写自动化构建脚本,支持交叉编译环境

2.3 构建系统设计

2.3.1 构建流程
构建流程: 1. 环境准备 ├── 设置交叉编译工具链(clang/llvm) ├── 配置目标平台(aarch64-linux-ohos) └── 设置安装路径 2. 文件复制 ├── 复制 critic.sh 到目标目录 ├── 创建 critic 包装脚本(自动查找 Bash) ├── 复制 examples 和 scripts 目录 ├── 复制 LICENSE 和 README.md └── 复制 hnp.json 配置文件 3. 权限设置 └── 设置可执行权限 4. 打包 ├── 生成 HNP 包(.hnp) └── 生成 tar.gz 压缩包
2.3.2 关键配置

HNP 包配置(hnp.json):

{"type":"hnp-config","name":"critic.sh","version":"0.1.1","install":{"links":[{"source":"bin/critic","target":"critic"}]}}

三、实现细节

💡提示critic.sh是纯 Bash 脚本项目,无需编译,适配工作主要是文件复制、包装脚本创建和权限设置。

3.1 构建脚本实现

构建脚本build_ohos.sh的核心逻辑:

#!/bin/bash# critic.sh OpenHarmony build scriptset-e# Installation path inside HNP public directoryexportCRITIC_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/critic.sh.org/critic.sh_0.1.1# Create install directoriesmkdir-p${CRITIC_INSTALL_HNP_PATH}/binmkdir-p${CRITIC_INSTALL_HNP_PATH}/examplesmkdir-p${CRITIC_INSTALL_HNP_PATH}/scripts# Copy main critic.sh scriptcpcritic.sh${CRITIC_INSTALL_HNP_PATH}/bin/critic.shchmod+x${CRITIC_INSTALL_HNP_PATH}/bin/critic.sh# Create wrapper to dynamically find bashcat>${CRITIC_INSTALL_HNP_PATH}/bin/critic<<'WRAP' #!/bin/sh # critic.sh wrapper for OpenHarmony PC find_bash() { if command -v bash >/dev/null 2>&1; then echo "bash"; return 0; fi for p in /system/bin/bash /usr/bin/bash /bin/bash /usr/local/bin/bash; do if [ -x "$p" ]; then echo "$p"; return 0; fi done return 1 } BASH_CMD=$(find_bash) SCRIPT_DIR=$(dirname "$0") CRITIC_REAL="${SCRIPT_DIR}/critic.sh" if [ -z "$BASH_CMD" ]; then echo "Error: bash is required to run critic.sh. Please install bash 4.1 or later." >&2 exit 1 else exec "$BASH_CMD" "$CRITIC_REAL" "$@" fi WRAPchmod+x${CRITIC_INSTALL_HNP_PATH}/bin/critic# Copy examples, scripts, LICENSE, README.md# ...# Package HNP and tar.gz${HNP_TOOL}pack -i${CRITIC_INSTALL_HNP_PATH}-o${ARCHIVE_PATH}/tar-zvcf${ARCHIVE_PATH}/ohos_critic.sh_0.1.1.tar.gz critic.sh_0.1.1/

3.2 Bash 依赖处理

3.2.1 包装脚本设计

由于critic.sh需要 Bash 4.1+,我们创建了一个包装脚本critic,它会:

  1. 自动查找系统中的 Bash 可执行文件
  2. 如果找不到 Bash,给出明确的错误提示
  3. 使用找到的 Bash 执行critic.sh

包装脚本的关键特性:

  • 支持多个常见的 Bash 安装路径
  • 提供清晰的错误提示
  • 保持命令行参数传递
3.2.2 路径处理

脚本中的路径处理已经考虑了跨平台兼容性:

# 使用相对路径和环境变量SCRIPT_DIR=$(dirname"$0")CRITIC_REAL="${SCRIPT_DIR}/critic.sh"

3.3 兼容性处理

3.3.1 Bash 版本要求

critic.sh需要 Bash 4.1+,主要使用了以下 Bash 特性:

  • 关联数组(declare -A
  • BASH_XTRACEFD和函数追踪
  • extdebug选项
  • Bash 特定的参数扩展
3.3.2 覆盖率追踪机制

critic.sh使用 Bash 的调试追踪功能来实现代码覆盖率:

# 启用函数追踪exportBASH_XTRACEFD="13"exportPS4="+(\${BASH_SOURCE}:\${LINENO}):|:\${FUNCNAME[0]:+\${FUNCNAME[0]}():|:}"set-xo functrace

这些特性在 Bash 4.1+ 中可用,但在 POSIX sh 中不可用。

四、构建与部署

4.1 构建环境要求

  • OpenHarmony SDK:6.0.0.46-Beta1 或更高版本
  • 开发环境:macOS 或 Linux
  • 构建工具:bash、tar、hnpcli

4.2 构建步骤

4.2.1 准备 SDK
# 下载并解压 OpenHarmony SDK# SDK 路径示例:/Users/lijiajun/ohos-sdk
4.2.2 执行构建
# 进入构建目录cdHarmonyOSPC/build# 执行构建脚本SPECIFIC_DIR=critic.sh ./build.sh --sdk /Users/lijiajun/ohos-sdk

构建输出:

Build in: <Darwin ...> by cross tool chains. Building critic.sh testing framework for OpenHarmony PC (aarch64-linux-ohos)... Copying examples... Copying scripts... critic.sh installed successfully Packing HNP package... Build completed successfully! Output files: - /path/to/output/critic.sh.hnp - /path/to/output/ohos_critic.sh_0.1.1.tar.gz

4.3 构建产物

构建完成后,在output/目录下会生成:

  • critic.sh.hnp:HNP 包文件,可直接通过 hnp 工具安装
  • ohos_critic.sh_0.1.1.tar.gz:tar.gz 压缩包,包含完整的安装文件

安装目录结构:

/data/service/hnp/critic.sh.org/critic.sh_0.1.1/ ├── bin/ │ ├── critic.sh # 主测试框架脚本 │ └── critic # 包装脚本(自动查找 Bash) ├── examples/ # 示例测试脚本 │ ├── lib.sh │ └── test.sh ├── scripts/ # 测试脚本 │ ├── fixtures/ │ └── test.sh ├── LICENSE # 许可证文件 ├── README.md # 项目说明文档 └── hnp.json # HNP 配置文件

4.4 安装部署

方式一:使用 tar.gz 包安装
# 在鸿蒙PC上执行tar-xzf ohos_critic.sh_0.1.1.tar.gzcp-r critic.sh_0.1.1/* /data/service/hnp/critic.sh.org/critic.sh_0.1.1/
方式二:手动安装
# 复制文件到安装目录mkdir-p /data/service/hnp/critic.sh.org/critic.sh_0.1.1/binmkdir-p /data/service/hnp/critic.sh.org/critic.sh_0.1.1/examplesmkdir-p /data/service/hnp/critic.sh.org/critic.sh_0.1.1/scriptscpbin/critic.sh /data/service/hnp/critic.sh.org/critic.sh_0.1.1/bin/cpbin/critic /data/service/hnp/critic.sh.org/critic.sh_0.1.1/bin/chmod+x /data/service/hnp/critic.sh.org/critic.sh_0.1.1/bin/*# 添加到 PATHexportPATH=$PATH:/data/service/hnp/critic.sh.org/critic.sh_0.1.1/bin

4.5 验证安装

安装完成后,可以验证 critic.sh 是否正常工作:

# 使用 critic 命令查看帮助critic --help# 或直接使用 bash 执行bash/data/service/hnp/critic.sh.org/critic.sh_0.1.1/bin/critic.sh --help

五、技术亮点

5.1 零编译适配

critic.sh作为纯 Bash 脚本项目,适配到鸿蒙PC平台无需任何编译步骤,只需要:

  1. 文件复制
  2. 包装脚本创建(处理 Bash 依赖)
  3. 权限设置
  4. 打包分发

这使得适配过程非常简洁高效。

5.2 代码覆盖率支持

critic.sh提供了代码覆盖率报告功能,这在 Bash 测试框架中比较少见:

  • 行覆盖率:追踪哪些代码行被执行
  • 函数覆盖率:追踪哪些函数被调用
  • LCOV 格式:支持标准的 LCOV 格式,可与 CI/CD 工具集成
  • HTML 报告:可选生成 HTML 格式的覆盖率报告

5.3 灵活的 API 设计

  • 自定义表达式:支持传递任何 Bash 表达式作为测试或断言
  • 一致的 API:API 设计与其他测试框架(如 RSpec、Jest)一致
  • 丰富的断言:提供多种内置断言函数,也支持自定义断言

5.4 包装脚本设计

为了解决 Bash 依赖问题,我们设计了智能的包装脚本:

  • 自动查找 Bash:在多个常见路径中查找 Bash
  • 清晰的错误提示:如果找不到 Bash,给出明确的错误信息
  • 参数传递:完整保留命令行参数

六、总结

6.1 适配成果

成功将critic.sh测试框架适配到开源鸿蒙PC平台:

  • ✅ 完成构建脚本编写
  • ✅ 创建 Bash 包装脚本,处理依赖问题
  • ✅ 生成 HNP 包和 tar.gz 压缩包
  • ✅ 验证脚本在目标平台的兼容性
  • ✅ 提供完整的使用文档和示例

6.2 技术价值

  1. 生态完善:为鸿蒙PC提供了专业的 Bash 脚本测试工具
  2. 开发效率:提升 Bash 脚本开发的测试效率和质量
  3. 代码质量:通过覆盖率报告,发现未测试的代码
  4. 最佳实践:展示了纯脚本项目的鸿蒙化适配方法

6.3 注意事项

  1. Bash 依赖critic.sh需要 Bash 4.1+,确保目标系统已安装 Bash
  2. 覆盖率追踪:覆盖率功能依赖 Bash 的调试追踪功能,需要 Bash 4.1+
  3. 路径处理:在编写测试时,注意使用相对路径或环境变量

6.4 未来展望

  • 支持更多断言函数
  • 改进覆盖率报告的准确性
  • 优化性能,减少追踪开销
  • 提供更多示例和最佳实践
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 9:37:59

深入解析openapi-typescript:OpenAPI到TypeScript的类型转换利器

深入解析openapi-typescript&#xff1a;OpenAPI到TypeScript的类型转换利器 【免费下载链接】openapi-typescript Generate TypeScript types from OpenAPI 3 specs 项目地址: https://gitcode.com/gh_mirrors/ope/openapi-typescript 项目概述 openapi-typescript是一…

作者头像 李华
网站建设 2026/4/18 3:18:19

如何3分钟搞定HTML转PDF:WeasyPrint快速上手指南

如何3分钟搞定HTML转PDF&#xff1a;WeasyPrint快速上手指南 【免费下载链接】WeasyPrint The awesome document factory 项目地址: https://gitcode.com/gh_mirrors/we/WeasyPrint 想要将网页内容快速转换为专业的PDF文档吗&#xff1f;WeasyPrint作为一款强大的Python…

作者头像 李华
网站建设 2026/4/18 3:21:36

16、深入探索 Crystal Reports 公式编辑器:从基础到高级应用

深入探索 Crystal Reports 公式编辑器:从基础到高级应用 在数据处理和报表生成的领域中,Crystal Reports 的公式编辑器是一个强大的工具。它允许用户根据不同的业务需求创建各种类型的公式,以实现数据的灵活处理和报表的个性化定制。本文将详细介绍公式编辑器的各个方面,包…

作者头像 李华
网站建设 2026/4/17 19:54:04

26、报表设计:仓库管理与模板应用全解析

报表设计:仓库管理与模板应用全解析 1. 仓库中对象的删除理解 在相关操作中,当从仓库里删除一个对象时,它并非真正从数据库中移除。而是被标记为已删除,如此一来在仓库浏览器里便不会显示该对象,但实际上它仍存在于物理数据库中。这种对已删除对象的标记常被称作“标记为…

作者头像 李华
网站建设 2026/4/18 3:18:33

Win11离线环境.NET Framework 3.5一键安装终极指南

Win11离线环境.NET Framework 3.5一键安装终极指南 【免费下载链接】Win11离线环境安装.NetFramework3.5指南 本仓库提供了一个资源文件&#xff0c;用于在Windows 11离线环境下安装.Net Framework 3.5。该资源文件包含了必要的安装包和脚本&#xff0c;帮助用户在没有网络连接…

作者头像 李华
网站建设 2026/4/18 3:16:30

34、水晶报表使用指南与资源整合

水晶报表使用指南与资源整合 1. 编译报表支持与手动报表分发 如果应用程序仍在使用编译报表,可参考相关帮助文件获取下载编译报表支持的信息,也可访问水晶决策网站的更新部分( http://support.crystaldecisions.com/tycr/updates/ )。许多应用程序利用RDC自动创建水晶报…

作者头像 李华