diff --git a/deja.md b/deja.md new file mode 100644 index 0000000000000000000000000000000000000000..69eaab3d62ce5580b2bc566767dfa533aaaff6a2 --- /dev/null +++ b/deja.md @@ -0,0 +1,66 @@ +# dejagnu使用说明 +## dejagnu介绍: + dejagnu是一个用于其它应用程序测试的框架。gnu工具链的所有测试用例都是用Tcl/Expert书写的。 +## 下载dejagnu: + http://mirrors.ustc.edu.cn/gnu/dejagnu/dejagnu-1.6.1.tar.gz +## 下载gcc-9.3的testsuite: + https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz + 下载完成之后,找到testsuite目录,目录里面是gcc-9.3的测试用例。 +## 安装dejagnu: + 解压dejagnu-1.6.1.tar.gz, + `cd dejagnu-1.6.1` + `./configure --prefix=$install_deja && make -j && make install` + 安装完成之后在$install_deja目录会生成bin、include、share三个目录。 +## 执行测试: +1. 设置deja和gcc-9.3的环境变量 + `export PATH=$install_deja/bin:$PATH` + `export PATH=$gcc_dir/bin:$PATH` + +2. 配置site.exp文件 + 安装完deja之后,运行测试需要一个site.exp文件,这个文件可以从已经有deja环境的机器上拷贝过来,也可以自己生成,然后再根据待测工具链的实际情况进行修改。 + - 自己生成site.exp, 进入dejagnu-1.6.1目录; + 执行`./configure && make && make -j -k check`会有site.exp生成。然后,再把site.exp拷贝到gcc-9.3的testsuite目录下,根据自己的实际情况修改site.exp文件。 + 例如: 修改site.exp内容: + ``` + set srcdir ./ + set objdir ./ + set tempdir ./ + ''' + - 如果deja测试需要加选项,需要修改site.exp文件。 + 例如:增加 `set CFLAGS_FOR_TARGET “-mcmodel=medium”`` + - 如果只跑编译,需要修改site.exp文件。 + 例如:增加`set keep_file "YES"``。 +3. 运行测试 + - 执行单个用例: + 在gcc-9.3源码的testsuite目录下找到对应的用例,例如:`split-path-10.c`,同级目录下一 + 般会有一个exp文件:tree-ssa.exp,如果没有就往上层目录找。 + 在gcc-9.3的testsuite目录下执行: + `runtest --tool gcc tree-ssa.exp=split-path-10.c` + - 执行单个exp下的所有用例: + `runtest --tool gcc tree-ssa.exp` + - 执行gcc下的所有用例: + `runtest --tool gcc` + - 如果要测试g++: + `runtest --tool g++` +4. 用例执行结果 + DejaGnu遵循POSIX 1003.3测试框架标准,测试用例的输出被定义为以下几种: + - PASS: 测试结果正确,用例成功 + - XFAIL: 预期用例执行错误,实际运行也执行错误,测试结果正确 + - XPASS:预期用例执行错误但是成功,测试结果错误 + - FAIL:测试结果错误,用例失败 + - UNRESOLVED:测试结果不确定,通常意味着测试用例以意外的方式执行了,这时候需要测试人员去 + 判断执行结果正确或错误。有时也意味着需要人工干涉此用例的执行,因为超过了测试框架的能力范 + 围。 + 发生UNRESOLED的情况举例: + - 测试执行被中断 + - 测试没有明确的结果,通常是由于DejaGnu执行用例时产生了ERROR或者三个以上的WARNING。 + - 本测试取决于之前的测试,而之前的测试失败。 + - 测试用例安装错误 + - UNTESTED:测试未执行,没有测试用例。 + - UNSUPPORTED:当前环境不支持此用例执行。 + +## 执行用例后产生的日志文件: + 所有用例执行之后 + - 运行用例后dejagnu会在当前目录下生成一个sum文件和log文件 + - sum文件只记录用例执行结果 + - log详细记录了每个用例的执行过程