BATS:在所有测试中使变量持久化

fen*_*645 5 testing bash bats-core

我正在编写一个BATS(Bash自动化测试系统)脚本,我想要的是一个在所有测试中保持不变的变量.例如:

#!/usr/bin/env bats

# Generate random port number
port_num=$(shuf -i 2000-65000 -n 1)

@test "Test number one" {
    a = $port_num
}

@test "Test number two" {
    b = $port_num
}
Run Code Online (Sandbox Code Playgroud)

评估时,a和b应该相等.但这不起作用,因为(根据文档)在每次测试运行后评估整个文件.这意味着$ port_num在测试之间重新生成.我是否有办法/地方存储将在所有测试中保留的变量?

Dob*_*obz 4

将其导出为环境变量。

# If ENV Var $port_num doesn't exist, set it.
if [ -z "$port_num" ]; then
    export port_num=$(shuf -i 2000-65000 -n 1)
fi
Run Code Online (Sandbox Code Playgroud)

BATS必须调用load以获取文件。

将上述代码放入port.bash您正在执行的目录中命名的文件中。

然后在您的函数之前,调用load port. 这将设置您的$port_num一次,而不是更改它。

load port

@test "Test number one" {
    a = $port_num
}

@test "Test number two" {
    b = $port_num
}
Run Code Online (Sandbox Code Playgroud)