Ns2中的测试用例Ns2中的测试用例(2)

发表于:2016-01-07来源:uml.org.cn作者:不详点击数: 标签:测试用例
) { printf( %s failed (%d).\n, cmd, GetLastError() ); exit(1); } WaitForSingleObject( pi.hProcess, INFINITE ); GetExitCodeProcess(pi.hProcess, code); CloseHandle( pi.hProcess ); CloseHandle( pi.hThrea

  )

  {

  printf( "%s failed (%d).\n", cmd, GetLastError() );

  exit(1);

  }

  WaitForSingleObject( pi.hProcess, INFINITE );

  GetExitCodeProcess(pi.hProcess, &code);

  CloseHandle( pi.hProcess );

  CloseHandle( pi.hThread );

  if(code != 0)

  {

  printf("%s failed with code (%d)\n", cmd, code);

  exit(code);

  }

  }

  bool IsComment(char* p)

  {

  while((*p == ' ' || *p == '\t') && *p != 0) p++;

  return *p == '#';

  }

  void ProcessOneFile(char* file_name)

  {

  // 处理一个文件

  char tcl_file[MAX_PATH];

  sprintf(tcl_file, "%stest-suite-%s.tcl", TEST_PATH, file_name);

  ifstream src(tcl_file);

  if(!src.is_open())

  {

  printf("%s open failed!\n", tcl_file);

  return;

  }

  sprintf(tcl_file, "%s_tmp.tcl", TEST_PATH);

  FILE* dst = fopen(tcl_file, "wt");

  if(dst == NULL)

  {

  printf("create temp tcl failed\n");

  src.close();

  return;

  }

  fprintf(dst, "set PERL {perl}\n");

  fprintf(dst, "set quiet true\n");

  char cClass[1000][100];

  int nClass = 0;

  while(!src.eof())

  {

  char line[2048];

  char* p;

  src.getline(line, 2048);

  if(IsComment(line)) continue;

  if(strstr(line, "Class") && (p = strstr(line, "Test/")))

  {

  int idx = 0;

  p += 5;

  while(*p != 0 && *p != ' ') cClass[nClass][idx++] = *p++;

  cClass[nClass][idx] = 0;

  nClass++;

  }

  else if(strstr(line, "xgraph"))

  {

  fprintf(dst, "#");

  }

  fprintf(dst, "%s\n", line);

  }

  src.close();

  fclose(dst);

  // 执行TCL文件并进行比较

  for(int i = 0; i < nClass; i++)

  {

  printf("%s testcase begin...", cClass[i]);

  char cmd[2560];

  sprintf(cmd, "%s %s_tmp.tcl %s", NS_PATH, TEST_PATH, cClass[i]);

  Exec(cmd);

  // 备份压缩文件

  sprintf(cmd, "cp %stest-output-%s\\%s.Z %stest-output-%s\\%s_bak.Z", TEST_PATH, file_name, cClass[i], TEST_PATH, file_name, cClass[i]);

  Exec(cmd);

  // 解压缩

  sprintf(cmd, "gzip -daf %stest-output-%s\\%s.Z", TEST_PATH, file_name, cClass[i]);

  Exec(cmd);

  // 还原压缩文件

  sprintf(cmd, "mv %stest-output-%s\\%s_bak.Z %stest-output-%s\\%s.Z", TEST_PATH, file_name, cClass[i], TEST_PATH, file_name, cClass[i]);

  Exec(cmd);

  // 比较文件

  char f1[MAX_PATH], f2[MAX_PATH];

  sprintf(f1, "%stest-output-%s\\%s", TEST_PATH, file_name, cClass[i]);

  sprintf(f2, "%stemp.rands", TEST_PATH);

  Compare(f1, f2);

  // 删除解压缩后的文件

  sprintf(cmd, "rm -f %stest-output-%s\\%s", TEST_PATH, file_name, cClass[i]);

  Exec(cmd);

  printf("OK\n");

  }

  }

  int _tmain(int argc, _TCHAR* argv[])

  {

  // 查找测试文件所在目录下的所有文件

  WIN32_FIND_DATA fdata;

  HANDLE hFind = FindFirstFile(FIND_MASK, &fdata);

  if(hFind == INVALID_HANDLE_VALUE)

  {

  printf("find file failed");

  return 1;

  }

  do

  {

  bool bProcess = false;

  if(argc > 1)

  {

  for(int i = 1; i < argc; i++)

  {

  if(strstr(fdata.cFileName, argv[i]))

  {

  bProcess = true;

  break;

  }

  }

  }

  else

  bProcess = true;

  if(bProcess)

  {

  printf("\n%s processing...\n", fdata.cFileName);

  fdata.cFileName[strlen(fdata.cFileName) - 4] = 0;

原文转自:http://www.ltesting.net