Ns2中的测试用例

发表于:2007-8-28 15:06

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:快乐虾    来源:快乐虾的专栏

分享:

1测试用例说明
        在NS2的源代码包中包含了几乎所有协议的测试代码,全部存放在ns2\tcl\test目录下,即test-suite-*.tcl这样的文件。每个文件基本就对应一个协议,而且有一个对应的输出目录存放供比较用的运行结果。在运行test-suite-*.tcl之后将会产生一个temp.rands文件,只要这个文件和相应目录下的文件比较相一致就说明NS2的安装是正确的。
        如test-suite-adaptive-red.tcl这个文件的对应目录就是test-output-adaptive-red。
        每个测试用的tcl文件中都使用了一个或多个测试用例,因此output目录下也对应有一个或者多个文件,这些供比较用的文件都是用gzip压缩的,比较前应先解压缩。通过ns test-suite-*.tcl这样的命令可以知道每个TCL文件所支持的测试用例。使用ns test-suite-*.tcl test_name这样的格式就可以调用指定的测试用例。

        Ns test-suite-adaptive-red.tcl red1
        就指明了要调用red1这个测试用例,运行之后在测试目录下生成temp.rands文件,将这个文件与test-output-adaptive-red\red1.Z解压缩后的文件进行比较即可。
2测试代码
        在此测试目录下同时提供了完整的测试Shell代码,不过很遗憾在windows下没法运行(需要cygwin),于是自己动手写了下面的C++代码进行完整的测试。
// NsTest.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
#include <windows.h>
#include <fstream>
#include <math.h>
using namespace std;
 
#define TEST_PATH "d:\\temp\\test\\"
#define FIND_MASK "d:\\temp\\test\\test-suite-*.tcl"
#define NS_PATH "d:\\research\\debug\\ns-2.31.exe"
 
void Compare(char* f1, char* f2)
{
     // 比较两个文件是否相同,之所以不用cmp进行比较,是因为在不同版本生成的数据中输出格式可能会不一致,
     // 主要是科学计数法输出的不一致,如提供的原始数据为.2e-05,而生成的数据为.2e-005
     ifstream s1(f1);
     ifstream s2(f2);
     if(s1.is_open() && s2.is_open())
     {
         char line1[2048], line2[2048];
         int nLine = 0;
         while(!s1.eof() && !s2.eof())
         {
              nLine++;
              s1.getline(line1, 2048);
              s2.getline(line2, 2048);
              if(strcmp(line1, line2) == 0) continue;
              double d[4];
              sscanf(line1, "%lf %lf", &d[0], &d[1]);
              sscanf(line2, "%lf %lf", &d[2], &d[3]);
              if(fabs(d[0] - d[2]) > 0.00005 || fabs(d[1] - d[3]) > 0.005)
              {
                   printf("%s and %s compare failed: \nline: %d\n%s\n%s\n", f1, f2, nLine, line1, line2);
                   s1.close();
                   s2.close();
                   exit(1);
              }
         }
 if(s1.eof() && !s2.eof())
         {
              printf("%s and %s compare failed: s1.eof() && !s2.eof()", f1, f2);
              s1.close();
              s2.close();
              exit(1);
         }
         else if(!s1.eof() && s2.eof())
         {
              printf("%s and %s compare failed: !s1.eof() && s2.eof()", f1, f2);
              s1.close();
              s2.close();
              exit(1);
         }
     }
     else
     {
         printf("compare file open failed: \n%s\n%s\n", f1, f2);
         s1.close();
         s2.close();
         exit(1);
     }
     s1.close();
     s2.close();
 
}
 
void Exec(char *cmd)
{
     DWORD code = 0;
     STARTUPINFO si;
     PROCESS_INFORMATION pi;
     ZeroMemory( &si, sizeof(si) );
     si.cb = sizeof(si);
     ZeroMemory( &pi, sizeof(pi) );

31/3123>
《2023软件测试行业现状调查报告》独家发布~

精彩评论

  • liujihui226
    2007-9-10 15:37:31

    代码这么多看不太懂

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号