﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-哈库拉玛塔塔——tjitty-随笔分类-测试相关</title><link>http://www.cnitblog.com/tjitty/category/4767.html</link><description>记录下网络上的精品测试技术文章 and 生活</description><language>zh-cn</language><lastBuildDate>Wed, 07 Dec 2011 15:39:29 GMT</lastBuildDate><pubDate>Wed, 07 Dec 2011 15:39:29 GMT</pubDate><ttl>60</ttl><item><title>test</title><link>http://www.cnitblog.com/tjitty/archive/2011/12/06/76539.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Tue, 06 Dec 2011 02:47:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2011/12/06/76539.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/76539.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2011/12/06/76539.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/76539.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/76539.html</trackback:ping><description><![CDATA[http://www.google.com.hk

http://yahoo.com

http://detik.com

http://gratisindo.com

http://depkeu.go.id.com

http://lite.goklik.co.id/gokliklite/PTL/px/gokliklitehome/i.aspx

http://m.kaskus.us

http://m.vivanews.com

http://okezone.com

http://m.kapanlagi.com

http://wap.163.com

<img src ="http://www.cnitblog.com/tjitty/aggbug/76539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2011-12-06 10:47 <a href="http://www.cnitblog.com/tjitty/archive/2011/12/06/76539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>玩转WindowsXP 访问Linux下的共享文件</title><link>http://www.cnitblog.com/tjitty/archive/2011/06/24/74433.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Fri, 24 Jun 2011 08:35:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2011/06/24/74433.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/74433.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2011/06/24/74433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/74433.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/74433.html</trackback:ping><description><![CDATA[http://www.linux-cn.com/html/linux/beginner/20070524/41617.shtml

为了能够让windows下的用户通过以太网访问Linux下的共享文件,需要开启Samba服务器,Samba服务器详细配置步骤如下:

1.打开samba的配置文件

vim /etc/samba/smb.conf


2.其中存在如下几个域

[global](全局参数的设置，它对samba的功能具有很大的影响，主要用来设置整个系统规则。

workgroup= 这是你在windows中的域。

server string= 这是在windows中看到你的samba的解释。

netbios name =最好是你的机器名,如果把改句注消,默认的是你LINUX机器名,不过,最好还是自己填上

dos charset=cp936

unix charset=cp936 加上这二句就可以正确显示中文了。

hosts allow 允许登录的linux-samba的主机名单，用IP地址给出，多个IP地址用空格分开，不在名单中的主机将不能得到samba提供的服务，这也是网络安全的一个方面。

printcap name 指定printcap文件地址，通常为/etc/printcap,包含了linux打印机的配置信息。

load printers 允许使用共享打印机时，默认值为yes。

printing 如果使用的打印机是非标准的，那么应该指出打印机系统类型。

log file = /usr/local/samba/var/log.%m

max log size = 0

上面这两行则是Samba日志的相关定义。其记录文件的位置是放在/var/log/samba/%m.log，安装目录不一样，日志可不一样，后面的一条是定义日志记录文件的大小，单位是KB，如果是0的话就不限大小。

guest acount 来宾帐户，表示用哪一个Linux用户作为所要的客户连接,定义Samba缺省的用户账号，这个账号必须在/etc/passwd中。

security 指定安全模式。大多数用户使用user级的安全模式，samba用本地linux口令文件验证。

security = security_level

定义Samba的安全级别，按从低到高分为四级：share，user，server，domain。它们对应的验证方式如下：

share:没有安全性的级别，任何用户都可以不要用户名和口令访问服务器上的资源。

user:samba的默认配置，要求用户在访问共享资源之前资源必须先提供用户名和密码进行验证。

server:和user安全级别类似，但用户名和密码是递交到另外一个服务器去验证，比如递交给一台NT服务器。如果递交失败，就退到user安全级。

domain:这个安全级别要求网络上存在一台Windows的主域控制器，samba把用户名和密码递交给它去验证。

后面三种安全级都要求用户在本linux机器上也要系统帐户。否则是不能访问的。

主要修改和添加的域如下:


2.1列出允许访问的主机ip

hosts allow = 192.168.0.1 192.168.0.88


2.2安全模式

security = share


2.4指定共享文件名称和共享文件

[glx_linux]

comment = This is Glx Linux #备注说明

path = /mnt/e_win

guest ok = yes

writable = yes


2.4创建Samba专用用户

创建用户gliet_linux

addusr gliet_linux

passwd gliet_linux

之后将该用户添加到samba中

/etc/samba/smbpasswd -a gliet_linux


2.5清除ip链

service iptables stop

清除所有链： [ 确定 ]

删除用户定义的链： [ 确定 ]

将内建链重设为默认的“ACCEPT”策略： [ 确定 ]

2.6重启网卡

service network restart

正在关闭接口 eth0： [ 确定 ]

关闭环回接口： [ 确定 ]

设置网络参数： [ 确定 ]

弹出环回接口： [ 确定 ]

弹出界面 eth0： [ 确定 ]

3.重启Samba

/etc/rc.d/init.d/smb restart (重启samba）

4.好了,在win_xp下登录

//192.168.0.5

输入用户名:gliet_linux和密码后,就可以看到目录glx_linux,该目录是可以被windows用户修改的。

哈哈,windows可以对linux进行操作了,以下是我的一个配置文件：

 security = user
[glx_linux_write_win_share]
comment = This is Write test
path = /home/gliet/win
guest ok = yes
writable = yes
[glx_linux_read_win_tar_share]
comment = This is Read test
path = /home/gliet/tar
guest ok = yes
read only = yes
<img src ="http://www.cnitblog.com/tjitty/aggbug/74433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2011-06-24 16:35 <a href="http://www.cnitblog.com/tjitty/archive/2011/06/24/74433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Readme.txt</title><link>http://www.cnitblog.com/tjitty/archive/2010/07/22/67657.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Thu, 22 Jul 2010 13:38:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2010/07/22/67657.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/67657.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2010/07/22/67657.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/67657.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/67657.html</trackback:ping><description><![CDATA[
		<font face="Verdana">mount -o vers=3 bosnfs01:/u02/release /u01/share<br />mount -o vers=3 bosnfs01:/u01/home /home<br />mount -o vers=3 bosnfs01:/u01/builder /home/builder<br /><br />Find out the disk cost:<br />du . | sort -n -r | more<br /><br />Lumigent Schema Backup:<br />exp system/oracle owner=lumigent file=lumigent_ADB625drop7.dmp<br />imp system/oracle full=y file=lumigent_ADB625drop7.dmp<br /><br />export ORACLE_HOME=/u01/oracle/home/oracle<br />export ORACLE_BASE=/u01/oracle/<br />export ORACLE_SID=orcl<br />export PATH=$ORACLE_HOME/bin:$PATH<br />export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH:$ORACLE_HOME/ctx/lib:/usr/lib:/usr/local/lib<br /><br />Name  From  Host  Port No  Status    <br />TestEmailServer  tongyong1@lumigent.com  192.168.20.XXX  25  Enabled  <br />http://10.67.6.108:6080/<br /><br />如何查看Linux操作系统的位数<br />1.编程实现：<br />在程序中返回sizeof(int)的值，返回的结果是操作系统的字节数。若返回4则是32位操作系统，返回8即是64位。<br />2.2.getconf命令：<br />getconf命令可以获取系统的基本配置信息，比如操作系统位数，内存大小，磁盘大小等。<br />例如：<br />getconf LONG_BIT<br />3. uname -a<br /><br />' Get the Linux OS version<br />lsb_release -a<br /><br />=====================<br />Check solaris and Linux info:<br />=====================<br />Solaris<br />======<br /> prtdiag -v  //check solaris cpu info<br /> isainfo -kv  //check solaris 32/64bit<br /> prstat -a  //vmstat 3 : check solaris physical memory info<br />Linux<br />======<br /> [root@devblade09 ~]# more /etc/redhat-release  //check Linux version<br />Red Hat Enterprise Linux ES release 4 (Nahant)<br /> uname -a  //Check all infor<br /> uname  //check system infor<br /><br />设置WindowsUser域用户：control userpasswords2<br /><br />如何查看Linux系统版本<br />1)uname -a<br />2)cat /proc/version<br />3)cat /etc/issue<br /><br />查看HP-UX型号：<br />uname -a<br />model (pa-risc的产品号以rp打头，itanium的产品号以rx打头)<br /><br /><br />DB2 OS directory:<br />/home/db2inst2/sqllib/security (DB2 v9 or before)<br />/u01/IBM/db2inst1/sqllib/security/auditdata (DB2 v9.5)<br />Archive log file:<br />/home/db2inst2/archive/db2inst2/TEST/NODE0000/C0000000<br />/u01/IBM/db2inst1/archive/db2inst1/LLEE1/NODE0000/C0000000<br /><br />Edit /etc/group, add oracle to all db2 groups <br />Chmod read premission of DB2 archive log folder to Oracle user <br />chmod read premission of db2 auditdata files to Oracle user <br />Each time run archive log for db [database_name], remember to give its read premission to Oracle before collect. <br />Feel free to collect ^_^ <br /><br />Linux (devlnx07) [192.168.20.169]     db2inst2/db2inst1    50002<br />http://192.168.20.169:10080/eac/jsp/login.jsp<br />Solaris (devsol14) [172.16.1.198]    db2inst2/db2inst2    60008<br />http://172.16.1.198:10080/eac/jsp/login.jsp<br />AIX5.3 (devaix01) [192.168.20.64]     db2inst3/db2inst3    60008<br />http://192.168.20.64:10080/eac/jsp/login.jsp<br /><br />TO check if the DB2 works fine:<br />1 db2 list db directory<br />2 db2level<br />3 db2 get dbm cfg<br />4 cat /etc/services | grep db2c_db2inst2<br />5 connect to sample1 user db2admin using 8301206 <br />6 connect reset<br />7 db2 archive log for database TESTDB<br />8 db2 force application all (close all connections)<br />9 db2audit describe<br />9 db2audit prune all (/opt/db2inst1/sqllib/security/db2audit.log)<br />10 db2 drop db LUMIGENT<br />11 db2 "select * from syscat.bufferpools"<br />12 db2 list node directory<br />    db2 uncatalog node <node name=""><br />13 create table AAA ( A1 int, A2 int, A3 int)<br />14 db2 get db cfg for testdb<br />15 db2 list tables for schema REPLOG1<br />$ db2 catalog tcpip node aix01N remote devaix104 server 50000<br />$ db2 catalog db TestDB as TestDB2 at node aix01N<br />$ db2 connect to TestDB2 user db2inst1 using db2inst1<br /><br />----------------------------------------------------------------<br /> Deploy on tstauto02 using win2k3 package<br />----------------------------------------------------------------<br />USING QTP<br />------------------------------------------------------------------------------------------<br />1 setup an ODBC: run: C:\Windows\SysWOW64\odbcad32.exe<br />2 InternetExplorer path setting.<br />3 Uninstall Netwatch should show the iwatch servier window and start servier.<br />4 cookies and temp files problem<br />5 Cannot recognize "Create Audit Source" button in netwatch page.<br />6 When install, QTP stop at "Next" or "Browser" buttons.<br />7 When deployment Audit DB Report Server Templates finished, click "Reports" tab, the report templates didn't show out. But after refresh the page, they shows out.<br />8 When running QTP, it's better keep the window outest.<br />9 Sometime QTP will stop at Netwatch page(http://localhost:10080/eac/sniffer.do), it's didn't recognize the link in this page.<br /><br />10 How To disable the Windows Security Warning <br />start the Group Policy Editor (Start &gt; Run, type<br />-gpedit.msc- and press OK) and go to:<br /><br />-User Configuration &gt; Administrative Templates &gt; Windows Components &gt;<br />Attachment Manager- then set -Inclusion list for low file types- to<br />Enabled and enter the file types you don't want to be warned about in<br />the box (for example: .exe). <br /><br />----------------------------------------------------------------<br /> Deploy on Devsol12 using unix-oracle package<br />----------------------------------------------------------------<br />/usr/QTP/installFiles<br />/home/oracle/devsol12/lumigent/<br /><br />http://192.168.20.59:10080/eac/jsp/login.jsp<br /><br />DSName: ORA-DEVSOL12<br /><br />sqlplus "sys/oracle@sol12o9 as sysdba";<br />sqlplus Rep_Log/Rep_Log<br />select name from LUMREPORTSUMMARY_PR;<br /><br />ERROR: ORA-12514: TNS:listener does not currently know of service requested in connect descriptor<br />listener.ora (ORACLE 11G)<br />======================================<br />SID_LIST_LISTENER =<br />  (SID_LIST =<br />    (SID_DESC =<br />      (SID_NAME = PLSExtProc)<br />      (ORACLE_HOME = /u01/app/oracle/product/11.1.0/db_1)<br />      (PROGRAM = extproc)<br />    )<br />     (SID_DESC =<br />      (GLOBAL_DBNAME = orcl11g)<br />      (ORACLE_HOME = /u01/app/oracle/product/11.1.0/db_1)<br />      (SID_NAME = orcl11g)<br />    )<br />  ) <br />  <br />今天莫名其妙的ls,mkdir等命令不能用了，需要添加绝对目录才能用<br /><br />网上google了两小时：<br /><br />在终端下执行 export PATH=/bin:/usr/bin:/sbin:/usr/sbin <br /><br />解决！<br /><br />oracle 11g 密码大小写敏感问题<br />=======================================<br />ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;<br />SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON<br /><br />sqlplus / as sysdba 报错 ORA-01031: insufficient privileges<br />========================================<br />修改$ORACLE_HOME/network/admin/sqlnet.ora<br />SQLNET.AUTHENTICATION_SERVICES= (ALL)<br /><br />获取Windows命令的返回值（PASS/FAIL）：<br />C:\Documents and Settings\tjitty&gt;cd .<br />C:\Documents and Settings\tjitty&gt;echo %errorlevel%<br />0<br /><br />SQL SERVER Cluster move to the next node command:<br />cluster SQL2008CLSTR group "SQL Server (MSSQLSERVER)" /moveto:vmsql05<br /><br />alter system set audit_trail=db_extended scope=spfile;<br />show parameter audit;<br />show parameter audit_trail<br /><br />./lmSubmit load/RepYong aslog_AppGRC20PSF_20090122_081719.ecz<br />./lmAgentBroker publish RepYong<br /><br />./bin/LTMsiUpgrade --ccdb-patch<br />./bin/LTMsiUpgrade --rep-patch<br /><br />qahp02: file lmAgentExec<br />lmAgentExec:    ELF-64 executable object file - IA64<br /><br />source .profile<br /><br />/sbin/service vsftpd start(restart)    #Start ftp services<br />/sbin/service iptables stop        #Close the firewall<br />rpm -q vnc vnc-server        #Check if software installed<br />rm -rf *                #Delete All files and directories<br />wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz<br />gunzip iwatchip_solaris10_u2_u3_u4.tar.gz<br />tar -xvf iwatchip_solaris10_u2_u3_u4.tar<br />                #unzip tar.gz files<br /><br />//查看机器位数<br />getconf LONG_BIT<br /><br />ls –l 查看详细信息<br />ls –la 查看详细信息及隐藏文件<br />wc –l file 计算文件的行数<br />wc –w file 计算文件的单词数<br />wc –c file 统计字符数<br />cp sourcefile destfile 拷贝文件<br />mv oldname newfile 重命名文件<br />grep ‘pattern’ file 在文件内搜索字符串或和正则表达式匹配的字符串<br />grep “hello” file.txt | wc –l 在file.txt中搜索包含有”hello”的行并计算行数，这里grep命令的输出成了wc命令的输入<br />Cut –b column file 将指定范围内的文件内容输出到标准输出设备上。<br />例：输出每行第5至9个字符 cut -b5-9 file.txt<br />find . –name filename 在当前目录下搜索文件名为filename的文件<br />head file 打印文本文件开头几行<br />tail file 打印文本文件末尾几行<br />&gt;写入文件并覆盖旧文件<br />&gt;&gt;追加到文件的尾部，保留旧文件内容。<br /><br />Get ADB gui install address:        ps -ef |grep gui<br /><br />Start/stop gui:            ./web.init start/stop<br />start/stop agent:            ./entegra.init start/stop<br /><br />Start iwatch in non-loopback mode:    <br />        (Linux)        ./iwatch start -i etho -a -d<br />        (HP/Solaris)    ./iwatch start -a -d<br />Start iwatch in loopback mode:(use ifconfig -a to find out your interface)<br />        (Linux)        ./iwatch start -i lo -i eth0 -a -d<br />        (AIX)        ./iwatch start -i lo0 -i en0 -a -d<br />        (HP/Solaris)    ./iwatch start -i loopback -a -d<br /><br />Stop iwatch:            ./iwatch stop all<br />Check iwatch status:        ./iwatch status all<br /><br />Load ecz file using command<br />-------------------------------------<br />source env.sh<br />./lmSubmit load/repo /.../data/???.ecz<br />./lmAgentBroker publish repo<br /><br />ps -ef // iwatch process check<br />./pnameserver<br />./psummarizer<br />./pcapture_multi<br />./mcon<br />./pserver<br />./iArch<br /><br />ps -ef // iarchive process check<br />./NetArchive<br /><br />Start iArchive:            ./iwatch start<br />Stop iArchive:            ./iwatch stop<br />Check iArchive status:        ./iwatch status all<br /><br />memory watch            ipcs -m<br />memory stop            ipcrm –m SID<br /><br />remove driver(Solaris)        pkgrm iwatchip<br />remove driver(HP-UX)        swremove iwatchip<br /><br />ALTER DATABASE DATAFILE 'filename'  RESIZE 800M;   // resize datafile.<br />vmstat 1 10 //memory<br /><br />HOW TO ENABLE TELNET SERVER/CLIENT ON WINDOWS 2008<br />----------------------------------------------------------------<br />ServerManagerCmd.ext -install Telnet-Server<br />ServerManagerCmd.exe -install Telnet-Client<br /><br />SQL for SYBASE<br />======================================<br />select name from sysdatabases<br />go<br />use testdb<br />go<br /><br />-bash-3.2$ cat entegra.init<br />==============================================<br />#!/bin/ksh<br /># Copyright (c) 2005-2007 by Lumigent Technologies, Inc.<br /># All rights reserved.<br />#<br /><br />AUDITDB_USER=`ls -ld /opt/lumigent/agent/agent.qarh5-02.hq.lumigent.int | awk '{print $3}' `<br /><br />case "$1" in<br />start)<br />        echo "Starting Lumigent Audit DB Agent."<br />        su - $AUDITDB_USER -c /opt/lumigent/agent/agent.qarh5-02.hq.lumigent.int/etc/runEntegraAgent.sh<br />    ;;<br /><br /><br />stop)<br />        echo "Stopping Lumigent Audit DB Agent."<br />    pid=`/bin/ps -u $AUDITDB_USER -o pid,fname |<br />     /bin/grep lm[A-Z] |<br />     /bin/sed -e 's/^  *//' -e 's/ .*//'`<br />    [ "$pid" != "" ] &amp;&amp; kill -TERM $pid<br />    ;;<br />*)<br />    echo "Usage: $0 {start|stop}"<br />    exit 1<br />    ;;<br />esac<br /><br />exit 0<br />-bash-3.2$<br /><br /><br />-bash-3.2$ cat env.sh<br />============================================================<br /># Use this script to set your bourne shell environment variables to the values<br /># that the Audit DB agent uses, for the purpose of running Audit DB command<br /># line tools.<br />#<br /># run ". env.sh"<br />#<br /># Copyright (c) 2005-2007 by Lumigent Technologies, Inc.<br /># All rights reserved.<br />#<br /><br />ORACLE_HOME="/u01/app/oracle/product/10.2.0/db_4"<br />export ORACLE_HOME<br /><br />TNS_ADMIN=""<br />export TNS_ADMIN<br /><br />SYBASE="/opt/sybase"<br />export SYBASE<br />LANG=C<br />export LANG<br /><br />LD_LIBRARY_PATH="/u01/app/oracle/product/10.2.0/db_4/lib32:/u01/app/oracle/product/10.2.0/db_4/lib:/opt/lumigent/agent/lib"${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH<br />export LD_LIBRARY_PATH<br /><br />PATH="/opt/lumigent/agent/bin":/u01/app/oracle/product/10.2.0/db_4/bin:$PATH<br />-bash-3.2$<br /><br />-bash-3.2$ cat runEntegraAgent.sh<br />=========================================================================<br />#!/bin/ksh<br /><br />ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_4<br />export ORACLE_HOME<br /><br />TNS_ADMIN=""<br />export TNS_ADMIN<br /><br />SYBASE="/opt/sybase"<br />export SYBASE<br />LANG=C<br />export LANG<br /><br />LD_LIBRARY_PATH="/u01/app/oracle/product/10.2.0/db_4/lib32:/u01/app/oracle/product/10.2.0/db_4/lib:/opt/lumigent/agent/lib"<br /><br />export LD_LIBRARY_PATH<br /><br />PATH=/opt/lumigent/agent/bin:/u01/app/oracle/product/10.2.0/db_4/bin:/opt/lumigent/agent/bin:/u01/app/oracle/product/10.2.0/db_4/bin:/u01/app/oracle/product/10.2.0/db_4/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/bin:/usr/local/bin:/usr/openwin/bin/:/usr/lbin:/usr/expect/bin:/usr/tcl/bin.:/u01/app/oracle/product/10.2.0/db_4/bin<br />export PATH<br /><br />cd /opt/lumigent/agent/agent.qarh5-02.hq.lumigent.int/etc<br />lmAgentExec lmEntegraAgent  &gt;&gt; lmEntegraAgent.out 2&gt;&amp;1<br /><br />-bash-3.2$<br /><br /><br /></node></font>
<img src ="http://www.cnitblog.com/tjitty/aggbug/67657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2010-07-22 21:38 <a href="http://www.cnitblog.com/tjitty/archive/2010/07/22/67657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux服务器性能数据收集【sar、pidstat、iostat、mpstat、sadf、sadc】</title><link>http://www.cnitblog.com/tjitty/archive/2010/07/12/67429.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Mon, 12 Jul 2010 04:49:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2010/07/12/67429.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/67429.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2010/07/12/67429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/67429.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/67429.html</trackback:ping><description><![CDATA[
		<font face="Verdana">Linux中的top,free等命令不能完全满足我们性能数据收集的要求，我们需要一个更加强大的工具来收集性能数据。经过考察和对比，发现
Sysstat是一个非常强大的工具，因此下载了试了下，效果不错。Sysstat是一个工具集，包括<a href="http://pagesperso-orange.fr/sebastien.godard/man_sar.html">sar</a>、<a href="http://pagesperso-orange.fr/sebastien.godard/man_pidstat.html">pidstat</a>、<a href="http://pagesperso-orange.fr/sebastien.godard/man_iostat.html">iostat</a>、<a href="http://pagesperso-orange.fr/sebastien.godard/man_mpstat.html">mpstat</a>、<a href="http://pagesperso-orange.fr/sebastien.godard/man_sadf.html">sadf</a>、<a href="http://pagesperso-orange.fr/sebastien.godard/man_sadc.html">sadc</a>。
其中sar是其中最强大，也是最能符合我们测试要求的工具，同时pidstat也是非常有用的东东，因此本文结合性能测试重点介绍这两个工具。 <br /></font>
		<h3>
				<font face="Verdana">Sysstat的安装</font>
		</h3>
		<p>
				<font face="Verdana">从http://pagesperso-orange.fr/sebastien.godard/download.html下载最新版本，解压，
安装 </font>
		</p>
		<ul>
				<li style="list-style-type: none;">
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<span style="color: rgb(0, 0, 0);"> wget http:</span>
										<span style="color: rgb(0, 0, 0);">//</span>
										<span style="color: rgb(0, 0, 0);">pagesperso</span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">orange.fr</span>
										<span style="color: rgb(0, 0, 0);">/</span>
										<span style="color: rgb(0, 0, 0);">sebastien.godard</span>
										<span style="color: rgb(0, 0, 0);">/</span>
										<span style="color: rgb(0, 0, 0);">sysstat</span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">8.1</span>
										<span style="color: rgb(0, 0, 0);">.</span>
										<span style="color: rgb(0, 0, 0);">2</span>
										<span style="color: rgb(0, 0, 0);">.tar.gz<br /> tar zxvf sysstat</span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">8.1</span>
										<span style="color: rgb(0, 0, 0);">.</span>
										<span style="color: rgb(0, 0, 0);">2</span>
										<span style="color: rgb(0, 0, 0);">.tar.gz<br /> cd sysstat</span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">8.1</span>
										<span style="color: rgb(0, 0, 0);">.</span>
										<span style="color: rgb(0, 0, 0);">2</span>
										<span style="color: rgb(0, 0, 0);">
												<br /> .</span>
										<span style="color: rgb(0, 0, 0);">/</span>
										<span style="color: rgb(0, 0, 0);">configure<br /> make<br /> su<br /> &lt;enter root password</span>
										<span style="color: rgb(0, 0, 0);">&gt;</span>
										<span style="color: rgb(0, 0, 0);">
												<br /> make install</span>
								</font>
						</div>
						<pre>
								<font face="Verdana"> </font>
						</pre>
				</li>
		</ul>
		<h3>
				<font face="Verdana">监视某个进程</font>
		</h3>
		<ol type="1">
				<li>
						<font face="Verdana">通过ps命令找到相应进程的PID： <br /><br /></font>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										<span style="color: rgb(0, 0, 0);">ps </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">e</span>
								</font>
						</div>
				</li>
				<li>
						<p>
								<font face="Verdana">使用pidstat命令监视进程，详细用法见：<a href="http://pagesperso-orange.fr/sebastien.godard/man_pidstat.html"><font color="#0066aa">http://pagesperso-orange.fr/sebastien.godard/man_pidstat.html</font></a></font>
						</p>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<span style="color: rgb(0, 0, 0);">pidstat </span>
										<span style="color: rgb(128, 0, 128);">2</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">5</span>
										<span style="color: rgb(0, 0, 0);"> <br /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔2秒，显示5次，所有活动进程的CPU
使用情况</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
										</span>
										<span style="color: rgb(0, 0, 0);">pidstat </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">p </span>
										<span style="color: rgb(128, 0, 128);">3132</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">2</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">5</span>
										<span style="color: rgb(0, 0, 0);"> <br /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔2秒，显示5次，PID为1643的进程的CPU使用情况显示</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
										</span>
										<span style="color: rgb(0, 0, 0);">pidstat </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">p </span>
										<span style="color: rgb(128, 0, 128);">3132</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">2</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">5</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">r<br /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔2秒，显示5次，PID为1643的进程的内存使用情况显示</span>
								</font>
						</div>
						<pre>
								<font face="Verdana"> </font>
						</pre>
				</li>
				<li>
						<font face="Verdana">很可惜的是，pidstat命令没有保存性能数据的功能。 </font>
				</li>
		</ol>
		<h3>
				<font face="Verdana">查看性能数据</font>
		</h3>
		<p>
				<font face="Verdana">在sysstat工具包中，sar是最强大的了，通过sar几乎可以监视所有的性能数据，同时，sar还支持将性能数据保存起来。<br />sar详
细用法请见：<a href="http://pagesperso-orange.fr/sebastien.godard/man_sar.html">http://pagesperso-orange.fr/sebastien.godard/man_sar.html</a></font>
		</p>
		<ol type="1">
				<li>
						<font face="Verdana">查看CPU使用情况 <br /><br /></font>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(128, 0, 128);">2</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">5</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										</span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔2秒，显示5次，CPU使用的情况</span>
								</font>
						</div>
						<pre>
								<font face="Verdana"> </font>
						</pre>
				</li>
				<li>
						<font face="Verdana">查看内存使用情况 <br /><br /></font>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">r </span>
										<span style="color: rgb(128, 0, 128);">2</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">5</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										</span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔2秒，显示5次，内存使用的情况</span>
								</font>
						</div>
						<pre>
								<font face="Verdana"> </font>
						</pre>
				</li>
				<li>
						<font face="Verdana">查看网络吞吐量 <br /><br /></font>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">n DEV </span>
										<span style="color: rgb(128, 0, 128);">2</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">5</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										</span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔2秒，显示5次，网络吞吐量情况</span>
								</font>
						</div>
				</li>
		</ol>
		<h3>
				<font face="Verdana">保存性能数据</font>
		</h3>
		<p>
				<font face="Verdana">sar支持保存成两种格式的文件，一种是文本文件，一种是二进制文件（只有通过sar自己的命令才能查看）。 </font>
		</p>
		<ol type="1">
				<li>
						<p>
								<font face="Verdana">
										<strong>保存为文本文件</strong>
										<br />
										<br />结合上面的查看命令，加入 &gt; filename 
参数即可保存文本文件，下面列出几个有用的命令： </font>
						</p>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(128, 0, 128);">1</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">10</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">&gt;</span>
										<span style="color: rgb(0, 0, 0);"> data.txt<br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔1秒，写入10次，把CPU使用数据保存到data.txt文件中。</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										</span>
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(128, 0, 128);">1</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">0</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">e </span>
										<span style="color: rgb(128, 0, 128);">15</span>
										<span style="color: rgb(0, 0, 0);">:</span>
										<span style="color: rgb(128, 0, 128);">00</span>
										<span style="color: rgb(0, 0, 0);">:</span>
										<span style="color: rgb(128, 0, 128);">00</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">&gt;</span>
										<span style="color: rgb(0, 0, 0);"> data.txt<br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔1秒记录CPU的使用情况，直到15点，数据将保存到data.txt文件中。(-e 参数表示结束时间，注意时间格式：必须为
hh:mm:ss格式)</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										</span>
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(128, 0, 128);">1</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">0</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">r </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">e </span>
										<span style="color: rgb(128, 0, 128);">15</span>
										<span style="color: rgb(0, 0, 0);">:</span>
										<span style="color: rgb(128, 0, 128);">00</span>
										<span style="color: rgb(0, 0, 0);">:</span>
										<span style="color: rgb(128, 0, 128);">00</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">&gt;</span>
										<span style="color: rgb(0, 0, 0);"> data.txt<br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔1秒记录内存使用情况，直到15点，数据将保存到data.txt文件中。</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										</span>
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(128, 0, 128);">1</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">0</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">n DEV </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">e </span>
										<span style="color: rgb(128, 0, 128);">15</span>
										<span style="color: rgb(0, 0, 0);">:</span>
										<span style="color: rgb(128, 0, 128);">00</span>
										<span style="color: rgb(0, 0, 0);">:</span>
										<span style="color: rgb(128, 0, 128);">00</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">&gt;</span>
										<span style="color: rgb(0, 0, 0);"> data.txt<br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔1秒记录网络使用情况，直到15点，数据将保存到data.txt文件中。</span>
								</font>
						</div>
						<pre>
								<font face="Verdana"> </font>
						</pre>
						<font face="Verdana">
    用WinSCP工具从Linux服务器上取下data.txt文件，内容如下：<br /><br /></font>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										<span style="color: rgb(0, 0, 0);">Linux </span>
										<span style="color: rgb(128, 0, 128);">2.6</span>
										<span style="color: rgb(0, 0, 0);">.</span>
										<span style="color: rgb(128, 0, 128);">18</span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(128, 0, 128);">53</span>
										<span style="color: rgb(0, 0, 0);">.el5 (Performancesvr5)  2008年05月05
日     _x86_64_<br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /><br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11时04分05秒     CPU     </span>
										<span style="color: rgb(0, 0, 0);">%</span>
										<span style="color: rgb(0, 0, 0);">user     </span>
										<span style="color: rgb(0, 0, 0);">%</span>
										<span style="color: rgb(0, 0, 0);">nice   </span>
										<span style="color: rgb(0, 0, 0);">%</span>
										<span style="color: rgb(0, 0, 0);">system   </span>
										<span style="color: rgb(0, 0, 0);">%</span>
										<span style="color: rgb(0, 0, 0);">iowait    </span>
										<span style="color: rgb(0, 0, 0);">%</span>
										<span style="color: rgb(0, 0, 0);">steal     </span>
										<span style="color: rgb(0, 0, 0);">%</span>
										<span style="color: rgb(0, 0, 0);">idle<br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11时04分06秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">99.75</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分07秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">99.75</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分08秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">1.50</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">98.00</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分09秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.50</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">99.25</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分10秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">    </span>
										<span style="color: rgb(128, 0, 128);">100.00</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分11秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">99.50</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分12秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">99.75</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分13秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.50</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.50</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.99</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">98.01</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分14秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">1.25</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">98.75</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 11
时04分15秒     all      </span>
										<span style="color: rgb(128, 0, 128);">0.50</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">99.50</span>
										<span style="color: rgb(0, 0, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /> 平
均时间:     all      </span>
										<span style="color: rgb(128, 0, 128);">0.20</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.15</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.42</span>
										<span style="color: rgb(0, 0, 0);">      </span>
										<span style="color: rgb(128, 0, 128);">0.00</span>
										<span style="color: rgb(0, 0, 0);">     </span>
										<span style="color: rgb(128, 0, 128);">99.23</span>
								</font>
						</div>
						<pre>
								<font face="Verdana"> </font>
						</pre>
						<font face="Verdana">
    有了这份数据，就可以轻松的使用WPS表格来统计CPU的使用情况了。
    </font>
						<p>
								<font face="Verdana">
										<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/23175229.png" width="529" height="278" />
										<br />
								</font>
						</p>
				</li>
				<li>
						<p>
								<font face="Verdana">
										<strong>保存为二进制文件</strong>
										<br />
										<br />由于保存的二进制文件只有sar通过-f参数才能打开，不利于我们分
析和统计数据，因此不推荐使用这个方法。保存二进制文件的参数是-o，如： </font>
						</p>
						<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);">
								<!--<br  />

    <br  />

    Code highlighting produced by Actipro CodeHighlighter (freeware)<br  />

    http://www.CodeHighlighter.com/<br  />

    <br  />

    -->
								<font face="Verdana">
										<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(128, 0, 128);">1</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(128, 0, 128);">5</span>
										<span style="color: rgb(0, 0, 0);"> </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">r </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">o data<br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">每隔1秒，写入5次，将内存使用的数据写入二进制文件data中。</span>
										<span style="color: rgb(0, 128, 0);">
												<br />
												<img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" />
										</span>
										<span style="color: rgb(0, 0, 0);">sar </span>
										<span style="color: rgb(0, 0, 0);">-</span>
										<span style="color: rgb(0, 0, 0);">f data<br /><img alt="" src="http://www.kuqin.com/upimg/allimg/080506/2317520.gif" align="top" /></span>
										<span style="color: rgb(0, 128, 0);">//</span>
										<span style="color: rgb(0, 128, 0);">查看data文件</span>
								</font>
						</div>
				</li>
		</ol>
		<p>
				<font face="Verdana">        
官方资料:http://pagesperso-orange.fr/sebastien.godard/documentation.html </font>
		</p>
<img src ="http://www.cnitblog.com/tjitty/aggbug/67429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2010-07-12 12:49 <a href="http://www.cnitblog.com/tjitty/archive/2010/07/12/67429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse集成svn提示This client is too old to work with解决方案</title><link>http://www.cnitblog.com/tjitty/archive/2010/06/22/66935.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Tue, 22 Jun 2010 09:53:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2010/06/22/66935.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/66935.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2010/06/22/66935.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/66935.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/66935.html</trackback:ping><description><![CDATA[
		<div id="blog_text" class="cnt">
				<p>
						<a href="http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA">http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA</a>
				</p>
				<p>这个网站有明确的说明,</p>
				<p>Changelog: <a href="http://subclipse.tigris.org/subclipse_1.6.x/changes.html">http://subclipse.tigris.org/subclipse_1.6.x/changes.html</a><br />
Eclipse update site URL: <a href="http://subclipse.tigris.org/update_1.6.x">http://subclipse.tigris.org/update_1.6.x</a><br />
Zipped downloads: <a href="http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240">http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240</a></p>
				<p>另外有网站也有解决办法:http://wuaner.javaeye.com/blog/569285</p>
				<p>项目中使用的是1.4.7,作为eclipse的插件装的；后来又在机子上装了个TortoiseSVN 1.6.5。遇到的问题：</p>
				<p>引用</p>
				<p>This client is too old to work with working copy 
'D:\MyEclipseWorkspace\projectName\WebRoot\WEB-INF\lib'; please get a 
newer Subversion client.</p>
				<p>
						<br />
估计是不经意中使用了1.6.5做了提交导致的问题。</p>
				<p>官方解决办法： <br /><a href="http://subversion.tigris.org/faq.html#working-copy-format-change">http://subversion.tigris.org/faq.html#working-copy-format-change</a><br /><a href="http://svn.collab.net/repos/svn/trunk/tools/client-side/change-svn-wc-format.py">http://svn.collab.net/repos/svn/trunk/tools/client-side/change-svn-wc-format.py</a><br />
所以，装python先： <br /><a href="http://code.google.com/p/smallfish/">http://code.google.com/p/smallfish/</a>（python
官网下载被屏蔽） <br />
安装后记得在环境变量的path中追加python安装路径："安装盘符:\Python26"</p>
				<p>然后cmd下运行：</p>
				<p>Python代码 <br />
1.CMD &gt;change-svn-wc-format.py 
D:\MyEclipseWorkspace\projectName\WebRoot\WEB-INF\lib 1.4 --verbose <br />
CMD &gt;change-svn-wc-format.py 
D:\MyEclipseWorkspace\projectName\WebRoot\WEB-INF\lib 1.4 --verbose</p>
				<p>
						<br />
关于svn官网提供的版本转换方式：</p>
				<p>引用</p>
				<p>CMD:\&gt;change-svn-wc-format.py --help <br />
usage: change-svn-wc-format.py WC_PATH SVN_VERSION [--verbose] [--force]
 [--skip-unknown-format] <br />
change-svn-wc-format.py --help</p>
				<p>Change the format of a Subversion working copy to that of 
SVN_VERSION.</p>
				<p>--skip-unknown-format : skip directories with unknown working copy <br />
format and continue the update</p>
		</div>
<img src ="http://www.cnitblog.com/tjitty/aggbug/66935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2010-06-22 17:53 <a href="http://www.cnitblog.com/tjitty/archive/2010/06/22/66935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>因果图法测试用例设计技术（转载）</title><link>http://www.cnitblog.com/tjitty/archive/2010/03/14/64631.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Sun, 14 Mar 2010 06:30:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2010/03/14/64631.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/64631.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2010/03/14/64631.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/64631.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/64631.html</trackback:ping><description><![CDATA[
		<span id="articlecontent" class="wenzhang_con" onmouseup="NewHighlight(event)" style="width: 740px;">﻿       我们看看因果图的原理吧：                  
<div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>      <strong> (一) 因果图法的来源</strong> ? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              大家熟悉的等价类划分法和边界值分析法，都是着重考虑输入条件，但未考虑输入条件之间的联系、相互组合等；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              但是，如考虑所输入条件之间的相互组合，会由于组合情况数目相当大，需要大量的测试用例；?   因果图法，是一种帮助人们系统地选择一组高效率测试用例的方法。 </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>      <strong>(二) 因果图法的特点</strong> ? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              考虑输入条件间的组合关系；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              考虑输出条件对输入条件的信赖关系，即因果关系；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              测试用例发现错误的效率高；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              能检查出功能说明中的某些不一致或遗漏；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              因果图方法最终生产的就是判定表，它适合于检查程序输入条件和各种组合情况。 </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>      <strong>(三) 因果图法基本步骤</strong></span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>             1. 分割功能说明书对于规模比较大的程序来说，由于输入条件的组合数太大，所以很难整体上使用一个因果图。我们可以把它划分为若干部分，然后分别对每个部分使用因果图。例如，测试编译程序时，可以把每个语句作为一个部分。 </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              2. 识别出“原因”和“结果”，并加以编号所谓原因，是指输入条件或输入条件的等价类；而结果则是指输出条件或输出条件的等价类。每个原因或结果都对应于因果图中的一个节点。当原因或结果成立（或出现）时，相应的节点取值为1，否则为0。<br /><br /></span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              3. 根据功能说明书中规定的原因和结果之间的关系画出因果图因果图的基本符号如图1所示：  <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <span style="font-size: 12pt; font-family: 宋体;" lang="EN-US"><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">      <img style="width: 415px; height: 191px;" alt="" src="http://image3.360doc.com/DownloadImg/2009/2/4/100522_2455211_1.jpg" width="293" height="169" /><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="width: 282.75pt; height: 160.5pt;" type="#_x0000_t75"><v:imagedata src="file:///C:%5CDOCUME%7E1%5Cxuhg%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="ww"></v:imagedata></v:shape></span><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="width: 282.75pt; height: 160.5pt;" type="#_x0000_t75"><v:imagedata src="file:///C:%5CDOCUME%7E1%5Cxuhg%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="ww"></v:imagedata></v:shape></span><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="width: 282.75pt; height: 160.5pt;" type="#_x0000_t75"><v:imagedata src="file:///C:%5CDOCUME%7E1%5Cxuhg%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="ww"></v:imagedata></v:shape></span><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="width: 282.75pt; height: 160.5pt;" type="#_x0000_t75"><v:imagedata src="file:///C:%5CDOCUME%7E1%5Cxuhg%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg" o:title="ww"></v:imagedata></v:shape></span>                                   </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>                                                       因果图的基本符号</span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>         图中左边的节点表示原因，右边的节点表示结果。恒等、非、或、与的含义：? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>                     恒等：若a=1，则b=1；若a=0，则b=0；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>                     非：若a=1，则b=0，若a=0，则b=1；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>                     或：若a=1或b=1或c=1，则d=1；若a= b= c=0，则d=0；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>                     与：若a= b= c=1，则d=1；若a=0或b=0或c=0，则d=0。</span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>          画因果图时，原因在左，结果在右，由上而下排列，并根据功能说明书中规定的原因和结果之间的关系，用上述基本符号连接起来。在因果图中还可以引入一些中间节点。</span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>               4. 根据功能说明在因果图中加上约束条件由于语法或环境限制，有些原因与原因之间、原因与结果之间的组合情况不可能出现。为表明这些特殊情况，在因果图上用一些记号表明约束或限制条件。因果图的约束条件如图所示：      </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>      <img style="width: 134px; height: 133px;" alt="" src="http://image3.360doc.com/DownloadImg/2009/2/4/100522_2455211_2.gif" width="152" height="145" />               <img alt="" src="http://image3.360doc.com/DownloadImg/2009/2/4/100522_2455211_3.gif" />                       <img alt="" src="http://image3.360doc.com/DownloadImg/2009/2/4/100522_2455211_4.gif" /></span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>                    <img alt="" src="http://image3.360doc.com/DownloadImg/2009/2/4/100522_2455211_5.gif" />                          <img alt="" src="http://image3.360doc.com/DownloadImg/2009/2/4/100522_2455211_6.gif" />                         </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>      其中互斥、包含、唯一、要求时对原因的约束，屏蔽是对结果的约束。他们的含义如下：? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              互斥E：表示不同时为1，即a，b，c中至多只有一个1；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              包含I：表示至少有一个1，即a，b，c中不同时为0；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              唯一O：表示a，b，c中有且仅有一个1；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              要求R：表示若a=1，则b必须为1。即不可能a=1且b=0；? </span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              屏蔽M：表示若a=1，则b必须为0</span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>              
5. 根据因果图画出判定表画判定表的方法一般比较简单，可以把所有原因作为输入条件，每一项原因（输入条件）安排为一行，而所有的输入条件的组合一一列
出（真值为1，假值为0），对于每一种条件组合安排为一列，并把各个条件的取值情况分别添入判定表中对应的每一个单元格中。       
例如，如果因果图中的原因有4项，那么，判定表中的输入条件则共有4行，而列数则为24=16。确定好输入条件的取值之后，我们便可以很容易地根据判定表
推算出各种结果的组合，也即输出，其中也包括中间节点的状态取值。上述方法考虑了所有条件的所有组合情况，在输入条件比较多的情况下，可能会产生过多的条
件组合，从而导致判定表的行数太多，过于复杂。然而在实际情况中，由于这些条件之间可能会存在约束条件，所以很多条件的组合是无效的，也就是说，它们在判
定表中也完全是多余的。因此根据因果图画出判定表时，我们可以有意识地排除掉这些无效的条件组合，从而使判定表的列数大幅度减少。例如，根据图所示的因果
图，可以画出如表所示的判定表。</span></font></div><div style="margin-left: 21pt; text-indent: -21pt; line-height: 150%;"><font size="2"><span>                6. 为判定表的每一列设计一个测试用例即为从因果图中导出的判定表中的每一列设计一个测试用例。 </span></font></div></span>
<img src ="http://www.cnitblog.com/tjitty/aggbug/64631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2010-03-14 14:30 <a href="http://www.cnitblog.com/tjitty/archive/2010/03/14/64631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用 UNIX find 命令的高级技术</title><link>http://www.cnitblog.com/tjitty/archive/2010/01/20/63833.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Wed, 20 Jan 2010 01:55:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2010/01/20/63833.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/63833.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2010/01/20/63833.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/63833.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/63833.html</trackback:ping><description><![CDATA[
		<p>转载自：http://www.ibm.com/developerworks/cn/aix/library/es-unix-find.html#listing1<br /></p>
		<p>没有什么能比得上探索和发现新的人、地方、事物所带来的刺激。领域可能有所不同，但有些原则却是一样的。在这些原则中，有一条是记录下您的旅程，另一条则是了解和使用工具。</p>
		<p>UNIX® 操作系统很像一片广阔的、未经标识的荒野。当您在这样的领域中旅行时，可以选择一些日后能够给您带来帮助的工具。<code>find</code> 命令便是这样一种工具。<code>find</code> 命令不仅能够简单地用来定位文件，正如本文将介绍的那样，它还可以自动地执行其他 UNIX 命令的序列，其中使用所查找到的文件名作为输入。</p>
		<p>
				<a name="N1006C">
						<span class="atitle">Find 的有关限制</span>
				</a>
		</p>
		<p>所有称职的操作系统都具有协助您查找相关内容的工具。与大多数工具不同的是，UNIX 中的 <code>find</code> 命令可以自动地对其查找到的文件执行许多操作。</p>
		<p>图形用户界面 (GUI) 中的标准 <code>find</code>
工具允许您对所查找到的文件进行一些常规操作任务：您可以将它们标记为剪切、复制和粘贴，您可以将它们移动到一个新的位置，并且可以使用创建它们的应用程
序来打开它们。这些操作涉及到两个或更多的步骤，并且不是自动完成的，即首先查找到文件，然后使用 GUI
为下一步的操作对它们进行标记。这种方法对许多用户来说没有问题，但是 Explorer 需要的不仅是这些。</p>
		<p>UNIX 的 <code>find</code> 命令可以删除、复制、移动和执行其查找到的文件。另外，使用 <code>-exec</code> 参数可以根据您所需要的 UNIX 命令的序列来自动地运行这些文件。它甚至可以在对任何文件执行这些操作前，进一步让您进行确认。</p>
		<p>
				<a name="N1008C">
						<span class="atitle">简化文件系统的管理</span>
				</a>
		</p>
		<p>与大多数 UNIX 命令一样，UNIX <code>find</code> 命令具有一长串令人生畏的选项和开关，它们会阻碍人们深入地学习该命令，但正是因为其范围广阔，真正的 Explorer  并不会被它们吓倒。一条好的通用原则在简化一个复杂问题时都会经过漫长的过程。启动一个 xterm，并尝试执行下面的命令：</p>
		<table width="400" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">$ find . -name *.gif -exec ls {} \;<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>
				<code>-exec</code> 参数中包含了真正有价值的操作。当查找到匹配搜索条件的文件时，<code>-exec</code> 参数定义了将对这些文件进行什么操作。该示例告诉计算机进行如下操作：

</p>
		<ol>
				<li>从当前文件夹开始往下搜索，紧跟在 <code>find</code> 之后，使用点号 (<code>.</code>)。</li>
				<li>定位所有名称以 .gif 结尾的文件（图形文件）。</li>
				<li>列出所有查找到的文件，使用 <code>ls</code> 命令。</li>
		</ol>
		<p>需要对 <code>-exec</code> 参数进行更深入地研究。当查找到匹配搜索条件的文件名时，<code>find</code> 命令执行 <code>ls {}</code> 字符串，用文件名和路径代替文本 <code>{}</code>。假设在搜索中查找到 saturn.gif 文件，<code>find</code> 将执行如下所示的命令：</p>
		<table width="400" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">$ ls ./gif_files/space/solar_system/saturn.gif<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>本文余下的内容建立在这条一般原则之上：仔细地使用 <code>find</code> 命令可以让 UNIX 文件系统的管理工作变得更加容易。例如，如果您使用了 <code>-fstype</code> 参数，<code>find</code> 命令可以根据查找到的文件所处的文件系统的类型来对命令进行相应的处理。在 <code>find</code> 命令对查找到的文件执行相应命令前将对您进行提示，这通常是非常有用的，您可以使用 <code>-ok</code> 参数告诉它继续执行该操作，接下来我们将对其进行介绍。</p>
		<p>
				<a name="N100F3">
						<span class="atitle">可选的执行</span>
				</a>
		</p>
		<p>
				<code>-ok</code> 是 <code>-exec</code> 参数的一个重要的替代项，它的行为和 <code>-exec</code> 一样，但它会提示您是否要对文件运行相应的命令。假设您想要删除 home 目录中的大部分 .txt 文件，但希望能够逐个文件地执行该操作。像 UNIX 中的 <code>rm</code> 命令那样的删除操作是很危险的，因为当使用像 <code>find</code> 这样的自动化处理方式来查找文件时，它可能一不小心会删除重要的文件，您也许希望在删除这些系统查找到的文件之前对其进行仔细检查。</p>
		<p>下面的命令列出了您的 home 目录中所有的 .txt 文件。要删除这些文件，必须在 <code>find</code> 命令通过列出文件名提示您确认操作时输入 <code>Y</code> 或者 <code>y</code>：</p>
		<table width="400" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">$ find $HOME/. -name *.txt -ok rm {} \;<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>它列出了查找到的每个文件，并且系统将暂停以等待您输入 <code>Y</code> 或者 <code>y</code>。如果您按下 <b>Enter</b> 键，系统将不会删除该文件。<a linkindex="23" href="http://www.ibm.com/developerworks/cn/aix/library/es-unix-find.html#listing1">清单 1</a> 显示了一些示例结果：</p>
		<br />
		<a name="listing1">
				<b>清单 1. 示例结果</b>
		</a>
		<br />
		<table width="572" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">&lt; rm ... /home/bill/./.kde/share/apps/karm/karmdata.txt &gt; ?<br />&lt; rm ... /home/bill/./archives/LDDS.txt &gt; ?<br />&lt; rm ... /home/bill/./www/txt/textfile1.txt &gt; ?<br />&lt; rm ... /home/bill/./www/txt/faq.txt &gt; ?<br />&lt; rm ... /home/bill/./www/programs/MIKE.txt &gt; ?<br />&lt; rm ... /home/bill/./www/programs/EESTRING.txt &gt; ?<br />.<br />.<br />.<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>系统将在每个问号之后暂停，在本示例中，每次都按下了 Enter 键以继续处理下一个文件。（没有删除任何文件。）<code>-ok</code> 参数允许您控制每个查找到的文件的自动化处理过程，这样就添加了一种避免自动删除文件的安全措施。</p>
		<p>如果在使用 <code>-ok</code> 参数时涉及到过多的文件，那么一个好的方法是先运行带 <code>-exec</code> 的 <code>find</code> 命令以列出所有将要删除的文件，然后在经过检查确保其中不会删除重要的文件后，再次运行该命令，其中用 <code>rm</code> 代替 <code>ls</code>。</p>
		<p>
				<code>-exec</code> 和 <code>-ok</code> 都非常有用，您必须确定在当前情况下哪一个能够更好的工作。请记住，安全第一！</p>
		<p>
				<a name="N10168">
						<span class="atitle">创造性地使用 find</span>
				</a>
		</p>
		<p>您可以使用 <code>find</code> 命令执行各种各样的任务。本部分内容提供了使用 <code>find</code> 命令来管理文件系统的几种方式的示例。</p>
		<p>为了保持简单，这些示例都避免了使用涉及通过管道将一个命令的输出传递到另一个命令的 <code>-exec</code> 命令。然而，您完全可以根据自己需要在 find 命令的 <code>-exec</code> 子句中使用这样的命令。</p>
		<p>
				<a name="N10185">
						<span class="smalltitle">清除临时文件</span>
				</a>
		</p>
		<p>您可以使用 <code>find</code> 命令来清除目录或子目录中在正常使用过程中生成的临时文件，这样可以节省磁盘空间。要实现该操作，请使用下面的命令：</p>
		<table width="400" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">$ find . \( -name a.out -o -name '*.o' -o -name 'core' \) -exec rm {} \;<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>括号中的<i>文件掩码</i> 标识出了需要删除的文件类型，每个文件掩码的前面都有 <code>-name</code>。该列表可以扩展为包括您需要清除的系统中的任何临时文件类型。在代码的编译和连接过程中，程序员及其工具会生成示例中的那些文件类型：<code>a.out</code>、<code>*.o</code> 和 <code>core</code>。其他的用户通常也会生成类似的临时文件，可以使用如 <code>*.tmp</code>、<code>*.junk</code> 等文件掩码来对命令进行相应的编辑。您可能还发现将命令放入一个称作 <code>clean</code> 的脚本中非常有用，当需要清除一个目录中的内容的时候就可以执行该脚本。</p>
		<p>
				<a name="N101BA">
						<span class="smalltitle">复制目录中的内容</span>
				</a>
		</p>
		<p>
				<code>find</code> 命令允许您复制目录中的全部内容，同时保持每个文件和子目录的权限、时间和所有权。要完成该操作，需要组合使用 <code>find</code> 和 <code>cpio</code> 命令，如下所示：</p>
		<br />
		<a name="listing2">
				<b>清单 2. 组合使用 find 和 cpio 命令</b>
		</a>
		<br />
		<table width="572" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">
												<br />$ cd /path/to/source/dir<br /><br />$ find . | cpio -pdumv /path/to/destination/dir<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>
				<code>cpio</code> 命令是一个复制命令，它设计用来将文件复制到或复制出一个 cpio 或 tar 存档文件，并自动地保持文件和子目录的权限、时间和所有权。</p>
		<p>
				<a name="N101DF">
						<span class="smalltitle">列出文本文件的第一行内容</span>
				</a>
		</p>
		<p>有些人使用每个文本文件的第一行作为标题或者文件内容的描述。可以使用列出文件名和所有文本文件第一行内容的报表更方便地对大量的文本文件进行筛选。下面的命令在报表中列出了您的 home 目录中所有文本文件的第一行内容，便于进一步地根据需要使用 <code>less</code> 命令进行检查：</p>
		<br />
		<a name="listing3">
				<b>清单 3. less 命令</b>
		</a>
		<br />
		<table width="572" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">
												<br />$ find $HOME/. -name *.txt -exec head -n 1 -v {} \; &gt; report.txt<br /><br />$ less &lt; report.txt<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>
				<a name="N101F7">
						<span class="smalltitle">维护 LOG 和 TMP 文件的存储空间</span>
				</a>
		</p>
		<p>要为生成大量文件的应用程序维护 LOG 和 TMP 文件存储空间，可以将下列命令放入到每天运行的 <code>cron</code> 任务中：</p>
		<br />
		<a name="listing4">
				<b>清单 4. 维护 LOG 和 TMP 文件存储空间</b>
		</a>
		<br />
		<table width="572" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">
												<br />$ find $LOGDIR -type d -mtime +0 -exec compress -r {} \;<br /><br />$ find $LOGDIR -type d -mtime +5 -exec rm -f {} \;<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>第一个命令找到 $LOGDIR 目录中所有包含在 24 小时内 (<code>-mtime +0</code>) 进行了修改的数据的目录 (<code>-type d</code>)，并对它们进行压缩 (<code>compress -r {}</code>) 以节省磁盘空间。如果这些目录超过了一个工作周 (<code>-mtime +5</code>)，第二个命令则将其删除 (<code>rm -f {}</code>)，以便增加磁盘上的可用空间。通过这种方式，cron 任务自动地根据您所指定的时间窗口对目录进行维护。</p>
		<p>
				<a name="N10226">
						<span class="smalltitle">复制复杂的目录树</span>
				</a>
		</p>
		<p>如果您想要将复杂的目录树从一台计算机复制到另一台计算机，同时保持副本权限以及 User ID 和 Group ID（UID 和 GID——操作系统所使用的标记文件的所有权的数值），并且不复制用户文件，那么就需要再次使用 <code>find</code> 和 <code>cpio</code>： </p>
		<br />
		<a name="listing5">
				<b>清单 5. 复制复杂的目录树</b>
		</a>
		<br />
		<table width="572" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">$ cd /source/directory<br /><br />$ find . -depth -print | cpio -o -O /target/directory<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>
				<a name="N10242">
						<span class="smalltitle">查找不指向任何地方的链接</span>
				</a>
		</p>
		<p>要查找不指向任何地方的链接，可以使用带 <code>find</code> 的 <code>perl</code> 解释器，如下所示：</p>
		<table width="400" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">$ find / -type l -print | perl -nle '-e || print';<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>该命令从最顶层目录 (/) 开始，列出由 <code>perl</code> 解释器确定不指向任何地方 (<code>-nle '-e || print'</code>) 的所有链接 (<code>-type l -print</code>)，关于 Unix Guru Universe 站点中这个技巧的更详细的信息，请参阅<a linkindex="24" href="http://www.ibm.com/developerworks/cn/aix/library/es-unix-find.html#resources">参考资料</a>部分。如果您想要删除这些文件，可以进一步使用管道将输出传递到 <code>rm -f {}</code> 命令。当然，Perl 可以在大多数的 UNIX 工具包中找到，它是许多功能强大的解释性语言工具中的一种。</p>
		<p>
				<a name="N10270">
						<span class="smalltitle">定位和重命名无法打印的目录</span>
				</a>
		</p>
		<p>在 UNIX 中，可能会有错误的或恶意的程序创建包含无法打印的字符的目录。定位和重命名这些目录，这样就可以更容易地检查并删除它们。要完成该操作，您首先需要在 <code>ls</code> 中包含 <code>-i</code> 开关，以获取该目录的索引节点的数值。然后，使用 <code>find</code> 将索引节点的数值转换为一个可以使用 <code>mv</code> 命令进行重命名的文件名：</p>
		<br />
		<a name="listing6">
				<b>清单 6. 定位和重命名无法打印的目录</b>
		</a>
		<br />
		<table width="572" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">$ ls -ail<br /><br />$ find . -inum 211028 -exec mv {} newname.dir \;<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>
				<a name="N10294">
						<span class="smalltitle">列出长度为零的文件</span>
				</a>
		</p>
		<p>要列出所有长度为零的文件，请使用下面的命令：</p>
		<table width="400" border="0" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td class="code-outline">
										<pre class="displaycode">$ find . -empty -exec ls {} \;<br /></pre>
								</td>
						</tr>
				</tbody>
		</table>
		<br />
		<p>在查找到空文件之后，您可以选择用 <code>rm</code> 命令来代替 <code>ls</code> 命令，以删除这些文件。</p>
		<p>很明显，您对 UNIX <code>find</code> 命令的使用受到知识和创造性的限制。</p>
		<p>
				<a name="N102B5">
						<span class="atitle">结束语</span>
				</a>
		</p>
		<p>使用 <code>find</code> 命令，可以轻松地浏览 UNIX 文件系统中丰富的内容。很值得花时间来试验该命令，并了解它能为您做些什么。正如本文中所列出的示例，您可以通过许多创造性的方式来使用 <code>find</code>，这样可以轻松地浏览和管理文件系统，并且充满乐趣。</p>
		<p>
				<br />
		</p>
<img src ="http://www.cnitblog.com/tjitty/aggbug/63833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2010-01-20 09:55 <a href="http://www.cnitblog.com/tjitty/archive/2010/01/20/63833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How to determine that your OS is 64-bit compliant</title><link>http://www.cnitblog.com/tjitty/archive/2009/07/14/60091.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Tue, 14 Jul 2009 14:05:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2009/07/14/60091.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/60091.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2009/07/14/60091.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/60091.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/60091.html</trackback:ping><description><![CDATA[
		<h3>
				<font face="Arial">How can I determine if my computer/operating system is 64-bit?</font>
		</h3>
		<table class="faqtitle">
				<tbody>
						<tr>
								<td>
										<font face="Arial">
	
	Title
	
    </font>
								</td>
								<td rowspan="3">
										<font face="Arial"> </font>
								</td>
								<td>
										<font face="Arial">
	
	How to determine that your OS is 64-bit compliant
	
    </font>
								</td>
						</tr>
						<tr>
								<td>
										<font face="Arial">
	
	Author
	
    </font>
								</td>
								<td>
										<font face="Arial">
	
	Pete Huckelba, StataCorp
	
    </font>
								</td>
						</tr>
						<tr>
								<td>
										<font face="Arial">
	
	Date
	
    </font>
								</td>
								<td>
										<font face="Arial">
	
	June 2005; updated February 2009
	
    </font>
								</td>
						</tr>
				</tbody>
		</table>
		<hr />
		<h3 id="windows">
				<font color="#ff0000" face="Arial">Windows</font>
		</h3>
		<p>
				<font face="Arial">
   If you are using Windows Vista, click <b>Start</b> -&gt; <b>Control Panel</b>
   -&gt; <b>System and Maintenance</b> -&gt; <b>System</b>.  The
   <b>System type:</b> line will give you the Operating System type:

</font>
		</p>
		<div class="centerit">
				<font face="Arial">
						<a href="javascript:big_window('/support/faqs/win/vista_64.gif')">
								<img src="http://www.stata.com/support/faqs/win/vista_64sm.gif" style="padding: 5px; width: 200px;" alt="" />
						</a>
				</font>
		</div>
		<p>
				<font face="Arial">
   If you are using Windows XP, click <b>Start</b> -&gt; <b>Run</b> and type
   <b>dxdiag</b>.  If a Windows dialog box is displayed asking if you want to
   verify your drivers, you can safely click <b>No</b> and continue.  When the
   program has finished loading, you should see something similar to one of the
   following images:

</font>
		</p>
		<div class="centerit">
				<table class="centerit" style="width: 100%;">
						<tbody>
								<tr>
										<td style="vertical-align: middle; text-align: center;">
												<font face="Arial">
														<a href="javascript:big_window('/support/faqs/win/winxp64.gif')">
																<img src="http://www.stata.com/support/faqs/win/winxp64sm.gif" style="padding: 5px; width: 200px;" alt="" />
														</a>

 

<a href="javascript:big_window('/support/faqs/win/winxp64-2.gif')"><img src="http://www.stata.com/support/faqs/win/winxp64-2sm.gif" style="padding: 5px; width: 200px;" alt="" /></a>

 

<a href="javascript:big_window('/support/faqs/win/win2003.gif')"><img src="http://www.stata.com/support/faqs/win/win2003sm.gif" style="padding: 5px; width: 200px;" alt="" /></a></font>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<p>
				<font face="Arial">
  The <b>Operating System</b> line, refers to Windows &lt;some
  version&gt; x64 or 64-bit edition.  The last image above specifies the processor
  <b>Itanium</b>, which is a 64-bit processor.
</font>
		</p>
		<h3 id="mac">
				<font color="#ff0000" face="Arial">Mac</font>
		</h3>
		<p>
				<font face="Arial">
  Select <b>About this Mac</b> from the <b>Apple</b> menu.  The text below
  <b>Mac OS X</b> will give the operating system version, and the
  <b>Processor</b> line will give you the processor type.
</font>
		</p>
		<div class="centerit">
				<font face="Arial">
						<img src="http://www.stata.com/support/faqs/win/aboutthismac.jpg" alt="about this mac" />
				</font>
		</div>
		<p>
				<font face="Arial">
  Mac OS X 10.5 (or greater) is a 64-bit operating system.  Intel Core 2 Duo,
  Intel Xeon, and PowerPC G5 are 64-bit processors.  However, 64-bit Stata for
  Mac is available only for 64-bit Intel-based Macs.
</font>
		</p>
		<p>
				<font face="Arial">
  All currently shipping Macs have a 64-bit processor and a 64-bit operating
  system.
</font>
		</p>
		<h3 id="unix">
				<font color="#ff0000" face="Arial">Unix (IBM-AIX, Sun Solaris)</font>
		</h3>
		<ul class="plist">
				<li>
						<font face="Arial">IBM-AIX

   <br /><br />
   The <b>getconf</b> command will return the configuration of your machine.
   Since you are looking only for the kernel parameters, you should type

   <br /><br /></font>
						<div class="indent" style="font-family: courier,monospace;">
								<font face="Arial">
										<b>[cph@anna ~]$ getconf -a | grep KERN</b>
										<br />
   KERNEL_BITMODE:                         64</font>
						</div>
						<font face="Arial">
								<br />
   If that fails or does not return a result, try the <b>file</b> command.

   <br /><br /></font>
						<div class="indent" style="font-family: monospace;">
								<font face="Arial">
										<b>[cph@anna ~]$ file /usr/lib/boot/unix*</b>
										<br />
   /usr/lib/boot/unix: <span style="color: red;">64-bit XCOFF executable</span> or object module not stripped<br />
   /usr/lib/boot/unix_64: <span style="color: red;">64-bit XCOFF executable</span> or object module not stripped<br />
   /usr/lib/boot/unix_mp: executable (RISC System/6000) or object module not stripped<br />
   /usr/lib/boot/unix_up: executable (RISC System/6000) or object module not stripped<br /></font>
						</div>
						<p>
						</p>
						<div class="indent" style="font-family: monospace;">
								<font face="Arial">
										<b>[cph@ozona ~]$ file /usr/lib/boot/unix*</b>
										<br />
   /usr/lib/boot/unix:     symbolic link to /usr/lib/boot/unix_up.<br />
   /usr/lib/boot/unix_kdb: executable (RISC System/6000) or object module not stripped<br />
   /usr/lib/boot/unix_up:  executable (RISC System/6000) or object module not stripped</font>
						</div>
						<font face="Arial">
								<br />

   We can see that 'anna' is a 64-bit capable platform, and 'ozona' is only 32-bit.
</font>
				</li>
				<li>
						<font face="Arial">Sun Solaris

  <br /><br />
   Sun's platforms transitioned to 64-bit over a period of time, making
   identifying the platform for 64-bit compliance tricky.  Sun has stated:
  <br /><br /></font>
						<div class="indent">
								<font face="Arial">
      Sun has implemented its 64-bit operating system in phases. The Solaris
      2.5 Operating Environment provided support for increased precision with
      64-bit math and also included support for 64-bit asynchronous I/O. The
      Solaris 2.6 Operating Environment added support for large datasets with
      large (1 Terabyte) filesystems while allowing co-existence of 32-bit and
      64-bit files. Beginning with the Solaris 7 Operating Environment, Sun
      introduced support for large virtual address spaces with a full 64-bit
      operating system. Sun began shipping 64-bit hardware in 1995. By phasing
      in operating system support for 64-bits Sun has provided 64-bit features
      as the market has demanded them while guaranteeing compatibility for
      existing 32-bit applications.
  </font>
						</div>
						<font face="Arial">
								<br />
   To determine what kind of binaries your Solaris machine can run, try the following:

   <br /><br /></font>
						<div class="indent" style="font-family: monospace;">
								<font face="Arial">
										<b>eden:/home/cph: isainfo -v</b>
										<br />
										<span style="color: red;">64-bit</span> sparcv9 applications<br />
   32-bit sparc applications</font>
						</div>
						<font face="Arial">
								<br />
   You can see that this Solaris machine is capable of running 32-bit as well
   as 64-bit applications.  If <b>isainfo</b> fails, running a 64-bit
   application on your Sun will generally not be possible, unless of course
   <b>isainfo</b> is not in your path or has not been installed.  You can also
   use the <b>uname</b> command to glean more information:

   <br /><br /></font>
						<div class="indent" style="font-family: monospace;">
								<font face="Arial">
										<b>eden:/home/cph: uname -a</b>
										<br />
   SunOS eden 5.8 Generic_108528-05 sun4u sparc SUNW,Ultra-5_10</font>
						</div>
						<font face="Arial">
								<br />
						</font>
						<div class="indent" style="font-family: monospace;">
								<font face="Arial">
										<b>lagrange:/usr/users/cph: uname -a</b>
										<br />
   SunOS lagrange 5.5.1 Generic_103640-29 sun4u sparc SUNW,Ultra-1</font>
						</div>
						<font face="Arial">
								<br />
								<br />
   SunOS/Solaris versions map to the following:

   </font>
						<div class="centerit" style="padding-top: 5px;">
								<table width="80%" align="center" border="1" cellpadding="0" cellspacing="0">
										<tbody>
												<tr>
														<td width="50%" align="center">
																<font face="Arial">
																		<b>SunOS</b>
																</font>
														</td>
														<td width="50%" align="center">
																<font face="Arial">
																		<b>SOLARIS</b>
																</font>
														</td>
												</tr>
												<tr>
														<td width="50%" align="center">
																<font face="Arial">5.3</font>
														</td>
														<td width="50%" align="center">
																<font face="Arial">2.3</font>
														</td>
												</tr>
												<tr>
														<td width="50%" align="center">
																<font face="Arial">5.4</font>
														</td>
														<td width="50%" align="center">
																<font face="Arial">2.4</font>
														</td>
												</tr>
												<tr>
														<td width="50%" align="center">
																<font face="Arial">5.5</font>
														</td>
														<td width="50%" align="center">
																<font face="Arial">2.5</font>
														</td>
												</tr>
												<tr>
														<td width="50%" align="center">
																<font face="Arial">5.5.1</font>
														</td>
														<td width="50%" align="center">
																<font face="Arial">2.5.1</font>
														</td>
												</tr>
												<tr>
														<td width="50%" align="center">
																<font face="Arial">5.6</font>
														</td>
														<td width="50%" align="center">
																<font face="Arial">2.6</font>
														</td>
												</tr>
												<tr>
														<td width="50%" align="center">
																<font face="Arial">5.7 or greater is 64-bit compliant</font>
														</td>
														<td width="50%" align="center">
																<font face="Arial">2.7 or greater is 64-bit compliant</font>
														</td>
												</tr>
										</tbody>
								</table>
						</div>
						<font face="Arial">
								<br />
   While all UltraSparc processors are capable of 64-bit computing, the OS
   release level may be the limiting factor.  In the above excerpt, 'eden'
   (SunOS 5.8) is a fully compliant 64-bit platform, and 'lagrange' (SunOS
   5.5.1) is a 64-bit UltraSparc limited to 32-bit computing.
</font>
				</li>
		</ul>
		<h3 id="linux">
				<font color="#ff0000" face="Arial">Linux</font>
		</h3>
		<p>
				<font face="Arial">
  Linux users should type the <b>uname</b> command.  Depending on the
  platform, you may see
</font>
		</p>
		<p>
		</p>
		<div class="indent" style="font-family: monospace;">
				<font face="Arial">
						<b>[cph@gaylord ~]$ uname -a</b>
						<br />
Linux gaylord.stata.com 2.6.11-1.27_FC3 #1 Tue May 17 20:24:57 EDT 2005 x86_64 x86_64 <span style="color: red;">x86_64 GNU/Linux</span><br /></font>
		</div>
		<p>
		</p>
		<div class="indent" style="font-family: monospace;">
				<font face="Arial">
						<b>[cph@caddo ~]$ uname -a</b>
						<br />
Linux caddo.stata.com 2.6.9-5.0.5.EL #1 SMP Fri Apr 8 14:20:58 EDT 2005 ia64 ia64
<span style="color: red;">ia64 GNU/Linux</span></font>
		</div>
		<p>
		</p>
		<div class="indent" style="font-family: monospace;">
				<font face="Arial">
						<b>[cph@tango ~]$ uname -a</b>
						<br />
Linux tango.stata.com 2.6.10-1.771_FC2smp #1 SMP Mon Mar 28
01:10:51 EST 2005 i686 i686 <span style="color: red;">i386 GNU/Linux</span></font>
		</div>
		<p>
				<font face="Arial">
						<font color="#0000ff">In the above listing, 'gaylord' (x86_64 GNU/Linux) and 'caddo' (ia64
  GNU/Linux) are 64-bit compliant.  'tango' (i386 GNU/Linux) is only a 32-bit
  platform.
</font>
				</font>
		</p>
<img src ="http://www.cnitblog.com/tjitty/aggbug/60091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2009-07-14 22:05 <a href="http://www.cnitblog.com/tjitty/archive/2009/07/14/60091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 10G利用命令行手工创建数据库</title><link>http://www.cnitblog.com/tjitty/archive/2009/07/03/59799.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Fri, 03 Jul 2009 01:22:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2009/07/03/59799.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/59799.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2009/07/03/59799.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/59799.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/59799.html</trackback:ping><description><![CDATA[
		<p style="text-indent: 2em;">转载：http://tech.ccidnet.com/art/1105/20080807/1536965_1.html<br /></p>
		<p style="text-indent: 2em;">在Oracle中建库，通常有
两种方法。一是使用Oracle的建库工且DBCA，这是一个图形界面工且，使用起来方便且很容易理解，因为它的界面友好、美观，而且提示也比较齐全。在
Ｗindows系统中，这个工具可以在Oracle程序组中打开（”开始”—“程序”—“ Oracle - OraDb10g_home1”—“
Configuration and Migration Tools”—“ Database Configuration
Assistant”），也可以在<a name="baidusnap0"></a><b style="color: black; background-color: rgb(255, 255, 102);">命令行</b>（”开始”—“运行”—“cmd”）工具中直接输入dbca来打开。另一种方法就是手工建库，这也就是下面所要讲的内容。
</p>
		<p style="text-indent: 2em;">手工建库比起使用DBCA建库来说，是比较麻烦的，但是如果我们学好了手工建库的话，就可以使我们更好地理解Oracle数据库的体系结构。手工建库须要经过几个步骤，每一个步骤都非常关键。它包括：
</p>
		<p style="text-indent: 2em;">１、 创建必要的相关目录
</p>
		<p style="text-indent: 2em;">２、 创建初始化参数文件
</p>
		<p style="text-indent: 2em;">３、 设置环境变量Oracle_sid
</p>
		<p style="text-indent: 2em;">４、 创建实例
</p>
		<p style="text-indent: 2em;">５、 创建口令文件
</p>
		<p style="text-indent: 2em;">６、 启动数据库到nomount(实例)状态
</p>
		<p style="text-indent: 2em;">７、 执行建库脚本
</p>
		<p style="text-indent: 2em;">８、 执行catalog脚步本创建数据字典
</p>
		<p style="text-indent: 2em;">９、 执行catproc创建package包
</p>
		<p style="text-indent: 2em;">１０、 执行pupbld
</p>
		<p style="text-indent: 2em;">１１、 由初始化参数文件创建spfile文件
</p>
		<p style="text-indent: 2em;">１２、 执行scott脚本创建scott模式
</p>
		<p style="text-indent: 2em;">做完了以上的步骤之后就可以使用“SQL&gt;alter database open;”打开数据库正常的使用了。下面，我将具体地把以上的几个步骤用实验展开来讲。
</p>
		<p style="text-indent: 2em;">实验系统平台：Windows Server 2000　　　数据库系统版本：Oracle Database 10Ｇ
</p>
		<p style="text-indent: 2em;">Oracle的安装路径：D盘　　　　　 　创建的数据库名称：book
</p>
		<p style="text-indent: 2em;">
				<b>１、打开<b style="color: black; background-color: rgb(255, 255, 102);">命令行</b>工具，创建必要有相关目录</b>
		</p>
		<p style="text-indent: 2em;">C:\&gt;mkdir D:\oracle\product\10.1.0\admin\book 
</p>
		<p style="text-indent: 2em;">C:\&gt;mkdir D:\oracle\product\10.1.0\admin\book\bdump 
</p>
		<p style="text-indent: 2em;">C:\&gt;mkdir D:\oracle\product\10.1.0\admin\book\udump 
</p>
		<p style="text-indent: 2em;">C:\&gt;mkdir D:\oracle\product\10.1.0\admin\book\cdump
</p>
		<p style="text-indent: 2em;">C:\&gt;mkdir D:\oracle\product\10.1.0\admin\book\pfile 
</p>
		<p style="text-indent: 2em;">C:\&gt;mkdir D:\oracle\product\10.1.0\admin\book\create 
</p>
		<p style="text-indent: 2em;">C:\&gt;mkdir D:\oracle\product\10.1.0\oradata\book 
</p>
		<p style="text-indent: 2em;">上面创建目录的过程也可以在Windows的图形界面中去创建。其中
D:\oracle\product\10.1.0\admin\book目录下的几个子目录主要用于存放数据库运行过程中的跟踪信息。最重要的两上子目
录是bdump和udump目录，bdump目录存放的是数据库动行过程中的各个后台进程的跟踪信息，当中alert文件是警告文件，其文件名称为
alert_book.log，当数据库出现问题时，首先就可以去查看此文件以找出原因，手工创建过程中出现的各种问题往往也可以通过查看这个文件找到原
因。Udump目录存放和特定会话相关的跟踪信息。D:\oracle\product\10.1.0\oradata\book目录存放各种数据库文
件，包括控制文件、数据文件、重做日志文件。
</p>
		<p style="text-indent: 2em;">
				<b>2、创建初始化参数文件</b>
		</p>
		<p style="text-indent: 2em;">数据库系统启动时须要用初始化参数文件的设置分配内存、启动必要的后台进程的。因此，初始化参数文件创建的是否正确、参数设置是否正确关系着整个建库的“命运”。
</p>
		<p style="text-indent: 2em;">创建初始化参数文件可以通过拷贝现在的初始化参数文件并将其做适当的修改即可，从而
不必要用手工去一句一句地写出来，因为初始化参数文件的结构体系基本上都是一样的。在我们安装Oracle的时候，系统已经为我们安装了一个名为orcl
的数据库，于是我们可以从它那里得到一份初始化参数文件。打开D:\oracle\product\10.1.0\admin\orcl\pfile，找
到init.ora文件，把它拷贝到D:\oracle\product\10.1.0\bd_1\databse下，并将其改名为
initbook.ora。接着用记事本的方式打开initbook.ora，修改以下的内容：
</p>
		<p style="text-indent: 2em;">db_domain=""
</p>
		<p style="text-indent: 2em;">db_name=book
</p>
		<p style="text-indent: 2em;">control_files=("D:\oracle\product\10.1.0\oradata\book\control01.ctl",
"D:\oracle\product\10.1.0\oradata\book\control02.ctl",
"D:\oracle\product\10.1.0\oradata\book\control03.ctl")
</p>
		<p style="text-indent: 2em;">undo_management=AUTO
</p>
		<p style="text-indent: 2em;">undo_tablespace=UNDOTBS1　――注意此处的“UNDOTBS1”要和建库脚步本中对应
</p>
		<p style="text-indent: 2em;">background_dump_dest=D:\oracle\product\10.1.0\admin\book\bdump
</p>
		<p style="text-indent: 2em;">core_dump_dest=D:\oracle\product\10.1.0\admin\book\cdump
</p>
		<p style="text-indent: 2em;">user_dump_dest=D:\oracle\product\10.1.0\admin\book\udump
</p>
		<p style="text-indent: 2em;">
				<b>３、打开<b style="color: black; background-color: rgb(255, 255, 102);">命令行</b>，设置环境变量oracle_sid</b>
		</p>
		<p style="text-indent: 2em;">C:\&gt;set oracle_sid=book 
</p>
		<p style="text-indent: 2em;">设置环境变量的目地是在默认的情况下，指定<b style="color: black; background-color: rgb(255, 255, 102);">命令行</b>中所操作的<a name="baidusnap3"></a><b style="color: black; background-color: rgb(255, 153, 153);">数据库实例</b>是book。
</p>
		<p style="text-indent: 2em;">
				<b>４、创建实例（即后台控制服务）</b>
		</p>
		<p style="text-indent: 2em;">C:\&gt;oradim –new –sid book 
</p>
		<p style="text-indent: 2em;">oradim是创建实例的工具程序名称，-new表明执行新建实例，-delete表明执行删掉实例，-sid指定害例的名称。
</p>
		<p style="text-indent: 2em;">
				<b>５、创建口令文件</b>
		</p>
		<p style="text-indent: 2em;">C:\&gt;orapwd file=D:\oracle\product\10.1.0\db_1\database\pwdbook.ora password=bookstore entries=2 
</p>
		<p style="text-indent: 2em;">orapwd是创建口令文件的工肯程序各称，file参数指定口令文件所在的目录和文件名称，password参数指定sys用户的口令，entries参数指定数据库拥用DBA权限的用户的个数，当然还有一个force参数，相信您不指即明，这里就不再细述。
</p>
		<p style="text-indent: 2em;">请注意，这里的命令要一行输入，中间不得换行，否则会出现不必要的错误。
</p>
		<p style="text-indent: 2em;">口令文件是专门存放sys用户的口令，因为sys用户要负责建库、启动数据库、关闭数据库等特殊任务，把以sys用户的中令单独存放于口令文件中，这样数据库末打开时也能进行口令验证。
</p>
		<p style="text-indent: 2em;">
				<b>6、启动数据库到nomount(实例)状态</b>
		</p>
		<p style="text-indent: 2em;">C:\&gt;sqlplus /nolog
</p>
		<p style="text-indent: 2em;">SQL*Plus:Release 10.1.0.2.0 - Production on 星期三 6月 29 23:09:35 2005
</p>
		<p style="text-indent: 2em;">Copyright <c> 1982,2004,Oracle. All rights reserved.
</c></p>
		<p style="text-indent: 2em;">SQL&gt;connect sys/bookstore as sysdba ---这里是用sys连接数据库
</p>
		<p style="text-indent: 2em;">已连接到空闲例程
</p>
		<p style="text-indent: 2em;">SQL&gt;startup nomount
</p>
		<p style="text-indent: 2em;">ORACLE 例程已经启动。
</p>
		<p style="text-indent: 2em;">Total System Global Area 319888364bytes
</p>
		<p style="text-indent: 2em;">Fixed Size 453612bytes
</p>
		<p style="text-indent: 2em;">Variable Size 209715200bytes
</p>
		<p style="text-indent: 2em;">Database Buffers 109051904bytes
</p>
		<p style="text-indent: 2em;">Redo Buffers 667648bytes
</p>
		<p style="text-indent: 2em;">SQL&gt;
</p>
		<p style="text-indent: 2em;">
				<b>7、执行建库脚本</b>
		</p>
		<p style="text-indent: 2em;">执行建库脚本，首先要有建库的脚本。（去哪找建库脚本呢？我又没有！）不用着急，请接着往下看。
</p>
		<p style="text-indent: 2em;">得到一个符合自己要求的建库脚本有两种方法，一种方法是在自己的电脑上用DBCA来
建，接照它的提示一步步地去做，在做到第十二步的时候，请选择“生成建库脚本”，然后就大功告成，你就可以到相应的目录上去找到那个脚本并适当地修它便可
便用。另一种方法就是自己手工去写一份建库脚本，这也是这里要见意使用的方法，用记事本编辑如下的内容，并将其保存为文件名任取而后缀名为（*.sql）
的SQL脚本，这里保存到E盘根本录下且文件名称为book.sql。
</p>
		<p style="text-indent: 2em;">Create database book
</p>
		<p style="text-indent: 2em;">datafile 'D:\oracle\product\10.1.0\oradata\book\system01.dbf' size 300M reuse autoextend on next 10240Kmaxsize unlimited
</p>
		<p style="text-indent: 2em;">extent management local
</p>
		<p style="text-indent: 2em;">sysaux datafile 'D:\oracle\product\10.1.0\oradata\book\sysaux01.dbf' 
</p>
		<p style="text-indent: 2em;">size 120M reuse autoextend on next 10240K maxsize unlimited
</p>
		<p style="text-indent: 2em;">default temporary tablespace temp 
</p>
		<p style="text-indent: 2em;">tempfile 'D:\oracle\product\10.1.0\oradata\book\temp01.dbf' size 20M reuse autoextend on next 640K maxsize unlimited
</p>
		<p style="text-indent: 2em;">undo tablespace "UNDOTBS1" --请注意这里的undo表空间要和参数文件对应 
</p>
		<p style="text-indent: 2em;">datafile 'D:\oracle\product\10.1.0\oradata\book\undotbs01.dbf' size 200M reuse autoextend on next 5120K maxsize unlimited
</p>
		<p style="text-indent: 2em;">logfile 
</p>
		<p style="text-indent: 2em;">group 1 ('D:\oracle\product\10.1.0\oradata\book\redo01.log') size 10240K,
</p>
		<p style="text-indent: 2em;">group 2 ('D:\oracle\product\10.1.0\oradata\book\redo02.log') size 10240K,
</p>
		<p style="text-indent: 2em;">group 3 ('D:\oracle\product\10.1.0\oradata\book\redo03.log') size 10240K
</p>
		<p style="text-indent: 2em;">接着就执行刚建的建库脚本：
</p>
		<p style="text-indent: 2em;">SQL&gt;start E:\book.sql 
</p>
		<p style="text-indent: 2em;">
				<b>8、执行catalog脚步本创建数据字典</b>
		</p>
		<p style="text-indent: 2em;">SQL&gt;start D:\oracle\product\10.1.0\db_1\rdbms\admin\catalog.sql 
</p>
		<p style="text-indent: 2em;">
				<b>9、执行catproc创建package包</b>
		</p>
		<p style="text-indent: 2em;">SQL&gt;start D:\oracle\product\10.1.0\db_1\rdbms\admin\catproc.sql 
</p>
		<p style="text-indent: 2em;">
				<b>10、执行pupbld</b>
		</p>
		<p style="text-indent: 2em;">在执行pupbld之前要把当前用户（sys）转换成system,即以system账户连接数据库。因为此数据库是刚建的，所以system的口令是系统默认的口令，即manager。你可以在数据库建好以后再来重新设置此账户的口令。
</p>
		<p style="text-indent: 2em;">SQL&gt;connect system/manager 
</p>
		<p style="text-indent: 2em;">SQL&gt;start D:\oracle\product\10.1.0\db_1\sqlplus\admin\pupbld.sql 
</p>
		<p style="text-indent: 2em;">
				<b>11、由初始化参数文件创建spfile文件</b>
		</p>
		<p style="text-indent: 2em;">SQL&gt;create spfile from pfile; 
</p>
		<p style="text-indent: 2em;">
				<b>12、执行scott脚本创建scott模式</b>
		</p>
		<p style="text-indent: 2em;">SQL&gt;start D:\oracle\product\10.1.0\db_1\rdbms\admin\scott.sql 
</p>
		<p style="text-indent: 2em;">
				<b>13、把数据库打开到正常状态</b>
		</p>
		<p style="text-indent: 2em;">SQL&gt;alter database open; 
</p>
		<p style="text-indent: 2em;">
				<b>14、以scott连接到数据库（口令为tiger），测试新建数据库是否可以正常运行</b>
		</p>
		<p style="text-indent: 2em;">至此，整个数据库就已经建好了。接着你就可以在此数据库上建立自己的账户和表空间啦以及数据库对象，这里就不再作更多地叙述。</p>
<img src ="http://www.cnitblog.com/tjitty/aggbug/59799.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2009-07-03 09:22 <a href="http://www.cnitblog.com/tjitty/archive/2009/07/03/59799.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WEB性能测试［from CSDN blog］</title><link>http://www.cnitblog.com/tjitty/archive/2008/04/02/41816.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Wed, 02 Apr 2008 06:22:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2008/04/02/41816.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/41816.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2008/04/02/41816.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/41816.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/41816.html</trackback:ping><description><![CDATA[
		<div style="margin: 17pt 0cm 16.5pt;">
				<strong>
						<font size="6">
								<font size="4">1.1基本概念</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">并发用户：用户并发一般发生在使用比较频繁的模块中，而且遇到异常通常都是程序的问题。</font>
		</div>
		<div>
				<font size="2">用户并发数量：在线用户数量是计算并发用户数量的主要依据之一。=使用系统的用户数量*(5%~20%)</font>
		</div>
		<div>
				<font size="2">并发主要针对WEB服务器而言，是否并发的关键是看用户的操作是否对服务器产生了影响。</font>
		</div>
		<div>
				<font size="2">吞吐量：一次性能测试过程中网络上传输的数据量的总和。</font>
		</div>
		<div>
				<font size="2">吞吐率:吞吐量/传输时间，单位时间内网络上传输的数据量，也可以指单位时间内处理的客户端请求数量。吞吐率用“请求数/秒”或者“页面数/秒”来衡量。</font>
		</div>
		<div style="margin: 0cm 0cm 6pt;">
				<font size="2">点击率：每秒钟用户向web服务器提交的HTTP请求数。点击率越大，对服务器的压力也越大。重要的是分析点击时产生的影响。</font>
		</div>
		<div style="margin: 0cm 0cm 6pt;">
				<font size="2">点击不是指鼠标的一次“单击”操作，因为在一次“单击”操作中，客户端可能向服务器发出多个HTTP请求。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="5">
								<font size="4">1.2WEB性能测试种类</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">压力测试：确定一个系统的瓶颈或者不能接收用户请求的性能点，来获得系统能提供的最大服务级别的测试。</font>
		</div>
		<div>
				<font size="2">负载测试：在被测系统上不断增加压力　，直到性能指标达到极限，响应时间超过预定指标或者某种资源已经达到饱和状态。这种测试可以找到系统的处理极限，为系统调优提供依据。</font>
		</div>
		<div>
				<font size="2">大数据量测试：针对某些系统存储、传输、统计查询等业务进行大数据量的测试。</font>
		</div>
		<div>
				<font size="2">配置测试：通过测试找到系统各资源的最优分配原则。</font>
		</div>
		<div>
				<font size="2">可靠性测试：可以施加cpu资源保持70%-90%使用率的压力，连续对系统加压运行8小时，然后根据结果分析系统是否稳定。即加载一定压力的情况下，使系统运行一段时间。</font>
		</div>
		<div>
				<font size="2">并发测试：多以发现一些算法设计上的问题。</font>
		</div>
		<div>
				<font size="2">性能测试以用户并发测试为主的测试。</font>
		</div>
		<div>
				<font size="2">性能测试主要是为了发现软件问题和硬件瓶颈。</font>
		</div>
		<div>
				<font size="3">
						<font size="2">对于性能方面给系统留有30%左右的扩展空间即可。</font>
						<span>                                     </span>
				</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="5">
								<font size="4">1.3Web全面性能测试模型</font>
						</font>
				</strong>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">1.3.1预期指标的性能测试</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">主要指需求分析和设计阶段提出的一些性能指标。</font>
		</div>
		<div>
				<font size="2">针对每个指标都要编写一个或者多个测试用例来验证系统是否达到要求。</font>
		</div>
		<div>
				<font size="2">预期指标的性能测试用例通常以单用户为主，如果涉及并发用户内容，则归并到并发用户测试用例中进行设计。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">1.3.2并发性能测试</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">选择具有代表性、关键的业务来设计用例，并且用户的设计应该面向“模块”</font>
		</div>
		<div>
				<font size="2">用户并发性能测试分为：独立核心模块并发性能测试，组合模块并发性能测试</font>
		</div>
		<div>
				<font size="2">独立核心模块并发：完全一样功能的并发测试；完全一样操作的并发测试；相同/不同的子功能并发。</font>
		</div>
		<div>
				<font size="2">针对独立核心模块用户并发性能的测试用例设计，可发现一些核心算法或者功能方面的问题，如一些多线程、同步并发算法在单用户模式下测试是很难发现问题的，通过模拟多用户的并发操作，更容易验证其是否正确和稳定。</font>
		</div>
		<div>
				<font size="2">核心模块测试一般属于基本的性能测试，它较多地关注模拟的“功能”，一般不会对服务器进行测试。</font>
		</div>
		<div> </div>
		<div>
				<font size="2">组合模块并发：具有耦合关系的核心模块进行组合并发测试；彼此独立的、内部具有耦合关系的核心模块组的并发测试；基于用户场景的并发测试。</font>
		</div>
		<div>
				<font size="2">组合模块测试一般发现接口方面的功能问题，并尽早发现综合性能问题。</font>
		</div>
		<div>
				<font size="2">在实际中，各种类型的用户都会对应一组模块，相当于不同的业务组在并发访问系统，要充分考虑实际场景，如话费管理系统中的每月10日左右的收费高峰等场景。</font>
		</div>
		<div>
				<font size="2">在编写组合模块用户并发性能测试用例时，不但要考虑用户使用场景，还要注意并发点的运用，并发点是指一定数量的用户开始执行同一功能或者操作的时间点，一组测试场景通常包含多个并发点，从而实现了核心模块同一功能或者操作的真正并发。</font>
		</div>
		<div> </div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">1.3.3独立业务性能测试</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">独立业务实际是指一些核心业务模块对应的业务。这些模块通常具有功能比较复杂，使用比较频繁，属于核心业务等特点。主要测试这类模块和性能相关的一些算法、还要测试这类模块对并发用户的响应情况。</font>
		</div>
		<div>
				<font size="2">用户并发测试是核心业务模块的重点测试内容。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">1.3.4组合业务性能测试</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">是最接近用户实际使用情况的测试，也是性能测试的核心内容。</font>
		</div>
		<div>
				<font size="2">组合并发的突出特点是根据用户使用系统的情况分成不同的用户组进行并发，每组的用户比例要根据实际情况来进行匹配。</font>
		</div>
		<div>
				<font size="2">用户并发测试是组合业务性能测试的核心内容。“组合”并发的突出特点是根据用户使用系统的情况分成不同的用户组进行并发，每组的用户比例要根据实际情况来进行匹配。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">1.3.5网络性能测试</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">为准确展未带宽、延迟、负载和端口的变化是如何影响用户的响应时间的。主要是测试应用系统的用户数目与网络带宽的关系。</font>
		</div>
		<div>
				<font size="2">调整性能最好的办法就是软硬相结合。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">1.3.6大数据量测试</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">主要是针对对数据库有特殊要求的系统进行的测试，主要分为三种：</font>
		</div>
		<div>
				<font size="2">1．实时大数据量：模拟用户工作时的实时大数据量，主要目的是测试用户较多或者某些业务产生较大数据量时，系统能否稳定地运行。</font>
		</div>
		<div>
				<font size="2">2．极限状态下的测试：主要是测试系统使用一段时间即系统累积一定量的数据时，能否正常地运行业务</font>
		</div>
		<div>
				<font size="2">3．前面两种的结合：测试系统已经累积较大数据量时，一些实时产生较大数据量的模块能否稳定地工作。</font>
		</div>
		<div>
				<font size="2">大数据量测试用例的设计:1,历史数据引起的大数据量测试和2运行时大数据量测试</font>
		</div>
		<div>
				<font size="2">首先确定系统数据的最长迁移周期和选择一些前面的核心模块或者组合模块的并发用户测试用例作为其主要内容即可.</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">1.3.7服务器性能测试</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">性能测试的主要目的是在软件功能良好的前提下，发现系统瓶颈并解决，而软件和服务器是产生瓶颈的两大来源，因此在进行用户并发性能测试，疲劳强度与大数据量性能测试时，完成对服务器性能的监控，并对服务器性能进行评估。</font>
		</div>
		<div>
				<font size="2">服务器性能测试用例设计就是确定要采集的性能计数器，并将其与前面的测试关联起来。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">1.3.8设计性能测试用例注意的原则：</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">可以满足预期性能指标测试用例要求的，就没有必要设计更多的内容，因为用例越多，执行的成本也越高。</font>
		</div>
		<div>
				<font size="2">一定要服从整体性能测试策略，千万不能仅从技术角度来考虑设计“全面”的测试用例，“全面”应该以是否满足自己的测试要求作为标准。</font>
		</div>
		<div>
				<font size="2">适当裁剪原则</font>
		</div>
		<div>
				<font size="2">只有根据实际项目的特点制定合理的性能测试策略、编写适当的性能测试用例，并在测试实施中灵活地变通才可以做好性能测试工作。</font>
		</div>
		<div style="margin: 0cm 0cm 6pt;">
				<font size="2">测试计划：主要包含测试范围、测试环境、测试方案简介、风险分析等，测试计划要进行评审后方可生效。</font>
		</div>
		<div style="margin: 0cm 0cm 6pt;">
				<font size="2">测试报告：主要包含测试过程记录、测试分析结果、系统调整建议等。</font>
		</div>
		<div style="margin: 0cm 0cm 6pt;">
				<font size="2">测试经验总结：不断总结工作经验是建立学习型团队的基础，实践－总结－再实践</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="5">
								<font size="4">2.1人员之间的配合关系</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">客户代表：可了解一些项目的背景知识，例如客户在软件性能方面的需求，是否关注性能测试等，这些都是制定性能测试策略的依据。</font>
		</div>
		<div style="margin: 0cm 0cm 6pt;">
				<font size="2">需求分析员：确定哪些业务是核心业务，为后面编写核心业务模块相关的测试用例打下良好的基础，并且他们对用户群体构成以及系统的扩展目标较清楚，这些都是设计性能测试的数据来源。</font>
		</div>
		<div style="margin: 0cm 0cm 6pt;">
				<font size="2">架构师：了解系统的结构，使设计出的性能测试用例在“恰当”的地方施压。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="5">
								<font size="4">2.2性能测试的范围确定</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">对测试项或测试需求进行打分，根据综合评分确定性能测试工作包含的测试内容，评分要素主要包含客户关注度、性能风险、测试的成本等，性能风险主要指如果不进行该项性能测试需求，投产系统可能潜在的风险。</font>
		</div>
		<div>
				<font size="2">客户关注程度或者性能风险较高的均应划分到测试范围内。</font>
		</div>
		<table style="border: medium none ; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 70.95pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">编号</font>
										</div>
								</td>
								<td style="border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-top: 1pt solid windowtext; border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">测试需求</font>
										</div>
								</td>
								<td style="border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-top: 1pt solid windowtext; border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">性能风险</font>
										</div>
										<div>
												<font size="2">(10分)</font>
										</div>
								</td>
								<td style="border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-top: 1pt solid windowtext; border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">用户关注度(10分)</font>
										</div>
								</td>
								<td style="border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-top: 1pt solid windowtext; border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">成本投入</font>
										</div>
										<div>
												<font size="2">(10分)</font>
										</div>
								</td>
								<td style="border-color: windowtext windowtext windowtext rgb(236, 233, 216); border-top: 1pt solid windowtext; border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">总分</font>
										</div>
								</td>
						</tr>
						<tr>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext; border-left: 1pt solid windowtext; border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 70.95pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">1</font>
										</div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">系统运转一年的数据量测试</font>
										</div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">7</font>
										</div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">10</font>
										</div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">6</font>
										</div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">23</font>
										</div>
								</td>
						</tr>
						<tr>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext; border-left: 1pt solid windowtext; border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 70.95pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">2</font>
										</div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">……</font>
										</div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71pt; background-color: transparent;" valign="top" width="95">
										<div>
												<font size="2">……</font>
										</div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div> </div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div> </div>
								</td>
								<td style="border-color: rgb(236, 233, 216) windowtext windowtext rgb(236, 233, 216); border-right: 1pt solid windowtext; border-bottom: 1pt solid windowtext; padding: 0cm 5.4pt; width: 71.05pt; background-color: transparent;" valign="top" width="95">
										<div> </div>
								</td>
						</tr>
				</tbody>
		</table>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="5">
								<font size="4">2.3目标系统的业务分析</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">确定系统的核心模块：业务比较复杂或用户使用较频繁</font>
		</div>
		<div>
				<font size="2">确定模块件的耦合关系：清晰了解核心模块间数据传输方式，通过确定模块间如何接口，可以真实地模拟多用户并发时的情况，尤其可以确定用户并发时一些算法是否正确。</font>
		</div>
		<div>
				<font size="2">分析系统压力点：多是用户使用较频繁或数据流量较大的地方。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="5">
								<font size="4">2.4用户及场景分析</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">一，基于用户实际使用情况的场景测试，二，为了特殊测试目的(扩展性、稳定性)而设计的场景测试。</font>
		</div>
		<div>
				<font size="2">确定系统有多少类典型的用户，每类用户的大概数量以及在不同时间段各类用户大概按照何种比例来使用系统。较常见的用户场景有如下三种：</font>
		</div>
		<div>
				<font size="2">一天内不同时间段的使用场景</font>
		</div>
		<div>
				<font size="2">系统运行不同时期的场景</font>
		</div>
		<div>
				<font size="2">不同业务模式下的用户场景</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="5">
								<font size="4">2.5整体规划</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">性能测试规划的重点是时间、质量、成本等项目管理要素。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">2.5.1常见的性能测试工具</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">Loadrunner:是一种预测系统行为和性能的负载测试工具,目前很多公司执行性能测试的首选工具.</font>
		</div>
		<div>
				<font size="2">Rational performance: rational 系列产品之一,功能非常强大,和loadrunner竞争比较激烈.</font>
		</div>
		<div>
				<font size="2">QALoad:compu ware 公司的产品</font>
		</div>
		<div>
				<font size="2">Webload:专门用于web性能测试的工具</font>
		</div>
		<div>
				<font size="2">WAS:全称是Microsoft Web Application Stress Tool,微软提供的免费性能测试工具</font>
		</div>
		<div>
				<font size="2">Apache JMeter :开源的性能测试工具</font>
		</div>
		<div>
				<font size="2">openSTA:开源的性能测试工具</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">2.5.2测试结果记录规范管理</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">测试结果数据是分析系统瓶颈的主要依据,大量的测试结果文件要进行规范管理,统一文件的命名规范.例如:2007-1-12-dbtest-oracleserver-50-once</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">2.5.3测试环境管理与维护</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">执行性能测试尽量不要破坏用户环境,而且要预先制定相应的备份/恢复策略,以便系统发生意外时可以恢复到测试前的状态.</font>
		</div>
		<div>
				<font size="2">性能测试很有可能产生大量的垃圾数据,消除垃圾数据是测试结事后首当其冲的工作</font>
		</div>
		<div>
				<font size="2">测试时还要监控测试机的使用情况,除非保证场景消耗的资源不会超出测试机的负载能力,否则就应该认真监控测试机,因为一旦测试机发生瓶颈,所有测试结果均无实际意义.</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<u>
						<font color="#0000ff">
								<b>
										<strong>
												<font size="4">
														<font size="3">2.5.4测试分析与经验总结</font>
												</font>
										</strong>
								</b>
						</font>
				</u>
		</div>
		<div>
				<font size="2">主要关注性能测试规划与设计、测试用例设计、测试工具与技术、性能分析等方面。</font>
		</div>
		<div>
				<font size="2">性能测试用例的设计分析：可用性、执行效果、执行时间、还应该分析用例的设计方法、设计思路等。</font>
		</div>
		<div>
				<font size="2">对于瓶颈：应用系统、数据库、web服务器等有时会因配置参数不正确导致系统性能不高，可积累解决这方面问题的经验，以便于以后快速解决问题。</font>
		</div>
		<div>
				<font size="2">1．随着压力的加大，吞吐率的曲线在增加到一定的时候，出现变化缓慢，甚至平坦的状态，很有可能标明网络出现带宽瓶颈。类似地，当压力加大时，点击率/TPS曲线出现变化缓慢或平坦的趋势，很有可能服务器开始出现瓶颈。</font>
		</div>
		<div>
				<font size="2">2．吞吐率与TPS具有很强的关联性：如果随着压力的加大，吞吐率和TPS的变化呈大体一致的趋势，即一起增加，说明在测试的压力下，系统没有出现显著的性能瓶颈。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<u>
						<font color="#0000ff">
								<strong>
										<font size="5">
												<font size="4">3.1性能分析的步骤</font>
										</font>
								</strong>
						</font>
				</u>
		</div>
		<div>
				<font size="2">1．首先从响应时间做为分析性能的起点。查看响应时间以判断是否满足用户对性能的期望。</font>
		</div>
		<div>
				<font size="2">2．考察系统的瓶颈是在网络环节还是在服务器环节。</font>
		</div>
		<div>
				<font size="2">针对服务器分析主要涉及应用程序、web服务器、数据库服务器、操作系统等。</font>
		</div>
		<div>
				<font size="2">首先应该分析业务或者用户事务的响应时间，根据测试结果来分析哪些业务真正变慢了，然后分析web资源的处理情况，最后对页面组成元素的响应时间进行分解。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">3.1.1用户事务分析</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">1．查看结果综述图：查看事务的平均响应时间，以及事务的通过率</font>
		</div>
		<div>
				<font size="2">2．查看事务综述图和事务平均响应时间分析图：查看事务通过和失败的数值，来判断是程序算法出现问题还是服务器存在内存泄漏现象。</font>
		</div>
		<div>
				<font size="2">3．每秒通过事务数分析图：可确定系统在任何给定时刻的实际事务负载。当发现每秒通过的事务数减少时，就需要更加深入的分析，配合服务器监控数据一起分析。</font>
		</div>
		<div>
				<font size="2">4．事务性能摘要图：重点关注事务的平均和最大执行时间，如果其范围不在用户可以接受的时间范围内，需要进行原因分析。</font>
		</div>
		<div>
				<font size="2">5．事务响应时间与负载分析图：正在运行的虚拟用户和平均事务响应时间图的组合，通过它可以看出在任一时间点事务响应时间与用户数目的关系，从而掌握系统在用户并发方面的性能数据，为扩展应用系统提供参考，对分析具有渐变负载的测试场景比较有用。</font>
		</div>
		<div>
				<font size="2">6．事务响应时间分布情况分布图：预先定义相关事务可以接受的最小和最大事务响应时间，则可以使用此图确定服务器性能是否在可以接受的范围内。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">3.1.2web资源分析</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">1．点击率图：每秒点击次数，即点击率图显示在场景运行过程中虚拟用户每秒向web服务器提交的HTTP请求数，可依据点击次数来评估虚拟用户产生的负载量，还可将其与”平均事务响应时间”图进行比较，以查看点击次数对事务性能产生的影响。</font>
		</div>
		<div>
				<font size="2">系统点击率下降通常表明服务器的响应速度在变慢。</font>
		</div>
		<div>
				<font size="2">2．吞吐率图：显示场景运行过程中服务器每秒的吞吐量。度量单位是字节，表示虚拟用户在任何给定的某一秒上从服务器获得的数据量。</font>
		</div>
		<div>
				<font size="2">点击率：每秒服务器处理的HTTP申请数</font>
		</div>
		<div>
				<font size="2">吞吐率：客户端每秒从服务器获得的总数据量。</font>
		</div>
		<div>
				<font size="2">每秒HTTP响应数图还能返回其他各类状态码信息，通过分析状态码，可以判断服务器在压力下的运行情况。</font>
		</div>
		<div>
				<font size="2">常见的http状态代码：从200-505均有其含义。如202：已经接受请求，但处理尚未完成。</font>
		</div>
		<div>
				<font size="2">3．每秒连接数图：显示在运行过程中每秒新建立的TCP/IP连接数。新连接数应该是每秒点击次数的一小部分，理想情况下，很多的HTTP请求都应该使用同一连接，而不是每个请求都新打开一个连接。</font>
		</div>
		<div style="margin: 13pt 0cm;">
				<strong>
						<font size="4">
								<font size="3">3.1.3网页元素细分</font>
						</font>
				</strong>
		</div>
		<div>
				<font size="2">通过它可深入地分析网站上那些下载很慢的图像或中断的链接等有问题的元素。</font>
		</div>
		<div>
				<font size="2">页面分解总图：可显示某一具体事务在测试过程的响应情况，进而分析相关的事务运行是否正常。</font>
		</div>
		<div>
				<font size="2">1．下载时间细分：查看静态gif图片和动态的jsp代码。</font>
		</div>
		<div>
				<font size="2">2．组件细分（随时间变化）：可以选择不同的元素查看测试过程中其下载时间的变化曲线。适用于需要在客户端下载控制较多的页面，通过分析控件的响应时间，很容易就能发现哪些控件不稳定或者比较耗时。</font>
		</div>
		<div>
				<font size="2">3．下载时间细分（随时间变化）：查看jsp页面主要时间花在如receive,first buffer,connection等。</font>
		</div>
		<div>
				<font size="2">下载时间细分：宏观，整个测试过程页面元素响应时间的统计分析结果</font>
		</div>
		<div>
				<font size="2">下载时间细分（随时间变化）：微观，显示场景运行过程中每一秒内页面元素响应时间的统计结果。</font>
		</div>
		<div>
				<font size="2">4．第一次缓冲时间细分（随时间变化）：可查看页面运行时间主要花在服务器还是网络传输上。</font>
		</div>
		<div> </div>
		<div>
				<font size="2">服务器分析通常从web服务器和数据库服务器入手。</font>
		</div>
		<div>
				<font size="2">服务器分析的第一步，分析测试工具对web服务器和数据库服务器相关计数器的监控结果，然后确定在压力下是web服务较慢还是数据处理较慢。</font>
		</div>
		<div>
				<font size="2">Web服务较慢：查看web服务器的各种参数配置，如最大连接数、最大内存等是否设置的合理。查看内存、CPU、硬盘</font>
		</div>
		<div>
				<font size="2">数据处理较慢：一般是数据库配置发生问题，或是硬件资源配置太低。如oracle,要查看内存配置、运行模式等信息。</font>
		</div> <div style="margin: 13pt 0cm;"><strong><font size="5"><font size="4">4.1数据库调优策略</font></font></strong></div><div><font size="2">1．修改sql语句中影响速度的写法</font></div><div><font size="2">2．增加或者修改索引</font></div><div><font size="2"><span>   </span>针对表间的连接创建索引</font></div><div><font size="2"><span>   </span>针对查找建立索引</font></div><div><font size="2"><span>   </span>使用索引时，遵守以下原则可达到更好的效果</font></div><div><font size="2"><span>   </span>第一：一般建立在多个字段上的一个组合索引优于针对单个字段建立的多个索引，根据值匹配条件创建的索引也需要遵循同样的原则：</font></div><div><font size="2"><span>   </span>第二：创建组合索引时，精确匹配的字段放在非精确匹配字段前面，取值范围大的字段放在取值范围小的字段前面，可以提高查询速度，如身份证字段应该放在性别字段前面。</font></div><div><font size="2"><span>   </span>第三：索引并不是越多越好，当数据库记录较多时，意味着数据库要付出的开销将会很大，从而降低数据库其他方面的性能。</font></div><div><font size="2">3．调整相应数据库的系统参数（系统投产生的调优，通常由厂商的配合完成）</font></div><div><font size="2">一般检查项为：复杂语句支持，大对象功能支持，并发查询性能，吞吐量，数据迁移（导出备份）。</font></div><div style="margin: 13pt 0cm;"><strong><font size="5"><font size="4">4.2weblogic/oracle相关分析</font></font></strong></div><div><font size="2">主要监控：%processor, Avalable Mbytes(空闲内存), JVM内存，connection Delay Time（数据库连接池建立数据库连接的时间）</font></div><div><font size="2">Oracle运行平台AIX监控（unix），cpu的使用率（cpu utilization），disk traltic(磁盘负载)，page-in,page-out rate的使用情况。</font></div><div><font size="2">以及oracle本身相关报告：相看缓冲区调整缓存，应用程序的i/o操作。</font></div><div style="margin: 13pt 0cm;"><strong><font size="5"><font size="4">4.3性能测试用例设计要基于用户语言</font></font></strong></div><div><font size="2">即
满足用户要求又相对全面的性能测试用例，设计时要基于“用户语言”，易于用户理解的、大纲形式的测试用例，这样涉及的技术语言不多，用户很容易看懂。这样
使得用户在现场测试阶段能够提出很多改进建议，并同意对用例进行调整（删减近一半的用例），可以为后期执行测试节约成本。</font></div><div><font size="2">性能测试实施的特点之一就是不会严格按照测试用例来执行，通常是在项目中对用户进行一定的调整，然后再去执行，对于测试用例进行调整，删除、修改、增加，这是很正常的，基本成本来进行设计和执行。</font></div><div><font size="2">                                   共计四篇,摘自&lt;&lt;web性能测试实战&gt;&gt;</font></div><div><font size="2">备注:只为方便自已查阅,对于文中增删不全的地方,如果感兴趣建议查看原文,同时欢迎大家交流讨论!</font></div><br /><br /><p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1735726</p><img src ="http://www.cnitblog.com/tjitty/aggbug/41816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2008-04-02 14:22 <a href="http://www.cnitblog.com/tjitty/archive/2008/04/02/41816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic中影响性能的参数总结[from csdn]</title><link>http://www.cnitblog.com/tjitty/archive/2008/04/01/41748.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Tue, 01 Apr 2008 02:13:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2008/04/01/41748.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/41748.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2008/04/01/41748.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/41748.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/41748.html</trackback:ping><description><![CDATA[1 <br /><table border="1"><tbody><tr><td>名称</td><td>参数</td><td>位置</td><td>作用</td></tr><tr><td rowspan="2"><br />　　高速缓存</td><td>max-beans-in-cache</td><td>weblogic-ejb-jar.xml</td><td>实体bean缓存空间的大小，如果缓存的空间太小，有些bean就被滞留在数据库中，下次调用时就必须重新从数据库装载</td></tr><tr><td><br />　　 "%JAVA_HOME%\bin\java" -hotspot -Xms512m -Xmx512m -classpath %CLASSPATH% -</td><td>startWLS.cmd /startWLS.sh</td><td>为得到高性能的吞吐量，把Java堆的最小值与最大值设为相等。</td></tr></tbody></table><br />2 weblogic影响服务器性能的参数<br />　　<br />　　　<table border="1"><tbody><tr><td>名称</td><td>类型</td><td>位置</td><td>值</td></tr><tr><td>NativeIOEnabled</td><td rowspan="10">server</td><td>mydomain<br />-&gt;Servers<br />-&gt;myserver<br />-&gt;Configuration<br />-&gt;Tuning<br />-&gt;“Enable Native IO”</td><td>TRUE，表示该Server使用本地I/O</td></tr><tr><td>SocketReaders</td><td rowspan="9">server<br />—&gt;configuration<br />-&gt;tuning</td><td>设置在执行线程中专用做Socket Readers的百分比</td></tr><tr><td>Maximum Open Sockets</td><td>最大打开Socket数</td></tr><tr><td>Stuck Thread MaxTime</td><td>堵塞线程时间，超过这个时间没有返回的执行线程，系统将认为是堵塞线程<br />　　如果weblogic认为某个队列中的所有的线程全部堵塞的话，weblogic将会增加执行线程的数量。<br />　　注意：执行线程的数量一旦增加，目前weblogic不会去减少他，如果增加了一些线程以后再次出现overflow的警告，weblogic会继续增加执行线程的数量，一直到达到上限为止。</td></tr><tr><td>Stuck Thread Timer Interval</td><td>系统检查堵塞线程的时间间隔</td></tr><tr><td>Low Memory GC Threshold</td><td>当可用内存小于该百分比时，垃圾回收启动</td></tr><tr><td>Low Memory Granularity Level</td><td>当两次检测的可用内存变化超过该百分比时，垃圾回收启动</td></tr><tr><td>Low Memory Sample Size</td><td>在一次检测中的取样次数</td></tr><tr><td>Low Memory Time Interval</td><td>检测间隔时间</td></tr><tr><td>Accept Backlog</td><td>等待队列中最多可以有多少TCP连接等待处理，如果在许多客户端连接被拒绝，而在服务器端没有错误显示，说明该值设得过低。<br />　　如果连接时收到connection refused消息，说明应提高该值，每次增加25％</td></tr><tr><td>ThreadCount</td><td rowspan="7">ExecuteQueue</td><td rowspan="7">console：
mydomain<br />-&gt;Servers<br />-&gt;myserver <br />-&gt;Monitoring<br />-&gt;Monitor all
Active Queues... <br />-&gt;Configuration<br />-&gt;weblogic.kernel.Default<br />-&gt;</td><td>服务器初始创建的执行线程的数量，设置原则：<br />　　增大机器的最大并发线程数使处理器利用率达到最大。对于服务器端操作比较多的线程，应该减少线程计数；对于客户端操作比较多的，应该增加线程计数。并发线程数理论上等于“本地主机CPU个数+Stuck线程数”，够用即可，过大会降低系统性能</td></tr><tr><td>QueueLength</td><td>在等待队列里的请求数，理想状态下是0</td></tr><tr><td>QueueLengthThresholdPercent</td><td>一个百分数，当request的数量达到队列长度的这个比例的时候，weblogic会发出overflow的标志信息</td></tr><tr><td>ThreadsIncrease</td><td>如果weblogic发出overflow的标志信息，weblogic会尝试增加这个数量的执行线程，以解决处理矛盾</td></tr><tr><td>ThreadsMaximum</td><td>最大执行线程数</td></tr><tr><td>Threads Minimum</td><td>最小执行线程数</td></tr><tr><td>ThreadPriority</td><td>线程优先级</td></tr><tr><td>Initial Capacity</td><td rowspan="7">JDBC</td><td rowspan="7">mydomain<br />-&gt; JDBC Connection Pools<br />-&gt;Configuration<br />-&gt;Connections</td><td>初始数据库物理连接数</td></tr><tr><td>MaxCapacity</td><td>最大数据库物理连接数</td></tr><tr><td>Capacity Increment</td><td>每次数据库物理连接增加数</td></tr><tr><td>Statement Cache Type </td><td>prepared statements缓存的策略，LRU算法在有新的语句到来时，将最不经常被用得语句调整出缓存。FIXED算法为先进先出的算法</td></tr><tr><td>TestConnectionsOnReserve</td><td>TestConnectionsOnReserve设置为false（缺省设置）。如果此参数设置为真（true），则在连接被分配给调用者之前，都要经过测试，这会额外要求与数据库的反复连接</td></tr><tr><td>Statement Cache Size</td><td>宏语句设定的静态缓存，大小由JDBC连接池配置时指定，调整这个数值的大小，有利于提高系统的效率</td></tr><tr><td>Login Delay</td><td>创建数据库物理连接时的延时时间</td></tr></tbody></table><br />　　3.更改webLogic为运行时模式<br />　
　a)．为更改运行在一个WebLogic主机上的所有域的运行时模式，用文本编辑器打开WL_HOME\common\bin\commEnv.cmd
(Windows) 或者WL_HOME\common\bin\commEnv.sh (UNIX)，WL_HOME是安装WebLogic的路径。<br />　　为指定的域更改运行时模式，就用文本编辑器打开domain-name\StartWebLogic.cmd (Windows) or domain-name\StartWebLogic.sh (UNIX)，domain-name为创建的域的目录。<br />　　b)．在这个脚本中，更改PRODUCTION_MODE的值，如果你要服务器运行在产品模式，指定其值为TRUE。<br />　　4.选择JRockit作为虚拟机<br />　　5.weblogic-ejb-jar.xml影响性能参数<br /><img src ="http://www.cnitblog.com/tjitty/aggbug/41748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2008-04-01 10:13 <a href="http://www.cnitblog.com/tjitty/archive/2008/04/01/41748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>转贴：高效率编辑器 VIM－操作篇，非常适合 VIM 新手</title><link>http://www.cnitblog.com/tjitty/archive/2008/03/26/41515.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Wed, 26 Mar 2008 12:09:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2008/03/26/41515.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/41515.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2008/03/26/41515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/41515.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/41515.html</trackback:ping><description><![CDATA[
		<p>虽然从很久前就开始用 VIM 了，但一直都是半</p>
		<del datetime="2007-01-27T13:01:01+00:00">调</del>吊
子，翻来覆去只用自己会的命令。最近为了提高书写代码的效率，还有 coding 时候的乐趣，又重新钻研了一下 VIM，发现了一篇很好的 VIM
入门的文章，原文是英文版的，我觉得非常适合 VIM 使用入门，所以翻译了过来。这里是简单的介绍了 VIM 的操作方式，并没有说为什么要用
VIM，如果你想知道答案可以去 Google，VIM 被誉为编辑器之神。<p>这篇教程写了在不同工作模式下使用 VIM 的一些基本技巧——即插入模式（insert mode）， 命令模式（command mode）， 存取文件等。目的是帮助刚刚接触 VIM 的新手更加有效率的使用这个出色的编辑器。</p><p>说明：在这篇文章里面，&lt;C-X&gt; 代表 Ctrl + X——就是按住 Ctrl 键然后再按 X。而且你可以在很多情况下使用 :help command 来获得大部分命令的帮助，这个是 VIM 的内部帮助文件命令。</p><p><strong>高效率移动</strong></p><p><em>在插入模式之外</em></p><p>基本上来说，你应该尽可能少的呆在插入模式里面，因为在插入模式里面 VIM
就像一个“哑巴”编辑器一样。很多新手都会一直呆在插入模式里面，因为这样易于使用。但 VIM
的强大之处在于他的命令行模式！你会发现，在你越来越了解 VIM 之后，你就会花越来越少的时间使用插入模式了。</p><p><em>使用 h、j、k、l</em></p><p>使用 VIM 高效率编辑的第一步，就是放弃使用箭头键。使用
VIM，你就不用频繁的在箭头键和字母键之间移来移去了，这会节省你很多时间。当你在命令模式时，你可以用 h、j、k、l
来分别实现左、下、上、右箭头的功能。一开始可能需要适应一下，但一旦习惯这种方式，你就会发现这样操作的高效之处了。</p><p>在你编辑你的电子邮件或者其他有段落的文本时，你可能会发现使用方向键和你预期的效果不一样，有时候可能会一次跳过了很多行。这是因为你的段落在
VIM 看来是一个大的长长的行。这时你可以在按 h、j、k 或者 l 之前键入一个 g，这样 VIM 就会按屏幕上面的行如你所愿的移动了。</p><p><em>在当前行里面有效的移动光标</em></p><p>很多编辑器只提供了简单的命令来控制光标的移动（比如左、上、右、下、到行首/尾等）。VIM
则提供了很多强大的命令来满足你控制光标的欲望。当光标从一点移动到另外一点，在这两点之间的文本（包括这两个点）称作被“跨过”，这里的命令也被称作是
motion。（简单说明一下，后面会用到这个重要的概念）</p><p>这里是常用到的一些命令（motion）：</p><ul><li>fx：移动光标到当前行的下一个 x 处。很明显，x 可以是任意一个字母，而且你可以使用 ; 来重复你的上一个 f 命令。</li><li>tx：和上面的命令类似，但是是移动到 x 的左边一个位置。（这真的很有用）</li><li>Fx：和 fx 类似，不过是往回找。</li><li>w：光标往前移动一个词。</li><li>b：光标往后移动一个词。</li><li>0：移动光标到当前行首。</li><li>^：移动光标到当前行的第一个字母位置。</li><li>$：移动光标到行尾。</li><li>)：移动光标到下一个句子。</li><li>( ：移动光标到上一个句子。</li></ul><p><em>在整个文件里面有效移动光标</em></p><p>VIM 有很多命令，可以用来到达文件里面你想到达的地方。下面是一些在文件里面移动的命令：</p><ul><li>&lt;C-F&gt;：向下移动一屏。</li><li>&lt;C-B&gt;：向上移动一屏。</li><li>G：到文件尾</li><li>numG：移动光标到指定的行（num）。（比如 10G 就是到第 10 行）</li><li>gg：到文件首</li><li>H：移动光标到屏幕上面</li><li>M：移动光标到屏幕中间</li><li>L：移动光标到屏幕下面</li><li>*：读取光标处的字符串，并且移动光标到它再次出现的地方。</li><li>#：和上面的类似，但是是往反方向寻找。</li><li>/text：从当前光标处开始搜索字符串 text，并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话，按 n。</li><li>？text：和上面类似，但是是反方向。</li><li>ma：在当前光标的位置标记一个书签，名字为 a。书签名只能是小写字母。你看不见书签的存在，但它确实已经在那里了。</li><li>`a：到书签 a 处。注意这个不是单引号，它一般位于大部分键盘的 1 的左边。</li><li>`.：到你上次编辑文件的地方。这个命令很有用，而且你不用自己去标记它。</li></ul><p><strong>高效的输入</strong></p><p><em>使用关键词自动完成</em></p><p>VIM 有一个非常漂亮的关键词自动完成系统。这表示，你可以输入一个长词的一部分，然后按一下某个键，然后 VIM
就替你完成了这个长词的输入了。举个例子：你有一个变量名为 iAmALongAndAwkwardVarName
在你写的代码的某个地方。也许你不想每回都自己一个一个字母的去输入它。</p><p>使用关键词自动完成功能，你只需要输入开始几个字母（比如 iAmAL），然后按 &lt;C-N&gt;（按住 Ctrl，再按 N）或者 &lt;C-P&gt;。如果 VIM 没有给出你想要的词，继续按，直到你满意为止，VIM 会一直循环它找到的匹配的字符串。</p><p><em>聪明的进入插入模式</em></p><p>很多新手进入插入模式都只是用 i。这样当然可以进入插入模式，但通常不是那么合适，因为 VIM 提供了很多进入插入模式的命令。下面是最常用的一些：</p><ul><li>i：在当前字符的左边插入</li><li>I：在当前行首插入</li><li>a：在当前字符的右边插入</li><li>A：在当前行尾插入</li><li>o：在当前行下面插入一个新行</li><li>O：在当前行上面插入一个新行</li><li>c{motion}：删除 motion
命令跨过的字符，并且进入插入模式。比如：c$，这将会删除从光标位置到行尾的字符并且进入插入模式。ct！，这会删除从光标位置到下一个叹号（但不包
括），然后进入插入模式。被删除的字符被存在了剪贴板里面，并且可以再粘贴出来。</li><li>d{motion}：和上面差不多，但是不进入插入模式。</li></ul><strong>有效的移动大段的文本</strong><p><em>使用可视选择（visual selections）和合适的选择模式</em></p><p>不像最初的 VI，VIM 允许你高亮（选择）一些文本，并且进行操作。这里有三种可视选择模式：</p><ul><li>v：按字符选择。经常使用的模式，所以亲自尝试一下它。</li><li>V：按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。</li><li>&lt;C-V&gt;：按块选择。非常强大，只在很少的编辑器中才有这样的功能。你可以选择一个矩形块，并且在这个矩形里面的文本会被高亮。</li></ul><p>在选择模式的时候使用上面所述的方向键和命令（motion）。比如，vwww，会高亮光标前面的三个词。Vjj 将会高亮当前行以及下面两行。</p><p><em>在可视选择模式下剪切和拷贝</em></p><p>一旦你高亮了选区，你或许想进行一些操作：</p><ul><li>d：剪贴选择的内容到剪贴板。</li><li>y：拷贝选择的内容到剪贴板。</li><li>c：剪贴选择的内容到剪贴板并且进入插入模式。</li></ul><p><em>在非可视选择模式下剪切和拷贝</em></p><p>如果你很清楚的知道你想拷贝或者剪切什么，那你根本就不需要进入可视选择模式。这样也会节省时间：</p><ul><li>d{motion}：剪切 motion 命令跨过的字符到剪贴板。比如，dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。</li><li>y{motion}：和上面类似，不过是拷贝。</li><li>c{motion}：和 d{motion} 类似，不过最后进入插入模式。</li><li>dd：剪切当前行。</li><li>yy：拷贝当前行。</li><li>cc：剪切当前行并且进入插入模式。</li><li>D：剪切从光标位置到行尾到剪贴板。</li><li>Y：拷贝当前行。</li><li>C：和 D 类似，最后进入插入模式。</li><li>x：剪切当前字符到剪贴板。</li><li>s：和x类似，不过最后进入插入模式。</li></ul><p><em>粘贴</em></p><p>粘贴很简单，按 p。</p><p><em>使用多重剪贴板</em></p><p>很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器（Registers）。你可以列出当前定义的所有寄存器名和它们的内容，命令为“:reg”。最好使用小写字母来作为寄存器的名称，因为大写的有些被 VIM 占用了。</p><p>使用寄存器的命令为双引号 “。</p><p>比如：我们要拷贝当前行到寄存器 k。你应该按 “kyy。（你也可以使用 V”ky。为什么这样也可以呢？）现在当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。现在你可以使用命令 “kp 来粘贴寄存器 k 里面的内容到你想要的位置。</p><p><strong>避免重复</strong></p><p><em>令人惊奇的 . 命令</em></p><p>在 VI 里面，输入 . (小数点符号），将会重复你输入的上一个命令。比如，你上个命令为“dw”（删除一个词），VI 将会接着再删除一个词。</p><p><em>使用数字</em></p><p>使用数字也是 VIM 强大的而且很节省时间的重要特性之一。在很多 VIM 的命令之前都可以使用一个数字，这个数字将会告诉 VIM 这个命令需要执行几次。比如：</p><ul><li>3j 将会把光标向下移动三行。</li><li>10dd 将会删除十行。</li><li>y3″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。</li></ul><p>数字是扩展 motion 命令作用域非常有效的方法。</p><p><em>记录宏</em></p><p>有时候，你会发现你自己在文章的每段或者每行都重复相同的一系列动作。VIM 允许你记录一个宏来完成你的特殊需要。</p><ul><li>qregister：记录宏到寄存器 register，这里 register 是任意的你的寄存器的名字。比如 qa，将会记录并且把宏存在寄存器 a 里面。</li><li>q：结束宏的记录。</li><li>@register：使用存在寄存器 register 的宏。比如 @a，将会使用存在寄存器 a 里面的宏。</li></ul><p>必须要记住的是，宏只记录了你的系列按键并且重复执行它们。它们不是魔法。因为在 VIM 里面完成目的的方法有很多，所以有时候你要小心选择命令来记录你的宏。因为它们会在所有你要执行它的地方执行。</p><p><strong>用 VIM 写代码</strong></p><p>VIM 是一个用来写代码的绝好编辑器，因为它有一些特性是专门为程序员而设计的。这里是一些常用的：</p><ul><li>]p：和 p 的功能差不多，但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。试一下！</li><li>%：匹配花括号、方括号、括号等。在一个括号的上面，然后按 %，鼠标就会出现在匹配的另外一半括号处。</li><li>&gt;&gt;：缩进所有选择的代码</li><li>&lt;&lt;：和上面类似，但是反缩进</li><li>gd：到达光标所在处函数或者变量的定义处。</li><li>K：在 Man 里面查找光标当前所在处的词。 </li></ul><br /><br /><img src ="http://www.cnitblog.com/tjitty/aggbug/41515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2008-03-26 20:09 <a href="http://www.cnitblog.com/tjitty/archive/2008/03/26/41515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VI命令指导</title><link>http://www.cnitblog.com/tjitty/archive/2008/03/26/41511.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Wed, 26 Mar 2008 10:21:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2008/03/26/41511.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/41511.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2008/03/26/41511.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/41511.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/41511.html</trackback:ping><description><![CDATA[
		<h2>进入vi的命令</h2>
		<p>vi filename: 打开或新建文件，并将光标置于第一行首
</p>
		<p>vi +n filename: 打开文件，并将光标置于第n行首
</p>
		<p>vi + filename: 打开文件，并将光标置于最后一行首
</p>
		<p>vi +/pattern filename: 打开文件，并将光标置于第一个与pattern匹配的串处
</p>
		<p>vi -r filename: 在上次正用vi编辑时发生系统崩溃，恢复filename
</p>
		<p>vi filename....filename: 打开多个文件，依次进行编辑
</p>
		<a name=".E7.A7.BB.E5.8A.A8.E5.85.89.E6.A0.87.E7.B1.BB.E5.91.BD.E4.BB.A4">
		</a>
		<h2>移动光标类命令</h2>
		<p>h: 光标左移一个字符
</p>
		<p>l: 光标右移一个字符
</p>
		<p>space: 光标右移一个字符
</p>
		<p>Backspace: 光标左移一个字符
</p>
		<p>k或Ctrl+p: 光标上移一行
</p>
		<p>j或Ctrl+n: 光标下移一行
</p>
		<p>Enter: 光标下移一行
</p>
		<p>w或W : 光标右移一个字至字首
</p>
		<p>b或B : 光标左移一个字至字首
</p>
		<p>e或E : 光标右移一个字至字尾
</p>
		<p>): 光标移至句尾
</p>
		<p>(: 光标移至句首
</p>
		<p>}: 光标移至段落开头
</p>
		<p>{: 光标移至段落结尾
</p>
		<p>nG: 光标移至第n行首
</p>
		<p>n+: 光标下移n行
</p>
		<p>n-: 光标上移n行
</p>
		<p>n$: 光标移至第n行尾
</p>
		<p>H: 光标移至屏幕顶行
</p>
		<p>M: 光标移至屏幕中间行
</p>
		<p>L: 光标移至屏幕最后行
</p>
		<p>0: 光标移至当前行首
</p>
		<p>$: 光标移至当前行尾</p>
		<a name=".E5.B1.8F.E5.B9.95.E7.BF.BB.E6.BB.9A.E7.B1.BB.E5.91.BD.E4.BB.A4">
		</a>
		<h2>屏幕翻滚类命令</h2>
		<p>Ctrl+u: 向文件首翻半屏
</p>
		<p>Ctrl+d: 向文件尾翻半屏
</p>
		<p>Ctrl+f: 向文件尾翻一屏
</p>
		<p>Ctrl＋b: 向文件首翻一屏
</p>
		<p>nz: 将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。
</p>
		<a name=".E6.8F.92.E5.85.A5.E6.96.87.E6.9C.AC.E7.B1.BB.E5.91.BD.E4.BB.A4">
		</a>
		<h2>插入文本类命令</h2>
		<p>i: 在光标前
</p>
		<p>I: 在当前行首
</p>
		<p>a: 光标后
</p>
		<p>A: 在当前行尾
</p>
		<p>o: 在当前行之下新开一行
</p>
		<p>O: 在当前行之上新开一行
</p>
		<p>r: 替换当前字符
</p>
		<p>R: 替换当前字符及其后的字符，直至按ESC键
</p>
		<p>s: 从当前光标位置处开始，以输入的文本替代指定数目的字符
</p>
		<p>S: 删除指定数目的行，并以所输入文本代替之
</p>
		<p>ncw或nCW: 修改指定数目的字
</p>
		<p>nCC: 修改指定数目的行
</p>
		<a name=".E5.88.A0.E9.99.A4.E5.91.BD.E4.BB.A4">
		</a>
		<h2>删除命令</h2>
		<p>ndw或ndW: 删除光标处开始及其后的n-1个字
</p>
		<p>do: 删至行首
</p>
		<p>d$: 删至行尾
</p>
		<p>ndd: 删除当前行及其后n-1行
</p>
		<p>x或X: 删除一个字符，x删除光标后的，而X删除光标前的
</p>
		<p>Ctrl+u: 删除输入方式下所输入的文本</p>
		<a name=".E6.90.9C.E7.B4.A2.E5.8F.8A.E6.9B.BF.E6.8D.A2.E5.91.BD.E4.BB.A4">
		</a>
		<h2>搜索及替换命令</h2>
		<pre>/pattern: 从光标开始处向文件尾搜索pattern<br />?pattern: 从光标开始处向文件首搜索pattern<br />n: 在同一方向重复上一次搜索命令<br />N: 在反方向上重复上一次搜索命令<br />:s/p1/p2/g: 将当前行中所有p1均用p2替代<br />:n1,n2s/p1/p2/g: 将第n1至n2行中所有p1均用p2替代<br />:g/p1/s//p2/g: 将文件中所有p1均用p2替换</pre>
		<a name=".E9.80.89.E9.A1.B9.E8.AE.BE.E7.BD.AE">
		</a>
		<h2>选项设置</h2>
		<p>all: 列出所有选项设置情况
</p>
		<p>term: 设置终端类型
</p>
		<p>ignorance: 在搜索中忽略大小写
</p>
		<p>list: 显示制表位(Ctrl+I)和行尾标志($)
</p>
		<p>number: 显示行号
</p>
		<p>report: 显示由面向行的命令修改过的数目
</p>
		<p>terse: 显示简短的警告信息
</p>
		<p>warn: 在转到别的文件时若没保存当前文件则显示NO write信息
</p>
		<p>nomagic: 允许在搜索模式中，使用前面不带“\”的特殊字符
</p>
		<p>nowrapscan: 禁止vi在搜索到达文件两端时，又从另一端开始
</p>
		<p>mesg: 允许vi显示其他用户用write写到自己终端上的信息</p>
		<a name=".E6.9C.80.E5.90.8E.E8.A1.8C.E6.96.B9.E5.BC.8F.E5.91.BD.E4.BB.A4">
		</a>
		<h2>最后行方式命令</h2>
		<pre>:n1,n2 co n3: 将n1行到n2行之间的内容拷贝到第n3行下<br />:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下<br />:n1,n2 d: 将 n1行到n2行之间的内容删除<br />:w: 保存当前文件<br />:e filename: 打开文件filename进行编辑<br />:x: 保存当前文件并退出<br />:q: 退出vi<br />:q!: 不保存文件并退出vi<br />:!command: 执行shell命令command<br />:n1,n2 w!command: 将文件中n1行至n2行的内容作为command的输入并执行之，<br /> 若不指定n1，n2，则表示将整个文件内容作为command的输入<br />:r!command: 将命令command的输出结果放到当前行</pre>
		<a name=".E5.AF.84.E5.AD.98.E5.99.A8.E6.93.8D.E4.BD.9C">
		</a>
		<h2>寄存器操作</h2>
		<p>"?nyy: 将当前行及其下n行的内容保存到寄存器？中，其中?为一个字母，n为一个数字
</p>
		<p>"?nyw: 将当前行及其下n个字保存到寄存器？中，其中?为一个字母，n为一个数字
</p>
		<p>"?nyl: 将当前行及其下n个字符保存到寄存器？中，其中?为一个字母，n为一个数字
</p>
		<p>"?p: 取出寄存器？中的内容并将其放到光标位置处。这里？可以是一个字母，也可以是一个数字
</p>
		<p>ndd: 将当前行及其下共n行文本删除，并将所删内容放到1号删除寄存器中 <br /></p>
		<p>
				<br />
		</p>
		<h2>在Vi 中移动光标</h2>
		<pre class="example">  k        上<br />h   l    左  右<br />  j        下<br /><br />^        移动到该行第一个非空格的字符处<br />w        向前移动一个单词，将符号或标点当作单词处理<br />W        向前移动一个单词，不把符号或标点当作单词处理<br />b        向后移动一个单词，把符号或标点当作单词处理<br />B        向后移动一个单词，不把符号或标点当作单词处理<br />(        光标移至句首<br />)        光标移至句尾<br />{        光标移至段落开头<br />}        光标移至段落结尾<br />H        光标移至屏幕顶行<br />M        光标移至屏幕中间行<br />L        光标移至屏幕最后行 <br />0        到行首<br />$        到行尾<br />gg       到页首<br />G        到页末<br />行号+G   跳转到指定行<br />n+       光标下移n行<br />n-       光标上移n行 <br />Ctrl+g   查询当前行信息和当前文件信息<br /><br />fx       向右跳到本行字符x处（x可以是任何字符）<br />Fx       向左跳到本行字符x处（x可以是任何字符）<br /><br />tx       和fx相同，区别是跳到字符x前<br />Tx       和Fx相同，区别是跳到字符x后<br /><br />C-b      向上滚动一屏<br />C-f      向下滚动一屏<br />C-u      向上滚动半屏<br />C-d      向下滚动半屏<br />C-y      向上滚动一行<br />C-e      向下滚动一行<br /><br />nz       将第n行滚至屏幕顶部，不指定n时将当前行滚至屏幕顶部。 <br /></pre>
		<h2>进入和退出Vi命令</h2>
		<pre class="example">vi filename               打开或新建文件，并将光标置于第一行首<br />vi +n filename            打开文件，并将光标置于第n行首<br />vi + filename             打开文件，并将光标置于最后一行首<br />vi +/pattern filename     打开文件，并将光标置于第一个与pattern匹配的串处<br />vi -r filename            在上次正用vi编辑时发生系统崩溃，恢复filename<br />vi filename ... filename  打开多个文件，依次进行编辑 <br /><br />ZZ                        退出vi并保存<br />:q!                       退出vi，不保存<br />:wq                       退出vi并保存<br /></pre>
		<h2>重复操作</h2>
		<pre class="example">.        重复上一次操作<br /></pre>
		<h2>自动补齐</h2>
		<pre class="example">C-n      匹配下一个关键字<br />C-p      匹配上一个关键字<br /></pre>
		<h2>插入</h2>
		<pre class="example">o        在光标下方新开一行并将光标置于新行行首，进入插入模式。<br />O        同上，在光标上方。<br /><br />a        在光标之后进入插入模式。<br />A        同上，在光标之前。<br /><br /><br />R        进入替换模式，直到按下Esc<br />set xxx  设置XXX选项。<br /></pre>
		<h2>行合并</h2>
		<pre class="example">J        把下面一行合并到本行后面<br /></pre>
		<h2>Vi中查找及替换命令</h2>
		<pre class="example">/pattern         从光标开始处向文件尾搜索pattern<br />?pattern         从光标开始处向文件首搜索pattern<br />n                在同一方向重复上一次搜索命令<br />N                在反方向上重复上一次搜索命令<br />%                查找配对的括号<br />:s/p1/p2/g       将当前行中所有p1均用p2替代，若要每个替换都向用户询问则应该用gc选项<br />:n1,n2s/p1/p2/g  将第n1至n2行中所有p1均用p2替代<br />:g/p1/s//p2/g    将文件中所有p1均用p2替换<br /><br />.*[]^%~$ 在Vi中具有特殊含义，若需要查找则应该加上转义字符"\"<br /></pre>
		<h3>查找的一些选项</h3>
		<h4>设置高亮</h4>
		<pre class="example">:set hlsearch    设置高亮<br />:set nohlsearch  关闭高亮<br />:nohlsearch      关闭当前已经设置的高亮<br /></pre>
		<h4>增量查找</h4>
		<pre class="example">:set incsearch   设置增量查找<br />:set noincsearch 关闭增量查找<br /></pre>
		<h2>在Vi中删除</h2>
		<pre class="example">x        删除当前光标下的字符<br />dw       删除光标之后的单词剩余部分。<br />d$       删除光标之后的该行剩余部分。<br />dd       删除当前行。<br /><br />c        功能和d相同，区别在于完成删除操作后进入INSERT MODE<br />cc       也是删除当前行，然后进入INSERT MODE<br /><br /></pre>
		<h2>更改字符</h2>
		<pre class="example">rx       将当前光标下的字符更改为x（x为任意字符） <br />~        更改当前光标下的字符的大小写 <br /></pre>
		<h2>键盘宏操作</h2>
		<pre class="example">qcharacter  开始录制宏，character为a到z的任意字符<br />q           终止录制宏<br />@character  调用先前录制的宏<br /><br /></pre>
		<h2>恢复误操作</h2>
		<pre class="example">u        撤销最后执行的命令<br />U        修正之前对该行的操作<br />Ctrl+R   Redo<br /></pre>
		<h2>在Vi中操作Frame</h2>
		<pre class="example">c-w c-n  增加frame<br />c-w c-c  减少frame<br />c-w c-w  切换frame<br />c-w c-r  交换两个frame<br /></pre>
		<h2>VIM中的块操作</h2>
		<p>Vim支持多达26个剪贴板 </p>
		<pre class="example">  选块   先用v，C-v，V选择一块，然后用y复制，再用p粘贴。<br />  yy     复制当前整行<br />  nyy    复制当前行开始的n行内容<br />  ?nyy   将光标当前行及其下n行的内容保存到寄存器?中，其中?为一个字母，n为一个数字<br />  ?nyw   将光标当前行及其下n个词保存到寄存器?中，其中?为一个字母，n为一个数字<br />  ?nyl   将光标当前行及其下n个字符保存到寄存器?中，其中?为一个字母，n为一个数字<br />  ?p     将寄存器?中的内容粘贴到光标位置之后。如果?是用yy复制的完整行，<br />         则粘贴在光标所在行下面。这里?可以是一个字母，也可以是一个数字 <br />  ?P     将寄存器a中的内容粘贴到光标位置之前。如果?是用yy复制的完整行，<br />         则粘贴在光标所在行上面。这里?可以是一个字母，也可以是一个数字 <br />  ay[motion]<br />            ay$    复制光标位置到行末并保存在寄存器a中<br />            ayft   复制光标位置到当前行第一个字母t并保存在寄存器a中<br /></pre>
		<p> 以上指令皆可去掉a工作，则y,p对未命名寄存器工作（所有d,c,x,y的对象都被保存在这里）。</p>
		<h3>剪切/复制/粘贴</h3>
		<p>所有删除的内容自动被保存，可以用p键粘贴 </p>
		<h2>Vi的选项设置</h2>
		<pre class="example">all         列出所有选项设置情况<br />term        设置终端类型<br />ignorance   在搜索中忽略大小写<br />list        显示制表位(Ctrl+I)和行尾标志($)<br />number      显示行号<br />report      显示由面向行的命令修改过的数目<br />terse       显示简短的警告信息<br />warn        在转到别的文件时若没保存当前文件则显示NO write信息<br />nomagic     允许在搜索模式中，使用前面不带“\”的特殊字符<br />nowrapscan  禁止vi在搜索到达文件两端时，又从另一端开始<br />mesg        允许vi显示其他用户用write写到自己终端上的信息 <br /></pre>
		<h2>tips</h2>
		<p>对代码自动格式化 gg=G </p>
<img src ="http://www.cnitblog.com/tjitty/aggbug/41511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2008-03-26 18:21 <a href="http://www.cnitblog.com/tjitty/archive/2008/03/26/41511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>测试WEB程序要点积累</title><link>http://www.cnitblog.com/tjitty/archive/2008/03/20/41261.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Thu, 20 Mar 2008 09:22:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2008/03/20/41261.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/41261.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2008/03/20/41261.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/41261.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/41261.html</trackback:ping><description><![CDATA[
		<p>一、功能测试 </p>
		<p>　　1、链接测试 </p>
		<p>　　链接是Web应用系统的一个主要特征，它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先，测试所有链接是否按指示的那样确实链接到了该链接的页面；其次，测试所链接的页面是否存在；最后，保证Web应用系统上没有孤立的页面，所谓孤立页面是指没有链接指向该页面，只有知道正确的URL地址才能访问。 </p>
		<p>　　2、表单测试 </p>
		<p>　　当用户给Web应用系统管理员提交信息时，就需要使用表单操作，例如用户注册、登陆、信息提交等。在这种情况下，我们必须测试提交操作的完整性，以校验提交给服务器的信息的正确性。例如：用户填写的出生日期与职业是否恰当，填写的所属省份与所在城市是否匹配等。如果使用了默认值，还要检验默认值的正确性。如果表单只能接受指定的某些值，则也要进行测试。例如：只能接受某些字符，测试时可以跳过这些字符，看系统是否会报错。 </p>
		<p>　　3、Cookies测试 </p>
		<p>　　Cookies通常用来存储用户信息和用户在某应用系统的操作，当一个用户使用Cookies访问了某一个应用系统时，Web服务器将发送关于用户的信息，把该信息以Cookies的形式存储在客户端计算机上，这可用来创建动态和自定义页面或者存储登陆等信息。 </p>
		<p>　　如果Web应用系统使用了Cookies，就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用，是否按预定的时间进行保存，刷新对Cookies有什么影响等。 </p>
		<p>　　Session测试，Session的功能与Cookies有些类似，测试工作大体相同 </p>
		<p>　　4、设计语言测试 </p>
		<p>　　Web设计语言版本的差异可以引起客户端或服务器端严重的问题，例如使用哪种版本的HTML等。当在分布式环境中开发时，开发人员都不在一起，这个问题就显得尤为重要。除了HTML的版本问题外，不同的脚本语言，例如JavaScript、VBScript或Perl等也要进行验证。 </p>
		<p>　　5、数据库测试 </p>
		<p>　　在Web应用技术中，数据库起着重要的作用，数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中，最常用的数据库类型是关系型数据库，可以使用SQL对信息进行处理。 </p>
		<p>　　在使用了数据库的Web应用系统中，一般情况下，可能发生两种错误，分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的，而输出错误主要是由于网络速度或程序设计问题等引起的，针对这两种情况，可分别进行测试。 </p>
		<p>　　二、性能测试 </p>
		<p>　　1、连接速度测试 </p>
		<p>　　用户连接到Web应用系统的速度根据上网方式的变化而变化，他们或许是电话拨号，或是宽带上网。当下载一个程序时，用户可以等较长的时间，但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长（例如超过5秒钟），用户就会因没有耐心等待而离开。 </p>
		<p>　　另外，有些页面有超时的限制，如果响应速度太慢，用户可能还没来得及浏览内容，就需要重新登陆了。而且，连接速度太慢，还可能引起数据丢失，使用户得不到真实的页面。 </p>
		<p>　　2、负载测试 </p>
		<p>　　负载测试是为了测量Web系统在某一负载级别上的性能，以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量，也可以是在线数据处理的数量。例如：Web应用系统能允许多少个用户同时在线？如果超过了这个数量，会出现什么现象？Web应用系统能否处理大量用户对同一个页面的请求？ </p>
		<p>　　3、压力测试 </p>
		<p>　　负载测试应该安排在Web系统发布以后，在实际的网络环境中进行测试。因为一个企业内部员工，特别是项目组人员总是有限的，而一个Web系统能同时处理的请求数量将远远超出这个限度，所以，只有放在Internet上，接受负载测试，其结果才是正确可信的。 </p>
		<p>　　进行压力测试是指实际破坏一个Web应用系统，测试系统的反映。压力测试是测试系统的限制和故障恢复能力，也就是测试Web应用系统会不会崩溃，在什么情况下会崩溃。黑客常常提供错误的数据负载，直到Web应用系统崩溃，接着当系统重新启动时获得存取权。 </p>
		<p>　　压力测试的区域包括表单、登陆和其他信息传输页面等。 </p>
		<p>　　三、可用性测试 </p>
		<p>　　1、导航测试 </p>
		<p>　　导航描述了用户在一个页面内操作的方式，在不同的用户接口控制之间，例如按钮、对话框、列表和窗口等；或在不同的连接页面之间。通过考虑下列问题，可以决定一个Web应用系统是否易于导航：导航是否直观？Web系统的主要部分是否可通过主页存取？Web系统是否需要站点地图、搜索引擎或其他的导航帮助？ </p>
		<p>　 导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容，内容在什么地方。 </p>
		<p>　　Web应用系统的层次一旦决定，就要着手测试用户导航功能，让最终用户参与这种测试，效果将更加明显。 </p>
		<p>　　2、图形测试 </p>
		<p>　　在Web应用系统中，适当的图片和动画既能起到广告宣传的作用，又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有： </p>
		<p>　　（1）要确保图形有明确的用途，图片或动画不要胡乱地堆在一起，以免浪费传输时间。Web应用系统的图片尺寸要尽量地小，并且要能清楚地说明某件事情，一般都链接到某个具体的页面。 </p>
		<p>　　（2）验证所有页面字体的风格是否一致。 </p>
		<p>　　（3）背景颜色应该与字体颜色和前景颜色相搭配。 </p>
		<p>　　（4）图片的大小和质量也是一个很重要的因素，一般采用JPG或GIF压缩；所以应尽量避免使用bmp等格式的图片 </p>
		<p>　　3、内容测试 </p>
		<p>　　内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。 </p>
		<p>　　信息的正确性是指信息是可靠的还是误传的。 </p>
		<p>　　4、整体界面测试 </p>
		<p>　　整体界面是指整个Web应用系统的页面结构设计，是给用户的一个整体感。例如：当用户浏览Web应用系统时是否感到舒适，是否凭直觉就知道要找的信息在什么地方？整个Web应用系统的设计风格是否一致？当然，对界面的整体测试并不能单靠个人直觉来评定；每个人的审美观、专业角度、系统面向的行业及用户 、甚至性别与年龄等等，都是可能导致对界面作出不同评价的因素。所以要明白在对整体界面的测试过程中，其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式，来得到最终用户的反馈信息。 </p>
		<p>　　对所有的可用性测试来说，都需要有外部人员（与Web应用系统开发没有联系或联系很少的人员）的参与，最好是最终用户的参与。 </p>
		<p>　　四、客户端兼容性测试 </p>
		<p>　　1、平台测试 </p>
		<p>　　市场上有很多不同的操作系统类型，最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统，取决于用户系统的配置。这样，就可能会发生兼容性问题，同一个应用可能在某些操作系统下能正常运行，但在另外的操作系统下可能会运行失败。 </p>
		<p>　　因此，在Web系统发布之前，需要在各种操作系统下对Web系统进行兼容性测试。 </p>
		<p>　　2、浏览器测试 </p>
		<p>　　浏览器是Web客户端最核心的构件，来自不同厂商的浏览器对Java，、JavaScript、ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如，ActiveX是Microsoft的产品，是为Internet Explorer而设计的，JavaScript是Netscape的产品，Java是Sun的产品等等。另外，框架和层次结构风格在不同的浏览器中也有不同的显示，甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。 </p>
		<p>　　测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中，测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。 </p>
		<p>　　五、安全性测试 </p>
		<p>　　Web应用系统的安全性测试区域主要有： </p>
		<p>　　（1）现在的Web应用系统基本采用先注册，后登陆的方式。因此，必须测试有效和无效的用户名和密码，要注意到是否大小写敏感，可以试多少次的限制，是否可以不登陆而直接浏览某个页面等。 </p>
		<p>　　（2）Web应用系统是否有超时的限制，也就是说，用户登陆后在一定时间内（例如15分钟）没有点击任何页面，是否需要重新登陆才能正常使用。 </p>
		<p>　　（3）为了保证Web应用系统的安全性，日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。 </p>
		<p>　　（4）当使用了安全套接字时，还要测试加密是否正确，检查信息的完整性。 </p>
		<p>　　（5）服务器端的脚本常常构成安全漏洞，这些漏洞又常常被黑客利用。所以，还要测试没有经过授权，就不能在服务器端放置和编辑脚本的问题。 </p>
		<p>六、总结 </p>
		<p>　　本文从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于Web的系统测试方法。 </p>
		<p>基于Web的系统测试与传统的软件测试既有相同之处，也有不同的地方，对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行，而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是，还要从最终用户的角度进行安全性和可用性测试。</p>
		<p>Trackback: <a href="http://tb.blog.csdn.net/TrackBack.aspx?PostId=1716714">http://tb.blog.csdn.net/TrackBack.aspx?PostId=1716714</a></p>
<img src ="http://www.cnitblog.com/tjitty/aggbug/41261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2008-03-20 17:22 <a href="http://www.cnitblog.com/tjitty/archive/2008/03/20/41261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从微软的今天看软件测试的明天</title><link>http://www.cnitblog.com/tjitty/archive/2008/03/19/41159.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Wed, 19 Mar 2008 06:37:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2008/03/19/41159.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/41159.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2008/03/19/41159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/41159.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/41159.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 15.05pt; TEXT-ALIGN: center; mso-pagination: widow-orphan" align="center">
				<b>
						<span style="FONT-SIZE: 12pt; COLOR: #990000; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">从微软的今天看软件测试的明天</span>
				</b>
				<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #990000; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p style="TEXT-INDENT: 21pt; LINE-HEIGHT: 15.05pt">
				<span style="FONT-SIZE: 10pt; COLOR: black">
						<font face="宋体">陈天的办公室并不小，但却因堆 满了机器而显得狭仄不堪。他解释说，因为微软亚洲工程院（<span lang="EN-US">ATC</span>）部门准备扩充，而<span lang="EN-US">“</span>新的几个实验室还在装修中<span lang="EN-US">”</span>，所以就形成了现在的这个局面<span lang="EN-US">——</span>几十台<span lang="EN-US">Dell</span>主机和一箱箱显示器堆放在眼前的办公空间里。当听说微软亚洲工程院的测试工程师人均拥有四五台计算机、且正在搭建的测试实验室将拥有上千台机器时，我跟陈天开玩笑说，看来你是微软亚洲工程院最大固定资产的拥有者，陈天微笑着对这一判断表示认同。<span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 15.05pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black">    “</span>
						<span style="FONT-SIZE: 10pt; COLOR: black">人机比例<span lang="EN-US">”</span>如此悬殊，并不是说微软亚洲工程院的测试工程师都是多臂超人<span lang="EN-US">——</span>事实上，这是由微软独特的测试文化所决定的。陈天表示，<span lang="EN-US">“</span>微软的软件测试<span lang="EN-US">80%</span>－<span lang="EN-US">90%</span>都是自动化的。所谓自动化，就是由测试工程师写出测试程序来运行测试案例，而并非人们所想象的人工点、点、点的那种测试方式。<span lang="EN-US">”<o:p></o:p></span></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 15.05pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black">    </span>
						<span style="FONT-SIZE: 10pt; COLOR: black">在拜访微软亚洲工程院之前，提到微软的测试，我会想到比尔盖茨说的一句话：<span lang="EN-US">“</span>很多人都认为微软是一家软件开发公司，而事实上，我们是一家软件测试公司<span lang="EN-US">”</span>。这种说法也让我们对微软亚洲工程院的测试团队充满了好奇。<span lang="EN-US"><o:p></o:p></span></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 15.05pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black">    </span>
						<span style="FONT-SIZE: 10pt; COLOR: black">微软亚洲工程院创立之初，仅有两位从微软亚洲研究院转过来的测试人员，而且这两个人还不属于任何一个组，只是在项目组有测试需求的时候临时帮一下忙。对于一支完整的产品开发体系，软件测试团队是极其重要的组成部分。因此，院长张宏江对此高度重视<span lang="EN-US">——</span>于是，从微软总部找来了在微软从事测试五年的陈天和周庆晖担当起了搭建微软亚洲工程院软件测试团队的重任。<span lang="EN-US"><o:p></o:p></span></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 15.05pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black">    </span>
						<span style="FONT-SIZE: 10pt; COLOR: black">招募到合适的测试人员是工作的第一步，由于国内对软件测试工作的重视不够，有经验的人员因而少得可怜，培养刚毕业的学生便成为了优先的选择，不过，<span lang="EN-US">“</span>我们的学生由于勤奋好学成长得很快<span lang="EN-US">”</span>。到现在，微软亚洲工程院已拥有一百多名测试工程师，其中有一些人已经成长为技术骨干和<span lang="EN-US">Leader</span>。<span lang="EN-US"><o:p></o:p></span></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 15.05pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black">    </span>
						<span style="FONT-SIZE: 10pt; COLOR: black">在微软的测试体系中，主要的测试人员分为两种，一种是<span lang="EN-US">SDET</span>（<span lang="EN-US">Software Design Engineer Tester</span>），一种是<span lang="EN-US">STE</span>（<span lang="EN-US">Software Test Engineer</span>）。对<span lang="EN-US">SDET</span>编程能力的要求和对开发人员的要求基本上是一样的。他们都须有扎实的计算机基础知识和编程能力。区别可能在于开发人员对算法更加精通，或某一方面的技术钻研的更深入一些。而微软亚洲工程院要求<span lang="EN-US">SDET</span>的技术面很宽，要能使用很多种技术，比如可以用<span lang="EN-US">C</span>、<span lang="EN-US">C#</span>、脚本等来写程序。陈天说：<span lang="EN-US">“</span>我喜欢在面试的时候看他们直接在电脑上编程。如果一个人经常写程序，他调试程序的表现会与编程不熟练的人有很大的不同。<span lang="EN-US">” <o:p></o:p></span></span>
				</font>
		</p>
		<p style="LINE-HEIGHT: 15.05pt">
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black">
						<font face="宋体">    </font>
				</span>
				<span style="FONT-SIZE: 10pt; COLOR: black">
						<font face="宋体">因为<span lang="EN-US">SDET</span>懂开发，有扎实的编程能力，所以他能够做一些其他普通测试人员做不了的工作，比如可以将源代码打开做代码的静态分析，还可以做测试用例的代码覆盖率调查。所谓的代码覆盖率调查，是指考察测试用例能否将所有的源代码都调用到，是一种对测试质量的初步评估标准。</font>
						<span lang="EN-US">
								<br />
								<br />
								<font face="宋体">    </font>
						</span>
						<font face="宋体">更高深的一些测试方法还包括错误注射（<span lang="EN-US">Fault Injection</span>），也就是将错误注射到源程序中。因为很多错误很不容易在某种机器环境中出现，比如一个用户的机器内存特别少的时候，微软要求程序仍然不能丢失数据和发生安全漏洞，但测试人员不能把测试机器的内存拆下来，也不能非常精确的把内存消耗到期望的数值，这时他们会通过注射一段代码来模拟内存的分配。要做到这点，需要掌握编程及熟悉操作系统的内存分配算法。由于<span lang="EN-US">SDET</span>的存在，微软可以更加有效地对软件进行测试。</font>
						<span lang="EN-US">
								<br />
								<br />
								<font face="宋体">    </font>
						</span>
						<font face="宋体">当然，<span lang="EN-US">STE</span>的角色也很重要。这些人必须非常聪明，解决问题的能力特别强；有钻研精神，绝不放弃；很细心，而且很有创造力。陈天说：<span lang="EN-US">“</span>好的<span lang="EN-US">STE</span>不是只按照规定好的测试用例来执行，而是可以想到很多一般用户想不到的地方，他可以用非常规的思路来寻找软件的<span lang="EN-US">bug</span>。而且他会懂很多各种各样的软件。事实上，很多<span lang="EN-US">bug</span>不是在程序本身找到的，而是在其与其它程序交互时找到的。<span lang="EN-US">”</span>不过，就测试工作而言，微软未来的趋向是，纯粹的<span lang="EN-US">STE</span>将越来越少，而且微软会要求<span lang="EN-US">STE“</span>也要学会用程序工具去进行测试<span lang="EN-US">”</span>。</font>
						<span lang="EN-US">
								<br />
								<br />
								<font face="宋体">    </font>
						</span>
						<font face="宋体">普通的测试工程师若想臻至<span lang="EN-US">“</span>优秀<span lang="EN-US">”</span>，需要经历很长的阶段。除了要学习很多测试方面的技巧外，还需对测试全局有着全面的了解和充分的掌控<span lang="EN-US">——</span>这同样是实现个人成长的重要前提。<span lang="EN-US">“</span>测试人员一开始学到的信息都是分块的，比如开始会写测试用例，后来知道了要做代码覆盖率，而后可以学到更深的知识，但最终是要把这些知识都融会贯通起来，大家都需要经历这样一个过程，这是很难避免的。<span lang="EN-US">”</span>陈天说，<span lang="EN-US">“</span>因此，我要求大家不要只看自己做的部分，而要看其他人做的事情，要看产品开发到哪个阶段，就像玩拼图一样<span lang="EN-US">, </span>只有对整个软件开发流程了解，这个时候你才知道每块拼图应该在哪里。<span lang="EN-US">” </span>为了让测试工程师更快速地成长，微软亚洲工程院经常让大家转换角色，轮流负责不同的任务，或者将一个大的部分拆分为几个小块，每个人负责其中一个小块的全部测试内容。</font>
						<span lang="EN-US">
								<br />
								<br />
								<font face="宋体">    </font>
						</span>
						<font face="宋体">对于微软亚洲工程院的测试工程师新手来说，工作既充满挑战又非常充实。不过，首先要改变的是<span lang="EN-US">“</span>心态<span lang="EN-US">”</span>。一方面，不能仅仅满足于完成自己的工作。陈天表示，<span lang="EN-US">“</span>如果让一个新人进行浏览器的测试，他可以写很多测试用例，比如测试各种按钮是否可用等等；但对于软件来说，是不是只要经过了这些测试，就立刻可以上市销售了？不能仅仅满足于找到<span lang="EN-US">BUG, </span>要真正做到质量保证<span lang="EN-US">. </span>时常问自己<span lang="EN-US">,</span>是不是这样的质量软件明天就能上市<span lang="EN-US">?</span>很多新来的员工没有这样的意识，也就是对整个产品质量负责的意识。我经常给我们的工程师讲，尽管微软有几万名工程师，但测试某一个功能点的人就你一个，如果漏过了任何一个<span lang="EN-US">bug</span>，等到上市之后，受到影响的可能是数以千万计的微软用户。所以我们要求责任感对一个测试工程师甚至比他的测试技能更加重要。</font>
						<font face="宋体">
								<span lang="EN-US">” <br /><br />    </span>当然，对于新人来说，有一套学习的途径可以让他们实现快速地成长<span lang="EN-US">——</span>除了陈天等资深测试经理和<span lang="EN-US">Test Lead</span>的指导外，微软内部还积累了一整套测试流程、工具和模板。首先，测试工程师要对负责的产品非常了解，要看<span lang="EN-US">PM</span>和开发人员的文档，然后根据模板进行工作，而<span lang="EN-US">Test Lead</span>也会审查他们的工作。<span lang="EN-US">“</span>每个产品的测试都包含了基本的测试，如功能测试、压力测试、代码覆盖率校验、插入测试、与其他产品交互的测试，还有全球化和本地化测试。<span lang="EN-US">”</span>在测试用例上，几乎永远是越多越全面越好。在陈天测试<span lang="EN-US">Windows XP</span>操作系统某项目时，仅对几个<span lang="EN-US">Dll</span>文件的测试就写了两千多个测试用例。陈天说：<span lang="EN-US">“</span>微软的测试工具基本上都是自己开发的，虽然商业性比较差，但对产品的针对性很强。除了常用的十种左右的测试工具外，往往需要测试人员针对项目开发很多测试工具。</font>
						<font face="宋体">
								<span lang="EN-US">”<br /><br />    </span>谈及未来的发展，陈天对自己的测试团队充满了信心。从院长张宏江到技术总监林斌，微软亚洲工程院阖院上下都对测试工作非常重视。陈天希望将他的团队变成<span lang="EN-US">“</span>微软最好的测试组之一<span lang="EN-US">”</span>。他说：<span lang="EN-US">“</span>虽然目前还不是<span lang="EN-US">,</span>但对此我非常有信心<span lang="EN-US">,</span>我们的员工技术水平还可以提高，我们的测试流程还可以更适合开发的需求，员工们的测试理念也还应不断增强<span lang="EN-US">, </span>最后<span lang="EN-US">,</span>，我们也正在形成自己的测试文化并用次来推动<span lang="EN-US">ATC</span>的进一步高速发展。<span lang="EN-US">”<o:p></o:p></span></font>
				</span>
		</p>
<img src ="http://www.cnitblog.com/tjitty/aggbug/41159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2008-03-19 14:37 <a href="http://www.cnitblog.com/tjitty/archive/2008/03/19/41159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决testdirector8.0不支持MSIE7.0的问题</title><link>http://www.cnitblog.com/tjitty/archive/2008/03/19/41148.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Wed, 19 Mar 2008 03:22:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2008/03/19/41148.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/41148.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2008/03/19/41148.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/41148.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/41148.html</trackback:ping><description><![CDATA[作者/<a href="http://itcat.it.com.cn/">itcat</a>　时间/2007-5-21 10:44:00　<br /><br />一、前言<br />　　由于小顾同事使用了ＩＥ7.0访问测试机上的testdirector，提示“Microsoft Internet Explorer : 4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; .NET CLR.3.0.04131.06) is not supported”，因为小顾使用的是ＩＥ７.0，而我们使用ＩＥ6.0或者其它浏览器的访问正常，估计原因是ＴＤ不支持ＩＥ7.0。<br /><br />二、解决办法<br />　　小顾帮忙在网上找了一个解决方案，就是修改testdirector的Start_a.htm的源代码，增加对IE7.0版本的判断，随后我就远程登录到测试机，找到C:\Inetpub\TDBIN下的Start_a.htm文件，备份原来的文件，并在小顾的指导下，修改源代码，保存文件。<br />　　操作步骤<br />　　１、在testdirecotr安装的机器中，打开C:\Inetpub\TDBIN目录，查看Start_a.htm文件的代码。<br />　　２、在代码中查找“ua.lastIndexOf('MSIE 6.0') != -1”，复制代码“|| (ua.lastIndexOf('MSIE 6.0') != -1)”，并粘贴在“|| (ua.lastIndexOf('MSIE 6.0') != -1) ”后面，把“MSIE 6.0”修改成‘'MSIE 7.0'’，保存文件就ＯＫ了。 <img src ="http://www.cnitblog.com/tjitty/aggbug/41148.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2008-03-19 11:22 <a href="http://www.cnitblog.com/tjitty/archive/2008/03/19/41148.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP 状态代码</title><link>http://www.cnitblog.com/tjitty/archive/2008/03/18/41100.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Tue, 18 Mar 2008 07:21:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2008/03/18/41100.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/41100.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2008/03/18/41100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/41100.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/41100.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 代码																																																																																																																		描述																																																代码...&nbsp;&nbsp;<a href='http://www.cnitblog.com/tjitty/archive/2008/03/18/41100.html'>阅读全文</a><img src ="http://www.cnitblog.com/tjitty/aggbug/41100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2008-03-18 15:21 <a href="http://www.cnitblog.com/tjitty/archive/2008/03/18/41100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EXCEL VBA中调用C++ DLL中的函数</title><link>http://www.cnitblog.com/tjitty/archive/2007/04/27/26287.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Fri, 27 Apr 2007 08:37:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2007/04/27/26287.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/26287.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2007/04/27/26287.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/26287.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/26287.html</trackback:ping><description><![CDATA[
		<p>1.关于EXCEL的运行目录</p>
		<p>EXCEL 打开一个XLS或XLA文件时，其缺省的运行目录是 C:\Program Files\Microsoft Office\Office10,因此加载DLL的时候会报找不到DLL文件，需要将相关的DLL（注意DLL可能会调用其他的非操作系统DLL）全部拷贝到 SYSTEM32或者设置运行环境变量中的PATH，把放DLL的目录加入PATH。</p>
		<p>2.关于DLL中的函数名及调用格式</p>
		<p>为了VBA能够调用C++写的DLL，在定义DLL函数时一定要加上__stdcall.及 EXTERN "C"</p>
		<p>如：</p>
		<p>extern "C" __declspec( dllexport ) int  __stdcall ExcelInterface_GetQueryData(int row, int column, LPTSTR retStr);</p>
		<p>函数体为：</p>
		<p>int __stdcall ExcelInterface_GetQueryData(int row, int column, LPTSTR retStr)<br />编译完成后用 Dependecy walker一类的工具看DLL输出的函数名可能会有变化，比如：</p>
		<p>_ExcelInterface_GetQueryData@12</p>
		<p>在VBA中定义的时候这样写：</p>
		<p>Declare Function ExcelInterface_GetQueryData Lib "MOinterface" Alias "_ExcelInterface_GetQueryData@12" (ByVal row As Long, ByVal col As Long, ByVal retStr As String) As Long</p>
		<p>3.关于函数中传回的字符串</p>
		<p>DLL函数中如需返回字符串比较有讲究，</p>
		<p>首先要在参数中回传字符串（C函数直接返回字符串好像不行）。</p>
		<p>另外说明参数时一定要用ByVal不能用ByRef ,因为VBA的字符串传递的时候用的是指针。在传递以前，要给字符串分配足够的空间，在C函数中用strcpy copy进去。另外传入的参数不能用局部变量一定要用全局量（这个绕了我半天，不知道原因）。例子：</p>
		<p>注意变量bb的定义，是全局的。</p>
		<p>Dim bb As String</p>
		<p>Sub abc()<br />Dim aa<br />Dim cc As String</p>
		<p>Call ExcelInterface_Initialize<br />aa = ExcelInterface_ConnectDB()<br />aa = ExcelInterface_QueryData("select * from abc")<br />bb = String(256, vbNullChar)<br />aa = ExcelInterface_GetQueryData(0, 0, bb)<br />cc = Left(bb, _<br />         InStr(1, bb, vbNullChar) - 1)</p>
		<p>aa = ExcelInterface_GetQueryDataRowCount()<br />Call ExcelInterface_CloseDB<br /> <br />End Sub</p>
		<p>
				<br />参考<a href="http://www.microsoft.com/china/msdn/Archives/voices/office03082001.asp">http://www.microsoft.com/china/msdn/Archives/voices/office03082001.asp</a></p>
<img src ="http://www.cnitblog.com/tjitty/aggbug/26287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2007-04-27 16:37 <a href="http://www.cnitblog.com/tjitty/archive/2007/04/27/26287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>性能测试（并发负载压力）测试分析</title><link>http://www.cnitblog.com/tjitty/archive/2007/02/06/22739.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Tue, 06 Feb 2007 07:43:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2007/02/06/22739.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/22739.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2007/02/06/22739.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/22739.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/22739.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.cnitblog.com/tjitty/archive/2007/02/06/22739.html'>阅读全文</a><img src ="http://www.cnitblog.com/tjitty/aggbug/22739.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2007-02-06 15:43 <a href="http://www.cnitblog.com/tjitty/archive/2007/02/06/22739.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tcl单元测试环境搭建指南</title><link>http://www.cnitblog.com/tjitty/archive/2007/01/31/22479.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Wed, 31 Jan 2007 08:24:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2007/01/31/22479.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/22479.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2007/01/31/22479.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/22479.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/22479.html</trackback:ping><description><![CDATA[
		<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
				<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?>
				<v:shapetype id="_x0000_t75" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe"> <v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype>
		</span>
		<br />
		<b>第一步 : </b>
		<br />获取 tcl8.3 的安装包，安装到 c:\ 目录下，注意：在安装的过程中需要选择头文件和库文件。 <br />  <br /><b>第二步 : </b><br />利用 Visual C++ 建立一个基于对话框的工程，工程的名字为 utsample <br /><v:shapetype id="_x0000_t75" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke join=""></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:shapetype><v:shapetype id="_x0000_t75" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe"> <v:stroke join=""></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:shapetype><v:shape id="_x0000_i1025"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image001.png" o:title=""><br /><b>第一步:</b><br />获取tcl8.3的安装包，安装到c:\目录下，注意：在安装的过程中需要选择头文件和库文件。 <br />  <br /><b>第二步:</b><br />利用Visual C++建立一个基于对话框的工程，工程的名字为utsample <br /><v:shapetype id="_x0000_t75" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe"><v:stroke join=""></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></v:path></v:shapetype><v:shape id="_x0000_i1025"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image001.png" o:title=""></v:imagedata></v:shape><br />  <br /><v:shape id="_x0000_i1026"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image003.png" o:title=""></v:imagedata></v:shape><br />  <br /><b>第三步：</b><br />参照下图，创建utsample.h文件. <br /><v:shape id="_x0000_i1027"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image005.png" o:title=""></v:imagedata></v:shape><br />  <br />  <br /><b>第四步：</b><br />1）把下面的代码拷贝到utsample.h中 <br />#include "tcl.h" <br />  <br />#define RET_ERR false <br />#define RET_OK  true <br />#define MAX_WORD_LEN 32 <br />  <br />int GetWordFromStr(char *pStr,char *pDestStr,int iPos); <br />int Tcl_EXGetWord(ClientData clientData,                <br />          Tcl_Interp * interp, <br />          int argc,   char* argv[]); <br />  <br />int  Tcl_AppInit(Tcl_Interp *interp); <br />  <br />2）把下面代码拷贝到utsample.cpp中 <br />#include "stdafx.h" <br />#include "utsample.h" <br />#include "memory.h" <br />  <br />  <br />int main(int argc, char* argv[]) <br />{ <br />    Tcl_Main(argc, argv,Tcl_AppInit); <br />    return 0; <br />} <br />  <br />/*GetWordFromStr函数的扩展指令函数*/ <br />int Tcl_EXGetWord(ClientData clientData,                <br />          Tcl_Interp * interp, <br />          int argc,   char* argv[]) <br />{ <br />    int iPos; <br />    bool rCode; <br />    <br />    char pDestStr[32]; <br />    memset(pDestStr,0,32); <br />  <br />    if(3 != argc) <br />    { <br />        printf("the paras number is wrong\n"); <br />        return TCL_OK; <br />    } <br />  <br />    if (TCL_OK != Tcl_GetInt(interp,argv[2],&amp;iPos)) <br />    { <br />        printf("the para 2 is wrong\n"); <br />        return TCL_OK; <br />    } <br />  <br />    rCode = GetWordFromStr(argv[1],pDestStr,iPos); <br />  <br />    if(rCode == RET_OK) <br />    { <br />        printf("The Destine string is %s\n",pDestStr); <br />    } <br />    else <br />    { <br />        printf("It's fail to get the string!\n"); <br />    } <br />  <br />    return TCL_OK; <br />} <br />  <br />/*tcl解释器和扩展指令的初始化函数*/ <br />int Tcl_AppInit(Tcl_Interp *interp) <br />{  <br />    /*创建interp解释器可以识别的扩展指令，指令的名字是GetWord，执行该指令，直接调用Tcl_EXGetWord扩展指令函数，通过传递参数，可以执行单元测试用例*/ <br />    Tcl_CreateCommand(interp, "GetWord", <br />           Tcl_EXGetWord, (ClientData)NULL, <br />           (Tcl_CmdDeleteProc *)NULL); <br />    return TCL_OK; <br />} <br />  <br />3）把被测试函数GetWordFromStr的函数体拷贝到utsample.cpp中 <br />  <br /><b>第五步：</b><br />添加tcl头文件和库文件，并设置相应的头文件和库文件路径 <br />1）如下图所示，采用如下方法添加tcl83包中的tcl.h和tcl83.lib <br /><v:shape id="_x0000_i1028"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image007.png" o:title=""></v:imagedata></v:shape><br />  <br />2）在[tool…]-&gt;[Option…]-&gt;[Directory….]菜单中，设置tcl83包的头文件路径： <br /><v:shape id="_x0000_i1029"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image009.png" o:title=""></v:imagedata></v:shape><br />  <br />3）在[tool…]-&gt;[Option…]-&gt;[Directory….]菜单中，设置tcl83包的库文件路径： <br /><v:shape id="_x0000_i1030"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image011.png" o:title=""></v:imagedata></v:shape><br />  <br /><b>第六步：</b><br />编译通过后，运行，出现控制台程序，输入GetWord “wo ai zhong guo” 3 <br />则出现如下的结果界面 <br /><v:shape id="_x0000_i1031"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image013.png" o:title=""></v:imagedata></v:shape><br />  <br />备注： <br />在嵌入式系统，如果不希望使用上述控制台程序的方式，可以自己构造tcl解释器，然后初始化解释器，然后利用解释器创建扩展指令，并且用自己创建的解释器运行tcl脚本。相关的代码见下面： <br />  <br />/*定义tcl解释器*/ <br />Tcl_Interp* MyInterp; <br />/*调用tcl的内部函数，创建解释器*/ <br />MyInterp = Tcl_CreateInterp(); <br />/*调用tcl的内部函数，初始化tcl解释器*/ <br />Tcl_Init(MyInterp); <br />  <br />//通过那嵌入集成测试框架的Tcl解释器MyInterp，运行tcl脚本E:/test.tcl <br />rCode = Tcl_EvalFile(MyInterp,"E:/test.tcl" ); <br />if  (TCL_OK != rCode ) <br />{ <br />    AfxMessageBox("There are errors in your Tcl File"); <br />} <br />  <br />创建扩展指令的方式参见本文前面的描述 <br /></v:imagedata></v:shape><br />  <br /><v:shape id="_x0000_i1026"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image003.png" o:title=""></v:imagedata></v:shape><br />  <br /><b>第三步： </b><br />参照下图，创建 utsample.h 文件 . <br /><v:shape id="_x0000_i1027"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image005.png" o:title=""></v:imagedata></v:shape><br />  <br />  <br /><b>第四步： </b><br />1 ）把下面的代码拷贝到 utsample.h 中 <br />#include "tcl.h" <br />  <br />#define RET_ERR false <br />#define RET_OK  true <br />#define MAX_WORD_LEN 32 <br />  <br />int GetWordFromStr(char *pStr,char *pDestStr,int iPos); <br />int Tcl_EXGetWord(ClientData clientData,                <br />          Tcl_Interp * interp, <br />          int argc,   char* argv[]); <br />  <br />int  Tcl_AppInit(Tcl_Interp *interp); <br />  <br />2 ）把下面代码拷贝到 utsample.cpp 中 <br />#include "stdafx.h" <br />#include "utsample.h" <br />#include "memory.h" <br />  <br />  <br />int main(int argc, char* argv[]) <br />{ <br />    Tcl_Main(argc, argv,Tcl_AppInit); <br />    return 0; <br />} <br />  <br />/*GetWordFromStr 函数的扩展指令函数 */ <br />int Tcl_EXGetWord(ClientData clientData,                <br />          Tcl_Interp * interp, <br />          int argc,   char* argv[]) <br />{ <br />    int iPos; <br />    bool rCode; <br />    <br />    char pDestStr[32]; <br />    memset(pDestStr,0,32); <br />  <br />    if(3 != argc) <br />    { <br />        printf("the paras number is wrong\n"); <br />        return TCL_OK; <br />    } <br />  <br />    if (TCL_OK != Tcl_GetInt(interp,argv[2],&amp;iPos)) <br />    { <br />        printf("the para 2 is wrong\n"); <br />        return TCL_OK; <br />    } <br />  <br />    rCode = GetWordFromStr(argv[1],pDestStr,iPos); <br />  <br />    if(rCode == RET_OK) <br />    { <br />        printf("The Destine string is %s\n",pDestStr); <br />    } <br />    else <br />    { <br />        printf("It's fail to get the string!\n"); <br />    } <br />  <br />    return TCL_OK; <br />} <br />  <br />/*tcl 解释器和扩展指令的初始化函数 */ <br />int Tcl_AppInit(Tcl_Interp *interp) <br />{  <br />    /* 创建 interp 解释器可以识别的扩展指令，指令的名字是 GetWord ，执行该指令，直接调用 Tcl_EXGetWord 扩展指令函数，通过传递参数，可以执行单元测试用例 */ <br />    Tcl_CreateCommand(interp, "GetWord", <br />           Tcl_EXGetWord,(ClientData)NULL, <br />           (Tcl_CmdDeleteProc *)NULL); <br />    return TCL_OK; <br />} <br />  <br />3 ）把被测试函数 GetWordFromStr 的函数体拷贝到 utsample.cpp 中 <br />  <br /><b>第五步： </b><br />添加 tcl 头文件和库文件，并设置相应的头文件和库文件路径 <br />1 ）如下图所示，采用如下方法添加 tcl83 包中的 tcl.h 和 tcl83.lib <br /><v:shape id="_x0000_i1028"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image007.png" o:title=""></v:imagedata></v:shape><br />  <br />2 ）在 [tool…]-&gt;[Option…]-&gt;[Directory….] 菜单中，设置 tcl83 包的头文件路径： <br /><v:shape id="_x0000_i1029"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image009.png" o:title=""></v:imagedata></v:shape><br />  <br />3 ）在 [tool…]-&gt;[Option…]-&gt;[Directory….] 菜单中，设置 tcl83 包的库文件路径： <br /><v:shape id="_x0000_i1030"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image011.png" o:title=""></v:imagedata></v:shape><br />  <br /><b>第六步： </b><br />编译通过后，运行，出现控制台程序，输入 GetWord “wo ai zhong guo” 3 <br />则出现如下的结果界面 <br /><v:shape id="_x0000_i1031"><v:imagedata src="file:///C:\DOCUME~1\TY\LOCALS~1\Temp\msohtml1\01\clip_image013.png" o:title=""></v:imagedata></v:shape><br />  <br />备注： <br />在嵌入式系统，如果不希望使用上述控制台程序的方式，可以自己构造 tcl 解释器，然后初始化解释器，然后利用解释器创建扩展指令，并且用自己创建的解释器运行 tcl 脚本。相关的代码见下面： <br />  <br />/* 定义 tcl 解释器 */ <br />Tcl_Interp* MyInterp; <br />/* 调用 tcl 的内部函数，创建解释器 */ <br />MyInterp = Tcl_CreateInterp(); <br />/* 调用 tcl 的内部函数，初始化 tcl 解释器 */ <br />Tcl_Init(MyInterp); <br />  <br />// 通过那嵌入集成测试框架的 Tcl 解释器 MyInterp ，运行 tcl 脚本 E:/test.tcl <br />rCode = Tcl_EvalFile(MyInterp,"E:/test.tcl" ); <br />if  (TCL_OK != rCode ) <br />{ <br />    AfxMessageBox("There are errors in your Tcl File"); <br />} <br />  <br />创建扩展指令的方式参见本文前面的描述 <img src ="http://www.cnitblog.com/tjitty/aggbug/22479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2007-01-31 16:24 <a href="http://www.cnitblog.com/tjitty/archive/2007/01/31/22479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Winrunner进行性能测试</title><link>http://www.cnitblog.com/tjitty/archive/2007/01/24/22261.html</link><dc:creator>tjitty</dc:creator><author>tjitty</author><pubDate>Wed, 24 Jan 2007 03:39:00 GMT</pubDate><guid>http://www.cnitblog.com/tjitty/archive/2007/01/24/22261.html</guid><wfw:comment>http://www.cnitblog.com/tjitty/comments/22261.html</wfw:comment><comments>http://www.cnitblog.com/tjitty/archive/2007/01/24/22261.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cnitblog.com/tjitty/comments/commentRss/22261.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/tjitty/services/trackbacks/22261.html</trackback:ping><description><![CDATA[
		<strong>下面的文字转载自51testing。。。<br /></strong>
		<br />
		<div>
				<font size="2">
						<div>
								<font size="2">凡问到Mercury公司的测试工具，每个人都会说Winrunner记录的是前台界面的操作过程，是功能测试工具，；Loadrunner记录了后台程序的交互信息，是</font>
								<a href="http://www.51testing.com/html/8/">
										<font color="#000000">性能测试工具</font>
								</a>
								<font size="2">。似乎在每位测试人员的心中，</font>
								<a href="http://www.51testing.com/html/27/">
										<font color="#000000">Winrunner</font>
								</a>
								<font size="2">和</font>
								<a href="http://www.51testing.com/html/27/">
										<font color="#000000">Loadrunner</font>
								</a>
								<font size="2">已经被很明确地界定开来，前者只能做功能测试，而后者只能进行</font>
								<a href="http://www.51testing.com/html/8/">
										<font color="#000000">性能测试</font>
								</a>
								<font size="2">。</font>
								<p>
										<font size="2">    但是出乎大家的意料，</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">也能进行</font>
										<a href="http://www.51testing.com/html/8/">
												<font color="#000000" size="2">性能测试</font>
										</a>
										<font size="2">，只不过这不是一种常规的测试方法，不为广大测试人员使用。但是不被广泛使用并不是代表不行，前一阶段，我就在某系统上使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">进行了一次</font>
										<a href="http://www.51testing.com/html/8/">
												<font color="#000000" size="2">性能测试</font>
										</a>
										<font size="2">，证实了该测试方法的可行性。</font>
								</p>
								<p>
										<font size="2">    下面我将介绍使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">进行</font>
										<a href="http://www.51testing.com/html/8/">
												<font color="#000000" size="2">性能测试</font>
										</a>
										<font size="2">的工作原理，详细介绍使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">进行</font>
										<a href="http://www.51testing.com/html/8/">
												<font color="#000000" size="2">性能测试</font>
										</a>
										<font size="2">的测试方法，以及点明该方法优势和弊端。有兴趣的测试爱好者，可以仔细阅读，尝试使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">进行性能测试。</font>
								</p>
								<p> </p>
								<p>
										<strong>
												<font size="2">    使用</font>
												<a href="http://www.51testing.com/html/27/">
														<font color="#000000" size="2">Winrunner</font>
												</a>
												<font size="2">进行</font>
												<a href="http://www.51testing.com/html/8/">
														<font color="#000000" size="2">性能测试</font>
												</a>
												<font size="2">的原理</font>
										</strong>
								</p>
								<p>
										<font size="2">   </font>
										<a href="http://www.51testing.com/html/8/">
												<font color="#000000" size="2">性能测试</font>
										</a>
										<font size="2">的初衷就是模拟大量的用户对应用系统同时进行操作，查看大量访问的情况下，应用程序的运行情况和系统的承载情况。</font>
								</p>
								<p>
										<font size="2">   </font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winruner</font>
										</a>
										<font size="2">是功能测试工具，它主要的功能是记录用户的界面操作。如果使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">进行性能测试，模拟大量的客户前台界面操作的情况（</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Loadrunner</font>
										</a>
										<font size="2">只是记录后台程序的交互情况），那不是真正达到了性能测试的目的了么。</font>
								</p>
								<p>
										<font size="2">    我们知道</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">是没有办法模拟大量用户的，但是</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Loadrunner</font>
										</a>
										<font size="2">的Controller可以。所以我们就会很自然地想到使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Loadrunner</font>
										</a>
										<font size="2">调用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">，并发大量的用户，完成性能测试工作。</font>
								</p>
								<p>
										<font size="2">    在使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">进行压力测试时，我们要选用一台主控机和一台压力生成器，让主控机通过远程桌面方式访问压力生成器。由于GUI脚本是界面操作，所以一个界面只能运行一个GUI脚本，但是通过远程桌面方式访问主机，我们可以使一台机器展现出两个界面，而且这两个界面互不干扰，各自操作的。所以我们建议使用远程桌面的方式控制压力生成器。如果压力生成器可以同时打开2个远程桌面界面，那么我们就可以运行2个虚拟用户，如果可以打开3个，那么我们就可以运行3个虚拟用户，以此类推。</font>
								</p>
								<p>
										<strong>
												<font size="2">    该方法的技术要点</font>
										</strong>
								</p>
								<p>
										<font size="2">    那么我们使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">进行压力测试需要什么运行环境，对系统进行什么相关设置呢？我们在下面将为大家一一介绍。</font>
								</p>
								<ul>
										<li>
												<font size="2">
														<strong>该方法的运行环境</strong>
												</font>
										</li>
										<li>
												<strong>
														<a href="http://www.51testing.com/html/27/">
																<font color="#000000" size="2">Loadrunner</font>
														</a>
												</strong>
												<strong>
														<font size="2">将支持什么版本的</font>
														<a href="http://www.51testing.com/html/27/">
																<font color="#000000" size="2">Winrunner</font>
														</a>
												</strong>
												<a href="http://www.51testing.com/html/27/">
												</a>
										</li>
								</ul>
								<table cellspacing="0" cellpadding="0" align="center" border="1">
										<tbody>
												<tr>
														<td width="192">
																<p>
																		<strong>
																				<font size="2">LoadRunner Version</font>
																		</strong>
																</p>
														</td>
														<td width="408">
																<p>
																		<strong>
																				<font size="2">Supported WinRunner version</font>
																		</strong>
																</p>
														</td>
												</tr>
												<tr>
														<td width="192">
																<p>
																		<font size="2">LoadRunner8.x</font>
																</p>
														</td>
														<td width="408">
																<p>
																		<font size="2">WinRunner 7.5, 7.6, 8.2</font>
																</p>
																<p>
																		<strong>
																				<font size="2">Note:</font>
																		</strong>
																</p>
																<p>
																		<font size="2">There is a WinRunner patch in the LoadRunner 8.0 Add-ins installation CD under the Patches\lr_wr_patch directory. WinRunner and LoadRunner will NOT work together without this patch.</font>
																</p>
														</td>
												</tr>
												<tr>
														<td width="192">
																<p>
																		<font size="2">LoadRunner7.8, LoadRunner7.8 FP 1</font>
																</p>
														</td>
														<td width="408">
																<p>
																		<font size="2">WinRunner 7.5, 7.6</font>
																</p>
																<p>
																		<strong>
																				<font size="2">Note:</font>
																		</strong>
																</p>
																<p>
																		<font size="2">The WinRunner patch in the LoadRunner 7.8 installation CD under the Patches\lr_wr_patch directory is needed only with WinRunner 7.5. No patch is necessary for WinRunner 7.6.</font>
																</p>
														</td>
												</tr>
												<tr>
														<td width="192">
																<p>
																		<font size="2">LoadRunner7.6</font>
																</p>
														</td>
														<td width="408">
																<p>
																		<font size="2">WinRunner 7.5, 7.6</font>
																</p>
														</td>
												</tr>
												<tr>
														<td width="192">
																<p>
																		<font size="2">LoadRunner7.51, LoadRunner7.51 SP1</font>
																</p>
														</td>
														<td width="408">
																<p>
																		<font size="2">WinRunner 7.5</font>
																</p>
														</td>
												</tr>
												<tr>
														<td width="192">
																<p>
																		<font size="2">LoadRunner7.5</font>
																</p>
														</td>
														<td width="408">
																<p>
																		<font size="2">WinRunner 7.01</font>
																</p>
																<p>
																		<strong>
																				<font size="2">Note:</font>
																		</strong>
																</p>
																<p>
																		<font size="2">There is a WR701 patch in LoadRunner 75 installation CD under Patches à WR701 à patch_LRWR.zip.)</font>
																</p>
														</td>
												</tr>
										</tbody>
								</table>
								<ul>
										<li>
												<font size="2">
														<strong>安装要求</strong>
												</font>
												<ul>
														<li>
																<a href="http://www.51testing.com/html/27/">
																		<font color="#000000" size="2">WinRunner</font>
																</a>
																<font size="2">：主控机和压力生成器都需要安装</font>
														</li>
														<li>
																<a href="http://www.51testing.com/html/27/">
																		<font color="#000000" size="2">LoadRunner</font>
																</a>
																<font size="2">：</font>
																<ul>
																		<li>
																				<font size="2">主控机完全安装</font>
																				<a href="http://www.51testing.com/html/27/">
																						<font color="#000000" size="2">Loadrunner</font>
																				</a>
																				<font size="2">；安装</font>
																				<a href="http://www.51testing.com/html/27/">
																						<font color="#000000" size="2">Loadrunner</font>
																				</a>
																				<font size="2">调用</font>
																				<a href="http://www.51testing.com/html/27/">
																						<font color="#000000" size="2">Winrunner</font>
																				</a>
																				<font size="2">的补丁</font>
																		</li>
																		<li>
																				<font size="2">压力生成器需要安装Load Generator</font>
																		</li>
																</ul>
														</li>
												</ul>
										</li>
								</ul>
								<p> </p>
								<ul>
										<li>
												<font size="2">
														<strong>License</strong>
														<strong>要求</strong>
												</font>
												<ul>
														<li>
																<font size="2">WinRunner License：对于使用版本，</font>
																<a href="http://www.51testing.com/html/27/">
																		<font color="#000000" size="2">Mercruy</font>
																</a>
																<font size="2">提供单个</font>
																<a href="http://www.51testing.com/html/27/">
																		<font color="#000000" size="2">Winrunner</font>
																</a>
																<font size="2">的License</font>
														</li>
														<li>
																<a href="http://www.51testing.com/html/27/">
																		<font color="#000000" size="2">LoadRunner</font>
																</a>
																<font size="2">需要执行GUI Vuser的license</font>
														</li>
												</ul>
										</li>
								</ul>
								<p> </p>
								<ul>
										<li>
												<font size="2">
														<strong>如何在主控机上并发的GUI用户数大于1</strong>
												</font>
										</li>
								</ul>
								<p>
										<font size="2">    在基于</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Windows</font>
										</a>
										<font size="2">的压力生成器上，你只能并发一个GUI脚本。如果你的虚拟用户数填写值大于1，系统将提示：一台机器只能运行一个GUI脚本。</font>
								</p>
								<p>
										<font size="2">    如果想运行大于1个GUI脚本，你必须在设置</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">的系统文件（以下设置只对</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">LoadRunner</font>
										</a>
										<font size="2">8.0以上版本的软件有效）</font>
								</p>
								<ul>
										<li>
												<font size="2">打开主控机的c:\systerm\wlrun7.ini</font>
										</li>
										<li>
												<font size="2">搜索到[Vuser]标识</font>
										</li>
										<li>
												<font size="2">增加"VuMaxGUILimit"标志，如果你想在你机器上</font>
												<a href="http://www.51testing.com/html/27/">
														<font color="#000000" size="2">Loadrunner</font>
												</a>
												<font size="2">调用</font>
												<a href="http://www.51testing.com/html/27/">
														<font color="#000000" size="2">Winrunner</font>
												</a>
												<font size="2">的并发量最大为10，那么你你可以设置成VuMaxGUILimit=10<br /></font>
										</li>
										<li>
												<font size="2">
														<strong>如何使设置主控机通过远程桌面访问的方式访问压力生成器</strong>
												</font>
										</li>
								</ul>
								<p>
										<font size="2">    设置主控机的Agent Configuration</font>
								</p>
								<p>
										<font size="2">    开始à程序à Mercury LoadRunneràAdvanced SettingsàAgent Configuration。注意设置后充启Loadrunner Agent Process。</font>
								</p>
								<p align="center">
										<font size="2">
												<img height="131" src="http://www.51testing.com/ddimg/uploadimg/20061009/clip_image002.jpg" width="295" />
										</font>
								</p>
								<p> </p>
								<ul>
										<li>
												<font size="2">
														<strong>如何使主控机可以直接远程访问压力生成器</strong>
												</font>
										</li>
								</ul>
								<p>
										<font size="2">    设置压力生成器的RDP-Tcp设置，目的就是在远程登入该机器时，可以不用输入用户名、密码，直接登入。设置内容如下：</font>
								</p>
								<p align="center">
										<font size="2">
												<img height="415" src="http://www.51testing.com/ddimg/uploadimg/20061009/clip_image004.jpg" width="553" />
										</font>
								</p>
								<p> </p>
								<ul>
										<li>
												<strong>
														<font size="2">如何让</font>
														<a href="http://www.51testing.com/html/27/">
																<font color="#000000" size="2">Loadrunner</font>
														</a>
														<font size="2">执行</font>
														<a href="http://www.51testing.com/html/27/">
																<font color="#000000" size="2">Winrunner</font>
														</a>
														<font size="2">脚本</font>
												</strong>
										</li>
										<li>
												<font size="2">复制</font>
												<a href="http://www.51testing.com/html/27/">
														<font color="#000000" size="2">Winrunnr</font>
												</a>
												<font size="2">脚本到</font>
												<a href="http://www.51testing.com/html/27/">
														<font color="#000000" size="2">Loadrunner</font>
												</a>
												<font size="2">的主控机</font>
										</li>
										<li>
												<font size="2">如果你决定在远程机器上运行脚本，你也必须将脚本复制到远程机器上，同时必须确定：</font>
												<ul>
														<li>
																<font size="2">该</font>
																<a href="http://www.51testing.com/html/27/">
																		<font color="#000000" size="2">Winrunner</font>
																</a>
																<font size="2">脚本在远程机器可以正常运行</font>
														</li>
														<li>
																<font size="2">在远程机器上必须打开LoadRunner Agent process，打开方法：Start à Programs à LoadRunner à LoadRunner Agent process.</font>
														</li>
												</ul>
										</li>
										<li>
												<font size="2">打开LoadRunner Controlle，你可以选择Manual or Goal-Oriented Scenario，点击“Browse”，如下图：</font>
										</li>
								</ul>
								<p align="center">
										<font size="2">
												<img height="438" src="http://www.51testing.com/ddimg/uploadimg/20061009/clip_image006.jpg" width="586" />
										</font>
								</p>
								<ul>
										<li>
												<font size="2">在跳出框中，改变文件类型到“GUI script”，如下图：</font>
										</li>
								</ul>
								<p align="center">
										<font size="2">
												<img height="264" src="http://www.51testing.com/ddimg/uploadimg/20061009/clip_image008.jpg" width="426" />
										</font>
								</p>
								<p> </p>
								<ul>
										<li>
												<font size="2">如果你的路径必须有你的</font>
												<a href="http://www.51testing.com/html/27/">
														<font color="#000000" size="2">Winrunner</font>
												</a>
												<font size="2">脚本，</font>
												<a href="http://www.51testing.com/html/27/">
														<font color="#000000" size="2">Winrunner</font>
												</a>
												<font size="2">脚本的图表将会显示出来</font>
										</li>
								</ul>
								<p align="center">
										<font size="2">
												<img height="28" src="http://www.51testing.com/ddimg/uploadimg/20061009/clip_image010.jpg" width="127" />
										</font>
								</p>
								<ul>
										<li>
												<font size="2">点击Open后，你的脚本将会被添加到LoadRunner Controller.</font>
										</li>
										<li>
												<font size="2">在你运行你的脚本之前，请点击“Generators”。选择相关的host后，点击“Details”。确定在Vuser Linmits栏中“GUI/WinRunner”被选中，如下图：</font>
										</li>
								</ul>
								<p align="center">
										<font size="2">
												<img height="403" src="http://www.51testing.com/ddimg/uploadimg/20061009/clip_image012.jpg" width="522" />
										</font>
								</p>
								<ul>
										<li>
												<font size="2">如果你决定在远程机器上运行脚本，则需要在Controller添加远程机器作为压力生成器（Load Generator）时，在Detail的Terminal Services Tab页，选中Enable Terminal Services Manager。注意Maximum number of Vusers per teminal请设置为1。</font>
										</li>
								</ul>
								<p align="center">
										<font size="2">
												<img height="414" src="http://www.51testing.com/ddimg/uploadimg/20061009/clip_image014.jpg" width="525" />
										</font>
								</p>
								<p> </p>
								<p>
										<strong>
												<font size="2">    该方法的优势与弊端</font>
										</strong>
								</p>
								<p>
										<font size="2">    在完成了上述介绍后，我们就可以使用</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Winrunner</font>
										</a>
										<font size="2">进行性能测试了。当初我在某应用系统上试验该方法后，最明显的感触就是，它能够真正的模拟用户的操作，进行性能测试（不只是记录后台的交互操作）。对于每一项的响应时间，我们都可以很明确的记录，而且记录下来的是最真实的响应时间，包括前台到Cobar中间件的响应时间，这是</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Loadrunner</font>
										</a>
										<font size="2">脚本没有办法做到的。</font>
								</p>
								<p>
										<font size="2">    还有就是它有与中间件的协议无关的优点。即使应用系统使用的是</font>
										<a href="http://www.51testing.com/html/27/">
												<font color="#000000" size="2">Loadrunner</font>
										</a>
										<font size="2">不识的，较冷门的协议，该方法一样可以对该系统进行性能测试。</font>
								</p>
								<p>
										<font size="2">    但是该方法也存在着局限性。首先在并发数上，它受限于远程桌面访问数量。并发数是根据远程桌面访问数来定的，如果这台机器只能有2个远程桌面访问数，那么这台机器最多并发2个虚拟用户，所以我们要使用该方法进行性能测试，我们要选用大量的PC机，要么有较大的远程桌面访问数量。</font>
								</p>
								<p>
										<font size="2">    还有就是它对同步点控制不好。我们没有办法在GUI脚本中设置同步点，因此在需要同步点操作的时候，该方法没有什么明显的优势。</font>
								</p>
								<p>
										<font size="2">    每一种方法都有其特定的优势和弊端，我们应该根据每次不同的测试目的，变换测试方法，这样才能有效地进行性能测试。<br /><br /></font>
								</p>
								<p>
										<font size="2">
												<font color="#ff0033">版权声明：</font>
												<font color="#090909">51testing软件测试网及相关内容提供者拥有51testing.com内容的全部版权，未经明确的书面许可，任何人或单位不得对本网站内容复制、转载或进行镜像。51testing软件测试网欢迎与业内同行进行有益的合作和交流，如果有任何有关内容方面的合作事宜</font>
										</font>
								</p>
						</div>
				</font>
		</div>
<img src ="http://www.cnitblog.com/tjitty/aggbug/22261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/tjitty/" target="_blank">tjitty</a> 2007-01-24 11:39 <a href="http://www.cnitblog.com/tjitty/archive/2007/01/24/22261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>