2015-07-10 68 views
3

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

#!/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 
} 

评估时,a和b应该相互相等。但这并不起作用,因为(根据文档)整个文件在每次测试运行后都会被评估。这意味着$ port_num会在测试之间重新生成。有没有一种方法/地方可以存储将在所有测试中保留的变量?

回答

2

将其作为环境变量导出。

# 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 

BATS必须调用load到源文件。

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

然后在您的功能之前,请致电load port。这将设置你的$port_num一次,而不是改变它。

load port 

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

@test "Test number two" { 
    b = $port_num 
} 
+1

注入env变量的端口号很好。但是'源'它在当前shell(而不是'bats')可能不是他想要的。 – Jokester

+0

更新了BATS采购的答案。 – Dobz