Mugen 测试框架
https://gitee.com/openeuler/mugen
相应规范 Link
按照官方给出的模板,可以写出测试套的内容
git clone --depth=1 https://gitee.com/openeuler/mugen.git
cd mugen
这里最重要的是 suite2cases
和 testcases
两个文件夹
suite2cases
放测试套 json 文件;testcases
放的是测试用例
测试文件
# 2023
source "$OET_PATH/libs/locallibs/common_lib.sh"
function pre_test() {
LOG_INFO "Start environment preparation."
test_dir=$(echo /tmp/gcc_test)
mkdir -p $test_dir
export LANG=en_US.UTF-8
cd $test_dir
cat >main.c <<EOF
#include<stdio.h>
int main()
{
int i;
printf("hello world! %d\n", i);
return 0;
}
EOF
LOG_INFO "End of environmental preparation!"
}
function run_test() {
LOG_INFO "Start to run test."
cd $test_dir
gcc -S main.c 2>&1
test -f main.s
CHECK_RESULT $? 0 0 "-S failure"
gcc -c main.s 2>&1
test -f main.o
CHECK_RESULT $? 0 0 "-c failure"
gcc -o ofile main.c 2>&1
test -f ofile
CHECK_RESULT $? 0 0 "-o failure"
gcc -Wall main.c 2>&1 | grep "warning: ‘i’ is used uninitialized"
CHECK_RESULT $? 0 0 "-Wall failure"
gcc -Wall -Werror main.c 2>&1 | grep "error: ‘i’ is used uninitialized"
CHECK_RESULT $? 0 0 "-Werror failure"
gcc -v main.c 2>&1 | grep "gcc version"
CHECK_RESULT $? 0 0 "-v failure"
gcc --version 2>&1 | grep "Free Software Foundation"
CHECK_RESULT $? 0 0 "--version failure"
LOG_INFO "End to run test."
}
function post_test() {
LOG_INFO "Start to restore the test environment."
rm -rf $test_dir
LOG_INFO "End to restore the test environment."
}
main "$@"
这里需要注意的是
gcc
会读取LANG
或者LC_MESSAGE
变量来确定打印信息的语言,我们要给出export LANG=en_US.UTF-8
测试时,需要将错误信息使用
2>&1
重定向
mugen 没有给出脚本的执行过程,我们可以直接 bash xx.sh
执行脚本,但是需要先 export $OET_PATH=/pathto/mugen
参考 源码里面的 gcc
测试代码,发现可能需要 DNF_INSTALL "gcc"
,但是会报错,相关 issue
,于是没加这一句
疑问
这里面有一个疑问,这里面的第 29 行 gcc -c main.s 2>&1
应该是不符合规范的,因为它依赖于前面生成的 .s
文件。但是对 -c
的测试又需要 .s
文件,由于不知道测试平台的 gcc 版本,应该没法事先给出 .s
文件。
使用 bash
执行 .sh
文件,该文件不需要可执行权限,若是考虑到其他平台,更好的建议是使用 #! /usr/bin/env bash
(曾经的 NixOS 用户)
json
文件
我们按照给出的示利就可以写出简单的 json
{
"path": "$OET_PATH/testcases/oe_test_gcc",
"cases": [
{
"name": "oe_test_gcc_01"
}
]
}
测试
bash mugen.sh -f gcc -r oe_test_gcc_01 -x
加了 -x
,但是好像没有输出 shell 脚本的执行过程
![mugentest](./截图 2023-05-25 17-46-50.png)