Mugen 测试框架

https://gitee.com/openeuler/mugen

相应规范 Link

按照官方给出的模板,可以写出测试套的内容

git clone --depth=1 https://gitee.com/openeuler/mugen.git
cd mugen

这里最重要的是 suite2casestestcases 两个文件夹

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)

#openeuler #test
0%