我测试我快乐,测试与梦想齐飞.

发布新日志

  • QTP中进入指定文件夹查找文件

    2008-09-25 17:56:15

    Function ShowFolderList(folderspec)
       Dim fso, f, f1, fc, s
       Set fso = CreateObject("scrīpting.FileSystemObject")
       Set f = fso.GetFolder(folderspec)
       Set fc = f.Files
       For Each f1 in fc
          s = s & f1.name
          s = s & "<BR>"
       Next
       ShowFolderList = s
    End Function

    Dim FolderList,FileName
    Dim ListTotal
    FolderList= ShowFolderList("D:\新建文件夹\新建文件夹")
    FileName=Split(FolderList,"<BR>")
    For  ListTotal=LBound(FileName) TO UBound(FileName)-1
     MsgBox(FileName(ListTotal))

    Next

    本来想跟上一篇QTP学习放一起的...主要是进入指定的文件夹中查找文件,可以输出文件夹中的文件名...

    文件名的命名规则:

    在Windows200X中的文件命名规则是前缀名+后缀名,中间加一个点。前缀名可以任意命名,而后缀名则表示了文件的格式类型。Windows就是通过文件的后缀名来识别文件的
    (1)在文件或文件夹的名字中,最多可使用256个字符。
    (2)组成文件名或文件夹的字符可以是英文字母、数字及¥@&+()、下划线、空格、汉字等。但不能使用下列9个字符:?\ * | “ < > : / 在Windows200X中的文件命名规则是前缀名+后缀名,中间加一个点。前缀名可以任意命名,而后缀名则表示了文件的格式类型。Windows就是通过文件的后缀名来识别文件的
    (1)在文件或文件夹的名字中,最多可使用256个字符。
    (2)组成文件名或文件夹的字符可以是英文字母、数字及¥@&+()、下划线、空格、汉字等。但不能使用下列9个字符:?\ * | “ < > : /

    如果不用考虑模块化什么的,可以在FUNCTION的FOR中直接将文件名输出,也不用后面的来拆分字符串...更不用考虑要用什么字符串做为中间的拆分标志..

    Dim FolderList,FileName
    Dim ListTotal
    Dim counter
    FolderList= ShowFolderList("D:\新建文件夹\新建文件夹")
    FileName=Split(FolderList,"<BR>")
    For  ListTotal=LBound(FileName) TO UBound(FileName)-1
       ' MsgBox(FileName(ListTotal))
       If(StrComp("calc.txt",FileName(ListTotal))<>True) Then
           counter=1
     End If
    Next

     If (counter<>1) Then
      MsgBox("Can't find calc.txt")
      else
      MsgBox("can find")
     End If
    查找文件夹中是否有文件名为calc.txt的文件..

  • 如何将控件禁用

    2008-08-08 20:14:37

    1.CEdit 类,像文本编辑框,让该文本框初始化后(有个值),那个值不能被修改...把编辑框属性设置为只读...

          CEdit* pEdt1 = (CEdit*) GetDlgItem(IDC_EDIT_DATE);
             pEdt1->SetReadOnly();

    2.Combo Box.组合列表框,默认为droplist,并且有默认值,不想让别人能选,所以只读方式不行..

       CEdit* pEdt11 = (CEdit*) GetDlgItem(IDC_COMBO_PORT);
          pEdt11->EnableWindow(FALSE);

    3.Button,为PUSH BUTTON,禁用

    定义一个该控件的变量,然后..m_printer.EnableWindow(FALSE);(前变为变量名)..

     

    4.Menu

             CMenu* pMenu = this->GetSystemMenu(FALSE);
             pMenu->EnableMenuItem(0,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);

  • MFC的几个小知识

    2008-08-07 19:40:07

    1.

    GetDlgItem(IDC_EDIT1)->EnableWindow(false);

    1)GetDlgItem(IDC_EDIT1)得到IDC_EDIT1控件指针。

    2)EnableWindow(false) 不可用。

    2.

    RadioButton的属性要选上group,否则不会在CLASSWINZARD自动生成Control ID,才加添加变量.

     

  • MFC对话框

    2008-08-06 20:32:26

    今天的工作是新建用户,用弹出对话框来获得新用户的信息...

    1.菜单弹出的新建用户对话框和菜单所在的对话框,要把新建的用户信息在之前的对话框中显示出来.因为显示是由对话框中的CListBox控件的AddString方法来完成的(单一的增加),所以在新建用户的对话框中必须要获取指向菜单对话框的指针来完成显示..而这个要通过句柄来完成....要想在一个类中调用一个对话框,就要获得该对话框的句柄,

        HWND   hWnd;
         hWnd=::FindWindow(NULL,_T("User"));        
      //lpszClassName:窗口类名,lpszWindowName:窗口标题。两个要一个就可以了,当然两个更准确  
        if   (hWnd==false) 
      MessageBox("error");
      Dialog_User* pWnd= (Dialog_User*)FromHandle(hWnd);
         pWnd->m_listbox_user.AddString(m_user_name);

    要包含该调用对话框的头文件...

    2.如何把CString类型的数据转换为char[20],因为我在定义数据结构时把用户名和密码都用char[20]来定义的(很不方便,但是我对C比较熟,数据结构容易出错,就选最拿手的)

     char *username,*password;
     int i;
     username=m_user_name.GetBuffer(m_user_name.GetLength());
     password=m_user_password.GetBuffer(m_user_password.GetLength());
     for(i=0;i<19;i++)
     {   if(i<strlen(username))
          userinfo.user_name[i]=*(username+i);
         else
       userinfo.user_name[i]=' ';
     }
     userinfo.user_name[19]='\0';
     
     for(i=0;i<19;i++)
     {   if(i<strlen(password))
          userinfo.user_password[i]=*(password+i);
         else
       userinfo.user_password[i]=' ';
     }
     userinfo.user_password[19]='\0';

    但是从对话框控件中获得的都是CString类型...

        GetDlgItem(IDC_EDIT_USER_NAME)->GetWindowText(m_user_name);
        GetDlgItem(IDC_EDIT_PASSWORD)->GetWindowText(m_user_password);
        GetDlgItem(IDC_EDIT_REPEAT_PASSWORD)->GetWindowText(m_repeat_password);

    现在先用这个笨点的办法把东西实现再说,等以后有时间学下MFC的数据结构和文件操作,再把程序优化下...
       

  • CLIstBox

    2008-08-05 19:29:01

     整个程序是基于对话框和控件的,要在一个对话框的菜单弹出对话框响应中显示用户名的列表

    本来对话框如果显示的话是很简单的,在OnInitDialog()方法中调用一个CListBox的实例调用AddString("user");就可以显示user,但是弹出对话框的话好像没有这个函数,要通过MFC ClassWizard来添加函数 WM_INITDIALOG,然后在这个函数里调用AddString方法来显示文本内容...

    BOOL Dialog_User::OnInitDialog()
    {
     CListBox *listBox;
     listBox = (CListBox*)GetDlgItem(IDC_LISTBOX_USER);
        //GetDlgItem(IDC_LISTBOX_USER);
        //m_listbox_user.AddString("Jane");
     struct user
     {
         char user_name[20];
      char user_password[20];
     }userinfo[MAXOFUSER];
        FILE *fp;
        int i;
     CString userTemp;
        if((fp=fopen("usrinfo.cfg","rb"))==NULL)
     {
            MessageBox("cannot open user information file","Error",MB_OKCANCEL | MB_ICONWARNING);
         return 0;
         }
     for(i=0;i<=MAXOFUSER;i++)
     {
          fread(&userinfo[i],sizeof(struct user),1,fp);
          if(feof(fp))
       {
        fclose(fp);
        break;
       }
             userTemp.Format("%s",userinfo[i].user_name);
             listBox->AddString(userTemp);
        }
     
     //listBox->AddString("Tom");
     CDialog::OnInitDialog();
     
     // TODO: Add extra initialization here
     
     return TRUE;  // return TRUE unless you set the focus to a control
                   // EXCEPTION: OCX Property Pages should return FALSE
    }

  • 郁闷的周末

    2008-08-04 19:43:53

    买了个新电脑,系统是VISTA HOME BASIC,我抱着先试用下的心态,在上面装了VC6.0,QTP9.0,LR8.2,

    VC没让我装完就提示不兼容,QTP和LR还蛮给我面子,装的过程中都表现不错,等我搭完JAVA的环境,在录脚本的时候发现QTP报错(浏览器不能启动,URL不对),边报错还边自动帮我把网页打开了,就是啥都不能识别,跟个傻子一样...今天上班来论坛一看,还有人跟我情况一样,也有解决的办法,心里松了一口气..

    不过那个LR就没那么幸运了,一直弹出一个什么Action为0的提示框,打开录制网站后也检测不到EVENT,我还没找到问题和原因和解决方法,可能是软件的兼容问题,晚上回去先解决QTP再说,一个一个来...

  • 技术积累.

    2008-08-04 19:32:03

    我发现自己蛮强的(小臭美下),什么东西不管我以前是否接触过,只要给我点时间,我都有信心去把它做好..

    本来我是做测试的,但无奈测试部就我一个,势单力薄,很多和测试相关的东西实施起来都不顺利,还时不时要接受开发老大下发给我的编程任务(不过我的心态也还好,就当学习,充实自己).上次让我帮他把一个VC的串口升级工具美化一下,加上动态背景...这次是把一个序列号打印程序加些功能,像用户登录,用户的权限管理,新建用户,删除用户,修改密码这些功能...其实我对VC一点都不熟,每次是用到哪就去学,能用C写就尽量用C去写,反正在VC里也执行..

    void Dialog_login::OnOK()
    {
     // TODO: Add extra validation here
    #if 1
      char  iniFilePath[256];
      GetModuleFileName(NULL,iniFilePath,sizeof(iniFilePath));
      for(int i=strlen(iniFilePath)-1;i>=0;i--)
      {
       if(iniFilePath[i]=='\\')
       {
        strcpy(iniFilePath+i+1,"Syscfg.ini");

    //dialog_login.m_user_name
                  //将用户名和密码定义为结构体
        /*char User_Name[20];
        char User_Password[20];*/
        struct user
        {
         char user_name[20];
         char user_password[20];
        }userinfo[3]={{"user","user"},{"usr","password"},{"Admin","1234"}};
                   FILE *fp;
          int i;
          if((fp=fopen("usrinfo.cfg","wb"))==NULL)
          {
                        MessageBox("cannot open user information file","Error",MB_OKCANCEL | MB_ICONWARNING);
              return;
                   }
                   for(i=0;i<3;i++)
          {
           if(fwrite(&userinfo[i],sizeof(struct user),1,fp)!=1)
            MessageBox("file write error","Error",MB_OKCANCEL | MB_ICONWARNING);
          }  // 调试用
                   fclose(fp);
          GetDlgItem(IDC_EDIT_USER_NAME)->GetWindowText(m_user_name);
                   GetDlgItem(IDC_EDIT_PASSWORD)->GetWindowText(m_user_password);
       //用户信息从文件中读出来再和m_user_name,m_user_password比较
           if((fp=fopen("usrinfo.cfg","rb"))==NULL)
          {
            MessageBox("cannot open user information file","Error",MB_OKCANCEL | MB_ICONWARNING);
              return;
                   }
          for(i=0;i<3;i++)
          {
           fread(&userinfo[i],sizeof(struct user),1,fp);
           if(!memcmp(m_user_name,userinfo[i].user_name,strlen(m_user_name))&&
            !memcmp(m_user_password,userinfo[i].user_password,strlen(m_user_password)))
           {
            break;
            }
          if(feof(fp))
           {  
           /*CString   s   ;   
             s.Format("%d",i  );   
             AfxMessageBox(s); */

            fclose(fp);
            MessageBox("Password or User name Error!","Error",MB_OKCANCEL | MB_ICONWARNING);
                  return;
           
           }
          
          }
          fclose(fp);

      
        /*GetPrivateProfileString("User", "User_Name", "Admin",User_Name,sizeof(User_Name), iniFilePath);
        GetPrivateProfileString("User", "User_Password", "1234",User_Password,sizeof(User_Password), iniFilePath);*/

        //CString m_user_name;
        //CString dialog_login
    //dialog_login.IDD_DIALOG_LOGIN
        //CEdit*  pEditFileName = (CEdit*)GetDlgItem( IDC_EDIT_PASSWORD );

        //pEditFileName->SetWindowText( "1234");
        //SetDlgItemText(IDC_EDIT_USER_NAME,dialog_login.m_user_name);
       /* GetDlgItem(IDC_EDIT_PASSWORD)->GetWindowText(m_user_password);

        if(strcmp(m_user_password,User_Password))
        {
         MessageBox("Password or User name Error!","Error",MB_OKCANCEL | MB_ICONWARNING);
         return; 
        }
        else
        {
         break;主要是想实现一个从文件中读用户名和密码,然后并进行比较,用户输入的是否正确...

        }*/
       }
      }
    #endif

     CDialog::OnOK();
    }

    框架是那个开发老大已经搭好的,我主要写一些实现..今天就写了一个,主要是想实现一个从文件中读用户名和密码,然后进行比较,用户的信息是否正确...紫色部分的代码是我写的,其实做为测试人员,我自己看了自己写的代码都觉得太不健壮了...不过对自己来说还是学到点东西...

    1.fclose(fp);这句话,我的整个程序就因为这句话而一直导致辞功能不能实现..先对文件中草药写数据后如果不关闭文件指针,文件指针会一直指向EOF,所以进入下边的循环时就一直在第一层出不去,其实当时我通过AfxMessageBox(s); 这个调试信息知道程序是在文件操作上出了问题,刚开始还一直怀疑程序的逻辑

    2.如何在VC在查看变量的值,以前我调试时只会看VC中加打印语句,今天也是上网搜了才有结果...以后可以常用..CString   s   ;   
                       s.Format("%d",i  );   
                       AfxMessageBox(s);

    3.对数据的存储,有想过用二维数组,有想过用链表,还有我认为最方便的结构体...不过这个数据量小,如果数据量大,只能用数据库了,数据的关联存储和查找(不大熟)...

    还有一点担心,接下来还有几天苦战,不知道这种数据结构能不能行,其实结构体和链表我用纯C做过类似的程序...但是要在VC的可视化界面下显示,还是有点没底...因为太想做好了....

  • 要努力了.

    2008-07-24 19:12:54

    一晃就是半年多,觉得现在的工作越来越偏离自己的方向了.

    我的目标是学习性能测试,做网络和数据库的相关测试...在机顶盒这个行业一呆就是一年多,真不知道要怎么跳到别的行业去测试,基础知识相比一年前没有长进反倒有退步,越想越觉得不爽

    索性拿自己的全部家当报了个测试培训班,花了这么多银子,再不好好努力就真的说不过去了.白天上班,晚上学习,生活很单一但还觉得充实,青春不是用来浪费的,有了目标就要坚定的走下去...

  • 测试一年

    2008-06-23 19:59:50

    去年的这个时候我还是个即将离校的学生,转眼间一年就要过去了.

    这一年发生了很多,有拿到第一份薪水时的喜悦,虽然很少,但是真的很开心,因为自己总算能挣钱了,这么多年的书也算没白读.也有从一个学生到一个职业人的转变,学生很随便,做事没有太多的顾虑,更谈不上有压力,可是工作不一样,意味着一种责任,尤其是测试工作.这一年还经历了工作的变动,从内地跑到了沿海,来到了我一直都很向往的城市.来这边三个多月,时间过得飞快,有时候感觉是时间在推着自己前进,我自己很享受这份充实.我一直是个很要强的人,过不惯安逸的生活.来这边的第一份工作薪水还算可以,有时候我也搞不明白自己怎么想的,这么辛苦的工作,住的还是那种又小又黑又湿农民房,我也想过要换.可是现在的我只能把钱用来做自己最重要的事,工作,为了谋求一份更好的发展.

    我现在做机顶盒测试,公司是外资的,老板还挺看重测试,可是整个部门做测试的就我一个,所以什么事都得自己来.来这里工作三个多月,测试方面的,机顶盒硬件方面的,我都接触到不少,也学到不少,最重要的一点就是自己独立做事的能力强了.可是公司的规模和测试的情况也很让我担忧,自己的方向有两根主线,白盒测试或是性能测试,但是现在的公司没让测试人员接触代码,性能测试在机顶盒中我也想过,但是不是前端,所以现有的自动化工具都不能用,只能自己写测试工具,这对我来说又是一个很大的挑战,我目前已经在思索着要对遥控器按键进行自动化测试,但是对按键的组合数目只能达到三个,希望能和同行多交流.

     

  • 初学QTP总结.

    2008-06-23 19:33:45

  • itracker 配置

    2008-06-23 19:33:37

    1.下载JDK-1_5_0_15,Jboss-3.2.7,itracker-2.4.2这三个软件
    2.配置JAVA和JBOSS的环境变量
    JAVA_HOME:JDK安装目录
    JBOSS_HOME:JBOSS安装目录
    PATH:JAVA_HOME\lib;JBOSS_HOME\lib
    CLASSPATH:JAVA_HOME\lib\tools.jar;JAVA_HOME\lib\dt.jar
    3.配置JBOSS服务器和HQL数据库,以及将itracker跑起来(步骤可在网上找)
     

数据统计

  • 访问量: 7659
  • 日志数: 11
  • 建立时间: 2008-06-23
  • 更新时间: 2008-09-25

RSS订阅

Open Toolbar