在 Linux 中使用 Bats 测试 Bash 脚本


摘要

广泛使用且有益的脚本语言 bash 有无数的应用。尽管该语言本身被广泛使用,但对其进行测试并不常见。这可能导致代价高昂的错误,并降低对代码的信任度。

在本文中,我们将了解如何在 Linux 中使用 Bats 测试 bash 脚本。

注意 - Linux 命令区分大小写。

什么是 BATS?

Bash 自动化测试系统,有时称为 BATS,是一个测试框架。在发布 bash 程序之前,可以使用此自动化测试过程验证它是否正常运行并达到其设计目标。正如我们将在本文中看到的,BATS 用于对 bash 脚本运行测试,然后提供结果。

BATS 使程序员可以选择使用 bash 脚本和库,并执行类似于 Python 或 Java 程序员使用的自动化测试过程。

如何设置 BATS?

假设您希望从 git 存储库启动您的项目,我们应该首先在终端中安装“git”(如果您尚未安装)。

$ sudo apt update
$ sudo apt install git
$ git version

输出

$ git version 2.34.1

要设置您的 git 存储库,请创建它或转到项目目录并运行以下命令。之后,通过将所需的存储库克隆为子模块来安装 bats 及其库。

$ git init
$ git submodule add https://github.com/bats-core/bats-core.git test/bats
$ git submodule add https://github.com/bats-core/bats-assert.git   test/test_helper/bats-files
$ git submodule add https://github.com/bats-core/bats-support.git test/test_helper/bats-support
$ git submodule add https://github.com/bats-core/bats-assert.git test/test_helper/bats-assert

配置您的 Bash 脚本

首先使用以下代码创建一个新的 bash 文件:

$ nano point.sh
#!/usr/bin/env bash

choice="Web Browser $1 over $2"
echo "$choice";echo "$choice" > $3
exit 0

先前命令的输出显示我们的 bash 脚本接受三个参数,并在终端中输出“choice”变量的值,以及创建一个具有相同输出的文本文件。让我们将我们的程序付诸实践以更好地理解。

script.txt   point.sh   firefox   Bing   log23.txt   google

输出

Web Browser firefox over Bing

开始测试 Bash 脚本

为了熟悉 BATS,最简单的方法是进行简单的测试。在测试目录中,让我们测试一个名为“tutorial.bats”的新文件,其内容如下:

$ ./test/bats/bin/bats test/tutorial.bats

输出

tutorial.bats
 ✗ can run our script
   (in test file test/tutorial.bats, line 2)
     './pointscript.sh' failed with status 127
   /home/etc/my_project/test/tutorial.bats: line 2: ./initproj.sh: No such file or directory
1 test, 1 failure

由于我们没有同名文件,因此测试显然失败了。因此,让我们在 /tst 目录中编写一个基本的 bash 脚本,如下所示:

$ mkdir tst/
$ echo '#!/usr/bin/bash' > initproj.sh
$ chmod a+x initproj.sh

执行下面显示的命令以从根目录运行我们之前的测试:

$ ./test/bats/bin/bats test/tutorial.bats
tutorial.bats
 ✓ can run our script
1 test, 0 failures

结论

在本教程中,我们学习了如何使用各种 bash 组件测试 bash 脚本。我们学习了如何使用 Bats 库测试 Bash 脚本。我们学习了如何编写自己的断言,使用了库提供的断言工具,并创建了简单的测试。

在决定对一个或多个 Bash 脚本或库应用测试规范后,BATS 提供了在其他软件开发环境中看到的广泛测试功能。

希望您发现这些命令示例有用。

更新于: 2023-03-23

473 次查看

启动您的 职业生涯

通过完成课程获得认证

开始
广告