灿烂的阳光,苦涩的生活,认真做,你能行!

发布新日志

  • LR中术语集锦和探讨(转载)

    2010-04-07 12:11:49

    Transactions(用户事务分析)
    用户事务分析是站在用户角度进行的基础性能分析
    1、Transation Sunmmary(事务综述)
    对事务进行综合分析是性能分析的第一步,通过分析测试时间内用户事务的成功与失败情况,可以直接判断出系统是否运行正常。

    2、Average Transaciton Response Time(事务平均响应时间)
    “事务平均响应时间”显示的是测试场景运行期间的每一秒内事务执行所用的平均时间,通过它可以分析测试场景运行期间应用系统的性能走向。
    例:随着测试时间的变化,系统处理事务的速度开始逐渐变慢,这说明应用系统随着投产时间的变化,整体性能将会有下降的趋势。

    3、Transactions per Second(每秒通过事务数/TPS)
    “每秒通过事务数/TPS”显示在场景运行的每一秒钟,每个事务通过、失败以及停止的数量,使考查系统性能的一个重要参数。通过它可以确定系统在任何给定时刻的时间事务负载。分析TPS主要是看曲线的性能走向。
    将它与平均事务响应时间进行对比,可以分析事务数目对执行时间的影响。
    例:当压力加大时,点击率/TPS曲线如果变化缓慢或者有平坦的趋势,很有可能是服务器开始出现瓶颈。

    4、Total Transactions per Second(每秒通过事务总数)
    “每秒通过事务总数”显示在场景运行时,在每一秒内通过的事务总数、失败的事务总署以及停止的事务总数。

    5、Transaction Performance Sunmmary(事务性能摘要)
    “事务性能摘要”显示方案中所有事务的最小、最大和平均执行时间,可以直接判断响应时间是否符合用户的要求。
    重点关注事务的平均和最大执行时间,如果其范围不在用户可以接受的时间范围内,需要进行原因分析。

    6、Transaction Response Time Under Load(事务响应时间与负载)
    “事务响应时间与负载”是“正在运行的虚拟用户”图和“平均响应事务时间”图的组合,通过它可以看出在任一时间点事务响应时间与用户数目的关系,从而掌握系统在用户并发方面的性能数据,为扩展用户系统提供参考。此图可以查看虚拟用户负载对执行时间的总体影响,对分析具有渐变负载的测试场景比较有用。

    7、Transaction Response Time(Percentile)(事务响应时间(百分比))
    “事务响应时间(百分比)”是根据测试结果进行分析而得到的综合分析图,也就是工具通过一些统计分析方法间接得到的图表。通过它可以分析在给定事务响应时间范围内能执行的事务百分比。

    8、Transaction Response Time(Distribution)(事务响应时间(分布))
    “事务响应时间(分布)”显示在场景运行过程中,事务执行所用时间的分布,通过它可以了解测试过程中不同响应时间的事务数量。如果系统预先定义了相关事务可以接受的最小和最大事务响应时间,则可以使用此图确定服务器性能是否在可以接受的范围内。
  • sql 使用dateADD函数 自增时间

    2009-12-18 16:36:43

    来自塞北云

    这两天又温习了一下SQL,好久没有动过了。。。人都锈竇了哦。

    第一种分钟自增:

    declare @i int,@a varchar(20),@c datetime
    set @i=0
    set @a='100100000'
    set @c='2009-9-11 10:06:01'
    while @i<=20
    begin

        insert T_create_time
         select left(@a,9)+right('000'+ltrim(@i),3),
                 dateadd(minute,1,@c)       
          set @i=@i+1
          set @c=dateadd(minute,1,@c)
    end

    =============运行结果如下

    100100000000       2009-9-11 10:07:01

    100100000001       2009-9-11 10:08:01

    100100000002       2009-9-11 10:09:01

    。。。。

    。。。。

    。。。。

     

    第二种分钟自增:

    declare @i int,@a varchar(20),@c datetime
    set @i=0
    set @a='100100000'
    set @c='2009-9-11 10:06:01'
    while @i<=20
    begin

        insert T_create_time
         select left(@a,9)+right('000'+ltrim(@i),3),
                 dateadd(minute,1,@c)       
          set @i=@i+1
          set @c=@c+1
    end

    =============运行结果如下

    100100000000       2009-9-12 10:07:01

    100100000001       2009-9-13 10:07:01

    100100000002       2009-9-14 10:07:01

    。。。。

    。。。。

    。。。。

    利用这种方法可以为数据库中的某个表插入大量数据库,可以做大数据量的测试工具打好前提,如果涉及多张表的话,可以考虑用触发器同时对多表进行操作。 :)

  • SQL中插入多行(包括列某部分自增)

    2009-09-09 17:43:22

    若表t_run_users中有字段user_no , user_name ,create_date 三字段,其中主键user_no中值为100100000000(12位),user_name的值为0000,(应该不为主键也可用此办法)

    declare @i int,@a varchar(20)
    set @i=1
    set @a='1001'
    while @i<=200
    begin
        insert T_Run_Users
         select left(@a,4)+right('00000000'+ltrim(@i),8),
                right('0000'+ltrim(@i),4), 
                '2009-09-08 09:22:39'
          set @i=@i+1
    end

    扫行出来的结果如下

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

    user_no              user_name         create_date

    100100000000         0000              2009-09-08 09:22:39

    100100000001         0001              2009-09-08 09:22:39

    100100000002         0002              2009-09-08 09:22:39

    .......

    .......

     

    :)  

  • testlink登录成功进入后页头的一个安全错误

    2009-09-30 15:49:05

    1.To disable any reference to these checkings, set $tlCfg->config_check_warning_mode = SILENT;
    解决方案,找到config.inc.php,找到“Cfg->config_check_warning_mode”,修改如下:

    /** $tlCfg->config_check_warning_mode = 'FILE';        */
    $tlCfg->config_check_warning_mode = 'SILENT';  

    2.在IE中访问http://localhost/testlink/index.php,弹出Testlink页面为英文,修改配置文件使其默认为中文;

    打开C:"xampp"htdocs"testlink下的config.inc.php文件;
    查找$g_default_language = 'en_GB';
    修改为$g_default_language = 'zh_CN';

    3.汉化TestLink:下载utf8版本的strings.txt替换C:\xampp\htdocs\testlink\locale\zh_CN目录下的strings.txt即可;

  • windows apache 配置多个服务 站点 Apache Service Monitor

    2009-09-30 14:52:23

    更改第一个站点的根目录:在文件Apache2.2\conf\httpd.conf中查找 DocumentRoot 属性,将后面的路径改为你的主站点的路径,如:D:\www\web1

    为第二个Apache服务建立配置文件:复制并重命名httpd.conf为web2.conf(举个例子而已,也可以叫my.conf等等),修改web2.conf中的Listen 8080(原来为80)、ServerName localhost:8080(原来为80)、DocumentRoot "D:/www/web2" (原来为web1)
    添加第二个Apache服务:Apache安装目录的bin子目录下,使用如下命令将Apache安装为Windows NT服务:httpd.exe -k install -n "服务名" -f "d:\apache2.2\conf\web2.conf"
    其他的命令:
    将Apache安装为Windows NT服务:
    httpd -k install
    指定服务的名称,当你在同一机器上安装多个Apache服务时,你必须为它们指定不同的名字。
    httpd -k install -n "服务名"
    为不同名称的服务使用不同的配置文件,则安装时需要指定配置文件:
    httpd -k install -n "服务名" -f "c:\files\my.conf" 如果你使用的是第一个命令,也就是除 -k install 外没有其它命令行参数,那么被安装的服务名称将是:Apache2 ,配置文件将使用conf\httpd.conf 。
    移除一个Apache服务:
    httpd -k uninstall
    使用下述命令移除特定名称的Apache服务:
    httpd -k uninstall -n "服务名"
    通常,启动、重启、关闭Apache服务的方法是使用Apache Service Monitor工具,另外也可以使用控制台命令:NET START Apache2 和 NET STOP Apache2 或者通过Windows服务控制面板。在启动Apache服务之前,你应当使用下面的命令检查一下配置文件的正确性:
    httpd -n "服务名" -t
    你可以通过命令行开关来控制Apache服务。要启动一个已经安装的Apache服务,可以使用:
    httpd -k start
    要停止一个已经安装的Apache服务,可以使用:
    httpd -k stop

    httpd -k shutdown
    要重启一个运行中的Apache服务,强制它重新读取配置文件,可以使用:
    httpd -k restart

  • MySQL 5.0 数据库备份与恢复:

    2009-09-28 12:20:44

    1,  用 mysqldump 命令进行备份:
        在命令提示符窗口(注意不是 MySQL 的 MySQL Command Line Client 窗口)中输入,
        C:\Program Files\MySQL\MySQL Server 5.0\bin>mysqldump -hlocalhost -uroot -proot        temp  > temp_20071106.sql
        或:C:\Program Files\MySQL\MySQL Server 5.0\bin>mysqldump -hlocalhost -u root -proot    temp > temp_20071106.sql
        或:C:\Program Files\MySQL\MySQL Server 5.0\bin>mysqldump -h localhost -u root -proot  temp > temp_20071106.sql
        先进入到 MySQL安装目录的bin目录下(便于存放生成的*.sql文件,也可以直接打开命令提示符窗口,默认存放路径为"C:\Documents and Settings\Administrator>").其中-h,-u两个参数名与参数值之间可用或不用空格分隔, 但-p参数的参数名与参数值之间是一定不能加空格的,也可以这样输入:
        C:\Program Files\MySQL\MySQL Server 5.0\bin>mysqldump -hlocalhost -uroot -p temp > temp_20071106.sql
        Enter password: root
        在后面再输入密码也可以成功.
        -h指出备份的数据库在本机,-u指出用户名,-p指出密码,temp为数据库名,后面可具体指定备份的数据表.
        结果生成的 temp_20071106.sql 文件会自动存在C:\Program Files\MySQL\MySQL Server 5.0\bin目录下.
       

    2,  用mysql 命令进行恢复:
        C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql  -hlocalhost  -uroot  -proot          temp  < temp_20071106.sql
        输入此命令后,数据库中的数据将恢复到备份时的数据.
        注意:恢复时, temp 必须存在,数据库可空.恢复时会自动删除要恢复的表,再重新创建,插入数据.

     

  • Windows下安装 TestLink1.7.5(和bugzilla运行于同一服务器上)

    2009-09-27 11:46:08

    Mantis没有使用过,有待调查。现在讲Windows下安装 TestLink1.7.5(和bugzilla运行于同一服务器上)

    在安装Testlink之前,需要首先安装Apache, PHP, Mysql支持软件包,我选择的是XAMPP,XAMPP集成了这些,特别方便。

    1 访问http://www.apachefriends.org/zh_cn/xampp.html 下载并安装最新的XAMPP版本。比如我下载的是xampp1.7.1版本

    2 安装“xampp”采用默认方式,一直“下一步”操作即可;

    3 启动“Apache”,“Mysql”服务(修改mysql的root用户的密码为123123),如下图所示:


    4 http://sourceforge.net/project/showfiles.php?group_id=90976

    下载Testlink1.7.5

    5 安装TestLink1.7.5

    (1)  将TestLink解压缩到D:\xampp\htdocs,命名为testlink;

    (2)  在IE中访问http://localhost/testlink/install/index.php

    (3)  点击“New Installation”安装TestLink;

    (4)  Mysql数据库和TestLink数据库访问权限设置;

    Database Type Mysql

    Database host   localhost

    //配置访问Mysql的地址;

    Database login   root

    Database password 123123

    //配置访问mysql的权限;


    TestLink DB login root

    TestLink DB passwaord 123123

    //配置访问Testlink数据库的权限 ;


    (6) 点击“同意许可协议”,继续
     

    (7)安装完成,点击最后一行的(Please Click Me!)

    (8)在Testlink第一次安装成功后,默认管理员帐户为admin,密码admin,使用其登录

    (9)登录Testlink成功后,在菜单栏中的Personal中更改admin的密码,然后注销;
    (10)删除C:\xampp\htdocs\testlink\install目录;

    (11)在IE中访问http://localhost/testlink/index.php,弹出Testlink页面为英文,修改配置文件使其默认为中文;

     打开C:"xampp"htdocs"testlink下的config.inc.php文件;
     查找$g_default_language = 'en_GB';
     修改为$g_default_language = 'zh_CN';
        

    (12)汉化TestLink:目前xampp\htdocs\testlink\locale\zh_CN目录下的strings.txt已经汉化完成,只要修改步骤(11)的配置文件即可;

    (13)修改配置文件config.inc.php,解决日期乱码问题;

    打开xampp\htdocs\testlink下的config.inc.php文件;

    在配置文件的最下方,添加如图所示内容’zh_CN’ =>,
    'zh_CN' => "%Y-%m-%d %H:%M:%S"


     

    (13)登录http://localhost/testlink/index.php,即为已经汉化完成的TestLink主界面

    (14)关于TestLink的配置、使用将在下篇中列举。

  • Windows下Bugzilla+Apache+mysql+Perl安装

    2009-09-27 11:44:49

    Windows 下安装Bugzilla
    shorelew@hotmail.com整理
    本文将介绍搭建Windows下的Bugzilla服务器端的全部步骤。欢迎大家来信交流共同学习。
    Bugzilla
    下载并安装Bugzilla
    下载Bugzilla: http://bugzilla.org/download.html
    本文是以Bugzilla2.20版本为例子进行安装,同时可以在网站上找到相应的汉化包,感谢汉化作者为我们提供的方便与支持。
    下载解压缩到C:\Bugzilla ,保证Bugzilla文件放在C:\Bugzilla文件夹下,避免解压时生成多余的文件夹。
    MySQL
    下载 MySQL 4.1.x
    下载MySQL "Windows Essentials"版本: http://dev.mysql.com/downloads/mysql/4.1.html
    不推荐使用MySQL 5.x
    安装
    可以选择典型(Typial)安装MySQL,笔者安装时选择的自定义安装,并将安装目录设置为:C:\mysql。
    创建Bugs数据库和用户
    使用mysql 命令行创建,打开开始菜单-运行,输入cmd,打开命令行窗口进入C:\mysql\bin>
    需要输入的蓝字命令如下:
    C:\mysql\bin>mysql --user=root -p mysql
    Enter password: ********
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 15 to server version: 4.0.20a-debug
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql> create database bugs;
    Query OK, 1 row affected (0.11 sec)
    mysql> grant all privileges on bugs.* to 'bugs'@'localhost' identified by 'shorelew';
    Query OK, 0 rows affected (0.03 sec)
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    mysql> quit
    Bye
    C:\mysql\bin>
    C:\mysql\bin>mysql --user=root -p mysql
    Enter password: ********
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 15 to server version: 4.1.11-nt
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql> set password for 'bugs'@'localhost' = OLD_PASSWORD('shorelew');
    Query OK, 0 rows affected (0.00 sec)
    mysql> quit
    Bye
    C:\mysql\bin>
    ActiveState Perl
    下载ActiveState Perl 5.8.1 或更高的版本
    下载ActiveState Perl 5.8.1 或更高的版本: http://activestate.com/Products/Download/Download.plex?id=ActivePerl
    安装Perl
    将ActiveState Perl 安装到C:\Perl
    创建Temp目录
    创建 C:\Temp 目录确保系统在访问时进行更改。
    安装 Modules
    Bugzilla 需要安装一些perl模块,请确保你的计算机能连接到internet,所有需要模块都在http://landfill.bugzilla.org/ppm/
    进入DOS命令行按如下蓝字操作,在安装到Template-Toolkit时注意按提示填写完成的安装路径。
    C:\>ppm
    PPM - Programmer's Package Manager version 3.1.
    Copyright (c) 2001 ActiveState Corp. All Rights Reserved.
    ActiveState is a devision of Sophos.
    Entering interactive shell. Using Term::ReadLine::Stub as readline library.
    Type 'help' to get started.
    ppm> rep add Bugzilla http://landfill.bugzilla.org/ppm
    Repositories:
    [1] ActiveState PPM2 Repository
    [2] ActiveState Package Repository
    [3] Bugzilla
    ppm> install AppConfig
    ====================
    Install 'AppConfig' version 1.52 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 50508 bytes.
    ...
    Successfully installed AppConfig version 1.52 in ActivePerl 5.8.7.813.
    ppm> install TimeDate
    ====================
    Install 'TimeDate' version 1.16 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 19235 bytes.
    ...
    Successfully installed TimeDate version 1.16 in ActivePerl 5.8.7.813.
    ppm> install DBI
    ====================
    Install 'DBI' version 1.43 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 508164 bytes.
    ...
    Successfully installed DBI version 1.43 in ActivePerl 5.8.7.813.
    ppm> install DBD-mysql
    ====================
    Install 'DBD-mysql' version 2.9002 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 178803 bytes.
    ...
    Successfully installed DBD-mysql version 2.9002 in ActivePerl 5.8.7.813.
    ppm> install Template-Toolkit
    ====================
    Install 'Template-Toolkit' version 2.13 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 530770 bytes.
    ...
    Successfully installed Template-Toolkit version 2.13 in ActivePerl 5.8.7.813.
    ppm> install MailTools
    ====================
    Install 'MailTools' version 1.67 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 46881 bytes.
    ...
    Successfully installed MailTools version 1.67 in ActivePerl 5.8.7.813.
    ppm> install GD
    ====================
    Install 'GD' version 2.07 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 363039 bytes.
    ...
    Successfully installed GD version 2.07 in ActivePerl 5.8.7.813.
    ppm> install Chart
    ====================
    Install 'Chart' version 2.3 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 58641 bytes.
    ...
    Successfully installed Chart version 2.3 in ActivePerl 5.8.7.813.
    ppm> install GDGraph
    ====================
    Install 'GDTextUtil' version 0.86 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 19178 bytes.
    ...
    Successfully installed GDTextUtil version 0.86 in ActivePerl 5.8.7.813.
    ====================
    Install 'GDGraph' version 1.43 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 71764 bytes.
    ...
    Successfully installed GDGraph version 1.43 in ActivePerl 5.8.7.813.
    ppm> install PatchReader
    ====================
    Install 'PatchReader' version 0.9.4 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 9558 bytes.
    ...
    Successfully installed PatchReader version 0.9.4 in ActivePerl 5.8.7.813.
    ppm> install Net::LDAP
    ====================
    Install 'Convert-ASN1' version 0.19 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 26326 bytes.
    ...
    Successfully installed Convert-ASN1 version 0.19 in ActivePerl 5.8.7.813.
    ====================
    Install 'perl-ldap' version 0.33 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 188548 bytes.
    ...
    Successfully installed perl-ldap version 0.33 in ActivePerl 5.8.7.813.
    ====================
    Install 'Net-LDAP-Express' version 0.11 in ActivePerl 5.8.7.813.
    ====================
    Downloaded 7693 bytes.
    ...
    Successfully installed Net-LDAP-Express version 0.11 in ActivePerl 5.8.7.813.
    ppm>
    Apache
    这里推荐使用Apache 作为运行Bugzilla 的web引擎。如果你想将Bugzilla 运行在IIS上,可以参考:http://www.bugzilla.org/docs/2.18/html/configuration.html#http-iis
    下载 Apache 2.x
    下载Apache HTTP Server version 2.x 或更高版本: http://httpd.apache.org/download.cgi
    安装
    默认安装即可,假设安装的路径是C:\Program Files\Apache Group 它将安装在C:\Program Files\Apache Group\Apache2。
    如果你已经运行了IIS,你在安装时配置apache运行在不同于80端口,否则你将不能访问。如果你的windows系统未安装IIS选择默认安装即可。
    允许Apache 可写
    创建如下目录:
    • C:\Bugzilla\data
    • C:\Program Files\Apache Group\Apache2\logs
    • C:\Temp
    配置httpd.conf文件
    在记事本中编辑 C:\Program Files\Apache Group\Apache2\conf\httpd.conf
    将httpd.conf和以下相应的内容比较,对照蓝色字体内容修改原有的内容。
    #
    # Listen: Allows you to bind Apache to specific IP addresses and/or
    # ports, instead of the default. See also the <VirtualHost>
    # directive.
    #
    # Change this to Listen on specific IP addresses as shown below to
    # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
    #
    #Listen 12.34.56.78:80
    Listen 80
    #
    # DocumentRoot: The directory out of which you will serve your
    # documents. By default, all requests are taken from this directory, but
    # symbolic links and aliases may be used to point to other locations.
    #
    DocumentRoot "C:/Bugzilla"
    #
    # Each directory to which Apache has access can be configured with respect
    # to which services and features are allowed and/or disabled in that
    # directory (and its subdirectories).
    #
    # First, we configure the "default" to be a very restrictive set of
    # features.
    #
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>
    #
    # Note that from this point forward you must specifically allow
    # particular features to be enabled - so if something's not working as
    # you might expect, make sure that you have specifically enabled it
    # below.
    #
    #
    # This should be changed to whatever you set DocumentRoot to.
    #
    <Directory "C:/Bugzilla">
    #
    # AddHandler allows you to map certain file extensions to "handlers":
    # actions unrelated to filetype. These can be either built into the server
    # or added with the Action directive (see below)
    #
    # To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options" directive.)
    #
    AddHandler cgi-script. .cgi
    #
    # This should be changed to whatever you set DocumentRoot to.
    #
    <Directory "C:/Bugzilla">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important. Please see
    # http://httpd.apache.org/docs-2.0/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks ExecCGI
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    # Options FileInfo AuthConfig Limit
    #
    AllowOverride All
    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all
    #
    # Tell Apache to use Perl to execute .cgi
    #
    ScriptInterpreterSource Registry-Strict
    </Directory>
    You also should add index.cgi to the DirectoryIndex list.
    #
    # DirectoryIndex: sets the file that Apache will serve if a directory
    # is requested.
    #
    # The index.html.var file (a type-map) is used to deliver content-
    # negotiated documents. The MultiViews Option can be used for the
    # same purpose, but it is much slower.
    #
    DirectoryIndex index.html index.html.var index.cgi
    在注册表中创建
    HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command 编辑默认值为C:\Perl\bin\perl.exe -T
    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here. Contrariwise, if you *do*
    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    #CustomLog logs/access.log common
    重新启动 Apache
    最后,在命令行中重新启动Apache。
    C:\>net stop apache2
    The Apache2 service is stopping..
    The Apache2 service was stopped successfully.
    C:\>net start apache2
    The Apache2 service is starting.
    The Apache2 service was started successfully.
    C:\>
    配置 Bugzilla
    checksetup.pl
    如下在命令行中操作,将自动创建localconfig文件。
    C:\>cd bugzilla
    C:\bugzilla>perl checksetup.pl
    Checking perl modules ...
    Checking for AppConfig (v1.52) ok: found v1.55
    Checking for CGI (v2.93) ok: found v3.10
    Checking for Data::Dumper (any) ok: found v2.121_04
    Checking for Date::Format (v2.21) ok: found v2.22
    Checking for DBI (v1.38) ok: found v1.48
    Checking for File::Spec (v0.84) ok: found v3.05
    Checking for File::Temp (any) ok: found v0.16
    Checking for Template (v2.08) ok: found v2.13
    Checking for Text::Wrap (v2001.0131) ok: found v2001.09293
    Checking for Mail::Mailer (v1.65) ok: found v1.67
    Checking for Storable (any) ok: found v2.13
    The following Perl modules are optional:
    Checking for GD (v1.20) ok: found v2.16
    Checking for Chart::Base (v1.0) ok: found v2.3
    Checking for XML::Parser (any) ok: found v2.34
    Checking for GD::Graph (any) ok: found v1.43
    Checking for GD::Text::Align (any) ok: found v1.18
    Checking for PatchReader (v0.9.4) ok: found v0.9.5
    Most ActivePerl modules are available at Apache's ppm repository.
    A list of mirrors is available at
    http://www.apache.org/dyn/closer.cgi/perl/win32-bin/ppms/
    You can add the repository with the following command:
    ppm rep add apache http://www.apache.org/dist/perl/win32-bin/ppms/
    Checking user setup ...
    This version of Bugzilla contains some variables that you may want
    to change and adapt to your local settings. Please edit the file
    './localconfig' and rerun checksetup.pl
    The following variables are new to localconfig since you last ran
    checksetup.pl: index_html cvsbin interdiffbin diffpath create_htaccess
    webservergroup db_driver db_host db_pass db_sock db_check
    C:\bugzilla>
    编辑 localconfig
    打开C:\Bugzilla\localconfig 找到上一个步骤创建的localconfig文件用记事本编辑它,内容如下,请对照是否有蓝字所标出的内容,如没有显示如下内容请在localconfig文件中修改。
    #
    # How to access the SQL database:
    #
    $db_host = "localhost"; # where is the database?
    $db_port = 3306; # which port to use
    $db_name = "bugs"; # name of the MySQL database
    $db_user = "bugs"; # user to attach to the MySQL database
    #
    # Enter your database password here. It's normally advisable to specify
    # a password for your bugzilla database user.
    # If you use apostrophe (') or a backslash (\) in your password, you'll
    # need to escape it by preceding it with a \ character. (\') or (\\)
    #
    $db_pass = 'shorelew';
    checksetup.pl
    再次运行checksetup.pl 。这时将创建数据库相关表和初始化Bugzilla。操作如下。
    C:\bugzilla>perl checksetup.pl
    Checking perl modules ...
    Checking for AppConfig (v1.52) ok: found v1.55
    Checking for CGI (v2.93) ok: found v3.10
    Checking for Data::Dumper (any) ok: found v2.121_04
    Checking for Date::Format (v2.21) ok: found v2.22
    Checking for DBI (v1.38) ok: found v1.48
    Checking for File::Spec (v0.84) ok: found v3.05
    Checking for File::Temp (any) ok: found v0.16
    Checking for Template (v2.08) ok: found v2.13
    Checking for Text::Wrap (v2001.0131) ok: found v2001.09293
    Checking for Mail::Mailer (v1.65) ok: found v1.67
    Checking for Storable (any) ok: found v2.13
    The following Perl modules are optional:
    Checking for GD (v1.20) ok: found v2.16
    Checking for Chart::Base (v1.0) ok: found v2.3
    Checking for XML::Parser (any) ok: found v2.34
    Checking for GD::Graph (any) ok: found v1.43
    Checking for GD::Text::Align (any) ok: found v1.18
    Checking for PatchReader (v0.9.4) ok: found v0.9.5
    Most ActivePerl modules are available at Apache's ppm repository.
    A list of mirrors is available at
    http://www.apache.org/dyn/closer.cgi/perl/win32-bin/ppms/
    You can add the repository with the following command:
    ppm rep add apache http://www.apache.org/dist/perl/win32-bin/ppms/
    Checking user setup ...
    Creating data directory (./data) ...
    Creating graphs directory...
    Creating .htaccess...
    Creating Bugzilla/.htaccess...
    Creating ./data/.htaccess...
    Creating ./template/.htaccess...
    Creating ./data/webdot/.htaccess...
    Precompiling templates ...
    Checking for MySQL Server (v3.23.41) ok: found v4.0.20a-debug
    Creating table user_group_map ...
    Creating table series_data ...
    Creating table longdescs ...
    Creating table dependencies ...
    Creating table components ...
    Creating table keywords ...
    Creating table cc ...
    Creating table duplicates ...
    Creating table groups ...
    Creating table flagtypes ...
    Creating table profiles ...
    Creating table products ...
    Creating table bugs_activity ...
    Creating table series_categories ...
    Creating table keyworddefs ...
    Creating table fielddefs ...
    Creating table group_control_map ...
    Creating table profiles_activity ...
    Creating table group_group_map ...
    Creating table user_series_map ...
    Creating table bugs ...
    Creating table series ...
    Creating table versions ...
    Creating table flagexclusions ...
    Creating table logincookies ...
    Creating table watch ...
    Creating table bug_group_map ...
    Creating table votes ...
    Creating table attachments ...
    Creating table flags ...
    Creating table milestones ...
    Creating table tokens ...
    Creating table flaginclusions ...
    Creating table quips ...
    Creating table namedqueries ...
    Creating initial dummy product 'TestProduct' ...
    Populating duplicates table...
    Creating duplicates directory...
    Migrating old chart data into database ...
    Adding group tweakparams ...
    Adding group editusers ...
    Adding group creategroups ...
    Adding group editcomponents ...
    Adding group editkeywords ...
    Adding group admin ...
    Adding group editbugs ...
    Adding group canconfirm ...
    Looks like we don't have an administrator set up yet. Either this is your
    first time using Bugzilla, or your administrator's privileges might have
    accidently been deleted.
    Enter the e-mail address of the administrator: shorelew@example.com
    You entered 'byron@example.com'. Is this correct? [Y/n] y
    Enter the real name of the administrator: shorelew
    Enter a password for the administrator account: shore
    Please retype the password to verify: shore
    'shorelew@example.com' is now set up as an administrator account.
    C:\bugzilla>
    参数配置
    现在就可以通过http://localhost/登陆Bugzilla,至此你就能使用等待以久的Bugzilla缺陷跟踪系统了,经过漫长的安装后,如果能和你一起分享安装成功的喜悦,可以写信给我噢!偶的MSN是:shorelew@hotmail.com
    打开登陆页面后,使用上面你输入的邮箱和密码就可以登陆了,在登陆页面右下角点选Parameters设置。
    Bugzilla其他信息
    Bugzilla汉化包
    http://bugzilla.org/download.html里能找到相应的bugzilla汉化包,本文的例子包使用的是2.20版本的。在包内有汉化的相关内容,很容易就能汉化。
    本文内容相关
    为了能更好的安装和调试Bugzilla,推荐下列网站,以供参考。
    http://httpd.apache.org/docs-2.0/mod/core.html#scriptinterpretersource http://support.microsoft.com/default.aspx?scid=kb;en-us;231998 http://support.microsoft.com/default.aspx?scid=kb;en-us;245225
    如果还有一些疑问,关于windows下在安装Bugzilla更详尽的内容请参考:http://www.bugzilla.org/docs/win32install.html
  • windows 下bugzilla的安装过程

    2009-09-23 14:36:03

    一.安装mysql

    双击安装文件

     

    进入MySql安装界面,点击next

     

    选择custom,点击next,(注意选择custom)

     

    更改安装目录为C:\MySQL,点击next

     

    目录没有问题,点击install进行MySql的安装,安装很快

     

    选skipsing-up跳过注册帐号,点击next,完成安装

     

    点击finish,完成MySql的安装,选中configure the mysql server now马上对MySQL进行配置

     

     

    点击next

     

     

    点next

     

     

    选择standard configuration 标准配置,点击next

     

    选中,点击next

     

    设置root密码,点击next

     

    执行配置,点击execute

     

    执行成功 点击finish

    接下来是对Mysql进行一些配置,需要建立BUG库,及使用该库的用户

     

    开始——运行cmd

     

    cd c:\mysql\bin

    mysql -u root –p

    输入刚安装Mysql时设置的密码

    我们用root帐号成功登陆mysql

     

    之后需要创建数据库,就是bugzilla所需要使用的数据库

    输入创建语句

    create database Bugs;

    之后为数据库创建用户名Bugs,密码是bugs,则执行如下命令:

    grant all privileges on bugs.* to 'bugs'@'localhost' identified by 'bugs';

    flush privileges;

    quit;

    set password for 'bugs'@'localhost' = OLD_PASSWORD('bugs');

    二. 安装ActiveState Perl 5.8.8及perl模块

    1.ActiveState Perl 5.8.8的安装只要默认就可以

    2.点击d:\perl\bin>ppm-shell.bat

     Ppm>rep add Bugzilla http://landfill.bugzilla.org/ppm 

    ActivePerl PPM的安装包地址有:

    针对版本5.8的有

    • http://www.bribes.org/perl/ppm, for the www.bribes.org Perl 5.8 repository
    • http://theoryx5.uwinnipeg.ca/cgi-bin/ppmserver?urn:/PPMServer58 (ActivePerl Build < 819) / http://theoryx5.uwinnipeg.ca/ppms/ (ActivePerl Build >= 819), for the uwinnipeg Perl 5.8 repository
    • http://trouchelle.com/ppm/, for the trouchelle Perl 5.8 repository
    • http://ppm.tcool.org/archives/, for the ppm.tcool.org Perl 5.8 repository

    针对版本5.10的有

    • http://www.bribes.org/perl/ppm, for the www.bribes.org Perl 5.10 repository
    • http://trouchelle.com/ppm10/, for the trouchelle Perl 5.10 repository
    • http://cpan.uwinnipeg.ca/PPMPackages/10xx/, for the uwinnipeg Perl 5.10 repository

    这几个地址有比较多的PPM安装包,也就是Perl模块的发布版本,直接可以用ActivePerl PPM 包管理器安装的

    到的D;/perl/bin的目录下使用perl-shell.bat

    执行 perl add bugzilla http://www.bribes.org/perl/ppm命令

    cmd到D:/bugzilla执行:perl checksetup.pl

    把没有安装的perl模块进行安装,安装完成的话,会出现自动创建表的信息。

    三 安装apache2.2.8-win32安装版apache2.2.8-win32

     

    默认安装即可,假设安装的路径是C:\Program Files\Apache Group 它将安装在C:\Program Files\Apache Group\Apache2。
    如果你已经运行了IIS,你在安装时配置apache运行在不同于80端口,否则你将不能访问。如果你的windows系统未安装IIS选择默认安装即可。
    允许Apache 可写
    创建如下目录:
    • C:\Bugzilla\data
    • C:\Program Files\Apache Group\Apache2\logs
    • C:\Temp
    配置httpd.conf文件
    在记事本中编辑 C:\Program Files\Apache Group\Apache2\conf\httpd.conf

    修改里面的黄色部分

    #
    # Listen: Allows you to bind Apache to specific IP addresses and/or
    # ports, instead of the default. See also the <VirtualHost>
    # directive.
    #
    # Change this to Listen on specific IP addresses as shown below to
    # prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
    #
    #Listen 12.34.56.78:80
    Listen 80

    #
    # DocumentRoot: The directory out of which you will serve your
    # documents. By default, all requests are taken from this directory, but
    # symbolic links and aliases may be used to point to other locations.
    #
    DocumentRoot "d:/Bugzilla"
    #
    # Each directory to which Apache has access can be configured with respect
    # to which services and features are allowed and/or disabled in that
    # directory (and its subdirectories).
    #
    # First, we configure the "default" to be a very restrictive set of
    # features.
    #
    <Directory />
    Options FollowSymLinks
    AllowOverride None
    </Directory>

    #
    # Note that from this point forward you must specifically allow
    # particular features to be enabled - so if something's not working as
    # you might expect, make sure that you have specifically enabled it
    # below.
    #
    #
    # This should be changed to whatever you set DocumentRoot to.
    #
    <Directory "d:/Bugzilla">

    #
    # AddHandler allows you to map certain file extensions to "handlers":
    # actions unrelated to filetype. These can be either built into the server
    # or added with the Action directive (see below)
    #
    # To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options" directive.)
    #
    AddHandler cgi-script. .cgi

    #
    # This should be changed to whatever you set DocumentRoot to.
    #
    <Directory "C:/Bugzilla">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important. Please see
    # http://httpd.apache.org/docs-2.0/mod/core.html#options
    # for more information.
    #

    Options Indexes FollowSymLinks ExecCGI
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    # Options FileInfo AuthConfig Limit
    #
    AllowOverride All
    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all
    #
    # Tell Apache to use Perl to execute .cgi
    #
    ScriptInterpreterSource Registry-Strict
    </Directory>
    You also should add index.cgi to the DirectoryIndex list.
    #
    # DirectoryIndex: sets the file that Apache will serve if a directory
    # is requested.
    #
    # The index.html.var file (a type-map) is used to deliver content-
    # negotiated documents. The MultiViews Option can be used for the
    # same purpose, but it is much slower.
    #
    DirectoryIndex index.html index.html.var index.cgi

    在注册表中创建
    HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command 编辑默认值为C:\Perl\bin\perl.exe -T

    #
    # The location and format of the access logfile (Common Logfile Format).
    # If you do not define any access logfiles within a <VirtualHost>
    # container, they will be logged here. Contrariwise, if you *do*

    # define per-<VirtualHost> access logfiles, transactions will be
    # logged therein and *not* in this file.
    #
    #CustomLog logs/access.log common

    重新启动 Apache
    最后,在命令行中重新启动Apache。
    C:\>net stop apache2
    The Apache2 service is stopping..
    The Apache2 service was stopped successfully.
    C:\>net start apache2
    The Apache2 service is starting.
    The Apache2 service was started successfully.
    C:\>

            

  • Bugzilla简明使用手则

    2009-09-17 13:57:24

    1      简介:

    BugzillaMozilla公司向我们提供的一个开源的免费缺陷跟踪工具。作为一个产品缺陷的记录及跟踪工具,它能够为你建立一个完善的Bug跟踪体系,包括报告Bug、查询Bug记录并产生报表、处理解决、管理员系统初始化和设置四部分。并具有如下特点:

    l       基于Web方式,安装简单、运行方便快捷、管理安全。

    l       有利于缺陷的清楚传达。本系统使用数据库进行管理,提供全面详尽的报告输入项,产生标准化的Bug报告。提供大量的分析选项和强大的查询匹配能力,能根据各种条件组合进行Bug统计。当错误在它的生命周期中变化时,开发人员、测试人员、及管理人员将及时获得动态的变化信息,允许你获取历史纪录,并在检查错误的状态时参考这一记录。

    l       系统灵活,强大的可配置能力。Bugzilla工具可以对软件产品设定不同的模块,并针对不同的模块设定开发人员和测试人员;这样可以实现提交报告时自动发给指定的责任人;并可设定不同的小组。设定不同的用户对Bug记录的操作权限不同,可进行有效的控制管理。允许设定不同的严重程度和优先级,可以在错误的生命期中管理错误,从最初的报告到最后的解决,都有详细的记录,确保了错误不会被忽略,同时,可以让开发人员将注意力集中在优先级和严重程度高的错误上。

    l       自动发送Email通知相关人员。根据设定的不同责任人,自动发送最新的动态信息,有效的帮助测试人员和开发人员进行沟通。

    2      Bugzilla操作流程:

     

    2.1   用户登录及设置流程:

    l       打开浏览器,输入Bugzilla服务器地址:http://ts.fulong.com.cn/bugzilla/

    l       进入主页面后,点击【新建帐号】,进入注册页面。

    l       在注册页面中输入E-Mail地址和用户代号,然后,点击【Create Account】,随后,你将收到一封包含初始密码的E-Mail

    l       在收到E-Mail之后,点击【登录】,在帐号栏输入注册时使用的E-Mail地址,在密码栏输入邮件里通知的初始密码,然后,点击【Login】。

    l       如忘记密码,在登陆页面中输入注册用户名,点击【Submit Request,根据收到的邮件进行重新设置密码。

    l       如果成功登录后,点击【Edit属性】->【帐号设置】,进行密码修改。

    l       点击【Edit属性】->【邮件设置】,进行邮件通知设置。

    l       点击【Edit属性】->【权限】,进行权限查询。

    2.2   Bug的处理流程概述:

    l       测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,通过Email通知项目组长或直接通知开发者。

    l       项目组长根据具体情况,重新reassigned分配给bug所属的开发者。

    l       开发者收到E-Mail信息后,判断是否为自己的修改范围。

    A.      若不是,重新reassigned分配给项目组长或应该分配的开发者;

    B.      若是,进行处理,resolved并给出解决方法。(可创建补丁附件及补充说明);

    l       测试人员查询开发者已修改的bug,进行重新测试。(可创建test case附件)

    A.      经验证无误后,修改状态为VERIFIED。待整个产品发布后,修改为CLOSED

    B.      还有问题,REOPENED,状态重新变为“New",并发邮件通知。

    l       如果这个BUG一周内一直没被处理过。Bugzilla就会一直用E-Mail骚扰它的属主,直到采取行动为止。

    2.3   一个Bug的生存周期图示:

     

    2.4   测试人员报告Bug的流程:

    l       请先进行查询,确认要提交的bug报告不会在原有纪录中存在,若已经存在,不要提交,若有什么建议,可在原有纪录中增加注释,告知其属主,让bug的属主看到这个后自己去修改。

    l       Bug不存在,创建一份有效的bug报告后进行提交。

    l       具体操作:点击【新建】,选择产品后,填写一个Bug报告的表格。填表注意:【指派给】为空则默认为设定的owner, 也可手工制定。【抄送】可为多人,需用逗号隔开。【描述】中要详细说明下列情况:

    A.      发现问题的步骤;

    B.      执行上述步骤后出现的情况;

    C.      期望应出现的正确结果。

    l       【平台】、【操作系统】、【优先级】、【严重级】,可以根据具体情况自行选择。

    l       【依赖】是指与这个新Bug有关联的Bug号码。

    l       Blocks】不太清楚J

    l       填写完毕之后,点击【Commit】提交,发送邮件通知给相关人员。

    2.5   Bug的不同处理状态解释:

    l       Bug的属主(owner)确认并接受这个Bug,然后给出解决方法,并填写【附加说明】,还可以【建立新的附件】(如:更改提交单)等等。

    l       开发人员可以调整的Bug状态如下:

    A.      FIXED                   =>    描述的问题已经修改;

    B.      INVALID               =>    描述的问题不是一个bug (输入错误后,通过此项来取消)

    C.      WONTFIX            =>    描述的问题将永远不会被修复;

    D.      LATER                  =>    描述的问题将不会在产品的这个版本中解决;

    E.      DUPLICATE        =>    描述的问题是一个存在的bug的复件;

    F.       WORKSFORME   =>    所有要重新产生这个bug的企图是无效的。如果有更多的信息出现,请重新分配这个bug,而现在只把它归档。

    l       测试人员收到Bug的修改通知之后,还可以做如下的调整:

    A.      Leave as RESOLVED FIXED       =>   保持FIXED状态不变;

    B.      Reopen bug                                     =>    这个bug还有问题,重新打开;

    C.      Mark bug as VERIFIED         =>   这个bug确实被正确修改了;

    D.      Mark bug as CLOSED                   =>   产品已经发布,将这个bug关闭。

    2.6   关于权限的说明:

    l       组内成员对bug具有查询的权利,但不能进行修改。

    l       Bugowner reporter 具有修改的权利。

    l       具有特殊权限的用户具有修改的权利。

     

    另:有关Bugzilla的安装请访问下面的连接:

    http://www.csdn.net/Develop/read_article.asp?id=24088

    http://www.csdn.net/Develop/read_article.asp?id=24091

    http://www.csdn.net/Develop/read_article.asp?id=24092

  • Testlink中关键字的作用

    2009-09-17 13:25:36

    Testlink手册中关于“关键字”的描述:
    3.3 Keywords
    Keywords were created to give users another level of depth when categorizing Test Cases.
    Keywords serve as a means of grouping Test Cases with some attribute within a Test
    Specification. For example, you can use it to define:
    • Regression or Sanity set
    • Reviewed Test Cases
    • Set of Test Cases valid for one platform
    Keyword Creation
    At this time keywords can only be created by users with the mgt_modify_key rights. These
    rights are currently held only by Leaders. Once a keyword or grouping of keywords has been
    created users may assign them to Test Cases.
    Illustration 6: List of related Test Plans is listed on the "View Test Case" page
    Assigning Keywords
    Keywords may be assigned to Test Cases either from the assign keyword screen (in batch) or
    via the Test Case management (individually).
    Filter by Keyword
    Users have the ability to filter by Keywords to:
    • Search Test Cases in Test Specification.
    • Add groups of Test Cases in a Test Case Suite (Test Plan).
    • Execute test screen.

    Testlink@Fulong 中的关键字及其解释如下表所示:

    < /tr>
    功能 功能测试
    针对产品的功能点进行测试
     
    可用 可用性测试
    测试用户是否能够满意使用。具体体现为操作是否方便,界面是否友好等。
     
    安全 安全性测试
    安全性和访问控制测试侧重于安全性的两个关键方面:
    应用程序级别的安全性,包括对数据或业务功能的访问
    系统级别的安全性,包括对系统的登录或远程访问。
     
    性能 性能测试
    性能测试主要测试软件的性能,包括负载测试,强度测试,数据库容量测试,基准测试以及基准测试
     
    恢复 恢复测试
    采用人工的干扰使软件出错,中断使用,检测系统的恢复能力,特别是通讯或网络相关的系统。恢复测试时,应该参考性能测试的相关测试指标。
     
    手动 手动测试
    需要人工干涉的测试
     
    正面 正面测试用例
    即输入是系统定义中合法的输入数据的用例
     
    自动 自动测试
    利用工具或脚本自动化测试
     
    负面 负面测试用例
    即输入[不是]系统定义中合法的输入数据的用例

  • 将BUGZILLA繁体中文语言包转换为简体中文的方法

    2009-09-17 13:20:44

    将BUGZILLA繁体中文语言包转换为简体中文的方法

    使用软件“GB/BIG5/UTF-8 文件编码批量转换程序”进行转换。
      软件版本:1.3
      编译日期:2006/06/15
      程序作者:阿勇(fxy_2002@163.com)
      作者主页:WWW.PC-SOFT.CN

     

    UTF-8 -> BIG5 -> GB -> UTF-8

  • 性能测试指标的计算

    2009-09-17 12:13:52

    从事软件测试快1年了,各方面的书籍和知识也看了不少,实践却不是很多,虽然学了不少非测试的知识,对软件工程也算有了比较清晰的认识,但对于把测试作为主要学习对象的我来说。测试上的技术还远远不够,测试工具的使用有待进一步的加强。所以,这里也把一些知识总结一下,方便自己以后查询和复习。

    1.介绍

    软件性能:是一种指标,是参考一定标准的表现,表明软件系统或构件对于其及时性要求的符合程度,即在相应的硬件和软件环境下,该软件系统应该达到的一个水平。另外,性能是一种特性,可以用时间和空间来进行度量。

    3种角度看性能:(1)用户角度:直观印象,主要是从响应时间来看;(2)管理员角度:建立在响应时间基础上,要考虑系统状态如系统资源的利用率,系统的扩展性和系统的稳定性;(3)开发人员:主要从系统架构,数据库设计,代码的优化来看待。

    2.主要关键词

    响应时间:对请求作出响应所需要的时间。web的普遍标准是2/5/10秒,即2秒以内的客户响应被认为是“非常好非常吸引人”的,5秒内是“比较不错”的,10秒是能接受的上限。但是响应时间具有相对性,如:一个月才进行一次的操作,20分钟是一个可以接受的等待时间。即:具体环境具体判断。

    用户并发数:主要取决于服务端和客户端的性能。对服务端来说,每个用户和服务断都是离散的,用比较形象的话来说,就是一群小孩对着一堵墙踢球,每个小孩都有一个球,具体多少个小孩,每个小孩每次对着墙踢球的时间是不确定的或有一定规律的。而墙能承受多少小孩踢球而不跨掉,便是一个用户并发数的问题。而对客户端来说,每个小孩踢球的时间都是根据自己的实际情况来决定的,即根据用户实际的业务场景来决定的。所以,系统的服务端能承受的最大并发访问数主要取决于并发用户数和业务场景,一般可以通过对服务器日志的分析可以得到。 并发数确定的理论公式:C=nL/T (C是平均的并发用户数,n是login session“用户从登陆系统到退出系统的时间段”,T是考察的时间段即用户可能使用系统的总时间段)C^=C+3根号C。

    例如:一OA系统,该系统有200用户,每天大约100人访问系统,一天内用户从登陆系统到退出系统的平均时间是4小时,一天内,用户最多使用8小时。

    那么可以得到C=200*4/8=100 (并发用户数)

    C^=100+3*根号100 (最大用户数)

    吞吐量:单位时间内系统处理的客户请求的数量,主要体现软件系统的性能承载能力。

    吞吐量的单位不定,可以是:请求数/秒,人数/天,业务数/小时……对于web系统来说,常用的是请求数(点击数)/秒或字节数/秒来体现

    计算公式:F=N*R/T

    F代表吞吐量,N代表Virtuae User的个数,R代表每个用户的请求数,T代表性能测试的时间

    可以看到上列公式在图表里显示理论上是一根平滑的斜线,理论上随着用户数的请求数增加,时间也跟着增加,如果实际测试中。系统的性能出问题时,即用户数增加到一定数量,系统不能及时处理,此时,图表表现出来就会发生变化。

    一般来说,2个不同的系统可能具有不同的用户数和用户使用模式,但如果具有基本一致的吞吐量,则可以说,他们具有基本相同的平均处理能力。

    性能计数器(Counter)是描述服务器或操作系统性能的一些数据指标。例如,对windows操作系统来说,使用内存数,进程时间等都是常见的计数器。

    思考时间:指用户在进行操作时,每个请求之间的间隔时间。

     

  • 性能测试指标的基本概念

    2009-09-17 12:04:25

    性能测试指标的基本概念


    吞吐量/处理能力
    处理能力又叫吞吐量,指的是单位时间内处理的客户端请求数量。通常情况下,吞吐量用请求数/秒Or页面数/秒来衡量。从业务角度看,吞吐量也可以用访问人数/天Or页面访问量/天来衡量。

    负载
    负载分为客户端负载和服务器端负载客户端负载的通俗解释就是有多少个用户在同时使用软件服务器端负载的通俗解释就是有多少个请求同时到达了服务器端,要求服务器进行处理。例如,某个网站当前有10000个人在线访问,从他们的客户端层面看过去,这个负载就是客户端负载,为10000。若某个网站当前有10000个人在线访问,某一时刻,从他们的客户端同时发出了1000个页面的请求到服务器,从服务器端层面看过去,这个负载就是服务器端负载,为1000。

    响应时间
    响应时间是可以判断一个被测应用系统是否存在性能瓶颈的最直观的要素。例如,在执行完性能测试后,发现某个交易的“平均响应时间”为8秒,超过了预先确定下来的性能指标“该交易的性能指标为平均响应时间要小于等于3秒”。此时,就可以认为被测应用系统存在性能瓶颈了,要利用一定的手段去探查被测应用系统中哪个地方引起了系统的处理效率低以及低的原因了。响应时间一般包括最大响应时间和平均响应时间,响应时间包括网络上的传输时间,WEB服务器上处理时间、APP服务器上的处理时间、DB服务器上的处理时间,响应时间不包括浏览器上的内容显示时间。

    同时在线用户
    对于一个网站来讲,当一个用户登录到该网站的首页后,开始在该网站上进行各种操作,包括浏览网页、检索内容、提交表单等,这个过程中的用户称为在线用户。若同一时间点或同一个时间段内,有很多这样的用户在访问该网站,这些用户统称为该网站的同时在线用户。同时在线用户的另一层理解是,将应用系统整体看作是一个黑盒子,从用户的客户端层面看向系统,总共有多少个人在使用它。当进行性能测试时,如果你使用的是同时在线用户,则可以称之为同时在线负载。

    超级并发用户
    对于一个网站来讲,可能存在WEB服务器、应用服务器、数据库服务器三个层次,而用户所使用的浏览器是在最外面的客户端层面。如果某个时间点或时间段内,共有1000个用户同时在线,他们进行着各种各样的操作,而某个时间点上可能存在10个左右的用户同时进行了一个或多个操作,导致WEB服务器同时接收到了10个左右的交易请求,我们称这个10个左右的用户为超级并发用户。当进行性能测试时,如果你使用的是超级并发用户,则可以称之为超级并发负载。

    性能测试脚本
    脚本是用负载模拟工具开发出来的。脚本是一些代码的组合体,它用代码来实现用户对应用系统的操作。例如,你在一个网站上访问首页、输入用户名和密码后点击登录按钮进行登录,这是用户对应用系统的两步操作内容,在脚本中则包含了实现这两个操作步骤的代码。如果你要模拟10000个用户的负载,这10000个用户中50%进行首页的访问、20%进行注册、20%进行查询、10%进行某个页面的浏览,则你需要制作5个脚本,分别是首页访问脚本、注册脚本、查询脚本、页面浏览脚本。

    事务
    事务是脚本的一个特性,每个事务都包含开始事务和结束事务。事务用来衡量脚本中一行代码或多行代码的执行所耗费的时间。你可以将开始事务放置在脚本中某行代码的前面,将结束事务放置在该行代码的后面,在该脚本的虚拟用户运行时,这个事务将衡量该行代码的执行花费了多长时间。

    交易
    交易分为业务层面和技术层面两种定义。业务层面交易是指完成一次完整的业务操作,例如进行一次取款、查询操作。技术层面的交易是指进行一次应用程序至应用程序、或者应用程序至数据库的系统操作。一般的一笔业务交易由多笔技术交易组成,根据业务交易的复杂度和系统应用架构的不同,其比例大致为1:2-1:10。

    TPS与HPS
    TPS (Transactions Per Second)是估算应用系统性能的重要依据。其意义是应用系统每秒钟处理完成的交易数量,尤其是交易类系统。一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值。依据经验,应用系统的处理能力一般要求在10-100左右。不同应用系统的TPS有着十分大的差别,一般需要通过性能测试进行准确估算。当系统没有达到性能瓶颈时,TPS随着负载的增加呈近似线性增长,当接近性能瓶颈时出现拐点;如果系统健壮性较好,在到达性能瓶颈后,TPS基本保持水平,不会再随着负载的增加而有显著增长;而如果系统存在比较严重的性能问题,当到达性能瓶颈后,TPS会出现明显的下降趋势。HPS:(Hits per Second)每秒点击次数,是指在一秒钟的时间内用户对Web页面的链接、提交按钮等点击总和它一般和TPS成正比关系,是B/S系统中非常重要的性能指标之一。
    TPS可以有多种衡量单位,在进行性能测试的业务模型分析时使用,例如:
    (1)在税务系统中,可以用“系统每个月要处理10万用户的业务操作”,这里的TPS用企业数/月来衡量;(2)在税务系统中,也可以用“系统在第七天的8个小时内要处理4万用户的业务操作”,这里的TPS用企业数/天来衡量;(3)在税务系统中,也可以用“系统在第七天的10点到11点之间要处理1.2万用户的3种缴税交易操作,即3.6万次缴税交易操作”,这里的TPS用交易数/小时来衡量;(4)在税务系统中,也可以用“系统在第七天的10点到11点之间要处理1.2万用户的3种缴税交易操作,即3.6万次缴税交易操作,每次缴税交易要从客户端向服务器发送平均10次HTTP请求,即36万次HTTP请求操作”,这里的TPS用请求数/小时来衡量。
    HPS是用来衡量很多用户使用客户端进行操作,向服务器发送请求的效率。我们认为HPS表现的是最终用户的整体行为,是衡量在线负载程度的一个指标。而TPS表现的是服务器端的程序行为,是衡量服务器处理能力高低的一个主要指标。
    例如:HPS=“点击次数/秒”;TPS=“处理事务数/秒”,HPS与TPS没有绝对的关系。

    性能测试实现的准确性
    在进行了正确的性能测试分析后,获得了正确的性能测试需求,从而使用性能测试工具开发相应的性能测试脚本、开发相应的性能测试场景、在性能测试脚本中利用性能测试数据、在性能测试脚本中设置相应的思考时间、在性能测试场景中设置运行的参数等,以期能利用自动化的性能测试工具模拟现实中大量用户同时访问被测系统的情形。即,如果性能测试工具操作不当,将会导致无法准确的实现“模拟实际情况”的目标。例如,某些性能测试工程师在使用性能测试工具时不懂得利用“检查点”这个功能,从而无法发现在性能测试执行过程中大量虚拟用户甚至没有登陆到系统中的严重问题,仍然认为性能测试执行效果良好,被测系统性能没有问题。

    Web服务器和APP服务器
    通俗的讲,Web服务器传送(serves)页面使浏览器可以浏览,然而应用程序服务器提供的是客户端应用程序可以调用(call)的方法(methods)。确切一点,你可以说:Web服务器专门处理HTTP请求(request),但是应用程序服务器是通过很多协议来为应用程序提供(serves)商业逻辑(business logic)。Web服务器(Web Server)Web服务器可以解析(handles)HTTP协议。当Web服务器接收到一个HTTP请求(request),会返回一个HTTP响应(response),例如送回一个HTML页面。为了处理一个请求(request),Web服务器可以响应(response)一个静态页面或图片,进行页面跳转(redirect),或者把动态响应(dynamic response)的产生委托(delegate)给一些其它的程序例如CGI脚本,JSP(JavaServer Pages)脚本,servlets,ASP(Active Server Pages)脚本,服务器端(server-side)Javascrīpt,或者一些其它的服务器端(server-side)技术。无论它们(译者注:脚本)的目的如何,这些服务器端(server-side)的程序通常产生一个HTML的响应(response)来让浏览器可以浏览。要知道,Web服务器的代理模型(delegation model)非常简单。当一个请求(request)被送到Web服务器里来时,它只单纯的把请求(request)传递给可以很好的处理请求(request)的程序(译者注:服务器端脚本)。Web服务器仅仅提供一个可以执行服务器端(server-side)程序和返回(程序所产生的)响应(response)的环境,而不会超出职能范围。服务器端(server-side)程序通常具有事务处理(transaction processing),数据库连接(database connectivity)和消息(messaging)等功能。虽然Web服务器不支持事务处理或数据库连接池,但它可以配置(employ)各种策略(strategies)来实现容错性(fault tolerance)和可扩展性(scalability),例如负载平衡(load balancing),缓冲(caching)。集群特征(clustering—features)经常被误认为仅仅是应用程序服务器专有的特征。
    应用程序服务器(The Application Server)根据我们的定义,作为应用程序服务器,它通过各种协议,可以包括HTTP,把商业逻辑暴露给(expose)客户端应用程序。Web服务器主要是处理向浏览器发送HTML以供浏览,而应用程序服务器提供访问商业逻辑的途径以供客户端应用程序使用。应用程序使用此商业逻辑就象你调用对象的一个方法(或过程语言中的一个函数)一样。应用程序服务器的客户端(包含有图形用户界面(GUI)的)可能会运行在一台PC、一个Web服务器或者甚至是其它的应用程序服务器上。在应用程序服务器与其客户端之间来回穿梭(traveling)的信息不仅仅局限于简单的显示标记。相反,这种信息就是程序逻辑(program logic)。 正是由于这种逻辑取得了(takes)数据和方法调用(calls)的形式而不是静态HTML,所以客户端才可以随心所欲的使用这种被暴露的商业逻辑。在大多数情形下,应用程序服务器是通过组件(component)的应用程序接口(API)把商业逻辑暴露(expose)(给客户端应用程序)的,例如基于J2EE(Java 2 Platform, Enterprise Edition)应用程序服务器的EJB(Enterprise JavaBean)组件模型。此外,应用程序服务器可以管理自己的资源,例如看大门的工作(gate-keeping duties)包括安全(security),事务处理(transaction processing),资源池(resource pooling), 和消息(messaging)。就象Web服务器一样,应用程序服务器配置了多种可扩展(scalability)和容错(fault tolerance)技术。 例如,设想一个在线商店(网站)提供实时定价(real-time pricing)和有效性(availability)信息。这个站点(site)很可能会提供一个表单(form)让你来选择产品。当你提交查询(query)后,网站会进行查找(lookup)并把结果内嵌在HTML页面中返回。网站可以有很多种方式来实现这种功能。我要介绍一个不使用应用程序服务器的情景和一个使用应用程序服务器的情景。观察一下这两中情景的不同会有助于你了解应用程序服务器的功能。
    情景1:不带应用程序服务器的Web服务器在此种情景下,一个Web服务器独立提供在线商店的功能。Web服务器获得你的请求(request),然后发送给服务器端(server-side)可以处理请求(request)的程序。此程序从数据库或文本文件(flat file,译者注:flat file是指没有特殊格式的非二进制的文件,如properties和XML文件等)中查找定价信息。一旦找到,服务器端(server-side)程序把结果信息表示成(formulate)HTML形式,最后Web服务器把会它发送到你的Web浏览器。简而言之,Web服务器只是简单的通过响应(response)HTML页面来处理HTTP请求(request)。
    情景2:带应用程序服务器的Web服务器情景2和情景1相同的是Web服务器还是把响应(response)的产生委托(delegates)给脚本(译者注:服务器端(server-side)程序)。然而,你可以把查找定价的商业逻辑(business logic)放到应用程序服务器上。由于这种变化,此脚本只是简单的调用应用程序服务器的查找服务(lookup service),而不是已经知道如何查找数据然后表示为(formulate)一个响应(response)。 这时当该脚本程序产生HTML响应(response)时就可以使用该服务的返回结果了。在此情景中,应用程序服务器提供(serves)了用于查询产品的定价信息的商业逻辑。(服务器的)这种功能(functionality)没有指出有关显示和客户端如何使用此信息的细节,相反客户端和应用程序服务器只是来回传送数据。当有客户端调用应用程序服务器的查找服务(lookup service)时,此服务只是简单的查找并返回结果给客户端。通过从响应产生(response-generating)HTML的代码中分离出来,在应用程序之中该定价(查找)逻辑的可重用性更强了。其他的客户端,例如收款机,也可以调用同样的服务(service)来作为一个店员给客户结帐。相反,在情景1中的定价查找服务是不可重用的因为信息内嵌在HTML页中了。总而言之,在情景2的模型中,在Web服务器通过回应HTML页面来处理HTTP请求(request),而应用程序服务器则是通过处理定价和有效性(availability)请求(request)来提供应用程序逻辑的。
    警告(Caveats)现在,XML Web Services已经使应用程序服务器和Web服务器的界线混淆了。通过传送一个XML有效载荷(payload)给服务器,Web服务器现在可以处理数据和响应(response)的能力与以前的应用程序服务器同样多了。另外,现在大多数应用程序服务器也包含了Web服务器,这就意味着可以把Web服务器当作是应用程序服务器的一个子集(subset)。虽然应用程序服务器包含了Web服务器的功能,但是开发者很少把应用程序服务器部署(deploy)成这种功能(capacity)(译者注:这种功能是指既有应用程序服务器的功能又有Web服务器的功能)。相反,如果需要,他们通常会把Web服务器独立配置,和应用程序服务器一前一后。这种功能的分离有助于提高性能(简单的Web请求(request)就不会影响应用程序服务器了),分开配置(专门的Web服务器,集群(clustering)等等),而且给最佳产品的选取留有余地。

    性能瓶颈
    性能瓶颈实际上就是一个软件的性能缺陷,最通俗的理解“性能瓶颈”。
    (1)硬件上的性能瓶颈主要指的是CPU、RAM方面的问题。例如,在进行软件需求分析、概要设计时,确定了在数据库服务器上需要6个CPU、12G内存,但是在测试时,发现CPU的持续利用率超过95%,这时可以认为在硬件上出现了性能瓶颈。
    (2)应用软件上的性能瓶颈一般指的是应用服务器、WEB服务器等应用软件,还包括数据库系统。例如,在WEBLogic平台上配置了JDBC连接池的参数,最大连接数为50,最小连接数为5,增加量为10。在测试时发现,当负载增加时,现有的连接数不足,系统会动态生成10个新的连接数,这样导致了交易处理的响应时间大大的增加。这时可以认为在应用软件上出现了性能瓶颈。
    (3)应用程序上的性能瓶颈,一般指的是开发人员新开发出来的应用程序。例如,用Java或者C开发出来的部署在应用服务器上用于用户交易请求处理的应用程序。例如,某个开发员开发了一个缴费处理程序,在测试时发现,这个缴费处理程序在处理用户发过来的并发缴费请求时,只能串行处理,无法并行处理,导致缴费交易的处理响应时间非常长,这时可以认为在应用程序上出现了性能瓶颈。
    (4)操作系统上的性能瓶颈,一般指的是Windows、Unix、Linux这些操作系统。例如,在windows系统中,虚拟内存设置的不合理,都指定为C驱提供虚拟内存,在测试时发现当出现物理内存不足时,虚拟内存的交换效果非常不理想,导致交易的响应时间大大增加。这时可以认为在操作系统上出现了性能瓶颈。
    (5)网络设备上的性能瓶颈,一般指的是防火墙、动态负载均衡器、交换机等设备。例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其它负载较轻的应用服务器上。在测试时发现,动态负载均衡机制没有起到相应的作用,这时可以认为在网络设备上出现了性能瓶颈。

     

  • vim使用技巧

    2009-09-17 11:19:36

    ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
      2 ;:文档来源: http://www.rayninfo.co.uk/vimtips.html                              
      3 ;:翻译参考: 没有记,请原作者见谅                                                
      4 ;:文档日期: 2006-10-13 11:19:04                                                 
      5 ;:更新记录:                                                                     
      6 ;:作  者: li3                                                                 
      7 ;:生成工具: 2Html.vim                                                           
      8 ;:blog.asp?name=li3                                         
      9 ;:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     10
     11 ;:--------------------------------------------------------------------------------
     12 ;:如果你使用的是MS-Windows,可能有的键已经被定义为Windows中的一些默认功能键。如果不
     13 ;:想这样,请编辑$VIM\mswin.vim
     14 ;:--------------------------------------------------------------------------------
     15 /joe/e                              ;: 设置光标到匹配"joe"的末尾
     16 /joe/e+1                            ;: 设置光标到匹配"joe"的末尾再后移一位
     17 /joe/s-2                            ;: 设置光标到匹配"joe“的开头再前移两位
     18 /joe/+3                             ;: 搜索“joe” 找到后将光标下移3行
     19 /^joe.*fred.*bill/                  ;: 匹配以'j'开头且"joe"到"fred"到"bill"之间至少有一个字符
     20 /^[A-J]\+/                          ;: 搜索行首非'A'到’J‘重复一次以上的行
     21 /begin\_.*end                       ;: 多行匹配
     22 /fred\_s*joe/i                      ;: 多行搜索可以是任何空白字符包括\n,\t等等
     23 /fred\|joe                          ;: 搜索fred或者joe
     24 /.*fred\&.*joe                      ;: 搜索同时包括fred跟joe的行
     25 /\<fred\>/i                         ;: 搜索独立的单词fred
     26 /\<\d\d\d\d\>                       ;: 搜索独立的4位数字
     27 /\D\d\d\d\d\D                       ;: 搜索恰好4位的数字
     28 /\<\d\{4}\>                         ;: 同/\<\d\d\d\d\>
     29 /\([^0-9]\|^\)%.*%                  ;: 查找以非0~9数字或在行首的%%所包括的内容
     30 ;:" 查找空行
     31 /^\n\{3}                            ;: 匹配三连续的空行
     32 ;:" 使用正则表达式组查找
     33 /\(fred\).*\(joe\).*\2.*\1
     34 ;:" 正则表达式重复
     35 /^\([^,]*,\)\{8}
     36 ;:" visual 下搜索
     37 :vmap // y/<C-R>"<CR>               ;: visually模式下的键盘映射,把//映射成匹配当前选中的文本
     38 :vmap <silent> // y/<C-R>=escape(@",'\\/.*$^~[]')<CR><CR>          ;: 包括空白字符
     39 ;:" \zs 和 \ze 匹配原 :h /\zs
     40 /<\zs[^>]*\ze>                      ;: 匹配<与>所包含的内容
     41 ;:" 零宽度匹配 :h /\@=
     42 /<\@<=[^>]*>\@=                     ;: 查找<与>所包含的内容
     43 /<\@<=\_[^>]*>\@=                   ;: 多行匹配<与>所包含的内容
     44 ;:" 多行查找 \_ 的意思是包括换行符
     45 /<!--\_p\{-}-->                     ;: 匹配<与>所包含的所有内容
     46 /fred\_s*joe/i                      ;: 匹配fred开始到joe,之间一定得是空白字符
     47 /bugs\(\_.\)*bunny                  ;: 匹配所有bugs到bunny的字符串
     48 :h \_                               ;: help
     49 ;:" 查找函数声明,nmap为normal模式下的键盘映射
     50 :nmap gx yiw/^\(sub\<bar>function\)\s\+<C-R>"<CR>
     51 ;:" 查找多个文件
     52 :bufdo /searchstr/                  ;: 在多个文件缓冲区里执行查找
     53 ;:" 更好的多文件查找定位方法
     54 :bufdo %s/searchstr/&/gic           ;: 在多个文件缓冲区里查找,按下n停止
     55 ;:" 怎样不使用 / 来查找网址
     56 ?http://www.vim.org/                ;: 向后查找
     57 ;:" 查找指定字符以外的字符串
     58 /\c\v([^aeiou]&\a){4}               ;: 查找4个辅音字母
     59 ;:-----------------------------------------------------------------------------
     60 ;:#替换
     61 :%s/fred/joe/igc                    ;: 普通替换命令
     62 :%s/\r//g                           ;: 删除 DOS 的换行符 ^M
     63 ;:" 你的文本文件是否乱七八糟的排成一行?使用如下命令
     64 :%s/\r/\r/g                         ;: 转换 DOS 回车符 ^M 为真正的回车符
     65 :%s= *$==                           ;: 删除行尾空白
     66 :%s= \+$==                          ;: 同上
     67 :%s#\s*\r\?$##                      ;: 删除尾部空白和dos换行符
     68 :%s#\s*\r*$##                       ;: 同上
     69 ;:" 删除空行
     70 :%s/^\n\{3}//                       ;: 删除连续3个空行
     71 :%s/^\n\+/\r/                       ;: 压缩空行,多个替换为一个
     72 :%s#<[^>]\+>##g                      ;: 删除html的tag部分
     73 :%s#<\_.\{-1,}>##g                  ;: 多行删除 html 的tags (非贪婪方式)
     74 ;:" IF YOU ONLY WANT TO KNOW ONE THING
     75 :'a,'bg/fred/s/dick/joe/igc         ;: 非常有用
     76                                     ;# 译释:''a,''b指定一个范围:mark a ~ mark b
     77                                     ;# g//用一个正则表达式指出了进行操作的行必须可以被fred匹配
     78                                     ;# 看后面,g//是一个全局显示命令
     79                                     ;# s/dick/joe/igc则对于这些满足条件的行进行替换
     80 ;:" 复制列
     81 :%s= [^ ]\+$=&&=                    ;: 复制最后一列
     82 :%s= \f\+$=&&=                      ;: 复制最后一列
     83 :%s= \S\+$=&&                       ;: 复制最后一列
     84 ;:" 记忆(反向引用)
     85 :s/\(.*\):\(.*\)/\2: \1/            ;: 将两个字段颠倒
     86 :%s/^\(.*\)\n\1$/\1/                ;: 删除重复行
     87 ;:" 非贪婪匹配 \{-}
     88 :%s/^.\{-}pdf/new.pdf/              ;: 删除第一个pdf
     89 ;:" use of optional atom \?
     90 :%s#\<[zy]\?tbl_[a-z_]\+\>#\L&#gc   ;: lowercase with optional leading characters
     91 ;:" 跨越尽量多的行
     92 :%s/<!--\_.\{-}-->//                ;: 删除多行注释
     93 :help /\{-}                         ;: 查看非贪婪匹配的更多帮助
     94 ;:" 使用寄存器替换
     95 :s/fred/<c-r>a/g                    ;: 将fred替换为寄存器a里的内容 #<c-r>为按下Ctrl与r
     96 :s/fred/<c-r>asome_text<c-r>s/g
     97 :s/fred/\=@a/g                      ;: 比较好的办法,不显示替换内容
     98 ;:" 在一行里写多种命令
     99 :%s/\f\+\.gif\>/\r&\r/g | v/\.gif$/d| %s/gif/jpg/
    100 :%s/a/but/gie|:update|:next         ;: 当使用 @: 来重复
    101 ;:" 或运算
    102 :%s/suck\|buck/loopy/gc             ;: 替换suck或者buck(这里|不是管道)
    103 ;:" 调用vim函数
    104 :s/__date__/\=strftime("%c")/       ;: 将__date__替换成当前日期,使用strftime函数
    105 ;:" 处理列,替换所有在第三列中的str1
    106 :%s:\(\(\w\+\s\+\)\{2}\)str1:\1str2:
    107 ;:" 交换第一列跟第四列
    108 :%s:\(\w\+\)\(.*\s\+\)\(\w\+\)$:\3\2\1:
    109 ;:" 过滤form中的内容放在寄存器里
    110 :redir @*|sil exec 'g#<\(input\|select\|textarea\|/\=form\)\>#p'|redir END
    111 :nmap ,z :redir @*<Bar>sil exec 'g@<\(input\<Bar>select\<Bar>textarea\<Bar>/\=form\)\>@p'<Bar>redir END<CR>
    112 ;:" 两位以上的数字减三(带进位。这个命令挺有趣)
    113 :%s/\d\+/\=(submatch(0)-3)/
    114 ;:" 包含loc或者functions的行中的数字加6
    115 :g/loc\|function/s/\d/\=submatch(0)+6/
    116 ;:" 比上面更好的方法
    117 :%s#txtdev\zs\d#\=submatch(0)+1#g
    118 :h /\zs                            ;查看帮助
    119 ;:" 前缀为gg的数字加6
    120 :%s/\(gg\)\@<=\d\+/\=submatch(0)+6/
    121 :h zero-width                      ;查看帮助
    122 ;:" 替换一个特定字符串为数字
    123 :let i=10 | 'a,'bg/Abc/s/yy/\=i/ |let i=i+1 ;# 将yy转换成10,11,12等等
    124 ;:" 比上面的更精确
    125 :let i=10 | 'a,'bg/Abc/s/xx\zsyy\ze/\=i/ |let i=i+1 # 将xxyy 转换成 xx11,xx12,xx13
    126 ;:" 将查找内容放入内存,然后用\zs进行简单替换
    127 :%s/"\([^.]\+\).*\zsxx/\1/
    128 ;:" 将xx替换为此行内容
    129 :nmap <leader>z :%s#\<<c-r>=expand("<cword>")<cr>\>#
    130 ;:" 将Vis选中的内容用<>括起来
    131 :vmap <leader>z :<C-U>%s/\<<c-r>*\>/
    132 ;:-----------------------------------------------------------------------------
    133 ;:" 下面举一些在替换中使用替换的例子
    134 ;:" 多种分符可以被用在替换中
    135 :%s,\(all/.*\)\@<=/,_,g             ;: 用 _ 替换 "all/"之后的 /  
    136 ;:" 同样的功能
    137 :s#all/\zs.*#\=substitute(submatch(0), '/', '_', 'g')#
    138 :s#all/#&^M#|s#/#_#g|-j!            ;" 查找断行,并合并为一行
    139 ;:" 在替换命令中使用替换
    140 :%s/.*/\='cp '.submatch(0).' all/'.substitute(submatch(0),'/','_','g')/
    141 ;:-----------------------------------------------------------------------------
    142 ;:" 全局显示命令
    143 :g/gladiolli/#                      ;: 查找并显示匹配的行号
    144 :g/fred.*joe.*dick/                 ;: 显示所有含有 fred,joe & dick的行
    145 :g/\<fred\>/                        ;: 显示单一单词fred
    146 :g/^\s*$/d                          ;: 删除所有空行
    147 :g!/^dd/d                           ;: 删除不含字符串''dd''的行
    148 :v/^dd/d                            ;: 同上
    149 :g/fred/,/joe/d                     ;: 删除所有的从fred到joe
    150 :g/-------/.-10,.d                  ;: 以-------为标记删除之前的10行
    151 :g/{/ ,/}/- s/\n\+/\r/g             ;: 删除 {...}之间的空行
    152 :v/\S/d                             ;: 删除空行
    153 :v/./,/./-j                         ;: 压缩空行
    154 :g/^$/,/./-j                        ;: 同上
    155 :g/<input\|<form/p                  ;: 或运算
    156 :g/^/put_                           ;: 双倍行宽 (pu = put)
    157 :g/^/m0                             ;: 颠倒文件 (m = move)
    158 :'a,'bg/^/m'b                       ;: 颠倒选中的 a 到 b
    159 :g/^/t.                             ;: 重复行
    160 :g/fred/t$                          ;: 拷贝行从fred到结尾
    161 :g/stage/t'a                        ;: 拷贝行从stage 到 marker a(a为标记的位置)
    162 :g/\(^I[^^I]*\)\{80}/d              ;: 删除最少包含80个tab的行
    163 ;:" 隔行替换
    164 :g/^/ if line('.')%2|s/^/zz /
    165 ;:" 查找标记a与b 间所有包含 "somestr"
    166 ;:" 复制所有"otherstr"后的行
    167 :'a,'bg/somestr/co/otherstr/        ;: co(py) or mo(ve)
    168 :'a,'bg/str1/s/str1/&&&/|mo/str2/   ;" 范围同上,进行替换
    169 :%norm jdd                          ;: 隔行删除
    170 ;:" 增加数字 (键入 <c-a>)            ;#在MS-Windows中<c-a>已经被定义为全选
    171 :.,$g/^\d/exe "norm! \<c-a>"        ;: 增加从当前行首到结尾的数字
    172 :'a,'bg/\d\+/norm! ^A               ;: 增加数字
    173 ;:" 保存全局命令的结果 (注意必须使用添加模式) 你需要使用 qaq 清空寄存器a.
    174 ;:"save results to a register/paste buffer 存储结果到 寄存器/粘贴 到 a
    175 :g/fred/y A                         ;: 添加配备行到寄存器到 a
    176 :g/fred/y A | :let @*=@a            ;: 放入复制缓冲区
    177 :let @a=''|g/Barratt/y A |:let @*=@a
    178 :'a,'b g/^Error/ . w >> errors.txt  ;" 将查找内容放入一个文件 (文件必须存在)
    179 ;:" 复制每一行,然后在复制出来的每一行两侧加上一个 print '复制出来的内容'
    180 :g/./yank|put|-1s/'/"/g|s/.*/Print '&'/
    181 ;:" 用文件中的内容替换字符串,-d 表示删除“标记”
    182 :g/^MARK$/r tmp.ex | -d
    183 ;:" 精致的显示方法
    184 :g/<pattern>/z#.5                   ;: 带行号显示  
    185 :g/<pattern>/z#.5|echo "==========" ;: 漂亮的显示  
    186 ;:" 用 g// 执行正常命令
    187 :g/|/norm 2f|r*                     ;: 替换第二个|为*
    188 ;:" 在新窗口中显示查找结果
    189 :nmap <F3> :redir @a<CR>:g//<CR>:redir END<CR>:new<CR>:put! a<CR><CR>
    190 ;:-----------------------------------------------------------------------------
    191 ;:" 全局命令和替换命令联姻 (强大的编辑能力)
    192 :'a,'bg/fred/s/joe/susan/gic        ;: 可以使用反向引用来匹配
    193 :g/fred/,/joe/s/fred/joe/gic        ;: 非行模式
    194 ;:-----------------------------------------------------------------------------
    195 ;:" 先找fred,然后找joe
    196 :/fred/;/joe/-2,/sid/+3s/sally/alley/gIC
    197 ;:-----------------------------------------------------------------------------
    198 ;:" create a new file for each line offile eg 1.txt,2.txt,3,txt etc
    199 ;:" 将每一行的内容存成一个文件,文件名为 行号.txt  如 1.txt,2.txt 等
    200 :g/^/exe ".w ".line(".").".txt"
    201 ;:-----------------------------------------------------------------------------
    202 ;:" 绝对精华
    203 ;:-----------------------------------------------------------------------------
    204 * # g* g#                           ;: 查找当前光标下的单词(单个单词) (<cword>) (向前/向后)
    205 %                                   ;: 匹配括号 {}[]()
    206 .                                   ;: 重复上次操作
    207 @:                                  ;: 重复上次的命令
    208 matchit.vim                         ;: 适%能匹配 <script> <?php等标记
    209 <C-N><C-P>                          ;: 插入模式下自动完成填词
    210 <C-X><C-L>                          ;: 行自动完成(超级有用)
    211 /<C-R><C-W>                         ;: 把单个<cword>单词放入搜索或者命令行
    212 /<C-R><C-A>                         ;: 把字符串中有的单词<CWORD>放入搜索或者命令行
    213 :set ignorecase                     ;: 忽略大小写
    214 :syntax on                          ;: 打开语法高亮 Perl,HTML,PHP 等等
    215 :h regexp<C-D>                      ;: 按ctrl+d得到包含regexp的列表
    216                                     ;:  (按tab自动不齐)
    217 ;:-----------------------------------------------------------------------------
    218 ;:" 简单编辑更新 _vimrc文件
    219 :nmap ,s :source $VIM/_vimrc        ;:普通模式下的键盘映射 ,s映射成加载用户目录下的_vimrc文件
    220 :nmap ,v :e $VIM/_vimrc             ;:,v映射成打开_vimrc文件
    221 ;:-----------------------------------------------------------------------------
    222 ;:#VISUAL 模式 (方便增加 HTML 标签)
    223 :vmap sb "zdi<C-R>z<ESC>            ;: 在 VISUALLY模式下将选中的文本前后分别加上
    224 :vmap st "zdi<?= <C-R>z ?><ESC>     ;: 加上 <?= ?>
    225 ;:-----------------------------------------------------------------------------
    226 ;:"vim 7 tabs
    227 vim -p fred.php joe.php             ;: 在新tab中打开文件
    228 :tabe fred.php                      ;: 在新tab中打开 fred.php
    229 :tab ball                           ;: 每一个文件一个tab
    230 ;:" vim 7  .vimrc 配置使用tabs
    231 :nnoremap gf <C-W>gf
    232 :cab      e  tabe
    233
    234 ;:-----------------------------------------------------------------------------
    235 ;:" 浏览
    236 :e .                                ;: 文件浏览器
    237 :Exp(lore)                          ;: 浏览文件
    238 :Sex(plore)                         ;: 分割窗口浏览文件
    239 :browse e                           ;: 打开windows 的 ‘选择文件’对话
    240 :ls                                 ;: 显示缓冲区
    241 :cd ..                              ;: 设置当前目录位置
    242 :args                               ;: 查看当前打开的所有文件
    243 :args *.php                         ;: 打开所有 *.php文件
    244 :lcd %:p:h                          ;: 改变路径到当前编辑的文件
    245 :autocmd BufEnter * lcd %:p:h       ;: 放入.vimrc自动完成上面的命令
    246 ;:-----------------------------------------------------------------------------
    247 ;:" 缓冲区浏览(一直排名前10的vim脚本)
    248 ;:" 需要 bufexplorer.vim http://www.vim.org/script.php?script_id=42
    249 \be                                 ;: 缓冲浏览器中查看缓冲列表
    250 \bs                                 ;: 同上,但是分割窗口
    251 ;:-----------------------------------------------------------------------------
    252 ;:" 转换大小写
    253 guu                                 ;: 将正行的字母转换成小写
    254 gUU                                 ;: 将正行的字母转换成大写
    255 Vu                                  ;: 转换选中的行(小写)
    256 VU                                  ;: 转换选中的行(大写)
    257 g~~                                 ;: 反向转换
    258 vEU                                 ;: 转换词大写
    259 vE~                                 ;: 反向转换词
    260 ggguG                               ;: 将当前编辑文件内容全部转换成小写
    261 ;:" Visually 模式下选择所有的字母及数字 (放入 .vimrc文件中)
    262 vmap ,c :s/\<\(.\)\(\k*\)\>/\u\1\L\2/g<CR>
    263 :%s/[.!?]\_s\+\a/\U&\E/g            ;:" 大写所有句子的第一个字母
    264 ;:-----------------------------------------------------------------------------
    265 gf                                  ;: 打开当前光标下或后的文件
    266 :nnoremap gF :view <cfile><cr>      ;: 打开当前光标下或后的文件, 如果不存在则创建
    267 ga                                  ;: 显示当前光标下单个字的ascii,十进制,十六进制……
    268 ggVGg?                              ;: 将整个文件用rot13编码……(谁看得懂啊~~hoho)
    269 ggg?G                               ;: 同上 (针对大文件)
    270 :8 | normal VGg?                    ;: 将第八行用rot13编码
    271 :normal 10GVGg?                     ;: 同上
    272 <C-A>,<C-X>                         ;: 增加,减少当前光标下的数字
    273                                     ;: win32 用户需要重定义 CNTRL-A
    274 <C-R>=5*5                           ;: 插入25 (小型计算器)
    275 ;:-----------------------------------------------------------------------------
    276 ;:" 几个彩蛋……
    277 :h 42                               ;: also http://www.google.com/search?q=42
    278 :h holy-grail
    279 :h!
    280 ;:-----------------------------------------------------------------------------
    281 ;:" 标记 & 移动
    282 '.                                  ;: 跳回最后编辑的行 (超有用)
    283 `.                                  ;: 同上,但是定位编辑点
    284 g;                                  ;: 跳转到比较旧的编辑位置(如果有的话) (vim6.3后的新功能)
    285 g,                                  ;: 这个是较心的位置 (同上)
    286 :changes :打出改变表
    287 :h changelist                       ;: 查看“改变表跳转”的帮助
    288 <C-O>                               ;: 依次沿着你的跳转记录向回跳 (从最近的一次开始)
    289 <C-I>                               ;: 依次沿着你的跳转记录向前跳
    290 :ju(mps)                            ;: 列出跳转轨迹
    291 :help jump-motions
    292 :history                            ;: 列出历史记录
    293 :his c                              ;: 命令行历史
    294 :his s                              ;: 搜索历史
    295 q/                                  ;: 搜索命令历史的窗口
    296 q:                                  ;: 命令行命令历史的窗口
    297 :<C-F>                              ;: 历史窗口
    298 ;:-----------------------------------------------------------------------------
    299 ;:" 缩写 & 映射
    300 :map <f7> :'a,'bw! c:/aaa/x
    301 :map <f8> :r c:/aaa/x
    302 :map <f11> :.w! c:/aaa/xr<CR>
    303 :map <f12> :r c:/aaa/xr<CR>
    304 :ab php                             ;: 查看以php开头的缩写
    305 :map ,                              ;: 列出所有的映射(以逗号开始的)
    306 ;:" 允许映射 F10 (win32)
    307 set wak=no                          ;: :h winaltkeys
    308 ;:" 映射中常使用的表示
    309 <CR>                                ;: 回车
    310 <ESC>                               ;: Esc
    311 <LEADER>                            ;: 右斜杠
    312 <BAR>                               ;: 管道符号
    313 <BACKSPACE>                         ;: 退格键
    314 <SILENT>                            ;: 不回显
    315 #显示自定义的 RGB 颜色显示当前光标下的字符串 例如 #445588
    316 :nmap <leader>c :hi Normal guibg=#<c-r>=expand("<cword>")<cr><cr>
    317 :map <f2> /price only\\|versus/     :在map中需要用反斜线 \
    318 ;:-----------------------------------------------------------------------------
    319 ;:" 简单的 PHP 调试将所有显示的变量放入寄存器a
    320 iab phpdb exit("<hr>Debug <C-R>a ");
    321 ;:-----------------------------------------------------------------------------
    322 ;:" 使用寄存器来映射 (放入 .vimrc文件自动加载)
    323 :let @m=":'a,'bs/"
    324 :let @s=":%!sort -u"
    325 ;:-----------------------------------------------------------------------------
    326 ;:" 列出寄存器
    327 :reg                                ;: 显示当前所有的寄存器
    328 :reg a                              ;: 显示寄存器a中的内容
    329 ;:"1p....                             ;: 引用一个叫1的寄存器
    330 :let @y='yy@"'                      ;: pre-loading registers (put in .vimrc)
    331 qqq                                 ;: 清空寄存器 "q"
    332 ;:-----------------------------------------------------------------------------
    333 ;:" 一些有用的决窍
    334 ;:"ayy@a                              ;: 把当前行作为命令执行
    335 yy@"                                ;: 上面的匿名寄存器
    336 u@.                                 ;: 只执行键入的命令
    337 ;:-----------------------------------------------------------------------------
    338 ;:" 从其它命令处获得输入(需要外部命令)
    339 :r!ls.exe                           ;: 从ls 获得输入插入到当前位置
    340 !!date                              ;: 从date获得输入(删除当前行)
    341 ;:" 使用外部sort排序
    342 :%!sort -u                          ;: 用sort排序整个文件(结果覆盖整个文件)
    343 :'a,'b!sort -u                      ;: 从mark a到mark b之间的内容进行排序
    344 !1} sort -u                         ;: 排序一个段落
    345 :g/^$/;,/^$/-1!sort                 ;: 排序一个选中内容 ( ; 号非常重要)
    346 ;:-----------------------------------------------------------------------------
    347 ;:" 多文件管理 (基本的)
    348 :bn                                 ;: 跳转到下一个buffer
    349 :bp                                 ;: 跳转到前一个buffer
    350 :wn                                 ;: 保存当前buffer并跳转到下一个buffer (超有用)
    351 :wp                                 ;: 保存当前buffer并跳转到前一个buffer
    352 :bd                                 ;: 把当前文件从buffer移出 (超有用)
    353 :bun                                ;: 卸载当前buffer (关闭这个窗口但是不移出)
    354 :badd file.c                        ;: 添加file.c到buffer列表
    355 :b 3                                ;: 前往第三个 buffer
    356 :b main                             ;: 前往含有main的buffer中 比如说 main.c
    357 :sav php.html                       ;: 把当前文件存为php.html并打开
    358 :sav! %<.bak                        ;: 换一个后缀名保存 (旧方法)
    359 :sav! %:r.cfm                       ;: 同上
    360 :sav %:s/fred/joe/                  ;: 替换文件名
    361 :sav %:s/fred/joe/:r.bak2           ;: 替换文件和后缀
    362 :!mv % %:r.bak                      ;: 重命名当前文件
    363 :help filename-modifiers
    364 :e!                                 ;: 打开未修改之前的文件
    365 :w c:/aaa/%                         ;: 存储文件到指定位置
    366 :e #                                ;: 编辑标记为#的文件在buffer中
    367 :rew                                ;: 返回到第一个可编辑的文件
    368 :brew                               ;: 回到第一个buffer
    369 :sp fred.txt                        ;: 分割窗口打开fred.txt
    370 :sball,:sb                          ;: 把所有的 buffers分割显示在一个窗口中 (超有用)
    371 :scrollbind                         ;: in each split window
    372 :map <F5> :ls<CR>:e #               ;: 按F5显示所有buffer, 并显示行号
    373 :set hidden                         ;: 允许不保存当前buffer而进行切换
    374 ;:-----------------------------------------------------------------------------
    375 ;:" 在分割窗口中快速切换
    376 map <C-J> <C-W>j<C-W>_
    377 map <C-K> <C-W>k<C-W>_
    378 ;:-----------------------------------------------------------------------------
    379 ;:" 录制命令 (最好的技巧)
    380 qq                                  ;:# 录制命令放入 q寄存器
    381 ..                                  ;:输入一些命令
    382 q                                   ;:# 录制结束
    383 @q                                  ;:执行放入寄存器q中的内容
    384 @@                                  ;:重复
    385 5@@                                 ;:重复5次
    386 ;:" 编辑一个 寄存器/录制
    387 "qp                                 ;:显示寄存器q中的内容(普通模式下)
    388 <ctrl-R>q                           ;:显示寄存器q中的内容 (插入模式下)
    389                                     ;:" 你现在可以看到记录内容,随便编辑
    390 "qdd                                ;:删除,重新存入q
    391 @q                                  ;:执行 录制/寄存器 q
    392 ;:" 在可视块中运行记录
    393 ;:1) 定义记录/寄存器
    394 qq:s/ to/ from/g^Mq
    395 ;:2) 定义可视块
    396 V}
    397 ;:3) 键入                               ;: 将显示下面信息
    398 :'<,'>
    399 ;:4)完成如下操作
    400 :'<,'>norm @q
    401 ;:-----------------------------------------------------------------------------
    402 ;:"宏记录的map (命令方式结束)
    403 nnoremap ] @q:w!<bar>bd
    404 ;:-----------------------------------------------------------------------------
    405 ;:" 可视化模式提供一种灵活易用的方法选择一块文本供操作符使用
    406 ;:" 记出
    407 v                                   ;: 进入可视化模式
    408 V                                   ;: 进入可视化行选择模式
    409 <C-V>                               ;: 进入可视化块选择模式
    410 gv                                  ;: 重新选择
    411 o                                   ;: 选择的区域头尾移动
    412 "*y                                 ;: 复制选择区域到paste buffer
    413 V%                                  ;: 选择一个匹配段
    414 V}J                                 ;: 合并一个段落
    415 V}gJ                                ;: 合并一个段落,并保留空格
    416 ;:-----------------------------------------------------------------------------
    417 ;:" 删除选中的10行的前两个字符(不过这里应该假设是紧凑的排版格式,不能包含空格、tab等字符的,可是经实验应该是钱3个字符才对啊??)
    418 0<c-v>10j2ld
    419 ;:-----------------------------------------------------------------------------
    420 ;:" 如何用可视块拷贝几列
    421 ;:" 可视块(并非通常的 v 命令)
    422 <C-V>,然后通过移动命令选择列 (win32 <C-Q>)
    423 然后执行 c,d,y,r 等命令
    424 ;:-----------------------------------------------------------------------------
    425 ;:"用一个块替换另一个块
    426 复制第一个块: ctrl-v move "ay
    427 复制第二个块: ctrl-v move cctrl-o "aP <esc>
    428 ;:-----------------------------------------------------------------------------
    429 ;:" _vimrc 基本设置
    430 :set incsearch                      ;: 输入搜索命令时,立即显示目前输入的模式对应的匹配。匹配的字符串被高亮。
    431 :set wildignore=*.o,*.obj,*.bak,*.exe  ;: tab补全时忽略这些忽略这些
    432 :set shiftwidth=3                   ;: 设置自动缩进为3个字符
    433 :set vb t_vb=".                     ;: 安静模式,关闭响铃跟闪烁
    434 :set browsedir=buffer               ;: 设置文件浏览使用的目录
    435                                     ;: 注:last 使用文件浏览器最近访问相同的目录。
    436                                     ;:     buffer 使用相关缓冲区的目录。
    437                                     ;:     current 使用当前目录。
    438                                     ;:     {path} 使用指定目录。
    439 ;:-----------------------------------------------------------------------------
    440 ;:" 启动windows中的IE
    441 :nmap ,f :update<CR>:silent !start c:\progra~1\intern~1\iexplore.exe file://%:p<CR>
    442 :nmap ,i :update<CR>: !start c:\progra~1\intern~1\iexplore.exe <cWORD><CR>
    443 ;:-----------------------------------------------------------------------------
    444 ;:" 在vim里打开ftp
    445 cmap ,r :Nread ftp://209.51.134.122/public_html/index.html
    446 cmap ,w :Nwrite ftp://209.51.134.122/public_html/index.html
    447 gvim ftp://www.somedomain.com/index.html # 使用 netrw.vim
    448 ;:-----------------------------------------------------------------------------
    449 ;:" 向寄存器中添加内容 (使用相应寄存器名称的大写)
    450 ;:" 复制5行放入a寄存器,然后向下跳转10行再复制5行
    451 "a5yy
    452 10j
    453 "A5yy
    454 ;:-----------------------------------------------------------------------------
    455 [I                                  ;: 显示当前行中字符的所有匹配(超级有用)
    456 ;:-----------------------------------------------------------------------------
    457 ;:" 常规缩进
    458 :'a,'b>>                            ;: 将mark a到mark b之间的内容进行两次缩进
    459 ;:" 虚拟模式下缩进 (可重复)
    460 :vnoremap < <gv                     ;: 这是一个虚拟模式下的键盘映射
    461                                     ;: < 映射为<gv " < 意为向内缩进,
    462                                     ;: gv 上面已有解释,为重复上次选区
    463                                     ;: <gv 也就是先向内缩进然后再选择刚才的选区
    464                                     ;: 这样就可以只按 < 实现重复缩进了
    465 :vnoremap > >gv                     ;: 向内缩进,原理同上
    466 ;:" 块缩进
    467 >i{
    468 >a{
    469 ;:" also
    470 >% and <%                           ;:自己试试看吧,涉及到用 { 的语言很有用,比如c,c++等
    471 ;:-----------------------------------------------------------------------------
    472 ;:" 重定向 & 粘贴到寄存器 * (*为寄存器名称)
    473 :redir @*                           ;: 重定向命令到paste缓冲区
    474 :redir END                          ;: 结束
    475 :redir >> out.txt                   ;: 重定向到文件
    476 ;:" 操作粘贴缓冲区
    477 "*yy                                ;: 复制到寄存器
    478 "*p                                 ;: 从寄存器中粘贴一行
    479 ;:" 复制到粘贴缓冲区 (扩展模式)
    480 :'a,'by*                            ;: 复制一个范围到粘
    480 :'a,'by*                            ;: 复制一个范围到粘贴寄存器
    481 :%y*                                ;: 复制一个括号匹配到粘贴缓冲区
    482 :.y*                                ;: 复制当前行到粘贴缓冲区
    483 ;:" 从剪贴板上过滤非可打印字符
    484 ;:" 当从一些 GUI 程序粘贴时会有用处
    485 :nmap <leader>p :let @* = substitute(@*,'[^[:print:]]','','g')<cr>"*p
    486 ;:-----------------------------------------------------------------------------
    487 ;:" 重新格式化文本
    488 gq}                                 ;: 合并一个段落
    489 gqap                                ;: 当前段落
    490 ggVGgq                              ;: 全部段落
    491 Vgq                                 ;: 当前行
    492 :s/.\{,69\};\s*\|.\{,69\}\s\+/&\r/g ;:" 在70列的时候换行
    493 ;:-----------------------------------------------------------------------------
    494 ;:" 命令使用于多个文件
    495 :argdo %s/foo/bar/e                 ;: 在所有文件上操做 :args
    496 :bufdo %s/foo/bar/e
    497 :windo %s/foo/bar/e
    498 :argdo exe '%!sort'|w! 
  • windows下openbravoERP的安装

    2009-09-16 10:07:08

    系统:       windows xp
    所需软件: 1.openbravoERP-2.35-windows-installer
                    2.oracleXE
                    3.apache-tomcat-6.0.14
                    4.jdk-6u2-windows-i586-p
                    5.apache-ant-1.7.0-bin
    安装步骤:
                   1.先安装jdk-6u2-windows-i586-p(默认路径)
                   2.安装apache-tomcat-6.0.14(默认路径)端口设置为8081
                   3.安装oracleXE 端口8080
                   4.安装apache-ant-1.7.0-bin直接以文件夹存放
                   5.系统设置:
                          我的电脑——属性——高级——环境变量——用户变量(JAVA_HOME=java中jdk文件夹的路径;ANT_HOME=ant文件夹的路 径;CATALINA_HOME=tomcat文件夹的路径;CATALINA_OPTS=-server -Xms=512M -Xms=512M)——系统变量(classpath=.;java中jdk文件夹中lib文件夹中tools.jar;java中jdk文件夹中 lib文件夹中dt.jar)(path=java中jdk文件夹中的bin目录;ant中的bin目录)
                  6.设置完毕后重启电脑
    注:以上安装时使用默认路径是为了便于安装,路径可以更改。
                  7.双击openbravoERP-2.35-windows-installer安装
                  8.安装时编译时间有点长需要等待安装完毕后初始用户名:Openbravo  初始密码:openbravo

  • vba练习

    2009-09-14 15:23:18

    1编写VBA代码,随机生成050之间的100个数字,放到一个sheet中;

    Sub RndNumber()

      Dim RndNumber, TempArray(99), i As Integer, a As Integer

     

      Randomize (Timer)

     

      For i = 0 To 50

          TempArray(i) = i

      Next i

      For i = 99 To 0 Step -1

         RndNumber = Int(i * Rnd)

         Cells(100 - i, 1) = TempArray(RndNumber) + 1

         TempArray(RndNumber) = TempArray(i)

      Next i

    End Sub

    2.编写VBA代码,将上面生成的数据中隔行抽取出来,分别放到另外两个sheet中;Public Sub Rowscopy()

    Dim nRows As Long

      Dim i As Long

      With Worksheets("sheet1")

                      nRows = .UsedRange.Rows.count

                      For i = nRows To 2 Step -1

                              If i Mod 2 = Odd Then

      Workbooks("luojing.xls").Sheets("sheet1").Rows(i).copy Workbooks("luojing.xls").Sheets("sheet2").Cells(i / 2, 1)

                              End If

                      Next

              End With

    End Sub

    3. .只用excel公式统计100个数字中等于30的个数

    Public Sub count()

    Dim a     As Range

     Dim nRows As Long

     Set a = Sheet1.Range("A1:A100")

      Dim i As Long

      Dim j As Long

      With Worksheets("sheet1")

                      nRows = .UsedRange.Rows.count

                      For i = nRows To 1 Step -1

                              If a.Cells(i, 1).Value = 30 Then

                      j = j + 1

                              End If

                      Next

      End With

             

       Sheets("sheet3").Cells(2, 1).Value = j

     

    End Sub

     

     

  • jmeter监控tomcat的内存和cpu的使用情况

    2009-09-08 15:12:56

    操作步骤:

    1.新建线程组

    2.添加http授权管理器:其中添加一个tomcat具有管理权限的用户名和密码。

    3.添加http取样器

    4.添加固定定时器,选择用作监视器

    5.添加监视器结果。

  • 安装oracle时候遇到的问题,“指定的SID在本机上已经存在”

    2009-08-31 16:44:58

    前置条件:

    卸载oracle9i,安装oracle10.2.0版本。遇到问题“指定的SID在本机上已经存在”。

    分析:问题出在oracle9i的卸载上。

    解决办法:

    1、   开始->设置->控制面板->管理工具->服务   停止所有Oracle服务。  
      2、   开始->程序->Oracle   -   OraHome81->Oracle   Installation   Products->   Universal   Installer   卸装所有Oracle产品,但Universal   Installer本身不能被删除    
      5、   运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。    
      6、   运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动   这个列表,删除所有Oracle入口。    
      7、   运行refedit,   HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,   删除所有Oracle入口。    
      8、   开始->设置->控制面板->系统->高级->环境变量   删除环境变量CLASSPATH和PATH中有关Oracle的设定    
      9、   从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标    
      10、   删除\Program   Files\Oracle目录    
      11、   重新启动计算机,重起后才能完全删除Oracle所在目录   12、   删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入   口目录及所有子目录,并从Windows   2000目录(一般为C:\WINNT)下删除以下文   件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。   13、   WIN.INI文件中若有[ORACLE]的标记段,删除该段    
      14、   如有必要,删除所有Oracle相关的ODBC的DSN    
      15、   到事件查看器中,删除Oracle相关的日志   说明:   如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,   安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了。  

  • ANT在编译java时候出现乱码

    2009-08-26 10:09:12

    今天遇到了ant在编译java时候出现乱码问题,解决方法如下

    1中文版本的 editplus 下操作的菜单结构如下: 文档->参数设置->文件->UTF-8签名->总是移除签名->确定
    注意:要统一eclipse的编码。

  • oracle10g中建立dns链接

    2009-06-16 16:28:46

    修改oracle配置文件

    文件的位置:c:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora

    建立的代码:

    MAHEE=

    (DESCRIPTION=

       (ADDRESS_LIST=

        (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.46)(PORT=1521))

        )

        (CONNECT_DATA=

          (SERVICE_NAME=pitts)

        )

    )

  • 1092/6<123456>

    数据统计

    • 访问量: 82539
    • 日志数: 144
    • 建立时间: 2008-10-07
    • 更新时间: 2013-06-01

    RSS订阅

    Open Toolbar