将"测试"进行到底!~!

发布新日志

  • 数据库测试方法介绍

    2008-02-17 22:17:56

    数据库测试包括测试实际数据(内容)以及数据完整性,已经确保数据没有被误用以及规划的正确性,同时也对数据库应用(例如,Sql处理组件)进行功能性测试.通常会用到SqL脚本进行数据库测试.尽管不是所有的数据库都是适合Sql的,但是通过Sql数据库可以支持绝大部分数据操作,大多数的Web应用程序也是如此。

    通常有两类由数据库错误引发的问题,它们是数据完整性错误以及输出错误。输出错误是在数据提取和操作数据指令过程中发生的错误引起的,这时源数据是正确的。

    通常,数据操作包含了以下一些活动:

    首次活动(例如安装过程)

    1.连邮菘夥衿?2.创建新数据库  3.创建表格、默认值和规则;填入默认数据。 4.编译存储过程和触发器

    在成功安装过程完成之后,对数据库的使用由以下活动组成:

    1.连接数据库  2.执行Sql语句、存储过程以及触发器  3.释放与数据库的连接

    在数据库活动中所包含的错误主要有以下几种常见类型:

    1.连接数据库失败,引起该类失败的许多潜在问题包括:

    a.非法的用户名、密码或两者皆非法  b.对于某些数据活动,如创建表和存储过程,用户拥有不适当的权限。

    c.非法或错误的DSN  d.与拥有必要的DSN文件的服务器连接失败

    指令(存储过程、触发器等)中常见错误包括:

    1.数据库被配置为区分大小写的,但是代码却没有

    2.在Sql语句中使用了保留关键字,例如 Select user from mytable。user为保留关键字

    3.NULL被传递给不接受NULL的记录字段

    4.在字符串字段中对单引号(‘)的错误处理。

    5.在整型字段中对逗号(,)的错误处理。

    6.数值对于字段大小来说过大,字符串对于字段的长度来说过长。

    7.超时---数据库执行完某个过程所用时间长于脚本中所设定的超时值。

    8.非法或错误拼写的字段、列、表或者视图的名称,未定义的字段、表或视图的名称,非法或错误拼写的存储过程名称

    9.调用错误的存储过程。

    10.缺少关键字。

    下面为实际例子介绍:

    1.缺少关键字的: create view student_view select * from student_tbl。其中语句缺少as关键字

    (注:剩下部分以后再慢慢补上,请大家多支持。)

  • How to connect to a database?--怎么连接上数据库?

    2008-02-13 00:13:38

    How to connect to a database?
    code:
    Const adOpenStatic = 3
    Const adLockOptimistic = 3
    Const adUseClient = 3
    Set ōbjConnection = CreateObject("ADODB.Connection")
    Set ōbjRecordset = CreateObject("ADODB.Recordset")
    objConnection.Open "DRIVER={Microsoft ODBC for Oracle};UID=<UID>;PWD=<PWD>"
    objRecordset.CursorLocation = adUseClient
    objRecordset.CursorType = adopenstatic
    objRecordset.LockType = adlockoptimistic
    ObjRecordset.Source="select field1,field2 from testTable"
    ObjRecordset.ActiveConnection=ObjConnection
    ObjRecordset.Open 'This will execute your Query
    If ObjRecordset.recordcount>0 then
    Field1 = ObjRecordset("Field1").Value
    Field2 = ObjRecordset("Field2").Value
    End if
  • CMM手册学习资料

    2008-02-12 21:46:08

    CMM手册之软件过程成熟度的五个等级:

     

  • [转载]性能测试中批量数据制作实例的多种方法讨论

    2008-02-09 22:01:39

     摘 要: JAVA编程批量制造数据,UNIX SHELL脚本批量制造数据,ULTRAEDIT结合EXCEL批量制造数据
            关键词: 批量制作数据,ULTRAEDIT,EXCEL,JAVA,UNIX SHELL
    一、 前言
            在测试工作中经常遇到批量制造数据的情况,有时测试数据只需要一两行,而有时会需要数百行,数千行,甚至数万行,数百万行,制造数据的效率直接关系到测试工作的整体效率,所以如何高效制造数据对于测试工作非常重要。
            本文以一个性能测试中实际遇到的制造批量数据为例子,通过对不同的解决方法的分析执行,得到最有效最实用的批量制造数据的方法。
    二、 任务引入
            由于项目性能测试需要,要生长大量的sql语句,具体要求如下:
    1、 将以下内容:
    INSERT INTO `tbl_topic_object` VALUES ('1', '弃权', '1', '1', '2007-08-28 18:33:08', '', '3', '-1', '1', null);
    INSERT INTO `tbl_topic_object` VALUES ('2', '代表1183225', '1', '1', '2007-08-28 18:33:14', '', '0', '1', '2', null);
    INSERT INTO `tbl_topic_object` VALUES ('3', '代表2183225', '1', '1', '2007-08-28 18:33:14', '', '0', '2', '3', null);
    INSERT INTO `tbl_topic_object` VALUES ('4', '代表3183225', '1', '1', '2007-08-28 18:33:14', '', '0', '3', '4', null);
    INSERT INTO `tbl_topic_object` VALUES ('5', '弃权', '2', '1', '2007-08-28 18:34:40', '', '3', '-1', '1', null);
    INSERT INTO `tbl_topic_object` VALUES ('6', '代表1183358', '2', '1', '2007-08-28 18:34:46', '', '0', '4', '2', null);
    INSERT INTO `tbl_topic_object` VALUES ('7', '代表2183358', '2', '1', '2007-08-28 18:34:46', '', '0', '5', '3', null);
    INSERT INTO `tbl_topic_object` VALUES ('8', '代表3183358', '2', '1', '2007-08-28 18:34:46', '', '0', '6', '4', null);
    INSERT INTO `tbl_topic_object` VALUES ('9', '弃权', '3', '1', '2007-08-28 18:37:14', '', '3', '-1', '1', null);
    INSERT INTO `tbl_topic_object` VALUES ('10', '代表1183632', '3', '1', '2007-08-28 18:37:20', '', '0', '7', '2', null);
    INSERT INTO `tbl_topic_object` VALUES ('11', '代表2183632', '3', '1', '2007-08-28 18:37:20', '', '0', '8', '3', null);
    INSERT INTO `tbl_topic_object` VALUES ('12', '代表3183632', '3', '1', '2007-08-28 18:37:20', '', '0', '9', '4', null);

    生成类似下面的内容,生成四百行:
    INSERT INTO `tbl_topic_object` VALUES ('1  ', '弃权       ', '1  ', '1', '2007-08-28 18:33:08', '', '3', '-1 ', '1', null);
    INSERT INTO `tbl_topic_object` VALUES ('2  ', '代表1000001', '1  ', '1', '2007-08-28 18:33:14', '', '0', '1  ', '2', null);
    INSERT INTO `tbl_topic_object` VALUES ('3  ', '代表2000001', '1  ', '1', '2007-08-28 18:33:14', '', '0', '2  ', '3', null);
    INSERT INTO `tbl_topic_object` VALUES ('4  ', '代表3000001', '1  ', '1', '2007-08-28 18:33:14', '', '0', '3  ', '4', null);
    INSERT INTO `tbl_topic_object` VALUES ('5  ', '弃权       ', '2  ', '1', '2007-08-28 18:34:40', '', '3', '-1 ', '1', null);
    INSERT INTO `tbl_topic_object` VALUES ('6  ', '代表1000002', '2  ', '1', '2007-08-28 18:34:46', '', '0', '4  ', '2', null);
    INSERT INTO `tbl_topic_object` VALUES ('7  ', '代表2000002', '2  ', '1', '2007-08-28 18:34:46', '', '0', '5  ', '3', null);
    INSERT INTO `tbl_topic_object` VALUES ('8  ', '代表3000002', '2  ', '1', '2007-08-28 18:34:46', '', '0', '6  ', '4', null);
    INSERT INTO `tbl_topic_object` VALUES ('9  ', '弃权       ', '3  ', '1', '2007-08-28 18:37:14', '', '3', '-1 ', '1', null);
    INSERT INTO `tbl_topic_object` VALUES ('10 ', '代表1000003', '3  ', '1', '2007-08-28 18:37:20', '', '0', '7  ', '2', null);
    INSERT INTO `tbl_topic_object` VALUES ('11 ', '代表2000003', '3  ', '1', '2007-08-28 18:37:20', '', '0', '8  ', '3', null);
    INSERT INTO `tbl_topic_object` VALUES ('12 ', '代表3000003', '3  ', '1', '2007-08-28 18:37:20', '', '0', '9  ', '4', null);

    2、 注意需要转换的部分
    A.首先将整个列格式调整整齐;
    B.第一列数据从1生成400;
    C.第二列数据从:
    '弃权       ',
    '代表1000001',
    '代表2000001',
    '代表3000001',

    生成到:
    '弃权       ',
    '代表1000100',
    '代表2000100',
    '代表3000100',

    D.第三列数据从四行 1 生成到四行100
    E.第八列数据从:
    '-1 '
    '1  '
    '2  '
    '3  '

    生成到:
    '-1 '
    '298'
    '299'
    '300'

    3、 可以使用任何方法。

    三、 三种解决方法
    1、 JAVA编程批量制造数据
    //==============Insert.java=====================
    public class Insert
    {
     public static void main(String []args)
     {
      int count1 = 0;
      int t1 = 0;
      int t2 = 0;
      
      while(count1 < 100)
      {
       count1 += 1;
       int count2 = 0;
       while(count2 < 4)
       {
        count2 += 1;
        t1 += 1;
        
        switch(count2)
        {
         case 1:
         System.out.println("INSERT INTO `tbl_topic_object` VALUES ('" + t1 + "', '弃权', '" + count1 + "', '1', '2007-08-28 18:33:08', '', '3', '-1', '1', null);");break;
         case 2:
         t2 = 3 * (count1 - 1) + 1;
         System.out.printf("INSERT INTO `tbl_topic_object` VALUES ('" + t1 + "', '代表2000");
         System.out.printf("%03d",count1);
         System.out.printf("', '" + count1 + "', '1', '2007-08-28 18:33:14', '', '0', '" + t2 + "', '2', null);");
         System.out.println();break;
         case 3:
         t2 = 3 * (count1 - 1) + 2;
         System.out.printf("INSERT INTO `tbl_topic_object` VALUES ('" + t1 + "', '代表2000");
         System.out.printf("%03d",count1);
         System.out.printf("', '" + count1 + "', '1', '2007-08-28 18:33:14', '', '0', '" + t2 + "', '3', null);");
         System.out.println();break;
         case 4:
         t2 = 3 * count1;
         System.out.printf("INSERT INTO `tbl_topic_object` VALUES ('" + t1 + "', '代表2000");
         System.out.printf("%03d",count1);
         System.out.printf("', '" + count1 + "', '1', '2007-08-28 18:33:14', '', '0', '" + t2 + "', '4', null);");
         System.out.println();break;
         default:
          System.out.println("Error!");   
        }
       } 
       } 
      System.out.println("Successful!");
      }
    }

    评:使用关键字替换的方法,避免了大量的字符串拼接,使代码看起来干净清晰。
    2、 UNIX SHELL脚本批量制造数据
    HEAD="INSERT INTO \`tbl_topic_object\` VALUES ("
    F4F5F6="'1', '2007-08-28 18:34:46', '', "
    TAIL="null);"
    COUNT1=0
    COUNT2=1
    cat /dev/null > out.txt

    while [ $COUNT1 -le 99 ]
    do
     while [ $COUNT2 -le 4 ]
     do
      TMP=`expr $COUNT2 + \( $COUNT1 \* 4 \)`
      printf "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\bProcess: 400 / $TMP"
      F1=`printf "%-3s" $TMP`
      TMP=`expr $COUNT1 + 1`
      F3=`printf "%-3s" $TMP`
      
      if [ $COUNT2 -eq 1 ]
      then
       F2="'弃权       '"
       F7="'3'"
       F8=`printf "%-3s" -1`
      else
       F7="'0'"
       TMP=`expr $COUNT1 \* 3 + $COUNT2 - 1`
       F8=`printf "%-3s" $TMP`
       TMP=`expr $COUNT1 + 1`
       TMP1=`expr $COUNT2 - 1`
       TMP2=`printf "%03d" $TMP`
       F2="'代表"$TMP1"000"$TMP2"'"
      fi
      F9="'$COUNT2'"
      TMP_STR=$HEAD"'$F1', "$F2", '"$F3"', "$F4F5F6$F7", '"$F8"', "$F9", "$TAIL
      echo "$TMP_STR" >> out.txt
      COUNT2=$((COUNT2+1))
     done
     COUNT1=$((COUNT1+1))
     COUNT2=1
    done
    echo "Process successfully!"

    评:使用两层循环,算法清晰简洁,部分使用算术表达式,语句上也来得更好看,最后结果也是经过格式整理的,比较齐整,不过要注意这些补进去的空格在插入数据表后会不会对后续工作有影响。

    3、 ULTRAEDIT结合EXCEL批量制造数据
    步骤:
    1) 用Excle生成400行“INSERT INTO `tbl_topic_object` VALUES ('”; 
    2) 将上面的生成的内容复制到UE中,在首行末选择“列块——》插入行号”,进行如下设置:
                c

    点击“确定”,将自动生成1——400行数字;
    3) 在Excle中自动生成400行“', '弃权
    ', '代表1
    ', '代表2
    ', '代表3”,将其复制到上面生成的结果之后;
    4) 在Excle中自动生成400行“000”,将其复制到上面生成结果之后;
    5) 接下来生成“
    001
    001
    001

    002
    002
    002”;
    (1)在UE中生成插入100行行号,参考第二步:
                    cccc

    与第二步不同之处为要选择“补0左对齐”复选框,确定后生成所需的“001——100”;
    (2)在“列块模式”下在全部行的行前增加“p”,将结果复制2次,变成如下结果:
    p001p001p001
    p002p002p002
    ……
    p100p100p100;
    然后选择替换“p”为换行,如图所示:
                  ccc

    此时,生成所需的

    001
    001
    001
      
    002
    002
    002”;
    第一个p将被转换为空行;
    (3)将上面的结果复制到第4步之后;
    6) 在Excle中生成400行“', '”,将其复制到上一步结果之后;
    7) 参考5(2)中生成“1
                          1
                          1
                          1
                          2
                          2
    ……,与5(2)中不同的是没有第一个的空行:
    1  p1  p1  p1
    2  p2  p2  p2
    ……
    100p100p100p100
    转换结果为:
    1
    1
    1
    1
    2
    2
    2
    ……
    100
    100
    100
    100
    将以上内容复制到第6步结果中;
    8) 将“', '1', '2007-08-28 18:33:08', '', '3', '
    ', '1', '2007-08-28 18:33:14', '', '0', '
    ', '1', '2007-08-28 18:33:14', '', '0', '
    ', '1', '2007-08-28 18:33:14', '', '0', '”
    复制到Excle中,生成400行内容,将其复制到第7步的结果中;
    9) 在Excle中编辑公式,生成如下内容:
    1     2      3
    4     5      6
    ……
    298  299   300
    将其复制到UE中,修改为一下内容:
    -1p1 p2   p3
    -1p4 p5   p6
    ……
    -1p298  p299 p300,替换:
                   cc

    结果为:
    -1

    2
    3
    -1

    5
    6
    ……
    -1
    298
    299
    300
    ,将以上内容复制到第8步的结果中;
    10) 在Excle中生成400行“', '1', null);
    ', '2', null);
    ', '3', null);
    ', '4', null);”,将其复制到上面生成的结果的之后。

            评:此方法适合不会编程和shell的测试人员,虽然有些复杂,但是操作熟练的话,也可以达到实用效果(本方法中的一些数字变化,也可以参考附录中的内容,效率会更高)。

            附加信息:用excel生成规则数据的方法
    A. 设置单元格格式为缺省(数字),直接将1,2,3列向下拉,得到1到400;
    B. 设置单元格格式为缺省,填写第一行为: =CEILING(ROW()/4, 1),向下拉,得到1,1,1,1,2,2,2,2到100
    C. 设置单元格格式为缺省,填写第一行为: =IF((MOD(ROW(),4)=1),"",TEXT(CEILING(ROW()/4, 1),"000000")),向下拉,得到000001,000001,000001,000001,000002,000002,000002,000002到000100
    D. 设置单元格格式为缺省(数字),填写第一行为:=IF((MOD(ROW(),4)=1),-1,(ROW()-(CEILING(ROW()/4,1)))),向下拉,得到-1,1,2,3,-1,4,5,6....-1,298,299,300
    四、 思考
            通过对该任务的分析执行,或许可以获得一些启迪:
            一个技术人员的能力也包括对环境和工具的掌握的熟练和深入程度;
            解决同一个问题的方法有很多,戏法人人会变,巧妙各有不同,技术没有高下之说,只有适合不适合实际情况之分。刮胡子用刮胡刀,切菜用菜刀,砍柴用斧头,各有各用处。这里是制造四百条数据,如果是制造四百万条数据,适合的方法就会大不相同了;
            要做一个好的技术人员,需要有个丰富的兵器库,才能面临问题的时候,左右逢源,得心应手。
            些许经验,共享之,错漏难免,不吝赐教。

  • WR---H I G H L E V E L T S L F U N C T I O N S-之二

    2008-02-05 17:47:33

    {
          
    if ((version == NETSCAPE_40) || (version == NETSCAPE_45) || (version == NETSCAPE_404))
            {
               list_num  =
    substr(attr_val,2);
              
    list_get_item(list,list_num,attr_val);
           }
        }
      }
     
    else
        rc = generic_get_info(TLIST, list, attr, attr_val);
     
     
    save_report_info(old_report_name); 
     
    return(rc);
    }


    public function list_get_selected(list, out label, out item_index)
    {
     
    auto rc, version, org_time,old_report_name;

     
    if (nargs() != 3)
       
    return(report_param_msg());
     
      get_report_info(old_report_name);
     
    save_report_info("list_get_selected");
              
     
    if (window_is_a_browser_or_frame())
      {
        version = GetWindowActiveBrowserVersion();
        ns_dont_pop_wizard = TRUE;

        org_time = 
    getvar("timeout_msec");
        set_msec_timeout_no_report(
    1000);
    #    setvar("timeout", 1);
        rc = activate_and_get_function(TLIST,list,
    "_list_get_selected", 0, 2,
               label, item_index);
    #    setvar("timeout", org_time);
        set_msec_timeout_no_report(org_time);
        ns_dont_pop_wizard = FALSE;

       
    if (rc != E_OK)
        {
          
    if (rc == E_NOT_FOUND || rc ==E_NOT_UNIQUE)
               scroll_current_win();

           rc = activate_and_get_function(TLIST,list,
    "_list_get_selected", 0, 2,
               label, item_index);
        }
     
       
    list_get_item(list,item_index,label); 
      }
     
    else
        rc = activate_and_get_function(TLIST,list,
    "_list_get_selected", 0, 2,
               label, item_index);

     
    save_report_info(old_report_name);
     
    return(rc);
    }


    public function list_select_item(list, item, button, click_offset)
    {
     
    auto rc, version,number,org_time,w,h,old_report_name;
     
    auto list_wait_time=0;
     
    auto desc, dummy, msw_class_attr,hWnd,count;
     
    auto win =GUI_get_window ( );
     
      org_time = 
    getvar("timeout_msec");

     
    if (nargs() == 2){
        button = LEFT;
        click_offset = LIST_DEFAULT_CLICK_LOCATION;
      }
     
    else if (nargs() == 3)
           click_offset = LIST_DEFAULT_CLICK_LOCATION;
     
    else if (nargs() != 4)
          
    return(report_param_msg());
          
      get_report_info(old_report_name);
     
    save_report_info("list_select_item");
              
     
    if (window_is_a_browser_or_frame())
      {
        version = GetWindowActiveBrowserVersion();
        ns_dont_pop_wizard = TRUE;

       
    if ((version == NETSCAPE_40) || (version == NETSCAPE_45) || (version == NETSCAPE_404))
           list_wait_time=
    1;·#
     
       
    # Bring window to front.
        rc =
    win_get_info(win,"handle",hWnd);
        SetFgWindow(hWnd);

       
    if ( (item == "") && ((version == NETSCAPE_40) || (version == NETSCAPE_45) ||
                             (version == NETSCAPE_404) || (version == IE_4) || (version == NS_61)) )
        {
           rc =
    list_get_items_count(list, count);
          
    if (rc != E_OK)
              
    return (rc);
          
    # convert to zero base
           count--;
           count =
    "#" & count;
           rc =
    list_deselect_range(list,"#0",count);
          
    save_report_info(old_report_name);
          
    return(rc);
        }
       
    if ((version == NETSCAPE_40) || (version == NETSCAPE_45) || (version == NETSCAPE_404) )
        {
          
    if (list == BROWSER_COMBO_LOCATION_CLASS)  ## let WinRunner play on browser_combo_location
           {
               rc =
    obj_get_info(list,"handle",hWnd);
               rc = web_main_combo_get_item_num(list, hWnd, item, number);
              
    if (rc == E_OK)
                  item =
    "#" & number;
           }
          
    else
           {
              
    if (match (item, "[ ]*#[0-9][0-9]*") != 1)
               {
                  rc =
    list_get_item_num(list, item, number);
                  
    if (rc == E_OK)
                      item =
    "#" & number;
               }
           }
       }
      
    else if (version == IE_4)
       {
    #      GUI_map_get_desc (win, list, desc, dummy );
    #      if ((GUI_desc_get_attr(desc,  MSW_CLASS, msw_class_attr) == E_OK)
          
    if ((obj_get_info(list,MSW_CLASS, msw_class_attr) == E_OK)
               &&  (msw_class_attr == BROWSER_COMBO_LOCATION_CLASS))
           {
                  rc =
    obj_get_info(list,"handle",hWnd);

                  rc = web_main_combo_get_item_num(list, hWnd, item, number);
                  
    if (rc == E_OK)
                  {
                      item =
    "#" & number;
                  }
                  
    else
                  {
                     
    ### we force the web_main_combo to open so the list will be refresh.
                     
    ### appearently a bug in the IE that cause the count to be 0 if list wasn't open at least once.
                     
    obj_get_info(list,"width",w);
                     
    obj_get_info(list,"height",h);
                     
    obj_mouse_click(list,w-5,h-5,LEFT);
                      rc = web_main_combo_get_item_num(list, hWnd, item, number);
                     
    if (rc == E_OK)
                      {
                         item =
    "#" & number;
                      }
  • WR---H I G H L E V E L T S L F U N C T I O N S-之一

    2008-02-05 16:57:17

    #####################################################################
    #
    #  WEBTEST WR_FUNCS   -    H I G H   L E V E L   T S L    F U N C T I O N S
    #
    #####################################################################

    static marked_window = "", marked_object = "", ret_value = 0, func_name = "";
    static args_part = "", arg1 = "", arg2 = "", arg3 = "", arg4 = "", arg5 = "";
    static arg6 = "", arg7 = "", arg8 = "", arg9 = "", arg10 = "", arg11 = "";
    static arg12 = "", hl_func_name = "", test_name = "", line_number = "";
    static stop_flag = 1;

    public function list_activate_item(list, item, click_offset)
    {
     
    auto rc, version, org_time,old_report_name;


     
    if (nargs() == 2)
        click_offset = LIST_DEFAULT_CLICK_LOCATION;
     
    else if (nargs() != 3)
         
    return(report_param_msg());
           
      get_report_info(old_report_name);
     
    save_report_info("list_activate_item");

     
    if (window_is_a_browser_or_frame())
      {
        version = GetWindowActiveBrowserVersion();
        ns_dont_pop_wizard = TRUE;

        org_time = 
    getvar("timeout_msec");
        set_msec_timeout_no_report(
    1000);
    #    setvar("timeout", 1);
        rc = activate_function(TLIST, list,
    "_list_activate_item", item, click_offset);
        set_msec_timeout_no_report(org_time);
    #    setvar("timeout", org_time);
        ns_dont_pop_wizard = FALSE;

       
    if (rc != E_OK)
        {
         
    if (rc == E_NOT_FOUND || rc ==E_NOT_UNIQUE)
             scroll_current_win();

          rc = activate_function(TLIST, list,
    "_list_activate_item", item, click_offset);
        }
      }
     
    else
        rc = activate_function(TLIST, list,
    "_list_activate_item", item, click_offset);
     
     
    save_report_info(old_report_name);
     
    return(rc);
    }

    public function list_get_item(list, item, out label)
    {
     
    auto rc = E_GENERAL_ERROR , version,i;
     
    auto timeout,old_report_name;
     
    web_get_timeout(timeout);

     
    if (nargs() != 3)
       
    return(report_param_msg());

      get_report_info(old_report_name);
     
    save_report_info("list_get_item");
     
     
    if(item < 0)
      {
       
    save_report_info(old_report_name);
       
    return(E_OUT_OF_RANGE);
      }

     
    if (window_is_a_browser_or_frame())
      {
        version = GetWindowActiveBrowserVersion();
        ns_dont_pop_wizard = TRUE;
       
    if (version == IE_4)  {
       
    if (is_IE4_html_msw_class(list) != E_OK) {
               rc = activate_and_get_function(TLIST, list,
    "_list_get_item", 1, 1,
                   item, label);
              
    ## on lists on IE_4 that are not HTML_LISTBOX don't try to call web_list_get_item_num - give it to WR
           }
        }
        
       
    if (rc != E_OK) {

          
    for (i=0;i<timeout;i++)
           {
                rc = activate_and_get_function(TLIST, list,
    "web_list_get_num_item", 1, 1, item,
                  label);
       
              
    if (rc == E_AREA_OUT)
                 
    set_window(GUI_get_window(),1);
              
    else
                 
    break;    
           }
        }

        ns_dont_pop_wizard = FALSE;

       
    if (rc != E_OK)  {
          
    if (rc == E_NOT_FOUND || rc ==E_NOT_UNIQUE)
               scroll_current_win();
       
           rc = activate_and_get_function(TLIST, list,
    "web_list_get_item_num", 1, 1, item,
               label);
        } 
      }
     
    else
        rc = activate_and_get_function(TLIST, list,
    "_list_get_item", 1, 1,
           item, label);

     
    save_report_info(old_report_name);  
     
    return(rc);
    }

    public function list_get_item_num(list, item, out item_num)
    {
     
    auto rc = E_GENERAL_ERROR , version, i,old_report_name;
     
    auto timeout;
     
    web_get_timeout(timeout);

     
    if (nargs() != 3)
       
    return(report_param_msg());

      get_report_info(old_report_name);
     
    save_report_info("list_get_item_num");
     
     
    if (window_is_a_browser_or_frame())
      {
        version = GetWindowActiveBrowserVersion();
        ns_dont_pop_wizard = TRUE;
       
    if (version == IE_4) {
               
    if (is_IE4_html_msw_class(list) != E_OK) {
                rc = activate_and_get_function(TLIST, list,
    "_list_get_item_num", 1, 1,
                  item, item_num);
                
    ## on lists on IE_4 that are not HTML_LISTBOX don't try to call web_list_get_item_num - give it to WR
           }
        }
       
    if (rc!=E_OK) {
          
    for (i=0;i<timeout;i++)
           {
               rc = activate_and_get_function( TLIST, list,
    "web_list_get_item_num", 1, 1 ,
                  item, item_num);
       
              
    if (rc == E_AREA_OUT)
                 
    set_window(GUI_get_window(),1);
              
    else
                 
    break;    
           }
        }
        ns_dont_pop_wizard = FALSE;
       
       
    if ((rc != E_OK) && (rc != E_STR_NOT_FOUND))
        {
          
    if (rc == E_NOT_FOUND || rc == E_NOT_UNIQUE)
               scroll_current_win();
       
           rc = activate_and_get_function(TLIST, list,
    "web_list_get_item_num", 1, 1,
               item, item_num);
        }
      }
     
    else
          rc = activate_and_get_function(TLIST, list,
    "_list_get_item_num", 1, 1,
           item, item_num);
       
     
    save_report_info(old_report_name);
     
    return(rc);
    }

    public function list_get_items_count(list, out count)
    {
     
    auto rc,old_report_name, version, org_time;

     
    if (nargs() != 2)
       
    return(report_param_msg());


      get_report_info(old_report_name);
     
    save_report_info("list_get_items_count");
     
     
    if (window_is_a_browser_or_frame())
      {
        version = GetWindowActiveBrowserVersion();
        ns_dont_pop_wizard = TRUE;

        org_time = 
    getvar("timeout_msec");
        set_msec_timeout_no_report(
    1000);
    #    setvar("timeout", 1);
          rc = activate_and_get_function(TLIST, list,
    "_list_get_items_count", 0, 1,
           count);
    #    setvar("timeout", org_time);
        set_msec_timeout_no_report(org_time);
     
        ns_dont_pop_wizard = FALSE;

       
    if (rc != E_OK)
        {
          
    if (rc == E_NOT_FOUND || rc ==E_NOT_UNIQUE)
               scroll_current_win();

           rc = activate_and_get_function(TLIST, list,
    "_list_get_items_count", 0, 1,
               count);
        }
      }
     
    else
        rc = activate_and_get_function(TLIST, list,
    "_list_get_items_count", 0, 1,
           count);

     
    save_report_info(old_report_name);  
     
    return(rc);

    }

    public function list_get_info(list, attr, out attr_val)
    {
     
    auto rc, version, list_num,old_report_name;

     
    if (nargs() != 3)
          
    return(report_param_msg());
     
      get_report_info(old_report_name);
     
    save_report_info("list_get_info");
           
     
    if (window_is_a_browser_or_frame())
      {
        version = GetWindowActiveBrowserVersion();
        ns_dont_pop_wizard = TRUE;

        rc = generic_get_info(TLIST, list, attr, attr_val);
        ns_dont_pop_wizard = FALSE;

       
    if (rc != E_OK)
        {
           
    if (rc == E_NOT_FOUND || rc ==E_NOT_UNIQUE)
               scroll_current_win();

           rc = generic_get_info(TLIST, list, attr, attr_val);
        }
       
       
    if (attr == "value"<SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FA

  • QQ简单脚本

    2008-02-05 16:39:11

    table = "f:\\wrtest\\qq-test\\qq-test.xls";
    rc = ddt_open(table, DDT_MODE_READ);
    if (rc!= E_OK && rc != E_FILE_OPEN)
     pause("Cannot open table.");
    ddt_get_row_count(table,table_RowCount);
    for(table_Row = 1; table_Row <= table_RowCount; table_Row ++)
    {
     ddt_set_row(table,table_Row);
     
     # Shell_TrayWnd
      set_window ("Shell_TrayWnd", 1);
      button_press ("开始");
     
     # BaseBar
      set_window ("BaseBar", 9);
      toolbar_select_item ("ToolbarWindow32_1", "程序(P);腾讯软件;腾讯QQ");
     
     # QQ用户登录
      set_window ("QQ用户登录", 10);
      edit_set ("Edit", ddt_val(table,"qq_name"));
      password_edit_set("Edit_1", ddt_val(table,"qq_password"));
     
     #judge  QQ window whether is find
     if(win_exists("<No title>",7)==E_NOT_FOUND)
     {
       report_msg("QQ window isn't found Now!");
       set_window("QQ登录",2);
       button_press("返回");     #关闭QQ登录验证窗口
      
       win_close("QQ用户登录");  #关闭QQ用户登录窗口
     }
     else
     {
       # <No title>
      win_move ("<No title>", 658, 0);
      win_mouse_click ("<No title>", 194, 12);
      }
     
    }
    ddt_close(table);
  • LoadRunner利用ODBC连接Oracle

    2008-02-05 16:08:22

     

     

    LoadRunner中,编辑脚本的时候,经常要创建 参数,从而更真实的模拟用户操作。下面介绍tabel类型的参数,这种参数 的数据源直接来自数据库。下面以ORACLE 数据库为例。

     

    可能首先要安装ORACLE的客户端,这样才能连接ORACLE数据库服务器,如果是SQL Server的话,就不用这么麻烦了。

     

    1.  ODBC连接数据库

    首先要用ODBC连接数据库,创建文件DSN。打开ODBC

    如上图,点“添加”,选择驱动,对于Oracle数据库,有2种驱动程序:“Microsoft ODBC for Oracle”和“Oracle in OraHome92(这个驱动,在安装ORACLE客户端的时候,会安装的。)。

     

    1.1.      利用Microsoft ODBC for Oracle驱动连接

    这里先选择“Microsoft ODBC for Oracle”,

    点下一步,

    默认的保存路径是:C:\Program Files\Common Files\ODBC\Data Sources,输入名字,点保存,点“下一步”,点“完成”,

     

    输入:用户名,密码,服务器(本地ORACLE客户端上配置的SID),然后就做好文件DSN了。

     

     

    1.2.      利用Oracle in OraHome92驱动连接

    用这种驱动,就最后一步不同,如下图,Service Name填入(本地ORACLE客户端上配置的SID)。

     

     

    2.  LR中的“Table”类型参数设置

    Virtual User Generator 中,打开一个脚本的 “参数列表” 窗口,如下图:

     

    点“new”新建一个参数,选择类型为table,然后点“data Wiszard…”(向导),

    如上图,选择Specify SQL statement manually,下一步,点“Create…

    选择刚才创建的连接ORACLE的文件DSN

     

    输入密码,

     

    创建SQL 语句,如果是SQL Server的话,SQL语句有点不一样,

    /************************/

    Use (数据库名)

    SELECT loginID,sex

    FROM users

    /************************/

     

    finish,然后就可以看到结果:

    Edit with Notepad,在记事本中,可以看到全部的数据。

  • QTP模板

    2008-02-05 15:58:01

    '-------------------脚本说明---------------
    '
    测试对象
    :     
    '
    测试员
    :  David Gao
    '
    编写日期
    :
    '
    测试功能
    :
    '
    进展程度
    :
    '
    基本思路
    :
    '
    主要功能函数
    :
    '
    没解决的问题
    :
    '--------------------
    脚本内容
    -------------
    wait 5
    Dim firstTitle
    firstTitle = Browser("micClass:=Browser").Page("micClass:=Page").GetROProperty("title")
    Do while firstTitle="
    找不到服务器
    "
     Browser("micClass:=Browser").Refresh
    Loop

    Dim objectCount, tags, element, innerText()
    Set tags=Browser("Browser").Page("Page").Object.all

    objectCount=0
    For Each element in tags
        If Ucase(element.tagname)="A" Then
      ReDim Preserve innerText(objectCount+1)
            innerText(objectCount)=element.InnerText
         ōbjectCount=objectCount+1
        end if
    Next

  • (转)63个国外优秀测试网站地址+网址

    2008-02-01 23:43:43

    原文出处:http://www.weste.net/2006/6-6/12070371411.html

    63个国外优秀测试站点链接

    http://bdonline.sqe.com/ 一个关于网站测试方面的网页,对这方面感兴趣的人可以参考
    DlE#@,X!iD140859
    http://citeseer.nj.nec.com/ 一个丰富的电子书库,内容很多,而且提供著作的相关文档参考和下载,是作者非常推荐的一个资料参考网站
    `%e3wBW-F{f3F'G140859
    http://groups.yahoo.com/group/LoadRunner 性能测试工具LoadRunner的一个论坛 软件测试专业网站:51Testing软件测试网)C[5rQ"C8T"Q mT
    http://groups.yahoo.com/grorp/testing-paperannou-nce/messages 提供网站上当前发布的软件测试资料列表 软件测试专业网站:51Testing软件测试网y2H8u'_ Mn#Qg
    http://satc.gsfc.nasa.gov/homepage.html 软件保证中心是美国国家航天局(NASA)投资设立的一个软件可靠性和安全性研究中心,研究包括了度量、工具、风险等各个方面 软件测试专业网站:51Testing软件测试网 j"SSd~!E
    http://seg.iit.nrc.ca/English/index.html 加拿大的一个研究软件工程质量方面的组织,可以提供研究论文的下载
    N#R3T!OkW140859
    http://sepo.nosc.mil 内容来自美国SAN DIEGO的软件工程机构(Sofrware Engineering Process Office)主页,包括软件工程知识方面的资料 软件测试专业网站:51Testing软件测试网A_@K1S1S:J.h
    http://www.asq.org/ 是世界上最大的一个质量团体组织之一,有着比较丰富的论文资源,不过是收费的
    (HTqt3O8\)k'p^140859
    http://www.automated-testing.com/ 一个自动化软件测试和自然语言处理研究页面,属于个人网页,上面有些资源可供下载
    I+Wl/V:n$D5?zg D140859
    http://www.benchmarkresources.com/ 提供有关标杆方面的资料,也有一些其它软件测试方面的资料
    &M&@+M9["UL140859
    http://www.betasoft.com/ 包含一些流行测试工具的介绍、下载和讨论,还提供测试方面的资料 软件测试专业网站:51Testing软件测试网(Yhu@r
    http://www.brunel.ac.uk/~csstmmh2/vast/home.html VASTT研究组织,主要从事通过切片技术测试技术和转换技术来验证和分析系统,对这方面技术感兴趣的人是可以在这里参考一些研究的项目及相关的一些主题信息
    \&u;d)Sn:Pc140859
    http://www.cc.gatech.edu/aristotle/ Aristole研究组织,研究软件系统分析、测试和维护等方面的技术,在测试方面的研究包括了回归测试、测试套最小化、面向对象软件测试等内容,该网站有丰富的论文资源可供下载
    (`;`7tNF7rj140859
    http://www.computer.org/ IEEE是世界上最悠久,也是在最大的计算机社会团体,它的电子图书馆拥有众多计算机方面的论文资料,是研究计算机方面的一个重要资源参考来源 软件测试专业网站:51Testing软件测试网w:E/nqblc
    http://www.cs.colostate.edu/testing/ 可靠性研究网站,有一些可靠性方面的论文资料 软件测试专业网站:51Testing软件测试网H1A h v$a I
    http://www.cs.york.ac.uk/testsig/ 约克大学的测试专业兴趣研究组网页,有比较丰富的资料下载,内容涵盖了测试的多个方面,包括测试自动化、测试数据生成、面向对象软件测试、验证确认过程等
    0u&D-H(V:w|]2X,l140859
    http://www.csr.ncl.ac.uk/index.html 学校里面的一个软件可靠性研究中心,提供有关软件可靠性研究方面的一些信息和资料,对这方面感兴趣的人可以参考
    BL[lGY140859
    http://www.dcs.shef.ac.uk/research/groups/vt/ 学校里的一个验证和测试研究机构,有一些相关项目和论文可供参考 软件测试专业网站:51Testing软件测试网us:aA R U;k
    http://www.esi.es/en/main/ ESI(欧洲软件组织),提供包括CMM评估方面的各种服务
    .A g`?sN%p140859
    http://www.europeindia.org/cd02/index.htm 一个可靠性研究网站,有可靠性方面的一些资料提供参考 软件测试专业网站:51Testing软件测试网SYz*n:O:c#ZP
    http://www.fortest.org.uk/ 一个测试研究网站,研究包括了静态测试技术(如模型检查、理论证明)和动态测试(如测试自动化、特定缺陷的检查、测试有效性分析等) 软件测试专业网站:51Testing软件测试网:~ h4J2fCvh-i
    http://www.grove.co.uk/ 一个有关软件测试和咨询机构的网站,有一些测试方面的课程和资料供下载 软件测试专业网站:51Testing软件测试网'K!P"^B6GQ!t
    http://www.hq.nasa.gov/office/codeq/relpract/prcls-23.htm NASA可靠性设计实践资料
    )R$~T9Qo140859
    http://www.io.com/~wazmo/ Bret Pettichord的主页,他的一个热点测试页面连接非常有价值,从中可以获得相当大的测试资料,很有价值
    \ T^T4D140859
    http://www.iso.ch/iso/en/ISOOnline.frontpage 国际标准化组织,提供包括ISO标准系统方面的各类参考资料
    Q-rW*M0S6?t,A Q)k140859
    http://www.isse.gmu.edu/faculty/ofut/classes/ 821-ootest/papers.html 提供面向对象和基于构架的测试方面著作下载,对这方面感兴趣的读者可以参考该网站,肯定有价值 软件测试专业网站:51Testing软件测试网jn4}[)P0~*zaCY0x
    http://www.ivv.nasa.gov/ NASA设立的独立验证和确认机构,该机构提出了软件开发的全面验证和确认,在此可以获得这方面的研究资料
    5?.wD5G/GE5Gnwt;|140859
    http://www.kaner.com/ 著名的测试专家Cem Kanner的主页,里面有许多关于测试的专题文章,相信对大家都有用。Cem Kanner关于测试的最著名的书要算Testing Software,这本书已成为一个测试人员的标准参考书 软件测试专业网站:51Testing软件测试网:Fv:V~'t _.^R)A
    http://www.library.cmu.edu/Re-search/Engineer- ingAndSciences/CS+ECE/index.html 卡耐基梅陇大学网上图书馆,在这里你可以获得有关计算机方面各类论文资料,内容极其庞大,是研究软件测试不可获取的资料来源之一
    Q7QH2lI3_pdNP140859
    http://www.loadtester.com/ 一个性能测试方面的网站,提供有关性能测试、性能监控等方面的资源,包括论文、论坛以及一些相关链接
    {%P(E{ y N140859
    http://www.mareinig.ch/mt/index.html 关于软件工程和应用开发领域的各种免费的实践知识、时事信息和资料文件下载,包括了测试方面的内容
    :I EM E5qU N140859
    http://www.mtsu.ceu/-storm/ 软件测试在线资源,包括提供目前有哪些人在研究测试,测试工具列表连接,测试会议,测试新闻和讨论,软件测试文学(包括各种测试杂志,测试报告),各种测试研究组织等内容
    }sR~;sV)V$?7~N140859
    http://www.psqtcomference.com/ 实用软件质量技术和实用软件测试技术国际学术会议宣传网站,每年都会举行两次 软件测试专业网站:51Testing软件测试网#j AuC*[:]
    http://www.qacity.com/front.htm 测试工程师资源网站,包含各种测试技术及相关资料下载
    1vVA m%_K;Y4g6u140859
    http://www.qaforums.com/ 关于软件质量保证方面的一个论坛,需要注册
    $s3W:ro!_z4hF(PE140859
    http://www.qaiusa.com/ QAI是一个提供质量保证方面咨询的国际著名机构,提供各种质量和测试方面证书认证
    S`3y p @P,_6i140859
    http://www.qualitytree.com/ 一个测试咨询提供商,有一些测试可供下载,有几篇关于缺陷管理方面的文章值得参考
    'IRTv|zB*{!l'A2?/|140859
    http://www.rational.com/ IBM Rational的官方网站,可以在这里寻找测试方面的工具信息。IBM Rational提供测试方面一系列的工具,比较全面 软件测试专业网站:51Testing软件测试网8Y O2`jQt)Nhj
    http://rexblackconsulting.com/Pages/publicat-ions.htm 软件测试专业网站:51Testing软件测试网(SMg,{W%Y,Fm
    Rex Black的个人主页,有一些测试和测试管理方面的资料可供下载 软件测试专业网站:51Testing软件测试网#`{"Qe6MPo
    http://www.riceconsulting.com/ 一个测试咨询提供商,有一些测试资料可供下载,但不多 软件测试专业网站:51Testing软件测试网x!JPFT| L
    http://www.satisfice.com/ 包含James Bach关于软件测试和过程方面的很多论文,尤其在启发式测试策略方面值得参考
    Tg P2S*}[0S7fW140859
    http://www.satisfice.com/seminars.shtml 一个黑盒软件测试方面的研讨会,主要由测试专家Cem Kanar和James Bach组织,有一些值得下载的资料 软件测试专业网站:51Testing软件测试网;l*J-|4Rya7d
    http://www.sdmagazine.com/ 软件开发杂志,经常会有一些关于测试方面好的论文资料,同时还包括了项目和过程改进方面的课题,并且定期会有一些关于质量和测试方面的问题讨论 软件测试专业网站:51Testing软件测试网V7IKTP&E?Y
    http://www.sei.cmu.edu/ 著名的软件工程组织,承担美国国防部众多软件工程研究项目,在这里你可以获俄各类关于工程质量和测试方面的资料。该网站提供强有力的搜索功能,可以快速检索到你想要的论文资料,并且可以免费下载 软件测试专业网站:51Testing软件测试网@X9_UV&e C,H o2nD3f
    http://www.soft.com/Institute/HotList/ 提供了网上软件质量热点连接,包括:专业团体组织连接、教育机构连接、商业咨询公司连接、质量相关技术会议连接、各类测试技术专题连接等
    *o#m"h(T:K~0MK,E140859
    http://www.soft.com/News/QTN-Online/ 质量技术时事,提供有关测试质量方面的一些时事介绍信息,对于关心测试和质量发展的人士来说是很有价值的 软件测试专业网站:51Testing软件测试网|lc~[h#?oh
    http://www.softwaredioxide.com/ 包括软件工程(CMM,CMMI,项目管理)软件测试等方面的资源 软件测试专业网站:51Testing软件测试网:o f`3m.}7hm @Y6I+|
    http://www.softwareqatest.com/ 软件质量/测试资源中心。该中心提供了常见的有关测试方面的FAQ资料,各质量/测试网站介绍,各质量/测试工具介绍,各质量/策划书籍介绍以及与测试相关的工作网站介绍 软件测试专业网站:51Testing软件测试网+XZ9U Aa
    http://www.softwaretestinginstitute.com 一个软件测试机构,提供软件质量/测试方面的调查分析,测试计划模板,测试WWW的技术,如何获得测试证书的指导,测试方面书籍介绍,并且提供了一个测试论坛 软件测试专业网站:51Testing软件测试网y)H,A+v|+oI}BM
    http://www.sqatester.com/index.htm 一个包含各种测试和质量保证方面的技术网站,提供咨询和培训服务,并有一些测试人员社团组织,特色内容是缺陷处理方面的技术 软件测试专业网站:51Testing软件测试网Am!lBzRK@#B3?
    http://www.sqe.com/ 一个软件质量工程服务性网站,组织软件测试自动化、STAR-EASE、STARWEST等方面的测试学术会议,并提供一些相关信息资料和课程服务
    fTb;hh&[3L140859
    http://www.stickyminds.com/ 提供关于软件测试和质量保证方面的当前发展信息资料,论文等资源 软件测试专业网站:51Testing软件测试网0Hk W_O&w5|y2O2D a
    http://www.stqemagazine.com/ 软件策划和质量工程杂志,经常有一些好的论文供下载,不过数量较少,更多地需要通过订购获得,内容还是很有价值的 软件测试专业网站:51Testing软件测试网2ya#@$e!Qw,[Y
    http://www.tantara.ab.ca/ 软件质量方面的一个咨询网站,有过程改进方面的一些资料提供 软件测试专业网站:51Testing软件测试网1a+[0B5p ncd,[ k*Q
    http://www.tcse.org/ IEEE的一个软件工程技术委员会,提供技术论文下载,并有一个功能强大的分类下载搜索功能,可以搜索到测试类型、测试管理、 测试分析等各方面资料 软件测试专业网站:51Testing软件测试网l }:?@)J"[1m
    http://www.testing.com/ 测试技术专家Brain Marick的主页,包含了Marick 研究的一些资料和论文,该网页提供了测试模式方面的资料,值得研究。总之,如果对测试实践感兴趣,该网站一定不能错过
    ,|Q V+{Oj140859
    http://www.testingcenter.com/ 有一些测试方面的课程体系,有一些价值 软件测试专业网站:51Testing软件测试网WQ;v zezo3E-K
    http://www.testingconferences.com/asiastar/home 著名的AsiaStar测试国际学术会议官方网站,感兴趣的人一定不能错过
    6G Q]'y+y"EKo,I140859
    http://www.testingstuff.com/ Kerry Zallar的个人主页,提供一些有关培训、工具、会议、论文方面的参考信息
    &qN _ k*G)Yp#Y2Be140859
    http://www-sqi.cit.gu.edu.au/ 软件质量机构,有一些技术资料可以供下载,包括软件产品质量模型、再工程、软件质量改进等

    英语新闻网站

    http://www.businessweek.com/ 《商业周刊》全球商业人士一致推崇的杂志 全梅最热销的商业周刊报导美国和国际商业界重要新闻 阐述商业活动中的问题

    http://www.forbes.com/ 美国著名财经杂志《福布斯》

    http://cn.geocities.com/cnbanker/ 银行家杂志网

    http://news.ft.com/home/rw/金融时报为一家重要国际英语商报。它致力于为读者提供最好的商务信息来源、有 关分析和评论

    http://www.guardian.co.uk/ 卫报是一家著名的英语日报。它提供的新闻覆盖英国及国际经济、政治、文化、教 育及其他领域

    http://www.thetimes.co.uk/ 泰晤士报是世界上最悠久的日报,它将高质量的新闻带给世界各地的人们。星期日 泰晤士报提供综合性报道,并包括与它的姊妹报泰晤士报相互关联的专栏

    http://www.pa.press.net/ 新闻协会网址提供新闻、体育新闻、电视排行榜和特写文章。新闻协会同时是英国 国家新闻机构

    http://www.economist.com/ 这是一家对国际经济和政治事物提供分析的重要杂志

    http://www.ielts.org/ 有关IELTS考试的信息

    http://www.nytimes.com 《纽约时报》New York Times

    http://www.nytimes.com 《纽约时报》

    http://online.wsj.com/public/us 华尔街日报

     

    中文测试网站

    无忧软件测试网:http://www.51testing.com/  


    T2X}$P$Z2q Ah#N o p140859一起测试网:http://www.17testing.com/

    软件测试专业网站:51Testing软件测试网a5aB6{ IM[$ak z
    中国软件测试基地:http://bbs.cntesting.com/?u=69 

    软件测试时代:http://www.testage.net/Index.htm

    天天测试网:http://www.tttest.com/

    UML软件工程组织http://www.uml.org.cn/Test/test.asp

    中国测试社区http://www.3atesting.com/index.htm

  • 转载--应聘测试工程师之前需要掌握的一些知识

    2008-01-22 10:45:13

    下面我把转载来的总结在这里与大家分享。

    1. 为什么要做测试?
    2. 什么是软件测试?
    3. 软件测试流程是什么?每个流程具体包括什么?
    4. 了解JAVA开发和常见的J2EE软件平台及体系结构。
    5. 熟悉一种或多种大型数据库,能熟练的编写数据库对象(触发器,存储过程,自定义函数等)
    6. 掌握IE和windows的应用和开发流程,系统测试流程。
    7. 熟悉NET架构。
    8. 熟悉CMMI
    9. 了解缺陷管理过程。
    10. 熟悉C/S ,B/S模式。
    11. 至少熟悉一种自动化测试工具(例如LoadRunnerQTP
    12. 了解Web应用系统模式。
    13. 熟悉至少一种软件配置管理工具。
    14. 怎样去管理和展开测试的工作。

    了解了这些,我会把每个问题都在日制中把我看资料和问测试朋友学到的相关知识,与大家分享,希望看日志的朋友留下宝贵意见,你们在面试软件测试职位时候碰到的问题,我在这里没有提到的,希望你们给与补充,我在这里谢谢大家,哈哈。

  • 一个很好的国外测试网站,测试高手多!~!

    2008-01-20 10:30:35

  • QTP录制Flight4a.exe程序时,怎么取到订票起始站下拉框的值?

    2008-01-16 17:40:15

    '声明一个函数GetList
    Function GetList(i)
       Randomize
       GetList=RandomNumber(0,i)  '随机取0到i之间的数
    End Function

    For q=0 to 9
    '激活敞口,如果对话框Login没有打开,则系统调用将其打开运行
    If not Dialog("Login").Exist Then
     SystemUtil.Run "C:\Program Files\Mercury Interactive\QuickTest Professional\samples\flight\app\flight4a.exe"
    End If
    '激活对话框Login
    Dialog("Login").Activate
    '在文本编辑框Edit内输入内容“Mercury”
    Dialog("Login").WinEdit("Edit").Set "mercury"
    '在文本编辑框Password内输入内容“Mercury”
    Dialog("Login").WinEdit("Password:").Set "mercury"
    '单击OK按钮
    Dialog("Login").WinButton("OK").Click
    '激活窗口Flight Reservation
    Wait(2)
    Window("Flight Reservation").Activate
    '在日期输入框Flight No:内输入时间类型的值
    Window("Flight Reservation").WinObject("Flight No:").Type "071111"

    Dim Get_Count1,Ran_Number1,Result1  '声明三个变量
    Get_Count1=Window("Flight Reservation").WinComboBox("Departure Time:").GetItemsCount  '获取下拉控件Departure Time:的记录的总条数
    Ran_Number1=GetList(Get_Count1-1)     '调用函数GetList,随机得到一个数
    Result1=Window("Flight Reservation").WinComboBox("Departure Time:").GetItem(Ran_Number1)  '获取得第Ran_Number1条记录对应的值
    Window("Flight Reservation").WinComboBox("Departure Time:").Select  Result1  '选择上面获取到下拉框的值

    Dim Get_Count2,Ran_Number2,Result2  '声明三个变量
    Get_Count2=Window("Flight Reservation").WinComboBox("Arrival Time:").GetItemsCount  '获取下拉控件Departure Time:的记录的总条数
    Ran_Number2=GetList(Get_Count2-1)  '调用函数GetList,随机得到一个数
    Result2=Window("Flight Reservation").WinComboBox("Arrival Time:").GetItem(Ran_Number2)   '获取得第Ran_Number1条记录对应的值
    Window("Flight Reservation").WinComboBox("Arrival Time:").Select Result2   '选择上面获取到下拉框的值

    Window("Flight Reservation").WinCheckBox("FLIGHT").Click  '单击检查框,打开Flights Table对话框
    Window("Flight Reservation").Dialog("Flights Table").Activate
    Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click
    Window("Flight Reservation").WinEdit("Edit").Set "1qazse4"   '输入订票人姓名
    Window("Flight Reservation").WinEdit("Tickets:").SetSelection 0, 1
    Window("Flight Reservation").WinEdit("Tickets:").Set "2"      '输入订票张数
    Window("Flight Reservation").WinButton("Insert Order").Click  '单击Insert Order按钮,完成订票操作
    Window("Flight Reservation").Close   '关闭窗口Flight Reservation
    Next

332/2<12
Open Toolbar