发布新日志

  • LoadRunner 使用system函数进行log的自动分析『转载』

    2007-08-25 11:29:24

    LoadRunner 使用system函数进行log的自动分析

    摘自:http://www.51testing.com/?6343/action_viewspace_itemid_18997.html

    我在《明确LoadRunner可以输出的结果》中,讲到可以使用lr_out_message输出log,但是这个是lr自己的log,是按vuser分成一个个的小文件;也可以使用fprintf()等相关函数来进行自定义log的输出,使fprintf()函数进行的log输出,有很大的灵活性,语句也不复杂,实在是强化脚本一大利器。

    但是如果运行1000vuser,测试过程中脚本平均每个vuser迭代执行50次,每个脚本共输出5条log,那么log文件有多少行?
           1000*50*5=250000
    如果用记事本打开+查找那也实在太麻烦了,我这人太懒,琢磨着还是自己写脚本实现吧。

    其实在文本处理这块,用perl程序(脚本语言)或者shell(脚本语言)来处理是比较方便的,在windows下也可以用批处理文件+find来进行自动分析,不过偶既然在学lr,当然是用lr来实现是最好。

    主要实现方法介绍:
    1、使用fprintf()及相关函数输出log
    2、使用mkdir创建新文件夹
    3、使用system调用dos命令,对log文件进行条件分解


    如下面的例子,共有5个fprintf()函数进行log输出:
    ===================================================================
    /*********************************
      * Author:qiguojie
      * object:software login
      * date:2007-5-28
    ***********************************/
    Action()
    {
    //变量定义区
    typedef long time_t;       //定义一个时间变量
    char *filename = "c:\\work\\log\\log.log";      //定义一个文件指针,指向log输入的地址
    long file_stream;        //定义一个长整型变量
    time_t t;        //定义一个时间变量

    if ((file_stream = fopen(filename,"a+")) == NULL)   //打开文件
    {
        lr_error_message("Cannot open %s", filename);
        return -1;
    }
    web_reg_save_param("IsRight","LB=Cache-control: private\r\n\r\n","RB=|",LAST);  //保存返回值
    time(&t);        //获取当前时间
    web_url("abclogin.asp",
        "URL=http://192.168.1.9/soft/abclogin.asp?U={user}&P={password}&L=0&H=3HS28QKH",
        "Resource=0",
        "RecContentType=text/html",
        "Referer=",
        "Snapshot=t1.inf",
        "Mode=HTML",
        LAST);
    fprintf(file_stream,"迭代过程开始…………,时间是%s",ctime(&t));
    fprintf(file_stream,"%s,随机数是%d,",ctime(&t),n);
    fprintf(file_stream,"用户是:%s,密码是:%s,",lr_eval_string("{user}"),lr_eval_string("{password}"));
    //判断返回值,输入对应日志
    if (strcmp(lr_eval_string ("{IsRight}"),"A") == 0)//如果返回值是A
    {
        fprintf(file_stream,"success:用户登录成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
    }
    else if (strcmp(lr_eval_string ("{IsRight}"),"X") == 0) //如果返回值是X
    {
        fprintf(file_stream,"failed:用户登录失败,返回值是:%s\n",lr_eval_string("{IsRight}"));
    }
    else if (strcmp(lr_eval_string ("{IsRight}"),"Z") == 0)//如果返回值是Z
    {
        fprintf(file_stream,"success_others:登录特殊页成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
    }
    else //如果返回值是D
    {
        fprintf(file_stream,"success_free:登录免费用户成功,返回值是:%s\n",lr_eval_string("{IsRight}"));
    }
    fprintf(file_stream,"迭代过程结束…………,时间是%s",ctime(&t));
    fclose(filename); 
    return 0;
    }

    ===================================================================
    脚本设置1000个vuser和迭代50次,那么测试完毕正常的话可以输出250000条日志!!这些日志以不同的关键字开始(success、failed、success_others、success_free)!!
    好了,不多白活了,进行分解的脚本编写!!
    mkdir()函数说明
    int mkdir ( const char *path );
    功能:创建一个目录(输入一个完整路径)

    system()函数说明
    int system ( const char *string );
    功能:执行一个操作系统的命令行命令
    PS:system可以运行dos命令,这样我们的脚本就可以扩展更多的功能

    DOS命令find函数简易用法
    find[空格][const char *string][空格][要查找的文件路径]输出运算符">"[查找结果保存的文件]
    例如:find "123" c:\result.log > c:\123.log
          就是把result.log文件里所有包含"123"的行取出来,放到新文件"123.log"里

    创建新文件夹放在init()里,而分解log的system()函数则放在end里;脚本分别如下:
    vuser_init()
    {
        char new_dir[] = "C:\\work\\log\\FJ_log";
        mkdir(new_dir);
        return 0;
    }

    vuser_end()
    {
        system("find \"success:\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success.log");
        system("find \"failed:\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\failed.log");
        system("find \"success_others\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success_others.log");
        system("find \"success_free\" c:\\work\\log\\log.log >C:\\work\\log\\FJ_log\\success_free.log");
        return 0;
    }
    PS:这些例子里路径都是写死的,每次重新启动测试,都需要更新脚本;大家可以通过强化脚本来实现参数化路径和文件名。
    这样,在全部脚本执行完毕后,去C:\work\log\FJ_log目录下,就可以看到有分别记录不同的结果的4个文件了(success.log、failed.log、success_others.log、success_free.log)

  • %Processor Time (Process _Total)计数器的说明『转载』

    2007-08-22 17:21:15

    摘自http://www.testfocus.com.cn/Article/ShowArticle/297_1.html

    %Processor Time (Process _Total)计数器会自动记录当前所有进程的处理器时间。但是如果在计数器已经启动之后,又运行新的程序或者退出原来的程序,那么在这些程序启动以及退出的时间范围附近,其对应的Processor Time计数器会很不正常,有时候甚至不可思议的达到百分之几万。所以,要正常监视一个程序的Processor Time,应该先运行这个程序,然后再启动计数器。此后,你不管是退出程序还是启动程序,一般都不会使数据造成很大误差了。

  • Linux常用命令大全全集『转载』

    2007-08-22 16:16:19

    摘自 中国IT实验室---Linux常用命令大全全集http://linux.chinaitlab.com/Special/linuxcom/Index.html

     Linux虽然是免费的,但它的确是一个非常优秀的操作系统,与MS-WINDOWS相比具有可靠、 稳定、速度快等优点,且拥有丰富的根据UNIX版本改进的强大功能。下面,作为一个典型的DOS 和WINDOWS用户,让我们一起来学习Linux的一些主要命令,希望大家能尽快进入到Linux的世界里,成为玩转Linux高手.....[电子版下载]  <<编者:YOYO>>

    温馨提示:按 Ctrl+F 快速查找
     
     
    quotacheck quotaoff lndir repquota quotaon  
               
     
     
    ftpshut ftpwho ftpcount      
     
    fsck.ext2 fdisk losetup mkfs sfdisk
     
    statserial efax pppsetup tcpdump ytalk cu
    smbclient  
     
    adduser chfn useradd date exit finger
    fwhois sleep suspend groupdel groupmod halt
    kill last lastb login logname logout
    ps nice procinfo top pstree reboot
    rlogin rsh sliplogin screen shutdown rwho
    sudo gitps swatch tload logrotate kill
    uname chsh userconf userdel usermod vlock
    who whoami whois newgrp renice su
    skill w id free    
     
    reset clear alias dircolors aumix bind
    chroot clock crontab declare depmod dmesg
    enable eval export pwunconv grpconv rpm
    insmod kbdconfig lilo liloconfig lsmod minfo
    set modprobe ntsysv moouseconfig passwd pwconv
    rdate resize rmmod grpunconv modinfo time
    setup sndconfig setenv setconsole timeconfig ulimit
    unset chkconfig apmd hwclock mkkickstart fbset
    unalias
    SVGAText Mode
     
    ar bunzip2 bzip2 bzip2recover gunzip unarj
    compress cpio dump uuencode gzexe gzip
    lha restore tar uudecode unzip zip
    zipinfo          
     
    setleds loadkeys rdev dumpkeys MAKEDEV  
               
               
               
  • 精妙SQL语句收集『转载』

    2007-08-22 16:06:53


    sK"|9l,LQ18755原文转至CSDN http://blog.csdn.net/chen8148/archive/2007/08/14/1741991.aspx
    3FuqOp3^;FX@18755
    A8}e\G9V+k18755精妙 SQL 语句收集
    ep w Rs bN:fB G18755

    SQL语句先前写的时候,很容易把一些特殊的用法忘记,我特此整理了一下SQL语句操作。
    6c(Z$F4}4T#o+TQ.~'j/Q:C18755一、基础51Testing软件测试网3F-G(]5r ]PJ
    1、说明:创建数据库
    &g!K s$F(d_j'Q*E18755CREATE DATABASE database-name 51Testing软件测试网9jDO0DX|
    2、说明:删除数据库51Testing软件测试网o/["Rj@
    drop database dbname
    Z unx1ov fi}187553、说明:备份sql server51Testing软件测试网Rcv%z rs,E
    --- 创建 备份数据的 device
    M(R ])\ m!p^18755USE master51Testing软件测试网"VIq1|+n'wP
    EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'51Testing软件测试网:UYST#U,b|.r
    --- 开始 备份
    VA3N4O%P^!wB18755BACKUP DATABASE pubs TO testBack
    %^4l I g4vBv187554、说明:创建新表51Testing软件测试网9D$rId:mw F
    create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
    8Gk;^*x/BL"R18755根据已有的表创建新表: 51Testing软件测试网4gz-P*~8`rY
    A:create table tab_new like tab_old (使用旧表创建新表)
    +V7o"lF7JMO;L:u18755B:create table tab_new as select col1,col2... from tab_old definition only51Testing软件测试网Xwk;O(Xb&g0T3M
    5、说明:删除新表51Testing软件测试网Ax(n_xvk d
    drop table tabname 51Testing软件测试网"S{ y3n vE
    6、说明:增加一个列
    a j @8AS,u/Xk18755Alter table tabname add column col type
    zhBo7^([#j,q A18755注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。51Testing软件测试网 pZ}QZMS*E
    7、说明:添加主键: Alter table tabname add primary key(col) 51Testing软件测试网b.r+k3vwXU
    说明:删除主键: Alter table tabname drop primary key(col) 51Testing软件测试网?O/Rrh X
    8、说明:创建索引:create [unique] index idxname on tabname(col....) 51Testing软件测试网#[[T}#m$B?Va Y
    删除索引:drop index idxname
    Bu ebR)y18755注:索引是不可更改的,想更改必须删除重新建。
    }W/@-ppa'i9\187559、说明:创建视图:create view viewname as select statement
    af ~z f18755删除视图:drop view viewname
    Bx&y5nb w(Y%h1875510、说明:几个简单的基本的sql语句
    ce l#VY pc I@ E/|18755选择:select * from table1 where 范围51Testing软件测试网3{0]:S@6YM$V
    插入:insert into table1(field1,field2) values(value1,value2)51Testing软件测试网Jx D]5w] J
    删除:delete from table1 where 范围
    B @6N&Fl-N3f9{)D18755更新:update table1 set field1=value1 where 范围
    !j,Z P_ m2V,[h18755查找:select * from table1 where field1 like '%value1%' ---like的语法很精妙,查资料!
    4vG,F:e3|5I$P"T N18755排序:select * from table1 order by field1,field2 [desc]51Testing软件测试网;QEMbY0m9GvZ:|-m.e
    总数:select count as totalcount from table1
    |!G z\9` c H'b18755求和:select sum(field1) as sumvalue from table1
    #C%MLcaQ_b18755平均:select avg(field1) as avgvalue from table151Testing软件测试网9[MI6f~&D:pH&}[)g
    最大:select max(field1) as maxvalue from table151Testing软件测试网U0T9jDL'W8x m6D*F
    最小:select min(field1) as minvalue from table151Testing软件测试网$m-k"uhp#m/xuDr*F
    11、说明:几个高级查询运算词51Testing软件测试网:Ju9A0_#Nl0SVz
    A: UNION 运算符
    Em&f-~@:CQ&@18755UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 51Testing软件测试网 w.S)ioN8X
    B: EXCEPT 运算符 51Testing软件测试网]e` X-mW
    EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
    :t#e:I/WhWo(he18755C: INTERSECT 运算符
    h.q)[b!a.k@18755INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
    (G(x[Be4\ eMu5X Q18755注:使用运算词的几个查询结果行必须是一致的。 51Testing软件测试网2lO#q k5w"X:@
    12、说明:使用外连接 51Testing软件测试网j|#Ba5d0{
    A、left outer join:
    !Vs1TpAzlOA {\18755左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
    ix va!Z'c18755SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
    Z_Ex ~ P9D18755B:right outer join: 51Testing软件测试网-B~"RZUSGPju
    右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。 51Testing软件测试网 lY'xyTeb
    C:full outer join: 51Testing软件测试网Ntol%f
    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
    :R-yc)H QWN18755二、提升
    wjt%\;IP-D kSLO187551、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)51Testing软件测试网}^#Ng9L^#M
    法一:select * into b from a where 1<>151Testing软件测试网A'Y$w.U/E v Y
    法二:select top 0 * into b from a51Testing软件测试网/`.G5}:W fC"Y
    2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
    _#aY1]3Q18755insert into b(a, b, c) select d,e,f from b;
    .IP.KyKZ R-o187553、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
    6jHFdU(Qx18755insert into b(a, b, c) select d,e,f from b in '具体数据库' where 条件51Testing软件测试网m!]I P(_M
    例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..51Testing软件测试网G$qn5k vO5q
    4、说明:子查询(表名1:a 表名2:b)51Testing软件测试网#?!rc+aA!m/eJw!I
    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)51Testing软件测试网n2Y8W ^o_6jH
    5、说明:显示文章、提交人和最后回复时间51Testing软件测试网-NvM9WI(T,@
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b51Testing软件测试网w,_PzR _fH
    6、说明:外连接查询(表名1:a 表名2:b)51Testing软件测试网Rp|J({ @a*?{5A
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c51Testing软件测试网XR?R;s!WA
    7、说明:在线视图查询(表名1:a )
    g,PH}(F,xK5tI-s18755select * from (SELECT a,b,c FROM a) T where t.a > 1;
    #z;B R0AMlRm6l9s6h187558、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
    o |Rh{ _18755select * from table1 where time between time1 and time2
    4{h,yCm%E1Q18755select a,b,c, from table1 where a not between 数值1 and 数值251Testing软件测试网c({P!t0Q.gQ
    9、说明:in 的使用方法
    U f:b#n4t%f {$f9^;k18755select * from table1 where a [not] in ('值1','值2','值4','值6')
    ^.d9Z\*{1875510、说明:两张关联表,删除主表中已经在副表中没有的信息
    HR,wruw c5nY'|18755delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )51Testing软件测试网+pvy'O._X1[f|
    11、说明:四表联查问题:51Testing软件测试网Ki["s$bu @ Q9v1E;}
    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
    ,{ n2^/Z9a1X1875512、说明:日程安排提前五分钟提醒
    ob2O,y(G#y,D8V18755SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>551Testing软件测试网+SjL1j&X)p/v7R^
    13、说明:一条sql 语句搞定数据库分页
    4Q2va-O1F4D_18755select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段51Testing软件测试网Fdj!U M6ZZ ?
    14、说明:前10条记录
    ~9KPx)zU v18755select top 10 * form table1 where 范围
    !QH7ov H8h nQ1875515、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
    )ly2n4n$D'vq]X18755select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
    c kO/P?X l1mi1875516、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
    2GK5Q?e)UR18755(select a from tableA ) except (select a from tableB) except (select a from tableC)
    Dc g U#_1875517、说明:随机取出10条数据
    d tu3r.H7fS18755select top 10 * from tablename order by newid()
    K t U5x {sO^o1875518、说明:随机选择记录
    s;Pl&u_kd*ZEu18755select newid()
    ycm0c7W F2}s1875519、说明:删除重复记录51Testing软件测试网+b1i,x].@kek
    Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)51Testing软件测试网Z%Dl J'a9n/j
    20、说明:列出数据库里所有的表名
    ZO \ K.L0F18755select name from sysobjects where type='U' 51Testing软件测试网rR3p8F)O
    21、说明:列出表里的所有的51Testing软件测试网3N7vu(P.{N7H
    select name from syscolumns where id=object_id('TableName')51Testing软件测试网 r |A&T{3hE4E
    22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
    3Z S4n,EV*_X18755select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
    lk]GxSh18755显示结果:
    kVUW+NZW:YB3}18755type vender pcs51Testing软件测试网,Q/JZ+^e{/Kc"L
    电脑 A 151Testing软件测试网 D6x-PqErp6G
    电脑 A 1
    LlU|,g%G18755光盘 B 2
    3D$S:tM4`C0M18755光盘 A 2
    b-ot'I(_XD18755手机 B 351Testing软件测试网-C;UENl4P'U Q
    手机 C 3
    T_#c4E3b `$cf8w,Kkw1875523、说明:初始化表table151Testing软件测试网"FE hi"\i(j8n2\
    TRUNCATE TABLE table1
    VuG9z-a\9D1875524、说明:选择从10到15的记录51Testing软件测试网[ }8tLy NCj`!w5KL
    select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
    6ry {!\,Lk18755三、技巧
    H)O:t(a_WdFb187551、1=1,1=2的使用,在SQL语句组合时用的较多
    $gV+]Eiq1D5hz18755"where 1=1" 是表示选择全部   "where 1=2"全部不选,
    /Gix"lXU4p h18755如:
    $[ b(Nr e ^.d DuJ18755if @strWhere !=''
    n&d%{1@6JUo+]8~+}18755begin
    J a\!bON$x Z18755set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
    )[+I6@uRQ G G6a18755end
    ;o h5O;lD)V18755else 51Testing软件测试网3~3DqP8XdK2U
    begin
    p.o4\0U9YK&W%l-A18755set @strSQL = 'select count(*) as Total from [' + @tblName + ']' 51Testing软件测试网-x6?-`iX0cp?:O G
    end 51Testing软件测试网Q!Jg2Pi6^Ja
    我们可以直接写成
    EJ#}`m[r18755set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere
    (k&OeG"V1@b3Q/G187552、收缩数据库
    J/gZ r8D+e:ErCe18755--重建索引
    kt&V ql3U0[0i*c9]| e18755DBCC REINDEX
    AbE O9XO18755DBCC INDEXDEFRAG
    K_R3vBPF18755--收缩数据和日志
    X:DUed;H18755DBCC SHRINKDB
    6qD}U ~18755DBCC SHRINKFILE51Testing软件测试网~ZrFYW'R9X7^4X
    3、压缩数据库
    Y8B+z5yE*iT@.D_18755dbcc shrinkdatabase(dbname)51Testing软件测试网w1j5[6@6U8z
    4、转移数据库给新用户以已存在用户权限51Testing软件测试网 Ix)ur8G/Zz#E R
    exec sp_change_users_login 'update_one','newname','oldname'51Testing软件测试网#H#[4I;qC ^6Qo(wy-?-L
    go
    %@$w @ O6JH'B187555、检查备份集
    "`n^ M @?*N t.[h18755RESTORE VERIFYONLY from disk='E:\dvbbs.bak'51Testing软件测试网!m;riax;}?
    6、修复数据库51Testing软件测试网%[j-? zH
    ALTER DATABASE [dvbbs] SET SINGLE_USER
    -|W {9v/[5f B18755GO51Testing软件测试网I,K9^5` W&yu
    DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK51Testing软件测试网,CPBQm8f5Z[
    GO
    1]%T/U&?(z;@$_18755ALTER DATABASE [dvbbs] SET MULTI_USER
    /y&y7GJ7@rZ:sHZ2|18755GO
    N;H4V[(|\}187557、日志清除
    #tZ(S^;X^ ZX [9a5^18755SET NOCOUNT ON51Testing软件测试网6YD+Fq[
    DECLARE @LogicalFileName sysname,51Testing软件测试网j*Gx2CdDdNV
            @MaxMinutes INT,51Testing软件测试网K'g'z@|
            @NewSize INT

    USE     tablename             -- 要操作的数据库名
    }3|H Qr!WA18755SELECT  @LogicalFileName = 'tablename_log',  -- 日志文件名51Testing软件测试网UXZ3G-z
    @MaxMinutes = 10,               -- Limit on time allowed to wrap log.
    r9N,t yv&yZ18755        @NewSize = 1                  -- 你想设定的日志文件的大小(M)
    Y\G4r~].][18755-- Setup / initialize51Testing软件测试网`Bus%j[sWE
    DECLARE @OriginalSize int
    +B*l{0v)V3Nk{&b F18755SELECT @OriginalSize = size
    _Rm'NH'^HNT18755  FROM sysfiles
    +})UeP/EZ18755  WHERE name = @LogicalFileName51Testing软件测试网%n H J3U VN9P
    SELECT 'Original Size of ' + db_name() + ' LOG is ' + 51Testing软件测试网-?Rb(^n$aur
            CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
    1N9d*Hf$E\$~&q_q4i18755        CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
    :~x!q3|hG18755  FROM sysfiles
    -}s,k!hq"xO3b{18755  WHERE name = @LogicalFileName
    5p SE[6\-Od,J8r18755CREATE TABLE DummyTrans
    !s[*wIE:l Tggu18755  (DummyColumn char (8000) not null)

    DECLARE @Counter   INT,51Testing软件测试网t:j%k+R"z p P8}@
            @StartTime DATETIME,51Testing软件测试网}.B"Z9W`y b+n
            @TruncLog  VARCHAR(255)51Testing软件测试网h@X{(A
    SELECT  @StartTime = GETDATE(),
    #M eK{ BJ18755        @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'51Testing软件测试网'P2a AA[$qb;Ak
    DBCC SHRINKFILE (@LogicalFileName, @NewSize)51Testing软件测试网WLI0C;w(Z*tO
    EXEC (@TruncLog)51Testing软件测试网(U/`1D ]/\1WK&S
    -- Wrap the log if necessary.51Testing软件测试网(j e|D7Y$L4Z$LZ
    WHILE     @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
    ;Sq@ ].o18755      AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName) 
    /O_~M'y ^18755      AND (@OriginalSize * 8 /1024) > @NewSize 
    d2}/Z:C)g0_0L18755  BEGIN -- Outer loop.51Testing软件测试网O"] U%l mW ML8__
        SELECT @Counter = 0
    I0W ev7W18755    WHILE  ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))
    mL"K5Y$x WW9|18755      BEGIN -- update51Testing软件测试网C2O J:~}
            INSERT DummyTrans VALUES ('Fill Log')  51Testing软件测试网}Sk9V!TN+G
            DELETE DummyTrans
    :l)Q~qG1C"wm2E18755        SELECT @Counter = @Counter + 151Testing软件测试网@T,xg4\
          END   51Testing软件测试网2q Ieb J g
        EXEC (@TruncLog)  51Testing软件测试网h-x z&d*tPa
      END   51Testing软件测试网6^Ko;XmS3qM
    SELECT 'Final Size of ' + db_name() + ' LOG is ' +
    :A8|^2Hs+Q7x'Q}18755        CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
    -?D-Y-h8D18755        CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
    1[H _Zy$^s9xNP18755  FROM sysfiles
    sN*V`/KN18755  WHERE name = @LogicalFileName
    o*]+e ^vg F18755DROP TABLE DummyTrans
    _W"{ _,QjH6l\(f18755SET NOCOUNT OFF
    Dl2{/Mj(n187558、说明:更改某个表51Testing软件测试网.G0aU2j&w9[@ Z$o7{
    exec sp_changeobjectowner 'tablename','dbo'51Testing软件测试网,_ } aVBR
    9、存储更改全部表
    L,vE9dv0T9`,^2]O18755CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch51Testing软件测试网D%CuV(a[j s
     @OldOwner as NVARCHAR(128),
    $Un8l(L\b&O18755 @NewOwner as NVARCHAR(128)51Testing软件测试网o9m Wy&]/yD
    AS
    0yVvP8U)U18755DECLARE @Name   as NVARCHAR(128)
    w!GTK/~)X18755DECLARE @Owner  as NVARCHAR(128)51Testing软件测试网vU9d5t'_X)h2v
    DECLARE @OwnerName  as NVARCHAR(128)51Testing软件测试网 W7F3ld8Z:W5O1mo
    DECLARE curObject CURSOR FOR
    I(Gp1F-bs18755 select 'Name'   = name,
    *jJ{+e!KW j4iUsuA18755  'Owner'   = user_name(uid)
    2i(T!] Z4ls18755 from sysobjects
    uGS ?g*b3p#L T18755 where user_name(uid)=@OldOwner51Testing软件测试网.C5@6\9t)`3s
     order by name
    IG-vT+|s18755OPEN  curObject
    AV!~6T4}-iY R2j*gO%Q18755FETCH NEXT FROM curObject INTO @Name, @Owner
    F"z}Pd18755WHILE(@@FETCH_STATUS=0)
    x,A G"vp ^0?&|-]18755BEGIN    
    O&C \g*v t,F5L18755 if @Owner=@OldOwner
    0X+O?c,^18755 begin51Testing软件测试网 u&d xc&y mG
      set @OwnerName = @OldOwner + '.' + rtrim(@Name)51Testing软件测试网lI6H,G!YB;l
      exec sp_changeobjectowner @OwnerName, @NewOwner51Testing软件测试网~+WH.X?e i
     end51Testing软件测试网^2p xpcWQ
    -- select @name,@NewOwner,@OldOwner
    i:P0GV/G^%h0d,o1y18755 FETCH NEXT FROM curObject INTO @Name, @Owner
    w5[7\$l{_D18755END51Testing软件测试网mcxr|GW
    close curObject51Testing软件测试网!Q-Rj DtK c xFC
    deallocate curObject51Testing软件测试网,F+JzlN-bt6u
    GO

    10、SQL SERVER中直接循环写入数据51Testing软件测试网 |/k B.V6h%QNv
    declare @i int51Testing软件测试网z3Z$Y'Gxo9F
    set @i=1
    C o)x/D uq3C18755while @i<3051Testing软件测试网/ta8j~7W4|F2x
    begin51Testing软件测试网6C DXv7I/\q5nP`
       insert into test (userid) values(@i)
    7jN"eX6P18755   set @i=@i+1
    *~[-~6BXAV Zz18755end51Testing软件测试网T\2E]*Y*F
    小记存储过程中经常用到的本周,本月,本年函数 51Testing软件测试网?iDj2G6n'zs2Q
    Dateadd(wk,datediff(wk,0,getdate()),-1) 51Testing软件测试网9gTX&i3W|]c"C'o ^S
    Dateadd(wk,datediff(wk,0,getdate()),6)
    #G,mhX _*ZV2I18755Dateadd(mm,datediff(mm,0,getdate()),0)
    6bHzx bT~;DA@18755Dateadd(ms,-3,dateadd(mm,datediff(m,0,getdate())+1,0)) 51Testing软件测试网F.HZd ay
    Dateadd(yy,datediff(yy,0,getdate()),0)
    o MC(BG:}$]18755Dateadd(ms,-3,DATEADD(yy, DATEDIFF(yy,0,getdate())+1, 0)) 51Testing软件测试网8cSJ+M/^T
    上面的SQL代码只是一个时间段
    vJ"Q/bIw2k(l18755Dateadd(wk,datediff(wk,0,getdate()),-1)
    NbuDFybv18755Dateadd(wk,datediff(wk,0,getdate()),6)
    Z]#cV;{ av+c9\18755就是表示本周时间段.
    o!rVyl(_)PYJ18755下面的SQL的条件部分,就是查询时间段在本周范围内的:
    `)]Q.Y9IEP18755Where Time BETWEEN Dateadd(wk,datediff(wk,0,getdate()),-1) AND Dateadd(wk,datediff(wk,0,getdate()),6) 51Testing软件测试网|w U Hlx4S3P
    而在存储过程中 51Testing软件测试网 B"md'^0q0[ V r
    select @begintime = Dateadd(wk,datediff(wk,0,getdate()),-1)
    X%_8I+gH18755select @endtime = Dateadd(wk,datediff(wk,0,getdate()),6)

  • 31个工作习惯『转载』

    2007-08-22 15:57:18

    有许多方法可以帮助我们明确工作思路提高工作效率,例如个人工作习惯、团队力量、企业中有一套完整软件等,首先要明白,效率的关键在于良好的工作习惯,而不是学会一两个方法,这决非一日之功.
    1.   每天提前15分钟上班,推迟15分钟下班
    提前15分钟上班,把今天的工作做个列表式的计划
    推迟15分钟下班,总结一下今天的不足,计划明天的工作
    2.    选择好自已办工的工具,了解好其性能——电脑、办公软件、电话等
    结合工作重心,发挥自已办公工具的最大作用
    记得在温州雪歌服饰时,我的好同事小郑,负责湖南片区30多个专卖店,他说整天忙的要死。
    我就问“那你每天最忙的事情是什么呢?”
    他想了想说“具体忙什么也说不上来,就是那些鸡毛蒜皮的事。。。。。”
    我为他泡了杯茶,在休息区坐了下来。
    让我们一起来分析下你为什么觉得忙?
    首先分清你大多时间做些什么工作。
    他说“每家要上的订单、首期款与补货的出货,再次就是接客户打来的电话,而后就是了解各家店货品现状,及一些锁碎之事。
    我注意到他说的第一个“忙点” (往往人说的第一个观点也是最值得我们去关注的观点)发现他在货品分配上占了很多时间。
    我又问“可其他的同事每天花在分配货品上的时间也不只过十几分钟?怎么你花了这么多时间呢?………
    后来才发现,他不了解软件功能同时,也不与同事或其他人请教好的对应方法。只是用自已传统的方法,一款一款查寻数据,每家要花费10分钟,每天下来要花4个多小时,当做好配货单后,人都是晕的了,哪有心情做别事呢?
    顿挫的工具会使你事倍功半,锋利的工具会使你事半功倍。
    3.         让自已的办工桌面变清爽
    文件归类,常用的东西放一定的位置等
    公司桌面上最难找到的是什么?(笔+记事本)
    如:一客户打电话来,希望你记录些东西,但你一时半刻找不到笔或记事本。还让他“你稍等下,等下噢”接下来就是四处寻找……是不是你也遇到这样的问题呢?如果让客户知道你对自已办公工具都遗失,那他又能指望你能帮到他什么呢?
    4.         永远坐在前排
    不管是开会还是培训我都在要坐在最前排
     20
    世纪30年代,在英国一个不出名的小镇里,有一个叫玛格丽特的小姑娘。玛格丽特自小父亲经常向她灌输这样一个观点:无论做什么事情都要力争一流,永远在别人前面,而不落后于人,即使坐公共汽车时,你也要永远坐在前排。父亲从来不允许她说我不能或者太困难之类的话。对于年幼的孩子来说,父亲的要求可能太高了,但他的教育在以后的年月里证明是非常宝贵的。这种残酷”的教育,培养了玛格丽特积极向上的决心和信心。无论是学习生活、工作,她时时牢记父亲的教导,总是抱着一往无前的精神和必胜的信念,克服一切困难,做好每一件事。。
     我们去游乐园坐过山车也是这样——“
    坐在前排是我们的梦想。因为,一旦我们没有坐在前排,就意味着我们可能被遗忘得不到重视、就意味着不能很好展现自我。难道我们不该以积极向上的态度去追求坐在前排”吗?
        ——玛格丽特
    40年后,她连续四年当选英国保守党领袖,成为英国第一位女首相,雄踞英国政坛11年之久,被世界誉为铁娘子,她就是我们非常熟悉的玛格丽特.撒切尔夫人。
    5.         随时记录
    随时记录下自已的工作想法,对事的观念,把它贴在自已最易看到的地方,时常提醒自已
    6.         克制抱怨
    克制抱怨是把造成自己处境的责任推到别人身上从而减轻自己心理压力的一种倾向。
    为什么我们那么顽固地坚持这样一种习惯,总是寻找别人的缺点而看不到别人优点呢?看一件事情为什么只看到负面的东西呢?儿童时代我们还不太会想到抱怨和批评别人,因为我们觉得自己做的不好,认为父母大人不可能有错; 可是到了成人阶段,我们知识进步的结果就学会了发现别人有错,而自己不可能有错了。人们之所以喜欢抱怨,因为这样做可以潜在给我们带来道德上的优越感,我们通过抱怨别人可以比通过做好我们自己的工作能够更快更直接地带来心理上优越感的满足。
    如果我们想更积极更有效地实现自己的价值,就应该训练自己克制从抱怨别人行为中寻找满足的冲动。从这样的行为中得到的满足只能是虚幻的满足,而且由于容易得罪人,对我们个人的发展会带来更大的障碍。训练自己做到停止抱怨并不容易,需要克服人性弱点。人们喜欢快乐积极的人并愿意花时间与之相处。如果你让人害怕,别人不愿意见到你,你也会很郁闷。所以我们要学会选择积极状态,从所遇到的人和事上寻找好的一面,发现优点,发现机会。为什么要这样做?因为你寻找什么,你就会得到什么。你关注什么,你就会吸引它们到你自己身上。虽然思想上知道抱怨的行为不健康,但根深蒂固的行为习惯是需要下决心花时间克服的。当我们一旦觉察到抱怨别人的行为就要并立即停止。当我们养成了自我警惕的习惯,就可以有效地克制这种人性弱点。
    7.        克服人类的天敌——惰性
    “这件事我一定要做了,真的要做了,现在太累了,休息下,再等一会儿再做”
    “先听下音乐放松下,聊下QQ
    “唉!这件事还是明天再做吧”(人的一生只有今天,明天不会来
    我们每个人都会有这样的经验,一些事情需要我们完成,而惰性往往占了上风。如何能克服惰性去完成任务:
    肯定辛苦的过程,更看重的是愉快的结果,如同我们喜欢吃到美食而不愿去洗碗筷一样。渴望成果却不愿意忍受痛苦的过程。
    提高对辛苦的承受能力,如举重锻炼一样,开始是举起自已能承受的重量,之后每天加一点,每月增至几公斤,久而久之, 被举的重量就上来了.
    大事化小,把复杂的事情简单化,大的事情最小化,找到事情的突破口,
    (意志是克服惰性的一种力量
    8.         勇于承认错误不找借口
    当同事或领导指出你某件事做的不理想、不正确时,
    你总会说:
    “我认为….
    “我以为……
    “我想应该是这样…..
    其实回想起来,错就是错了。“认为、以为、我想应该是这样”,这些都是在找理由找辩解!
    错就是错了,勇于承认错误,负起自已责任。
    凡事第一反应:找方法,而不是找借口,借口与成功永远不会同住一屋檐下。
    9.         不要出口伤人(打击别人)
    打击他人其实也是个人心里不平衡的一种释放:在某种程度上,对方的想法(做法)超过或者是突破了你个人的思维方式,但为了体现自已的实力或重要性,人有一种“否认对方的同时,来肯定自我的价值的表现”。
    说话之前,先考虑一下对方的感受,即使你平常与同事相处很好,但一句打击的话,通常可产生两种效果:
    一、他会对你产生反感,因为你不尊重他个人的思路或成果,无条件地否定了他。
    二、如果你一直是他工作中的偶像,那你可能会使他尚失信心。
    我们换种方式:你的方案确实不错,尤其第5条非常切合实际。。。。。(让他接受你的同时)如果把第2条改成***样,这样即人性化,又能很好地体现我们工作热情度。你觉得这样效果怎么样呢?
    学会肯定的同时再指出不足
    10.      换位思考
    一只小猪、一只绵羊和一头乳牛,被关在同一个畜栏里。有一次,牧人捉住小猪,牠大声嚎叫,猛烈地抗拒。绵羊和乳牛讨厌牠的嚎叫,便说:「他常常捉我们,我们并不大呼小叫。小猪听了回答道:「捉你们和捉我完全是两回事,他捉你们,只是要你们的毛和乳汁,但是捉住我,却是要我的命呢!
        立场不同、所处环境不同的人,很难了解对方的感受;
    对别人的失意、挫折、伤痛,不宜幸灾乐祸,而应要有关怀、了解的心情。要有宽容的心!
    11.       懂得谦虚
    谦虚是一切伟大灵魂共有的品质
    美国著名政治家、科学家富兰克林拜访一位前辈,当他从小门进入时,由于门框低矮,他被狠狠地撞了一下。出来迎接的前辈笑着对他说:“很疼吧,可是,这应该是你今天最大的收获。你要记住,要想平安地活在世上,你就必须时时记住学会低头。”什么时候应该低头?那就是犯错误时、有求于人时,有成绩时。)
    古人云:山外有山,天外有天,当你傲视同事或上级时,你已经被某些人孤立了,得不到同事的欢迎?
    海之所以大,在于它是所有河流的最低处
    12.      善于倾听
    卡耐基曾说过:如果你希望成为一个善于谈话的人,那就先做一个注意静听的人,要使人对你感兴趣:那就先使人感兴趣.问别人喜欢回答的问题,鼓励他谈论自已及他所取得的成就.
    不要忘记在与你谈话的人,对他自已、他的需要、他的问题,比对你及你的问题要感兴趣100倍。他注意他颈上的小痣比注意非洲的40次地震还要多!
    在与同事交谈时,要注意倾听他的讲话,并给予适当的反馈。聚神聆听代表着理解和接受,是连接心灵的桥梁。在表达自己思想时,要讲究含蓄、幽默、简洁、生动。含蓄既表现了您的高雅和修养,同时也起到了避免分歧、说明观点、不伤关系的作用,提意见、指出别人的错误,要注意场合,措词要平和,以免伤人自尊心,产生反抗心理。幽默是语言的调味品,它可使交谈变得生动有趣。简洁要求在与人谈话时掌握该说的说,不该说的不说。与人谈话时要有自我感情的投入,这样才会以情动人。此谓之生动。当然要掌握好表达自己的技巧,需要不断的实践,并不断的增加自己的文化紊养,拓宽自己的视野。
    13.      好的工作方法一定要懂得用方法与同事分享
    互相交流信息、切磋自己的体会都可融洽人际关系
    如果你直接把自已好的工作方法与他人分享,在一定程度你就变为重要的人物了,他人不一定能完全接受你,因为人天性有个爱好,就是喜欢别人重视自已,所以分享的前提,我们要找对办法。
    巧妙地把重要人物设为第三方
    如:发现她花了很长的时间从一张表格中提取数据,但你有个更好的公式时。你可礼貌对他说“朋友教给我一个不错的数据提取公式,不防你也试试”相信他巴不得马上学会,因为他现在这种工作方式累的够呛了,出自人的惰性,当然要找个更简单的办法,重要的是你把重要人物设为第三方,而不是你们之间的对比!
    一个苹果交换一个苹果,还是一个平果,一个经验交换一个经验,就成了两个经验!
    14.      保持工作焦点和热情
    每天早晨先确立今天的目标,让工作焦点清晰,然后以最大的热情地去做。
    学会调整工作状态,用积极的意识去激发热情;
    想办法避免干扰。各种兴趣爱好很影响工作状态,把它们放到合适的孤立的时间段,例如午餐之后午休之前,或者重要工作完成之后,不要放在重要时间段之前
    15.      工作前要建立框架意识
    工作前要在脑海中建立“框架”意识,凡事问题要简单化
    每项工作前有3件事要做:沟通、预案、检查是否有遗漏
    一、工作前你将要做好哪些沟通事项?
    二、从不同层面来考虑某一个具体问题,提前做出预案。如:哪些会给他人带来不便?
    三、再次回想,有什么事情还没有想到,但必需要去做?
    16.      建立工作列表
    随时记下要做的工作,所有事情一目了然。注意:
    区分轻重缓急,先做重要的事情,注重效率更注重效果。
    设置并重视完成期限,就像对自己的承诺。
    具体明确,如果太大就分解成简单的工作。
    这一方法比较容易,大多数人都可以使用。
    既减少记忆,又避免遗忘。
    能快速着手工作。
    有效利用琐碎时间。
    17.      利用日程安排
    当工作列表上的工作很多,让你感到烦乱的时候,就要考虑使用日程安排了。
    日程安排与工作列表的不同在于,工作列表只是说明要做什么,而日程还确定了按什么顺序去做,什么时间去做。养成制定日程的习惯有些难度。我们可以:
    先从时间已确定的事务开始,例如会议、会面等。
    逐渐培养日程安排能力,根据个人习惯,将事务安排在合适的时间。
    不要安排得太满,留下必要的缓冲时间。
    相似的工作在一起,尽量减少角色的变化。
    特别要养成习惯,随时利用琐碎时间做一些琐碎的小事。
    18.      怎样做好与客户的沟通:(首先要做的是:分析客户心里,他想要的是什么?)
    答应客户的事情及时做到,即使不能完成,也要提前通知顾客,不能保证完成的不要轻易答应。
    每天上班前适当时间给客户一个电话,对今天的工作提示如:要补些什么货品等?
    下班前给客户一个电话,问是否还有哪些地方没有做好的等
    此外还要对你所服务的客户做些了解;比如生日,家里老人、孩子等情况,当生日时给予祝福,过节时给老人一声问候(学会关心他人,他人才会来关心你)
    切记,不要忘记说些客套话,肯定与赞美他人,不要吝啬自已的微笑
    负起自已的责任,建立好在客户心中的诚信感
    19.       不要害怕浪费时间
    工作中有个难题,想去花时间搞清楚吧?又怕浪费时间!
    切记,只要开始做就不可能是完全的浪费,哪怕失败多次也是有价值的,每次从失败中我们都可以获得很多经验。最为重要的是:在尝试中,我们除了获得失败,还能获得很多经验。
    20.      勤于观察
    理清楚哪些是自已工作重点
    重心工作自已能否胜任,为什么不能胜任?是自已方法不对,还是工作的“工具”本身存在欠缺。如果方法不对,你可借鉴同事的方法,因为他生活在你的身边,他的方法你当然易学会,学会观察优秀的同事,他一天中所做的事情,比如:行动,与客户对话中的言语,面部表情与肢体语言等,对一个突发事情的处理…..如果这些你都作到了,你不仅是学会了“观察他人”更为重要的是你学会了处理事情的另一种方法-----借鉴。
    21.      改良自已的工作方式
    不要把自已搞的太忙一样,如果自已是个大忙人,可见你要更新自已的工作方法了----提高工作效率
    一个大忙人,连与别人说句话的时间都好像没有,想必工作上会让你非常烦恼
    首先我们来找下原因:
    是你所管辖的客户太多而烦忙?
    还是相比之下客户太难搞定呢?
    还是自已的工具不实用?
    可能你会说“我的客户确实太难搞定”如果有这样观念,就是分别的客户给你,也会是这样的
    鄙人曾在雪歌做销售主管时,浙江区的客户没有一个人愿去管,都说浙江区的刻薄,要求多难说话,而当时的我就没有这么样过,我心中唯一的想法就是:懂得有要求的人,他们就是在改良自已经营方法而做出的反映!生活中我从没有遇到一大群这样的人,如果在这里遇见,那我岂不是太幸运了,又给我锻炼成长的一次机会!
    当时我就用了三点法则:万事提前一个电话,
    承诺对方的事,及时办到,负起自已的责任
    事后电话中问是否还可以帮助对方的。。。
    半年后,浙江省区的销售业绩一直排行全国第一,单店排名前十位中七层都是浙江区的
    犹如“汽车”的发展史一样,如果人类不去大胆多次尝试改进,可能还是坐着卡尔.本茨造出的第一辆三轮汽车以每小时18公里的速度,跑到现在。
    对工作方法,要改进、改进、再改进
    22.       独立思考,学会自已想办法解决
    学会与同事之间的相处时刻要记得:助人是一种美德!同时才能得取他的信任感
    配合好同事的工作做好一项工作,经常要与别人合作,在取得成绩之后,要求共同分享,切忌处处表现自己,将大家的成果占为己有。提供给他人机会、帮助其实现生活目标,对于处理好人际关系是至关重要的。
    23.     怎样减轻自已的压力
       
    印度有一个师傅对于徒弟不停地抱怨这抱怨那感到非常厌烦,于是有一天早上派徒弟去取一些盐回来。
      当徒弟很不情愿地把盐取回来后,师傅让徒弟把盐倒进水杯里喝下去,然后问他味道如何。
      徒弟吐了出来,说:“很苦。”
      师傅笑着让徒弟带着一些盐和自己一起去湖边。
      他们一路上没有说话。
      来到湖边后,师傅让徒弟把盐撒进湖水里,然后对徒弟说:“现在你喝点湖水。”
      徒弟喝了口湖水。师傅问:“有什么味道?”
       徒弟回答:“很清凉。”
      师傅问:“尝到咸味了吗?”
      徒弟说:“没有。”
      然后,师傅坐在这个总爱怨天尤人的徒弟身边,握着他的手说:“人生的苦痛如同这些盐有一定数量,既不会多也不会少。我们承受痛苦的容积的大小决定痛苦的程度。所以当你感到痛苦的时候,就把你的承受的容积放大些,不是一杯水,而是一个湖。
    压力的反应在于我们自己的意识,而责怪环境或公司肯定无济于事。所以,面对压力最好暗示自己,激发积极兴奋的心态。如果公司采用了任务管理制度,使工作更透明,责任更明确,完成期限也作了明确规定,这会给人一种压力。应该适当利用这种压力,而不是消极抵制。养成高效的工作习惯于己于人都有利。
      启示:工作中的压力同这些盐有一定数量,既不会多也不会少。我们承受压力的容积的大小决定压力的程度。所以当你感到压力的时候,就把你的承受的容积放大些,不是一杯水,而是一个湖。
    科学家们曾做过这样一个实验。
    在只有窗户打开的半密闭的房间里,将
    6只蜜蜂和同样数目的苍蝇装进一个玻璃瓶中,把瓶子放平在桌上,瓶底朝着窗户。
     然后,观察蜜蜂和苍蝇会有什么样的举动。
    科学家们发现,蜜蜂们会不紧不慢地在瓶底徘徊,认为能找到出口,直到它们力竭倒毙或饿死;而苍蝇们则会不停地在瓶中“
    横冲直撞”,在瓶中的飞行速度明显高于蜜蜂,不到两分钟之内,他们穿过另一端的瓶颈逃逸一空。
     
    蜜蜂们以为,囚室的出口必然在光线最明亮的地方,一定会找到出口。于是,它们不紧不慢地行动着,等待它们的结果是死亡。而苍蝇们却成功地逃离了,这并不在于它们有什么特长,也不在于它们懂得快速行动、求得生存。
    不要花太多时间整理和规划,不要觉得没把所有事情安排好就无法开始一样。只着眼于整体会让你看到做这件事多难多辛苦,你应该找出可以付诸行动的小的突破点,马上开始行动
    25.      脑海计划
    史蒂芬柯维曾提到:所有的事情都经过两次的创造:先是在脑海里酝酿,其次才是实质性的创造。
    一提到工作计划,大家一定想到的是纸上写某某时间要以什么方法做什么事情将达到什么样效果……
    我们的工作计划首先可尝试不用写在纸上,我们要把它印在脑海中,这样会时刻明确工作方向与方法,多次酝酿,当主管问起你的工作计划时,可回答道:我的工作计划是……如果他自已记不下来,就让他用笔去记去吧…….
    计划:明确自已计划的核心所在,用多长时间完成什么项目达到什么样的预期效果,计划开始不易过多,比如本第一次2条,下一次3…..这样锻炼下去,你做什么事情前,脑海中会自动产生一个计划(将计划的细节与你的领导做个汇报,让他提出几点意见,毕竟,人家比你经历的多,同时能让上级了解你的工作状况)
    26.      纸张计划:
    工作计划是为提高工作效益减轻自已工作量而做,并不是为了应付他人拿来写写
    常见的有日计划周计划、月计划、季度计划、年度计划等
            我们采取最简洁明了的方法,列下计划框架,当然可以用口途的方法与领导叙述一翻。
    翻翻你的以前所做的计划,看看达成没有,为什么没有达成,在笔记中分析原因没有。
    没完成计划:在笔记中再写出上周工作计划,列出当初的方案,回故失败的地方
    找出三个以上别的可行方法,把每个方案再明细化,你可把每天想到的,遇到的与方案相关的写在“明细表”中,不久,发现明细不少时,你再回顾,期初在错误在哪了吧?
    虽然方案一样,但执行的细节不一样,结果当然也是不一样。
    细节决定成败
    27.      每天下班前用5分钟做一天的整理工作
    把今天未完成的工作、完成的工作、明天将要做的工作做整理,
    把今天的单据、表格、数据等做个归类存放,舍去不要的。
    方法:先实行淘汰再归类整理
    比如:先淘汰对工作不起作用的东西:(学会舍弃)
      1.桌面上很久没用过的表格等,简直快忘了它的存在。
      
    2.有些表格与数据根本不合理,用起来费时没效率。
      
    3.去除那些难以理解复杂的工式,寻找简单实用的。
      
    4.重复的东西,去除。  
    28.      时常总结分析
     “以心情变化为期段的非纸张总结
    在这,没有提到每天、每周等总结?
    “时常总结”并不是要写在纸上,哪天纸不见了,总结也随之不见,我所倡导的是“以心情变化为期段的非纸张总结”因为心情变化,那一定有与平常不一样的事情发生。
    方法:一杯咖啡或一杯茶+一个宁静的地方(比如自已的床上)+一个易思考的姿势
    这样让你学会放松自我的同时做分析,此环境中大脑才能清楚地回忆每一个已发生故事的片段。
         步骤:首先进行回忆工作中哪些问题出现?
               其次当时我采取了什么工作方法?(脑海中画个叉,因为是错误的)
               试用返推法,如果想不出来,可追忆曾经那时的成功:请回想当初同事或领导称赞你的情形,为什么称赞你,而不是别人,对!因为你某事做的很棒,得到大家的肯定与信任.你帮他们修好了电脑、打印机、你帮他们解决了一个公式运用上的问题等等,后来同事都很配合你的工作,发现那时候的问题很好地迎刃而解了。那么你就试用着以前对待事情的办法与态度,对待现在的事情。或者采取换位思考,换位思考其实就是换个立场去看待问题,正所谓"横看成岭侧成峰,远近高低各不同,换位思考可以让我们明白主管的辛酸与不易,让我们体会同事的关爱......让我们多一些理解,少一分抱怨.把方便留给别人,困难留给自己,我们的工作开展起来也就会更加得心应手
    打破现在的思维方式,找到曾经对待事的办法可能对你有所帮助
    29.      适当了解其它部门工作细节
    不仅了解本部门的细节,也要适当了解其它部门工作细节
    工作见过很多同事,时常会指着别的部门说“那些鬼,不知在忙些什么?………..”如果这样,你又怎能做好接口部门工作呢?
    往往这样,看特事情不全面,也会做出错误的评价
    30.    坚持不懈
    坚持不懈与充分的自信一样,都是取得成功的必备素质,当工作一半遇到挫折就止步不前,怎么又会达到成功呢?
           有一个士兵,要经过一个大沙漠到另一边去。他带着食品朝他的方向走去,他在沙漠里走了七天七夜,眼看就只乘下一天的食品啦,他就想反正也走不出去了,倒不如干脆把乘下的最后一天的食品吃掉,也省得去累,于是他坐在那里把最后一天的食品吃完了。
      
    后来,他的战友经过此地找到了他的尸体,发现其实他只要再走一天的时间就可以到达他的目地地了,因为从他那到绿洲只有几十里路。
    如果你想与众不同,如果你想工作中取得成就,那么你要拥有的最重要的素质就是你能够比任何其他人坚持得更久的能力。这正如有人挖井找人,很多人挖了深浅不一的井,没有找到水就放弃了,只有一人坚持往下挖,挖的比别人都深,最后出水了。只要坚持才能见到效果,只有坚持才能走向成功。
    31.      懂得付出的人 你才是最大的赢家
    每当同事调休或因事请假,您是否做到主动要把他担当一天的工作呢?
    要替他人着想还表现在当他人遭到困难、挫折时,伸出援助之手,给予帮助。良好的人际关系往往是双向互利的。您给别人的种种关心和帮助,当您自己遇到困难的时候也会得到回报。只有懂得帮助他人的人,别人才会同样帮助你!
  • 35岁前必须做好十件事【转】

    2007-08-22 12:53:52

       第一,学会本行业所需要的一切知识并有所发展。已故零件大王布鲁丹在他35岁时,已经成为零件行业的领袖,并且组建了年收入达千万美元的海湾与西部工业公司。每个人在年轻时都可能有过彻夜不眠、刻苦攻读,这在20岁甚或30岁都没有问题,但到了35岁,就不应该再为学习基本技能而大伤脑筋了。35岁之前是一个人从事原始积累的阶段,35岁之后就应该勃发了。

      第二,养成个人风格。在35岁以前,找出你所喜欢的,不论是衣着或是爱好,哪怕是与众不同的小习惯也好。20岁、30岁时你可以不断尝试、不断改变,但是到了35岁,你便要明确地建立个人风格。一位男士或女士在事业中途改变自己的形象,就会让人觉得很不可靠。你喜欢穿西装吗?好!就把西装当作你的商标吧!办公桌上摆些鲜花会令你工作更有效率吗?那就每天都摆些鲜花吧!

      第三,在感情生活方面平和安定。在攀登事业的高峰时,如果私人生活不愉快,陷入感情危机,对你会产生很大的干扰,甚至会逐渐令你对别的事物失去兴趣。那些在35岁之前私人生活已经平和安定的人,一般都比生活动荡不安的人有更大的机会获得成功。因此,如果你想结束一段没有结果的恋情,或者你想和女友结婚,那就赶快行动吧,免得把问题拖到生命的第35个春秋。在35岁以后,你应该专注地看着你对事业的投资开始获利。

      第四,明白自己的短处。承认有些事情你的确做不好,或者不愿做。如果你讨厌数字而喜欢创作,那就不要因为待遇高或顺从别人的期望而强迫自己做数字工作。在 35岁之前,一定要投入你所喜爱、所擅长的那种工作。否则,35岁之后必然会有一段郁郁不乐的日子。而且,真正的成功可能因为活力的消退而丧失。

      第五,知道自己的长处。你应该知道自己擅长什么,并且清楚你所喜欢做而又做得比别人好的事情。不管你目前担任什么样的角色,知道自己的长处对成功都很重要。

      第六,储备辞职另谋生路的钱。在这个多变的职业世界里,你也许不会永远在一个地方工作,或者永远在一个位置上淋漓尽致地发挥自己,当你感到无法施展时,你很可能会想到辞职,或者开辟第二职业,如果你事先储蓄了足够的钱,你便有了一个安全的后盾。

      第七,建立人际关系网。如果到了35岁你仍未建立起牢固的人际关系网,那你就有麻烦了。这个人际关系网包括你的朋友、亲人,最低限度包括所有可以互相帮助的人。这些人有的是你的同事,有的受过你的恩惠,有的你倾听过他们的问题,有的你和他有着相同的爱好。人际关系网不是一朝一夕就能建立起来的,它需要几年甚至十几年的培养。一个人在事业上、生活上的成功其实如同一个政党的成功,你要有许多人散布在适当的地方,你可以依赖他们,他们也可以依赖你。

      第八,学会授权他人。许多人不肯或不能这样做,因此始终被钉在从属的职位上。授权他人是成功的一半,一个事无巨细,不能将工作授权别人的人,注定会遇到极大的障碍。到了35岁,你最好已成为这方面的专家。换言之,你懂得挑选合适的人并信任他们。

      第九,学会在什么时候三缄其口。因说话不小心而自毁前程的人,比因为任何其他原因丧失成功的人都多。要学会保持沉默而且看起来机智 别人自然以为你知道的比实际还多。别讲别人的闲话,别谈论你自己的大计,守口如瓶所赢得的声誉,远比讲人闲话所带来的东西更加珍贵。你在事业上越成功,这一点就越重要。

      第十,对人要忠诚。如果你到了35岁仍未能建立起坚如磐石的忠诚信誉,这一缺点将会困扰你一生。不忠诚的恶名必然会使你在事业上到处不受欢迎。你不能靠暗箭伤人爬到事业的顶峰,而要靠在早期树立起来的真诚刚直和不可动摇的声誉。35岁以前,忠诚只是投资;35岁以后,你会作为一个可以信赖的人收到忠诚的回报。

  • web_custom_request应用示例『转载』

    2007-08-21 12:34:32

     LoadRunner提供的web_custom_request函数可以用于实现参数的动态生成。在LoadRunner中,web_reg_save_param和custom_request都常于处理参数的动态生成。

            web_reg_save_param函数是大家都已经熟悉的了,它的主要作用是从一个response中获得后续的request需要使用的数据,然后将其作为一个参数保存下来,供后续步骤使用。该方法在LoadRunner中被称为Correlation(关联)。

            而web_custom_request函数则可以用于完全自定义向服务端发送的request。

            接下来我们用一个实际的例子说明一下web_custom_request的具体应用:

            以Mercury自带的MercuryWebTours例子为例,假设我们希望在登录进入后将用户的前两条记录删除,我们来看看用web_custom_request如何实现这个目标。

            首先,我们尝试用HTML方式对该操作进行录制。录制后的脚本中与删除相关的部分大致如下:

    web_url("welcome.pl",
        
    "URL=http://localhost/MercuryWebTours/welcome.pl?page=itinerary",
            
    "Resource=0",
            
    "RecContentType=text/html",
        
    "Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=home",
        
    "Snapshot=t3.inf",
        
    "Mode=HTML",
        EXTRARES,
        
    "URL=images/in_itinerary.gif""Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
        
    "URL=images/home.gif""Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
            LAST);
    lr_think_time(
    2);

    web_submit_form(
    "itinerary.pl",
        
    "Snapshot=t4.inf",
        ITEMDATA,
        
    "Name=1""Value=on", ENDITEM,
        
    "Name=2""Value=on", ENDITEM,        "Name=removeFlights.x""Value=116", ENDITEM,
        
    "Name=removeFlights.y""Value=8", ENDITEM,
        LAST);

            我们通过树型模式查看一下在submit form的时候实际向服务器发出的请求的内容:

              

            从请求内容中可以看到,我们通过POST方法发出了请求,请求发送的目的URL是/MercuryWebTours/itinerary.pl,发送的内容是:
    "1=on&flightID=384-798-JM&2=on&flightID=3026-1592-JM&3=on&flightID=1194-2326-JM&.cgifields=1&.c"
    "gifields=2&.cgifields=3&removeFlights.x=116&removeFlights.y=8"

            从发送的内容中可以很明显的分析得出,1=on表示第一个checkbox是被选中的,flightID=384-798-JM表示的是第一条记录所对应的flightID。因此,如果我们需要自己组成这个发送的request的话,必须首先通过关联的方式获得前两条记录的flightID,然后再组成request的内容。

            web_custom_request方法的原型是:
    int web_custom_request (const char *RequestName, <List of Attributes>,[EXTRARES, <List of Resource Attributes>,] LAST );

            其中List of Attributes的主要项目是Method,URL和BODY等。对这个例子来说,我们可以很容易构造出我们需要的request的BODY内容。
    ……
     strcpy(creq, "Body=1=on&flightID=");
     strcat(creq, lr_eval_string("{fID1}"));
     strcat(creq, "&2=on&flightID=");
     strcat(creq, lr_eval_string("{fID2}"));
     strcat(creq, "&.cgifields=1&.cgifields=2");
     strcat(creq, "&removeFlights.x=116&removeFlights.y=8");
    ……

            其中{fID1}、{fID2}等都是通过关联获得的flightID的数据。

            因此,我们可以根据图中的数据编写custom_request语句:

    web_custom_request("itinerary.pl",
    "Method=POST"
        
    "URL=http://localhost/MercuryWebTours/itinerary.pl",
        
    "RecContentType=text/xml",
        creq,
        
    "Snapshot=t4.inf",
        LAST);


            较为完整的代码如下:

    Action()
    {
        
    char creq[500];

        web_reg_save_param(
    "fID1""LB=INPUT TYPE=\"hidden\" NAME=\"flightID\" VALUE=\"""RB=\"""ORD=1"
            
    "SEARCH=BODY", LAST);
        web_reg_save_param(
    "fID2""LB=INPUT TYPE=\"hidden\" NAME=\"flightID\" VALUE=\"""RB=\"""ORD=2"
            
    "SEARCH=BODY", LAST);
        web_url(
    "welcome.pl",
            
    "URL=http://localhost/MercuryWebTours/welcome.pl?page=itinerary",
            
    "Resource=0",
            
    "RecContentType=text/html",
            
    "Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=home",
            
    "Snapshot=t3.inf",
            
    "Mode=HTML",
            EXTRARES,
            
    "URL=images/in_itinerary.gif""Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
            
    "URL=images/home.gif""Referer=http://localhost/MercuryWebTours/nav.pl?page=menu&in=itinerary", ENDITEM,
            LAST);
        lr_think_time(
    2);

        strcpy(creq, 
    "Body=1=on&flightID=");
        strcat(creq, lr_eval_string(
    "{fID1}"));
        strcat(creq, 
    "&2=on&flightID=");
        strcat(creq, lr_eval_string(
    "{fID2}"));
        strcat(creq, 
    "&.cgifields=1&.cgifields=2");
        strcat(creq, 
    "&removeFlights.x=116&removeFlights.y=8");

        lr_output_message(creq);

        web_custom_request(
    "itinerary.pl",
    "Method=POST"
            
    "URL=http://localhost/MercuryWebTours/itinerary.pl",
            
    "RecContentType=text/xml",
            creq,
            
    "Snapshot=t4.inf",
            LAST);

        
    return 0;
    }


  • 测试管理之责任『转载』

    2007-08-21 12:31:17

       摘自http://www.51testing.com/?action_viewnews_itemid_18681.html

     一个我的大学同学开始做测试管理工作了,开始带徒弟了,在管理上出现了一些问题,想知道我是怎么处理的,我觉的很有必要记录和大家分享,因此就写了。

     

        我思考整理了一下我这个同学遇见的问题:

    1.         多次沟通,开发人员不承认 BUG

    2.         开发组不会修改 BUG

    3.         测试人员发现 BUG 非常少,工作效率低

     

        我是这样回答她的:

    问题一:多次沟通,开发人员不承认 BUG

    对策:在测试环境再现 BUG ,把问题统计、记录成文档,直接书面提交领导,面对面的和领导以及开发负责人沟通,解决还是不解决,要解决,什么时候解决,说清楚,不解决,发布了,不要说是测试的不负责任,没有报告, 不要到了后面不认账。

     

    问题二:开发组不会修改 BUG

    对策 1 :帮助开发人员分析查找 BUG 出现的根本原因,找到后,共同协商想办法解决;这一方法只对开发和测试人员能有效沟通,测试人员能力和开发人员能力相当的情况才适用。

    对策 2 :通过网络资源寻找解决办法;再不行就把问题反馈给上一级领导或其它同事,共同寻求解决办法。

     

    问题三:测试人员发现 BUG 非常少,工作效率低

    对策:测试负责人应分析测试人员发现 BUG 少,工作效率低的原因,而不是指责测试人员,造成沟通上的不愉快;更不是测试负责人把测试任务一分,测试文档模板给了、测试文档编写例子给了、所测试的软件业务也讲解了就行了;这样就去埋怨测试新人发现这么少 BUG ;更不是期望测试新人按照参考给的例子照葫芦画瓢就行。

     

        在这第三个问题里,让我思考很多:

    面对测试管理上出现的问题,测试负责人第一时间应该更多的是问问自己:我哪个地方做错了呢?为什么会出现这样的现象呢?而不是第一时间去指责当事人和向她们发火,这是不协调的管理行为。

     

    个人都是从公司的新人走向老员工,都是从一个应届毕业生走向一个社会。测试新人,她们需要正确的指导。

    Ø         在分配任务之前,作为师傅,首先应该了解自己带的徒弟能做什么、适合做什么、有哪些测试特长;做到恰当的分配工作。

    Ø         在工作分配时,还要让徒弟能明白你让她做什么,要的东西是什么,她是否能真正明白;做到有效的沟通。

    Ø         在工作过程中,多提醒徒弟,碰到问题,先思考,想出自己的方法或想不出方法都要积极的问师傅,师傅再回答问题的过程中,要引导徒弟的思维方式,培养她独立思考、解决问题的方法和思路。

    Ø         在工作过程中,要时常检查、关心徒弟工作的情况,发现问题,及时进行指正,这样可以避免能否顺利完成工作的风险。

    Ø         刚毕业的学生思维单纯、要教会她们为人处事,要教会她们怎么去学习,没有了师傅,自己怎么能更好的生存。

     

    我做测试新人的时候,在领导面前,被指责得哭过一回,我至今仍然记得;我很辛苦、很认真的工作、但由于没有和领导有效的沟通,以至文档写的不好,影响产品评审。也就是在没有好师傅指导的环境里工作了两年,经历了很多事情,让我明白了好师傅应该怎么做,做一个好师傅有多么的困难。

    我也知道,作为新人,面对恶劣的社会竞争,要学会生存,工作上不但要认真、要努力、而且还要积极的发问;环境很重要,人本身的心态和责任心更重要。

  • 用LoadRunner下载文件并保存到本地『转载』

    2007-08-21 12:30:10

    发布时间: 2007-8-20 16:48    作者: 关河    来源: 关河的测试生活

    论坛上经常有人问起,如何让LoadRunner可以下载文件并保存在本地。

            初看起来,这个问题应该不是问题:LoadRunner录制的是Client(浏览器)和服务器之间的交互,自然也就能记录到下载文件的动作和收到下载文件的全部内容,但如果真用LoadRunner去尝试这样一个工作,却会发现在LoadRunner录制的脚本中根本没有任何与下载文件相关的语句。

            其实,在HTTP协议中,本来就没有任何一个方法或是动作能够标识“下载文件”这个动作,对HTTP协议来说,下载文件或是请求页面,都只是一个GET方法,至于说我们下载文件时看到的那个提示我们给出用户名的对话框,那完全是客户端自身判断到我们请求的是一个文件而自行处理的。

            那么,究竟该如何才能让LoadRunner完成这个工作呢?

            通过上面的分析,我们已经知道了这样一些事实:

    1、文件请求是通过GET方法请求的;

    2、LoadRunner已经记录了客户端发出的对文件的请求,并能够收到文件内容;

            因此,我们完全可以通过关联的方法,从LoadRunner发出的请求的响应中获取到文件的内容,然后通过LoadRunner的文件操作方法,自行生成文件。

            从LoadRunner录制时的记录(Recording Log)中,我们可以看到具体的请求和请求的响应信息:

            从这里可以看到,我们只需要对以下语句进行关联,就能获得文件的内容。

    web_url("viewfile.asp",
            
    "URL=http://www.testage.net/bbs/viewFile.asp?BoardID=25&ID=217",
            
    "Resource=0",
            
    "RecContentType=text/html",
            
    "Referer=http://www.testage.net/bbs/dispbbs.asp?boardID=25&ID=5187&page=1",
            
    "Snapshot=t16.inf",
            
    "Mode=HTML",
            EXTRARES,
            
    "Url=viewFile.asp?BoardID=25&ID=217""Referer=http://www.testage.net/bbs/dispbbs.asp?boardID=25&ID=5187&page=1", ENDITEM,
            LAST);

            获得文件内容后,通过LoadRunner的fopen,fwrite,fclose函数,就可以将这部分内容保存成本地文件了。

        //获取响应中的文件长度
        flen = web_get_int_property(HTTP_INFO_DOWNLOAD_SIZE);

        
    if(flen > 0)    
        {
            
    //以写方式打开文件
            if((filedes = fopen("c:\\test.rar""wb")) == NULL)
            {
                lr_output_message(
    "Open File Failed!");
                
    return -1;
            }
            
    //写入文件内容
            fwrite(lr_eval_string("{fcontent}"), flen, 1, filedes);
            
    //关闭文件
            fclose(filedes);
        }

            点击下载完整的脚本文件。

            注意,使用该脚本文件时,请自行修改参数username和passwd的值。

            当然,本脚本只是简单实现了文件下载并保存本地的功能,如果我们希望每次下载保存到本地的文件采用不同的名称,或是希望根据实际文件的后缀名动态生成后缀名,则还需要额外的工作。读者可以自行思考如何实现。^_^

  • QTP中的DataTable操作『转载』

    2007-08-20 18:18:14

    近日在对记事本进行研究的时候发现如果需要自动填写一篇文章,我们需要反复使用

     Window("记事本").WinEditor("Edit").Type <输入内容>

    来填写具体的内容,而换行的处理我们又要使用

     Window("记事本").WinEditor("Edit").Type  micRuturn

    在将输入内容参数化了后,我们怎么将整个文章自动换行进行输入呢?这里我们首先需要使用的是DataTable的指针

    1.参数化输入内容

    Window("记事本").WinEditor("Edit").Type DataTable("p_KeyboardInput", dtLocalSheet)

    2.获得Datatable的记录数,从而确定需要读取的数据有多少

    这里我们可以通过DataTable.GetRowCount的方法来获得对应dtLocalSheet的记录数

    3.判断是否需要进行换行

    这里我使用换行符存放在Datatable中的方式,通过if语句进行判断

      If   DataTable("p_KeyboardInput", dtLocalSheet) = "micReturn" Then51Testing软件测试网j#sdsoB,r
      Window("记事本").WinEditor("Edit").Type micReturn
    Rf_ U|5?a4b18755 else
    8w}?;d[18755  Window("记事本").WinEditor("Edit").Type DataTable("p_KeyboardInput", dtLocalSheet)
    Q:\ n7h1UX!k6Q18755 End If

    4.完成一行datatalbe的使用后,我们指针下移

    DataTable.SetNextRow

    5.通过循环完成对整个datatable的调用

    For i=1 to DataTable.GetRowCount

    Next

    最后注意设置该action的运行只进行一次哦,否则会反复运行将整个datatable的数据再运行一次

  • QTP一些知识『转载』

    2007-08-20 18:17:36

    QTP连接数据库

    ----------------------------------------------------------------------------------------------------------------------

    引用地址: http://www.51testing.com/?135582/action_viewspace_itemid_18118.html

    ----------------------------------------------------------------------------------------------------------------------

    (1)    首先要在控制面板中,加一个odbc数据源。

    (2)    {6j ~
    iu&M:F78029(((
    qtp中建立连接和记录集51Testing软件测试+@K[D*LE

    2gs@RN,|;S Kv/v18755set cnn=createobject("adodb.connection")51Testing软件测试网 Gs$e+G \0R"f
    m-G|m/qp78029set ōbjrsa=createobject("adodb.recordset")51Testing
    软件测试网?9\ t'T|fJ#w

    (3)    连接数据库51Testing软件测试网l(` j jYj EWpc


    IR-az.Z`78029cnn.open "provide=msdaora;userid=apts;password=apts;data source=afctwo"51Testing软件测试网8qw s+e[1]q;s51Testing软件测试网]!v6M6J}8o
    userid/password,
    是登陆数据库的用户名和密码,这样数据库就连接上。

    (4)    @R(_0V7n,yF78029对数据库进行操作。
    I`pbd `W18755`Y#J9G/T78029objrsa.open "select bustypefullname from bustypeinfo",cnn,3,251Testing软件测试网JV
    {"F)y%L[!`&K‑i

    X? vyk5s|2dH5n ^/N18755a
    =objrsa("bustypefullname").value
    得到字段bustypefullname的值赋值给了变量a

     

     

    QTP中建立一个数据库检查点

    ----------------------------------------------------------------------------------------------------------------------

    引用地址: http://www.rapidtesting.cn/Html/QTP/07102.html  

    ----------------------------------------------------------------------------------------------------------------------

    Robot相比,QTP直接提供了对数据库中的数据进行检查的检查点,这样如果在我们的测试中需要对后台的业务数据进行检查,只需要建立一个数据库检查点就可以了。建立数据库检查点对于一些比较复杂的业务逻辑的测试非常重要。

    QTP 8种,建立一个数据库检查点的基本步骤如下:

    1  Insert菜单或工具条上选择新建一个Database Checkpoint  

    2  接下来需要为这个Database Checkpoint建立相应的Database Query,这里我们可以通过QTP 8提供的向导完成建立Database Query的过程。

    QTP 8里,我们有两种建立数据库query的选择:一种是通过Microsoft Query建立,这种方法比较简单,但是需要安装Microsoft Office中的Microsoft Query;另一种方法是手动建立,如果你对在Windows中手动建立ODBC数据源和SQL语句比较熟悉,那么可以选择这种方法。

    使用Microsoft Query建立数据库query的画面如下图,Microsoft Query可以帮助我们建立数据连接,选择数据源并建立数据库的qeury

    最后Microsoft Query会把建立好的query返回给QTP 8

    3  query建立好之后,QTP 8将打开Database Checkpoint的属性对话框让我们决定如何建立这个数据库检查点。

    数据库检查点对话框上方的表格中有蓝色对号的单元格表示将会作为基准数据在执行测试时参加检查,我们可以选择那些单元格的数据作为我们的基准数据。而在对话框下方有三个属性页,第一个属性页表明当前选择的基准数据是怎样配置的,可以是常数,也可以从数据表中读取,或者从被测软件的输出数据中读入。

    第二个属性页用来设置比较数据的规则。

    而第三个属性页用来设置在进行数据检查时怎样识别数据表的行,列以及单元格。如果我们选择通过键值来定位行数据,那么被选择为主键的列标题会加上图标作为标识。

    当属性设置完成以后,一个数据库检查点就建立成功了。

    4  修改数据库检查点

    如果需要对建立好的数据库检查点进行修改,可以通过选择该数据库检查点,然后选择检查点的Object Properties,在数据库检查点的Object Properties对话框中修改连接字串或者SQL query

    如果需要修改数据库检查点的数据或其它属性,也可以再次打开盖数据库检查点的Checkpoint Properties对话框。

     

     

     

    QTP识别和操作对象的原理

    QTP为用户提供了两种操作对象的接口,一种就是对象的封装接口,另一种是对象的自身接口。 对象的自身接口是对象控件本身的接口,只要做过软件开发,使用过控件的人应该很清楚。51Testing软件测试网&d+k Qh+m/K8E
       
    对象的封装接口是QTP为对象封装的另一层接口,它是QTP通过调用对象的自身接口来实现的。51Testing软件测试网(mQpt c~J,C
       
    两种接口的脚本书写格式的差别在于:
    0dvZ] KJxmtZ18755   
    自身接口需要在对象名后面加object再加属性名或方法名,    封装接口就不用在对象名后面加object
    ,L9G.Z-xDlz6h18755   
    比如操作JavaEdit对象,通过QTP封装的封装接口,脚本如下:51Testing软件测试网%?3n.mIW}s_
       
    设置JavaEdit的内容:
    9s? H4M r\4NY*k8bnv18755     JavaDialog("Add NE").JavaEdit("NE Name").Set "NE1"
    3E#[t*wo'IK(x18755   
    读取JavaEdit的内容:51Testing软件测试网 w o1zta
         msgbox JavaDialog("Add NE").JavaEdit("NE Name").GetROProperty("value")51Testing软件测试网h]:LwS,z y
       
    如果通过JavaEdit的自身接口,脚本如下:
    !b5@2@@UM9W18755   
    设置JavaEdit的内容:51Testing软件测试网8J-?:H.X]
        JavaDialog("Add NE").JavaEdit("NE Name").object.setText("NE1")51Testing软件测试网S lN{H/s1EYv Uh
       
    读取JavaEdit的内容:
    X2aW"U1`mbIj#s18755    Msgbox JavaDialog("Add NE").JavaEdit("NE Name").object.getText()51Testing软件测试网!~6F:MR;U+R
        QTP
    执行JavaEdit().Set语句时,是通过执行JavaEdit().object.setText()来实现的。51Testing软件测试网u$A2OEfM0e0g
        QTP
    执行JavaEdit().GetROProperty("value"),是通过执行JavaEdit().object.getText()来实现的。
    !Ul@#sM9D18755    JavaEdit
    对象的封装接口Set()GetROProperty("value"),是QTP封装JavaEdit对象的自身接口setText()getText()而得来的。
    (_U%_1KC+Zk:X18755   
    对象的封装接口是QTP使用的缺省接口,我们录制出来的脚本都是使用封装接口,大家用的也都是封装接口。但是封装接口不如自身接口丰富,因为QTP只是封装了部分常用的自身接口嘛。所以我们在需要时,可以绕过封装接口,直接调用对象的自身接口。不过有些自身接口不够稳定,在实践中偶尔会出现问题,但是概率很少。封装接口有相应功能的话,就尽量用封装接口吧!   51Testing软件测试网[$~~rm.R,d*V7G
       
    理解了封装接口和自身接口的原理,我们就可以更加灵活的操作对象了。
    1C'z1|s}O%S"c5QM18755   
    但是我们怎么知道对象都有哪些封装接口和自身接口呢?51Testing软件测试网+FKJS]|{@
       
    其实很简单,用对象查看器(Object Spy)查看对象,在查看窗口里有列出这些接口,包括属性和方法。51Testing软件测试网i]re4g#DM.g
       
    窗口中间有选择栏让你选择Run-time Object或者Test Object    当你选择Run-time Object时,它显示的就是对象的自身接口(自身的属性和方法)当你选择Test Object时,它显示的就是对象的封装接口(封装的属性和方法)51Testing软件测试网3xyg(IE W)H
       
    明白了这些,你还等什么呢?快拿起对象查看器,看看对象都有哪些封装接口和自身接口,肆意的操作它,玩弄它吧!
    S$Q:s D5B)UFa18755   
    比如执行51Testing软件测试网Vyv(yZ/AJs |,u
        JavaDialog("Add NE").JavaEdit("NE Name").object.setVisible(false)51Testing软件测试网Rj)Bv VT%e U@
        
    哈哈,你的JavaEdit对象就当场消失不见了!!!

     

    QTP日志记录方法

    QTP自动化脚本执行中,QTP工程师肯定要考虑如何记录运行中的信息,什么时间执行了什么,中间遇到什么问题等等

    1.通过Shell记录windows事件,windows事件查看器中查看

    优点是操作方便

    Set WshShell = WScripit.CreateObject("Wscrīpt.Shell")

    0是信息,1是错误,2是警告

    WshShell.LogEvent 0, "Logon scrīpt Completed Successfully"
    *@j? zbywHBa18755WshShell.LogEvent 1, "Logon scrīpt failed"
    $xP CiI18755WshShell.LogEvent 2, "
    中文,2" 

    2.通过FileSystemObject来打开文件来记录

    优点是功能强大,想记录啥就是啥

    3.利用Desktop.CaptureBitmap来记录当前Screen

    填写问题单时,发生错误的页面抓图很有说服力,也便于查看,当出错时调用此函数

     

     

     

    QTP专家视图

    专家视图
    (b'FQ*n/MK O18755
    ;U9M5hW\ ||}jy k18755
    专家视图,也叫脚本视图,属于QTP中比较高级的功能选项。在该视图中,测试人员可以直接修改测试脚本(VB脚本)的代码,来增强测试脚本的功能,它要求测试人员具有一定VB脚本语法基础。
    8ry$R5^z6I18755
    当然,测试脚本中也不完全是VB脚本,严格意义上来说,QTP的测试脚本应该是标准 VB脚本和QTP测试对象的组合体。
    P(aW#Ht!x Qx XaR18755
    所谓的QTP测试对象,就是QuickTest定义的用来表示Windows窗体元素的对象,如同窗口,命令按钮等,每一个QTP测试对象都有若干个方法和属性,允许用户加以修改。51Testing软件测试网H"].bYJE Dn,b"ahI
    就是我们刚才录制的测试脚本的专家视图:

    51Testing软件测试网&{G!C0XYK
    51Testing软件测试网 i!]+]0[LD

    4a4O(M;Vl_18755
    我们直接在该视图中修改和在关键字视图中修改的效果是一样的。
    Ph4PK9O'UH18755
    VB脚本是一种容易学习并且功能强大的脚本,它是VB的一个子集,遵循VB的语法。
    $m*Q |)@hHc3T18755
    如果读者原来没有接触过VB脚本的话,可以将关键字视图和专家视图中的对应项结合起来学习。51Testing软件测试网R9A0CpoV/S)_8W
    51Testing软件测试网~#L^0h0G6}X']P}+p
    下面简单介绍一下其语法:
    LD@3}MB-i18755
    1p:@%OU(rn18755
    Ø
    N0D%m{6f.m:K:Q8Wlz18755
    常见的对象名:
    9q`b o9d*Gp18755
    Dialog:对话框,括号里面的参数表示对话框标题栏上的名字51Testing软件测试网3O;^rEC R,@

  • 扫盲————内存泄漏的有关知识[转载]

    2007-08-20 09:04:27

    扫盲————内存泄漏的有关知识
    有关内存泄漏的知识
    最近在看LR,对于内存泄漏的知识有点模糊,查找的有关资料,跟大家分享,本文只是介绍了内存泄漏的概念,例子,分类,表现,和检测方法,抛砖引玉,希望大侠们能分享自己检测出的内存泄漏实例
    1.概念
    简单的说就是你申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系统崩溃。由程序申请的一块内存,且没有任何一个指针指向它,那么这块内存就泄露了。
    2.泄漏的例子
    举几个例子   
      void   fun0()   
      {   
          char   *p=new   char[100];   
      }   
      执行完上面的函数就发生了泄露   
      指针p是局部变量,函数执行完后,指针p被销毁,造成   new   char[100]的内存没有指针指向它   
      ,也就无法再使用,造成内存泄漏。  
      void   fun1()   
      {   
          char   *p=new   char[100];   
          p=new   char[100];   
      }   
      这也泄露了   
       
      void   fun2()   
      {   
          new   char[100];   
      }   
      这东西肯定泄露完了   
       
      void   fun3(char   *a)   
      {   
          char   *p=new   char[100];   
          char   *b=p;   
          p=a;   
          a=b;   
      }   
      可能有泄露,赶紧去加内存条。
    3.泄漏的分类
    以发生的方式来分类,内存泄漏可以分为4类:

    1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
    2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
    3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
    4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

    从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到。
    4.内存泄漏的表现
    内存泄漏或者是说,资源耗尽后,系统会表现出什么现象哪?
    cpu资源耗尽:估计是机器没有反应了,键盘,鼠标,以及网络等等。这个在windows上经常看见,特别是中了毒。
    进程id耗尽:没法创建新的进程了,串口或者telnet都没法创建了。
    硬盘耗尽: 机器要死了,交换内存没法用,日志也没法用了,死是很正常的。
    内存泄漏或者内存耗尽:新的连接无法创建,free的内存比较少。发生内存泄漏的程序很多,但是要想产生一定的后果,就需要这个进程是无限循环的,是个服务进程。当然,内核也是无限循环的,所以,如果内核发生了内存泄漏,情况就更加不妙。内存泄漏是一种很难定位和跟踪的错误,目前还没看到有什么好用的工具(当然,用户空间有一些工具,有静态分析的,也会动态分析的,但是找内核的内存泄漏,没有好的开源工具)
    内存泄漏和对象的引用计数有很大的关系,再加上c/c++都没有自动的垃圾回收机制,如果没有手动释放内存,问题就会出现。如果要避免这个问题,还是要从代码上入手,良好的编码习惯和规范,是避免错误的不二法门。
    5.内存泄漏的检测
    内存泄漏检测工具介绍: http://bbs.51testing.com/thread-87138-1-1.html,只是列出了各个工具,具体实践没有
    另外网上还有很多针对java和c++等的内存泄漏的文章
    Java内存泄漏:http://www.blogjava.net/galaxyp/archive/2006/04/28/43724.html
    VC6.0内存泄漏检测:http://leoman95.spaces.live.com/blog/cns!87f442ce8fa434b1!131.entry
    LR中:如果Process\Private Bytes计数器和Process\Working Set计数器的值持续升高,同时Memory\Available bytes计数器的值却持续降低的话,说明很有可能是存在内存泄漏
     
  • LR VuGen协议介绍 整理笔记【转载】

    2007-08-16 23:45:55

    Vuser脚本类型:
    • 1  应用程序部署解决方案:Citrix ICA

        Citrix Vuser 脚本模拟 Citrix 客户端与服务器间的 Citrix ICA 协议通信。VuGen 录制通信期间的所有活动,并创建 Vuser 脚本。   对远程服务器执行操作时, VuGen 将生成描述这些操作的函数。每个函数都以ctrx 前缀开头。这些函数模拟鼠标和键盘的移动。此外,使用 ctrx 函数还可以通过等待打开特定的窗口同步对操作的重播。
       VuGen 还可以录制 Citrix NFUSE 会话。NFuse 会话使用浏览器,而不是客户端。要录制 NFUSE 会话,必须为 Citrix 和 Web Vuser 执行多协议录制。

     

    • 2 客户端/ 服务器: DB2 CLIDNSInformixMS SQL ServerODBCOracle2 层)、Sybase CtlibSybase Dblib Windows Sockets 协议。

       使用适用于客户端服务器数据库(CtLib、DbLib、Informix、MS SQL Server、Oracle、ODBC 和 DB2-CLI)和 ERP Siebel Vuser协议,通过 VuGen 录制数据库客户端应用程序与服务器之间的通信。称为数据库 Vuser 脚本。

     

    • 3 自定义:C 模板、Visual Basic 模板、Java 模板、Javascrīpt VBscrīpt 类型的脚本。

        除了录制会话以外,可以创建自定义的 Vuser 脚本。既可以使用LoadRunner API 函数,也可以使用标准的 C、Java、VB、VBscrīpt 或Javascrīpt 代码。
        
    通过 VuGen 可以在脚本中编写自己的函数,而不用录制实际会话。可以使用 LoadRunner API 或标准的编程函数。通过 LoadRunner API 函数可以收集关于Vuser 的信息。例如,可以使用 Vuser 函数来度量服务器性能、控制服务器负载、添加调试代码或者检索参与方案的 Vuser 的运行时信息。
       也可以通过在 Visual C 和 Visual Basic 环境中进行编程来开发 Vuser 脚本。在这些环境中,可以在导入 LoadRunner 库时,使用开发应用程序开发 Vuser 脚本。

     

    • 4 分布式组件:适用于 COM/DCOMCorba-Java Rmi-Java 协议。

        可以使用 CORBARMI Jacada 等协议来录制用 Java 编写的应用程序或小程序。也可以使用 VuGen 的导航工具向脚本中添加任意方法.

    录制 COM 客户端应用程序时, VuGen 将生成若干函数,描述 COM 客户端-服务器活动。录制的脚本包含接口声明、API 调用和对方法的实例调用。每个COM 函数都以 lrc 前缀开头。
        VuGen 的主窗口中,可以查看和编辑录制的脚本。该窗口显示会话过程中录制的 COM API/ 方法调用,通过它,可以以可视方式跟踪应用程序COM/DCOM 调用。

     

    关于录制Java语言Vuser脚本
        使用
    VuGen 可以录制 Java 应用程序或小程序。VuGen 将创建一个完全使用 Java编写的脚本,该脚本通过 LoadRunner 特有的 Java 函数进行了增强。录制完后,可以使用 JDK 库或自定义类通过标准 Java 代码来增强或修改该脚本。
        准备好脚本后,可以在
    VuGen 中以独立模式运行它。Sun 的标准 Java 编译器javac.exe 将检查脚本中是否有错误,并对其进行编译。确认脚本可正常运行后,可将该脚本合并到 LoadRunner 方案中。
        在通过录制和手动增强创建脚本时,与 Java Vuser 脚本相关的所有规则和限制都适用。此外,该脚本中使用的所有具体的类都必须位于执行 Vuser 的计算机上,并在 classpath 环境变量中加以指定

     

    • 5 电子商务:FTPLDAPPalmPeopleSoft 8 mulit-lingualSOAPWeb (HTTP/HTML) 和双 Web/WinSocket 协议。

     

    • 6 Enterprise Java BeanEJB 测试 Rmi-Java 协议。
         
      EJB 测试 Vuser 与标准的 Java Vuser 不同,因为 VuGen 会自动创建脚本以测试EJB 功能,无需录制或编程。生成脚本前,需要指定 JNDI 属性和关于应用程序服务器的其他信息。LoadRunner EJB 检测器将扫描应用程序服务器并确定哪些EJB 可用。需要选择要测试的 EJBLoadRunner 将生成测试每个 EJB 方法的脚本。它将为每个方法创建事务,以便您可以度量其性能并找出问题。另外,每个方法都包装在一个 try and catch 块中,以便进行异常处理。
         注意,要创建 EJB 测试脚本,必须在应用程序服务器主机上安装LoadRunner EJB 检测器,而且检测器必须处于活动状态。

     

    •  7 ERP/CRMBaanOracle NCAPeoplesoft-TuxedoSAP-WebSAPGUI
      Siebel-DB2 CLISiebel-MSSQLSiebel-Web Siebel-Oracle 协议。
        

         Oracle NCA 是一种基于 Java 的数据库协议。使用浏览器,可以启动数据库客户端(一个小程序查看器)。可以通过 NCA 数据库的小程序查看器对其执行操作,从而无需使用客户端软件,并可以从所有支持小程序查看器的平台执行数据库操作。有一个专门为模拟 Oracle NCA 客户端而设计的 Vuser 类型。NCA 环境是一个三层环境。用户首先将一个 HTTP 调用从其浏览器发送到 Web服务器。此调用将访问调用 Oracle 应用程序小程序的启动 HTML 页。该小程序在客户机上本地运行,所有后续调用都通过专用的 NCA 协议在客户端和 Forms服务器之间传递。客户端(小程序查看器)与应用程序服务器(Oracle Forms 服务器)进行通信,然后该服务器将信息提交到数据库服务器 (Oracle 8.x)
        
    VuGen 录制并重播客户端和 Forms 服务器(应用程序服务器)之间的 NCA通信。
      在录制 Oracle NCA 会话时,建议为 Oracle NCA Web 协议创建一个多协议脚本

     

    • 8 传统:终端仿真 (RTE)
       

         RTE Vuser 操作终端仿真器,以便加载测试客户端/ 服务器系统。
         RTE Vuser 将字符输入键入终端仿真器,然后将数据提交到服务器,并等待服务器响应。例如,假设您有一台用于维护某个维修公司的客户信息的服务器。现场服务代表每次修改数据时,都通过调制解调器使用终端仿真器来访问服务器数据库。服务代表访问有关客户的信息,然后录制他执行的修理操作的详细信息。

     

     

    • 9 邮件服务:Internet 邮件访问协议 (IMAP)MS Exchange (MAPI)POP3 SMTP

     

    • 10 中间件:Jacada Tuxedo 67)协议。

     

    • 11 流数据:Media Player (MMS) Real 协议。
        

         流媒体是一个增长迅速的市场,使用流媒体可以在 Internet 上传送音频/ 视频内容。流媒体的含义是:可以将音频/ 视频内容传输给最终用户,而不需要首先下载整个文件。流式传输的工作原理是:让服务器在客户端显示内容的同时将内容源源不断地传输到客户端。RealPlayer Media Player 都是显示流式内容的应用程序。
        
    使用 VuGen 可记录使用 RealPlayer Media Player 协议进行通信的客户端应用程序与服务器之间的通信。
     

    • 12 无线:i-ModeVoiceXML WAP 协议。


       针对无线手机优化数据传输WAP 体系结构和 WWW 模型很相似。所有内容都被指定使用类似于标准Internet 格式的格式。在 WWW 域中,使用标准协议传输内容,在无线域(无线会话协议)中,则使用优化的类似于 HTTP 的协议传输内容。可以使用WWW 标准 URL 来查找所有 WAP 内容。
      
    WAP 使用很多 WWW 标准,包括创作和发布方法。WAP 以能够反映设备和网络特征的方式增强了某些 WWW 标准。增加了 WAP 扩展以支持移动网络服务,如“调用控制”和“消息传送”。它还顾及到了移动终端中存在的内存容量和CPU 处理能力等方面的限制。WAP 还支持低带宽和高滞后网络。
       WAP 假定存在负责对移动客户端发送和接收的数据进行编码和解码的网关。对传送到客户端的内容进行编码的目的是,尽可能减小在空中发送到客户端的数据的大小,同时尽可能减小客户端为处理该数据所需的计算能力。可以将网关功能添加到源服务器,或者放在专用网关中

       在通过录制和手动增强创建脚本时,与 Java Vuser 脚本相关的所有规则和限制都适用。此外,该脚本中使用的所有具体的类都必须位于执行 Vuser 的计算机上,
    并在 classpath 环境变量中加以指定.

  • 解决回放时浏览器乱码问题『转载』

    2007-08-15 13:13:13

    用LR回放时,浏览器显示乱码的问题,相信大家都遇到过,那么怎么解决呢?

    下面我就选取浏览器IE6.0中文版,给大家讲解一下。

    首先,设置Run-time Settings-Browser-Browser Emulation-Change。具体设置见下图。

    51Testing软件测试网x5B.K|j9A t
    然后,设置IE,查看-编码-钩上“自动选择”和Unicode(UTF-8)。OK!

  • 测试工具备查『转载』

    2007-08-15 13:11:40

    1、 从测试功能上分 51Testing软件测试网5x aR&t"~J
    (1)
    单元测试 51Testing软件测试网&i:Ua,xV t:{O!F
    针对不同语言,如JUNIT
    G3}!Z s?(M18755(2)
    功能测试 51Testing软件测试网7J9k^_4[4a9gm9W~t7W
    E—Test:功能强大,由于不是采用POST URL的方式回放脚本,所以可以支持多内码的测试数据(当然要程序支持),基本上可以应付大部分的WEB SITE。 51Testing软件测试网4G]7v kT l"pO
    MI公司的WINRUNNER 51Testing软件测试网 Q"@ N Te!K
    COMPUWARE的QARUN
    !kB(v}YVqJf+Bv18755RATIONAL的SQA ROBOT
    @^$N}7N/e2Q0F18755(3)
    压力测试 51Testing软件测试网!q B-v#h-K7P
    MI公司的WINLOAD 51Testing软件测试网6oZE0x p,n a
    COMPUWARE的QALOAD 51Testing软件测试网rqnKdu2eot
    RATIONAL的SQA LOAD
    2ga8I'A7h0Z'd ?O18755(4) 负载测试 51Testing软件测试网$d3M.b2tc$x!{ \)T
    LOADRUNNER
    51Testing软件测试网)\s@?$z5| P6U
    RATIONAL VISUAL QUANTIFY
    0I%D~{mB X18755(5) WEB测试工具
    -n5Z zq p iE18755MI公司的ASTRA系列 51Testing软件测试网5{wz[(kP`'Z
    RSW公司的E—TEST SUITE等 51Testing软件测试网~4qTCsia-h4[
    (6) WEB系统测试工具 51Testing软件测试网J+y%w,w8l%gj-hX
    WORKBENCH 51Testing软件测试网0l5rO5_(i
    WEB APPLICATION STRESS TOOL(WAS) 51Testing软件测试网.j ~l*W?7[U-V'G3]
    (7) 数据库
    测试工具 51Testing软件测试网)M7@[*vsE
    TESTBYTES
    5[A+~M(z$Fe)J18755(8) 回归测试工具 51Testing软件测试网o `s/i+J:mO*o
    RATIONAL TEAM TEST
    YQ~3l]j)j18755WINRUNNER 51Testing软件测试网iYa4i!w.|[
    (9) 嵌入式测试工具
    mU1j(r?Y18755ATTOLTESTWARE。是ATTOLTESTWARE公司的自动生成测试代码的软件测试
    工具,特别适用于嵌入式实时应用软件单元和通信系统测试。 51Testing软件测试网 o(]*Y%bhOI }
    CODETEST是AppliedMicrosystemsCorp.公司的产品,是广泛应用的嵌入式软件在线测试工具。 51Testing软件测试网 kZb3o1dY1Z+V]
    GammaRay。GammaRay系列产品主要包括软件逻辑分析仪GammaProfiler、可靠性评测工具GammaRET等。 51Testing软件测试网?5a%R&OI-r&f;U6g
    LogiScope是TeleLogic公司的工具套件,用于代码分析、软件测试、覆盖测试。 51Testing软件测试网}1SUQ?_
    LynxInsure++是LynxREAL-TIMESYSTEMS公司的产品,基于LynxOS的应用代码检测与分析测试工具。 51Testing软件测试网cX d#U/t%te]a
    MessageMaster是ElviorLtd.公司的产品,测试嵌入式软件系统工具,向环境提供基于消息的接口。
    +z9dV?LeA18755VectorCast是VectorSoftware.Inc公司的产品。由6个集成的部件组成,自动生成测试代码,为主机和嵌入式环境构造可执行的测试架构。 51Testing软件测试网h*D1@!xi#O:wfbV+M
    (10) 系统性能测试
    工具 51Testing软件测试网xJ RUZ'o6{y|5Z
    Rational Performance
    Cgj'i:r bn$cj18755(11) 页面链接测试
    0jP/_5?"S^18755Link Sleuth
    -Y+YG,FD$Ym"b4D18755(12) 测试流程管理工具
    R'utJ]18755Test Plan Control 51Testing软件测试网 x5sJFp
    (13) 测试管理工具 51Testing软件测试网Lz,y:j0M8Il-S!v G
    TestDirector
    nX)u Bw_5Us)D;a+l18755Rational公司的Test Manager 51Testing软件测试网;A%oaJ h#F+M\r9{3\
    Compuware公司的QADirector
    5s;~9O\&Kg%_18755TestExpert:是Silicon Valley Networks公司产品的测试管理工具,能管理整个测试过程,从测试计划、测试例程、测试执行到测试报告。
    w6B!}Rx Mr18755(14) 缺陷跟踪工具
    p-u/lTx l)uL:OT.s18755TrackRecord等
    d \cV9G+f18755(15) 其他
    测试工具包
    S1Y7Y p|,M9VV Pd18755TestVectorGenerationSystem是T—VECTechnologies公司的产品。提供自动模型分析、测试生成、测试覆盖分析和测试执行的完整工具包,具有方便的用户接口和完备的文档支持。
    o+I)_ p m+j18755TestQuestPro是TestQuest公司的非插入码式的自动操纵测试工具,提供一种高效的自动检测目标系统,获取其输出性能的测试方法。 51Testing软件测试网?_/fCP,]vjv _
    TestWorks是SoftwareResearch.Inc公司的一整套软件测试工具,既可单独使用,也可捆绑销售使用。 51Testing软件测试网kD b)F/s)RD&[
    2、 从测试的方法上分: 51Testing软件测试网N]%ZWf{
    (1) 白盒测试工具 51Testing软件测试网FU?.Y;p~
    白盒测试工主要有:Numega、PuRe、软件纠错工具(Rational Purify)。
    :I.jeu7{ AG m9M @*|.M18755内存资源泄漏检查:
    ~ ws&M,Ky18755Numega中的BounceChecher 51Testing软件测试网.Zf4m6}%])?5]5p:i
    Rational的 Purify等 51Testing软件测试网Ia2OE5\R.F9uk
    代码覆盖率检查:
    E-P`$hEv*Kc%c}#n18755Numega的TrueCoverage 51Testing软件测试网Au8D+~3I @8s/rYk
    Rational的PureCoverage
    &q-w(u eM#S18755TeleLogic公司的LogiScope 51Testing软件测试网 j#~9nIIn;x#E
    Macabe公司的Macabe 51Testing软件测试网hE t-A6|8q
    代码性能检查: 51Testing软件测试网5JwxQ.Zym
    Numega的TrueTime
    2ca`xs} H18755Rational的Quantify等
    'E.^g[(J4G18755代码静态度量分析度量检查工具:LogiScope和Macabe等
    | h-P0V u~6H18755黑盒测试工具主要有:QACenter、SQATeamTest、Rational Visual Visual Test。
    %_H4Z9Gn0e O9f7b18755QACenter:QACenter帮助所有测试人员创建一个快速、可重用的测试过程。这些测试工具自动帮助管理测试过程、快速分析和调试程序,包括针对回归、强度、单元、并发、集成、移植,容量和负载建立测试用例
    ,自动执行测试和产生文档结果。QACenter主要包括以下几个模块:
    ] k0Z]G:d18755QARun:应用的功能测试工具。 51Testing软件测试网3Q4N;r:hx8V7?kg l
    QALoad:强负载下应用的性能测试工具。
    3un xt`*cO18755QADirector:测试的组织设计和创建以及管理工具。 51Testing软件测试网:_8HFy8[Ng}2T4S
    TrackRecord:集成的缺陷跟踪管理工具。
    j9`&~F\!kVk18755EcoTools:高层次的性能监测工具。


    (be%MAV%` \q:C$O187553、部分具体测试工具的介绍 51Testing软件测试网vwg} V#y{ R
    (1)、性能优化工具EcoScope
    ~3~6^k7TP6G:z&k18755EcoScope是一套定位于应用(即服务提供者本身)及其所依赖的所有网络计算资源的解决方案。EcoScope可以提供应用视图,并标出应用是如何与基础架构相关联的。这种视图是其他网络管理工具所不能提供的。EcoScope能解决在大型企业复杂环境下分析与测量应用性能的难题。通过提供应用的性能级别及其支撑架构的信息,EcoScope能帮助IT部门就如何提高应用性能提出多方面的决策方案。
    XD"Q&H Y18755EcoScope的应用主要表现在以下几个方面:
    /Yb6w1T5AG18755确保成功部署新应用 51Testing软件测试网4J$QY o,P!v
    维护性能的服务水平
    X-} YI A18755加速问题检测与纠正的高级功能
    7tnm{2UV {18755定制视图有助于高效地分析数据 51Testing软件测试网c8qv3Y(ZU:a,p)E"R
    (2)、数据库测试数据自动生成工具——TestBytes
    zEo1D)x(T%IX18755在数据库开发的过程中,为了测试应用程序对数据库的访问,应当在数据库中生成测试用例数据,我们可能会发现当数据库中只有少量数据时,程序可能没有问题,但是当真正投入到运用中产生了大量数据时就出现问题了,这往往是因为程序的编写没有达到,所以一定及早地通过在数据库中生成大量数据来帮助开发人员完善这部分功能和性能。
    %g%NVK2g9_$|mjC18755TestBytes是一个用于自动生成测试数据的强大易用的工具,通过简单的点击式操作,就可以确定需要生成的数据类型(包括特殊字符的定制),并通过与数据库的连接来自动生成数百万行正确的测试数据,可以极大地提高数据库开发人员、QA测试人员、数据仓库开发人员、应用开发人员的工作效率。
    9``L5Z0|"etB-|B18755(3)、PC—LINT 51Testing软件测试网"`A1ri/w'|:|L1W
    PC—LINT 主要进行更严格的语法检查功能,还完成相当程度的语义检查功能。可以这样认为:PC—LINT是一个更加智能、更加严格的编译器。PC—LINT在实现语法和某些语义规则检查时,是通过参数配置完成的,它的选项就有数百个之多,因此,在使用PC—LINT过程中,了解选项的含义也很重要。
    'H*`\#~&eeP18755(4)、TCL
    6[~'l jf Y gt18755TCL是Tool Command Language的缩写,它是一种很流行的脚本解释器,尤其在测试领域,它的最大特点是可移植性好,接口简单,方便,可以很容易地嵌入到软件中,作为自己的解释器使用。 51Testing软件测试网c"M(v,E2g2i0j"[A
    TCL提供两种接口:编程接口和用户接口。编程接口是通过LIB或DLL形式提供的,提供了一些函数(命令)供调用,包括:分配一个解释器指针(对象);初始化解释器(指针);注册扩展函数等。用户接口很简单,即编写的脚本,脚本里面包含对扩展命令的调用。
    F@~ EO'IwP j18755(5)VB测试工具:VB Watch 51Testing软件测试网Yg_l|:_#p ]0d {4?
    (6)Java 程序的测试工具
    )gYC7nE5R n kY187551)Bean—Test 51Testing软件测试网n\0n)~)Qe/q5g
    2)EJBQuickTest
    "g:f$DDt+V187553)JStyle 51Testing软件测试网mf|8a0j6U;m(k(srME
    4)JTest
    *P-U,R^+mmJq187555)HttpUnit
    4c"a!y;Ex VOM7f8_187556)JUnit 51Testing软件测试网 mdH)cU[
    (7)、覆盖测试
    :Dh+JZ+t;uO18755C—Cover
    fbf s)}'o1Nz4L`U18755C—Cover是一个测试工具软件,用来找出没有被测到的代码,并报告测试的覆盖率。C—Cover 51Testing软件测试网T,[e.V/z bA(p,{
    只支持C/C++的代码覆盖率分析,其它语言不支持。但不受OS的限制。
    Yi4iqFO}18755=============================================== 51Testing软件测试网Y`7kM!{6rg
    单元测试方面:(对开发人员比较有用) J-Unit工具。
    } Q LBO#s18755  功能测试方面:E-test是个不错的选择,功能很强大,由于不是采用Post URL的方式回放脚本,所以可以支持多内码的测试数据(当然要程序支持)。基本上可以应付大部分的Web Site。
    i(b Gb#C d@OF$oa;E18755  如果只是利用脚本回放代替手工劳动,或者做对页面响应数的性能测试,Microsoft Web Application Stress Tool是个不错的选择。
    z$K8KT!KC18755  另外,在性能测试方面,PureLoad也是一个不错的工具,完全用Java写成,可以测试各种C/S程序, 如SMTP Server等。 这两个工具都是使用Post URL的方法测试Web Application的。对大量使用Javascrīpt的页面不太适合。 当然,如果程序在Unix,linux下面运行的话,可以直接编写Shell脚本程序,更加方便。
    @pes%G/J*s!MOiL6\18755  另外,还有很多专门的工具,比如说Linkbot是专门作页面链接测试的。
    m,bMP$ta18755  另外,测试流程管理工具也有不少,个人用过也一直在用的是Test Plan Control,短小精悍,不错。   至于WinRunner和LoadRunner之类,因为没有License,所以都没怎么用过,惭愧。不过我看过一篇英国人评价英国测试市场上最流行的五个软件的文章。WinRunner得分最高。 51Testing软件测试网.\uNi+NPm
      测试工具从测试的方法上可以分为两种:白盒测试和黑盒测试   白盒测试工具主要有:
    plJ4N2Z:T:@f18755  内存资源泄漏检查:Numega中的bouncechecker,Rational的Purify等 51Testing软件测试网XQ8W`9fd
      代码覆盖率检查:Numega中的truecoverage,Rational的Purecoverage,Telelogic公司的logiscope, Macabe公司的Macabe等   代码性能检查:Numega中的truetime,Rational的Quantify等
    \\j(x3}#{*~18755  代码静态度量分析质量检查工具:logiscope和Macabe等
    $_7I(I_7y G[8t-g Q?_18755  黑盒测试工具主要有:   客户端功能测试:MI公司的winrunner,compuware的qarun,Rational的SQA robot等等
    cE,JtW1~J18755  服务器端压力性能测试: MI公司的winload,compuware的qaload,Rational的SQA load等等 51Testing软件测试网"s tj |rr^A)k
      Web测试工具:MI公司的Astra系列,rsw公司的e-test suite等等 51Testing软件测试网R4CV;G(|-Oy&o
      测试管理工具:rational的test manager,compuware的qadirector等等,此外还有缺陷跟踪工具 trackrecord等。
    $`a ]$d-oGu&P`18755  数据库测试工具:TestBytes 51Testing软件测试网G|]`l/T8R
      黑盒测试工具:QACenter、SQATeamTest,Rational Viaual Test。 51Testing软件测试网2Z%I y1H2[d
      回归测试工具:Rational TeamTest,WinRunner(MI公司)
    [V3tQej;T#f)_18755  WEB系统测试工具:TEST,Workberch,Web Appication Stress Tool(WAS) 51Testing软件测试网p l/AIs5r"j a"U
      白盒测试工具:Numega 、PuRe、软件纠错工具(Rational Purity)。
    +h3[z/?#Ho18755  嵌入式测试工具:Logiscope(静态测试工具)、CodeTest。 51Testing软件测试网O$UY[j:y\
      系统负荷测试工具:RationalPerformance
    l2hsi9S#Y r.P*Y18755  涵盖测试工具范围评估工具 51Testing软件测试网2l*T2h F"\ w~]du
      软件性能测试工具:LoadRunner(MI产品)、Rational Visual Qantify
    ~Y aP0? y/n18755  测试管理工具:TestDirector(MI产品支持整个生命周期中测试流程管理)

352/2<12
Open Toolbar