越来越觉得自己走测试这条路是对的,越来越觉得自己适合做测试,这么久以来兴趣一直在激发我前进,一直在寻找下一个站点,我相信测试路上我一定会走的很远,我的测试道路一定会很宽阔,努力就有收获,也希望还在测试路口迷惘的朋友,不要再犹豫了,因为你的犹豫不决,会使你错过很多~~~~~喜欢就去just do it ,因为只有尝试了才知道自己适不适合,喜不喜欢。如果一味的问别人,永远找不到最终的答案。因为每个人的感觉不一样,每个人的情况不一样,每个人的前提条件都不一样,你会得到不同的答案,这样只能会使你更迷茫~~~~

发布新日志

  • cygwin图文安装教程(一)

    2011-09-14 16:20:57

    安装 GCC   文章出处:

    http://hi.baidu.com/www100/blog/item/e985c717e656b601c93d6d10.html


    安装 GCC 最快捷的方式是在您的机器上安装完整的 Cygwin 环境。Cygwin 是 Windows 上类似于 Linux 的环境。它包括一个提供 UNIX 功能性基本子集的 DLL 以及在这之上的一组工具。安装好 Cygwin 之后,通常可以忽略它,即使您是命令行的爱好者,您仍能发现您活得更舒坦了。
    确保您具有相当快速的 Internet 连接。GCC 编译器及相关实用程序大约有 50 兆字节。另外确认您的连接是否需要一个代理服务器。这可通过您的 Internet 浏览器选项: 工具 -> Internet 选项 ->连接 ->局域网(LAN)设置来确定。
    确保在您的管理员帐户下安装这个程序,并选择为“所有用户”安装。
    将您的 Internet 浏览器指到
    www.cygwin.com
    。在屏幕的中央是一个黑绿两色组成的 “C” 徽标,标题是“Install or update now.”。在该链接上点击,这将下载一个小程序 setup.exe(250KB)。这个安装程序将在您的机器上引导 Cygwin 环境的安装或更新过程。
    运行安装程序
    将 setup.exe 下载到一个已知地方,如桌面,然后运行它。
    它将打开安装向导,如下图所示:
    图 1. Cygwin 环境的安装向导


    点击 Next按钮。
    选择下载位置
    在这个页面上,选择"Install from Internet"。
    图 2. 选择安装类型


    点击 Next按钮。
    选择一个安装目录
    在这个页面上,选择执行 Cygwin 所在的目录。
    设置图3所示的剩余选项。
    图 3.选择一个安装目录


    点击 Next按钮。
    选择一个临时安装目录
    在这个页面(图4),为安装包选择一个临时目录。当 Cygwin 安装完成后,您可以删除这个目录和它的内容。
    注意安装程序记住了这个目录,并在更新时只下载比这个目录中的包更新的版本。如果您删除这个目录并重新安装, setup将重新安装您选择的所有内容而不管这些包的安装程序在运行目录中已经存在。
    图 4.选择一个临时安装目录


    点击 Next按钮。
    指定您的 Internet 连接
    在这个页面上(图5),指定 Internet 连接。如果你有代理服务器,选择“使用 IE5 设置”,或从您的浏览器选项获得服务器名,选择使用代理,然后输入代理服务器的主机名和端口号。
    图 5. 选择连接类型


    点击 Next按钮。
    选择下载站点
    在这个页面上(图6),选择一个下载站点。因为这些站点是义务的镜像,所以选择一个下载点有点风险(通常它们是可用的,但有时不可用)。通常,试试离你比较近的那个站点。
    图6. 选择一个下载站点


    点击 Next按钮。
    选择包进行安装
    在这个页面上,您将选择要安装的包。默认情况下,Cygwin 基本包将不安装 GCC,因此,您必须修改默认设置。
    将鼠标移动到 Devel边的加号(+)上,然后点击它展开 Devel类。
    图 7. 选择包进行安装

    在你还没确定哪些需要哪些不需要时,最好全部下载,点击All后的default为install。即是完全安装了。保证了GCC编辑器的使用。

    您会看到在 Devel 下有许多入口,其中只有三个是您需要的,次序如下:

  • binutils
  • gcc
  • gcc-mingw
    不是所有默认的基本包都需要运行 GCC,但它们不太大,因此为简单化,就安装它们。
    注意很容易选错包或版本,尤其在重新安装的时候,因为选择窗口中的循环按钮是不标准的。在这一步我们建议的就是多加小心,尤其是有多个 GCC 版本的情况下。
    为选择这三个包,点击列 New中每个双向箭头直到显示每个包的版本号。根据您机器上已安装的以及镜像上所拥有的合适的版本,列入口在各图标间循环:


    如果有多个版本可用,选择数字最大的一个。要下载二进制文件,确保选中了“Bin”列的复选框。
    图 9. 下载二进制文件


    完成下载
    选择完三个包之后,Cygwin 就访问选择的镜像主机,然后下载那三个包以及默认的基本包。根据您的连接速度这将持续几分钟,在安装期间,将打开和关闭许多弹出窗口。
    因为存放 Cygwin 安装的镜像站点是义务的,有时不可用或负荷过重。如果发现选择的镜像没有响应,就按取消 ( Cancel),这将终止整个安装程序。
    惟一的办法就是重新开始安装并选择另一个镜像;这非常让人感到沮丧。幸运的是,安装程序记住了大多数您上次所做的,因此通常取默认情况。在重新选择正确的包时必须小心,因为在后面的安装中不帮你选择这些内容。
    setup程序然后询问是否在您的桌面或开始菜单创建一个 Cygwin 快捷键。该快捷键启动 Cygwin shell (称为 bash), 这对我们计划中的 DB2 使用并不是必须的,但对测试我们的安装是有用的。因此让 setup至少创建一个桌面快捷键。我们将在安装的后面使用它。
    最后,点击 Finish按钮。我们将在
    后面
    测试安装结果。
    图 10. 完成安装
  • 如果还肯不明白,我这有个视频教程,需要的跟我联系!
  • File类型中Unique参数选择类型的详解

    2011-09-09 12:20:15

    MILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在LoadRunner中进行参数化时,Parameter的取值设置有以下相关参数:
           
    取值方式:
    Sequence
    :顺序
    Random
    :随机
    Unique
    :唯一
           
    改变(更新)取值的时机:l
    Each Iteration
    :每次迭代
    Each Occurrence
    :每次出现
    Once
    :只改变一次

    (在此,我只讨论Unique的参数设置,其他相关参数会在其他文章中详谈)
    当我们取值方式选为Unique/更新取值时机选为Each Iteration时,还有一个选项可设置,那就是:allocate Vuser values in the controller:它有两个选项:1automatically allocate block size;2allocate _____values for each Vuser. 因为我们选择了每次迭代更新取值的方式,所以可以指定是由系统自动分配Vuser的参数值数量,还是人为指定为每个Vuser分配的参数值数量。

    我们以某网站登录功能为例来做分析:
    先来看一下登录界面:
    登录
    用户名:        {T_name}
    密码:
            {Pwd}
    确认密码:
            {Pwd}
    登录        取消


    一、我们选择由系统自动分配Vuser参数值数量的选项,即勾选automatically allocate block size

    1
            首先我们准备一些登陆用的数据,包括用户名,密码

    编号        用户名:        密码:
    1        T_username01        Pwd01
    2        T_username02        Pwd02
    3        T_username03        Pwd03
    4        T_username04        Pwd04
    5        T_username05        Pwd05

    2
            分析user的参数值列表、Vuser数和迭代次数的关系:
    首先确定我们是使用Vuser虚拟多个用户通过调用多个user的参数值来实现模拟操作动作的,那一个Vuser使用的user参数值的多少就会和Iteration迭代的次数有直接关系。好,我们来看下面这个分析表:

    解释格式:(以1*22*23*1为例)
                   
    以分号分割,表示不同的Vuser:共3Vuser
                   
    第一位数字表示Vuser的编号:3*1表示第3
    Vuser
                   
    第二位数字表示分配得到的user参数值的数量:1*2表示第一个Vuser得到2user参数值

    User
    参数值的数量
    (以5个为例)        迭代次数        最大允许Vuser        最大Vuser数量下的分配情况
    5        1        5        1*1
    2*13*14*15*1
    5        2        3        1*2
    2*2
    3*1
    5        3        2        1*3
    2*2
    5        4        2        1*4
    2*1
    5        5        1        1*5

    同样的分析方法,我们刚刚分析的最大允许Vuser数量,实际你可以取小于它的值,比如:

    User
    参数值的数量
    (以5个为例)        迭代次数        最大允许Vuser        最大Vuser数量下的分配情况
    5        2        2        1*2
    2*2
    注:比较和上表中的第二行数据,会发现:当我的每一个Vuser满足了自己的迭代次数,且参数数量够分配时,剩下的未用的1个参数就被忽略了

    (当user参数值数量小于迭代次数时,具体的分配方式和另一个选项有关:1、中止;2、循环Vuser分配到的列表;3、只循环最后一个列表项;这部分内容放到文章最下面 ^_^ ,现在可以默认选在2上)

    同样,我们可以分析一下10User参数值的时候
    User
    参数值的数量
    (以5个为例)        迭代次数        最大允许Vuser        最大Vuser数量下的分配情况
    10        1        10        1*1
    2*13*14*15*16*17*18*19*110*1
    10        2        5        1*2
    2*23*24*2
    5*2
    10        3        4        1*3
    2*33*3
    4*1
    10        4        3        1*4
    2*4
    3*2
    10        5        2        1*5
    2*5
    10        6        2        1*6
    2*4
    10        7        2        1*7
    2*3
    10        8        2        1*8
    2*2
    10        9        2        1*9
    2*1
    10        10        1        1*10

    由此,我们可以推导出有关User参数值数量、迭代次数和最大允许Vuser数的数学公式:

    令:        User参数值数量——ParamNum
                   
    迭代次数
    ————IteraNum
                   
    最大允许Vuser
    ——MaxVuser
    则公式如下:

           
    ParamNum%IteraNum=0               l MaxVuser= ParamNum/IteraNum        
           
    ParamNum%IteraNum=0         l
          MaxVuser= ParamNum/IteraNum+1

    二、我们选择人为分配Vuser参数值数量的选项,即勾选allocate _____values for each Vuser.并在空格中填入数量(我们以2为例来分析)


    这种方式要比上面的分析方法简单些。
    1
            还是用上面user的参数值列表为例
    2
            分析user的参数值列表、Vuser数和迭代次数的关系:
    User
    参数值的数量

    (以5个为例)        迭代次数        Vuser的分配情况
    5        1        1*2
    2*23*1
    5        2        1*2
    2*2
    3*1
    5        3        1*2
    2*2
    3*1
    5        4        1*2
    2*2
    3*1
    5        5        1*2
    2*2
    3*1
    当最后一个Vuser分配到的参数列表数量不够迭代次数时,那它分配到几个就用当前的几个参数进行迭代。

    三、最后一个相关选项:
     
    l       When out of values:
    1
            中止:
    abort Vuser
    2
            循环Vuser分配到的列表

    3
            只循环最后一个列表项

    1
    、现在我们假设选定2
    比如迭代3次时:
    假设Vuser1得到的参数值为:T_username01T_username02
    那么迭代结果:T_username01T_username02
    T_username01
    迭代4次结果:T_username01T_username02 T_username01
    T_username02
    3
            现在我们选定3

    同样的迭代3次时:
    假设Vuser1得到的参数值为:T_username01T_username02
    那么迭代结果:T_username01T_username02
    T_username02
    迭代4次结果:T_username01T_username02 T_username02T_username02

  • 打打气

    2011-08-31 11:25:08

    前两天还觉的对loadrunner一下子明白了,会了,可是今天又发现,原来一点都不懂,啥情况?理论高于实践,真的是眼高手低啊,嘿嘿,慢慢来,淡定一下,唠叨几句,继续去“迷茫”。边工作,边学习,真的好充实哦。不过要分清先后,嗯,工作第一,学习第二,必须在保证工作完成的前提下,再去学习,提高。哈哈,发现有个缺点就是,正研究的尽兴时,有点头绪时,就会被工作的事情给打断,忙完了,啥头绪都木有啦。杯催呀。

    想想这几年,做过网站设计,web测试 ,跨越了,门户网,银行,保险也积累了不少东西。继续积累下金融行业的项目。在一个圈子里混混。呵呵,下一个目标,自动化,性能。再下一步,嘿嘿,先在心里想想。一切都按当初入行时的职业规划在走。很好。

    只不过发现好久没有好好过周未了,下周又要去参加QTP培训。两年前玩儿过这东西,不过,今天有机会有人培训,可以不用闭门造车了,有机会就要去听听,见识见识大强们的风采,自己也拔高拔高。加油,给自己打打气,没有做不到的事,人和人一样,别人能做的,自己也可以搞定,人和人的差距还是不能拉的太大滴。

  • 小强老师,LoadRunner视频讲座。

    2011-08-31 11:05:31

    0 性能测试常见用语http://www.boobooke.com/v/bbk1577
    1 lr目录分析http://www.boobooke.com/v/bbk1574
    2.1 lr界面分析http://www.boobooke.com/v/bbk1735
    2.2 lr界面分析http://www.boobooke.com/v/bbk1736
    2.3 lr界面分析http://www.boobooke.com/v/bbk1737
    3 lr常用术语http://www.boobooke.com/v/bbk1620
    4 hp web tours 分析http://www.boobooke.com/v/bbk1762
    5 lr录制测试脚本http://www.boobooke.com/v/bbk1763
    6 lr回放测试脚本http://www.boobooke.com/v/bbk1764
    7 HTML和URL比较http://www.boobooke.com/v/bbk1771
    8 lr自动关联http://www.boobooke.com/v/bbk1778
    9 lr测试脚本的增强方法http://www.boobooke.com/v/bbk1772
    10 run time settings: http://www.boobooke.com/v/bbk1782
    11 lr脚本编写实践过程http://www.boobooke.com/v/bbk1781
    12 错误处理http://www.boobooke.com/v/bbk1776
    13 脚本调试http://www.boobooke.com/v/bbk1777
    14 java虚拟用户http://www.boobooke.com/v/bbk1901
    15 调用dll:http://www.boobooke.com/v/bbk1900
    16 lr录制sql脚本http://www.boobooke.com/v/bbk1526
    17 创建负载测试场景http://www.boobooke.com/v/bbk2145
    18 面向目标的场景http://www.boobooke.com/v/bbk2168
    19 分析场景http://www.boobooke.com/v/bbk2144
    20 lr手动关联http://www.boobooke.com/v/bbk2161
    21 配置端口映射http://www.boobooke.com/v/bbk2163
    22 性能分析基础知识http://www.boobooke.com/v/bbk2162
    23 LR使用指南-第一部分基础知识完结篇http://www.boobooke.com/v/bbk2201
  • loadrunner视频

    2011-08-26 15:35:54

    小布老师视频:
    测试工具概述,兼LoadRunner介绍 -1-4
    http://www.boobooke.com/v/bbk1046
    http://www.boobooke.com/v/bbk1046.zip
    http://www.boobooke.com/v/bbk1047
    http://www.boobooke.com/v/bbk1047.zip
    http://www.boobooke.com/v/bbk1048
    http://www.boobooke.com/v/bbk1048.zip
    http://www.boobooke.com/v/bbk1055
    http://www.boobooke.com/v/bbk1055.zip
    LR系列培训视频  - LoadRunner概述(上下)
    http://www.boobooke.com/v/bbk1059
    http://www.boobooke.com/v/bbk1059.zip
    http://www.boobooke.com/v/bbk1060
    http://www.boobooke.com/v/bbk1060.zip
    LR系列培训视频  - LoadRunner安装
    http://www.boobooke.com/v/bbk1061
    http://www.boobooke.com/v/bbk1061.zip
    LR系列培训视频  - 录制和回放测试脚本(1-3)
    http://www.boobooke.com/v/bbk1063
    http://www.boobooke.com/v/bbk1063.zip
    http://www.boobooke.com/v/bbk1064
    http://www.boobooke.com/v/bbk1064.zip
    http://www.boobooke.com/v/bbk1065
    http://www.boobooke.com/v/bbk1065.zip
    LR系列培训视频 - LoadRunner测试Tuxedo应用系统 1-4
    http://www.boobooke.com/v/bbk1067
    http://www.boobooke.com/v/bbk1067.zip
    http://www.boobooke.com/v/bbk1068
    http://www.boobooke.com/v/bbk1068.zip
    http://www.boobooke.com/v/bbk1071
    http://www.boobooke.com/v/bbk1071.zip
    http://www.boobooke.com/v/bbk1072
    http://www.boobooke.com/v/bbk1072.zip
    开源性能测试工具Curl-Loader快速实战 - 1
    http://www.boobooke.com/v/bbk1808
    http://www.boobooke.com/v/bbk1808.zip
    开源性能测试工具Curl-Loader快速实战 - 2
    http://www.boobooke.com/v/bbk1809
    http://www.boobooke.com/v/bbk1809.zip
    开源性能测试工具Curl-Loader快速实战 - 3
    http://www.boobooke.com/v/bbk1835
    http://www.boobooke.com/v/bbk1835.zip
    开源性能测试工具Curl-Loader快速实战 - 4
    http://www.boobooke.com/v/bbk1836
    http://www.boobooke.com/v/bbk1836.zip
    使用LoadRunner测试Oracle实例研究 - 1
    http://www.boobooke.com/v/bbk2159
    http://www.boobooke.com/v/bbk2159.zip
    使用LoadRunner测试Oracle实例研究 - 2
    http://www.boobooke.com/v/bbk2170
    http://www.boobooke.com/v/bbk2170.zip
    使用LoadRunner测试Oracle实例研究 - 3
    http://www.boobooke.com/v/bbk2171
    http://www.boobooke.com/v/bbk2171.zip
  • Loadrunner脚本录制常见问题整理

    2011-08-26 15:27:07

    1.LoadRunner录制脚本时为什么不弹出IE浏览器?

      当一台主机上安装多个浏览器时,LoadRunner录制脚本经常遇到不能打开浏览器的情况,可以用下面的方法来解决。

      启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需要重启动)”的勾选,然后再次运行VuGen即可解决问题

      提示:通常安装Firefox等浏览器后,都会勾选上面得选项,导致不能正常录制。因此建议运行LoadRunner得主机上保持一个干净的测试环境。

      2.录制Web脚本时,生成的脚本中存在乱码该如何解决?

      录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Support charset”,然后选择中支持UTF-8。再次录制,就不会出现中文乱码问题了。

      3.HTML-based script与URL-based script的脚本有什么区别?

      使用“HTML-based script”的模式录制脚本,VuGen为用户的每个HTML操作生成单独的步骤,这种脚本看上去比较直观;使用“URL-based script”模式录制脚本时,VuGen可以捕获所有作为用户操作结果而发送到服务器的HTTP请求,然后为用户的每个请求分别生成对应方法。

      通常,基于浏览器的Web应用会使用“HTML-based script”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的JavaScript/VBScript代码、基于浏览器的应用中使用了HTTPS安全协议,这时使用“URL-based script”模式进行录制。

      4.为什么脚本中添加了检查方法Web-find,但是脚本回放时却没有执行?

      由于检查点功能会耗费一定的资源,因此LoadRunner默认关闭了对文本及图像的检查。要想开启检查功能,必须修改运行时的配置Run-time Setting。

      进入“Run-time Setting”对话框,依次进入“Internet Protocol→Preferences”,勾选Checks下的“Enable Image and text check”选项即可。

      检查执行结果时推荐使用web_reg_find方法。

      5.运行时的Pacing设置主要影响什么?

      Pacing主要用来设置重复迭代脚本的间隔时间。共有三种方法:上次迭代结束后立刻开始、上次迭代结束后等待固定时间、按固定或随机的时间间隔开始执行新的迭代。

      根据实际需要设置迭代即可。通常,没有时间间隔会产生更大的压力。

      6.运行时设置Log标签中,如果没有勾选“Enable logging”,则手工消息可以发送吗?

      Enable logging选项仅影响自动日志记录和通过lr_log_message发送的消息。即使没有勾选,虚拟用户脚本中如果使用lr_message、lr_output_message、lr_error_message,仍然会记录其发出的消息。

      7.LoadRunner 8.0版本的VuGen在录制Web Services协议的脚本时一切正常,而回放时报出错误提示“Error:server returned an incorrectly formatted SOAP response”。这时说明原因引起的?

      造成这种情况的主要原因是LoadRunner 8.0的VuGen在录制Web Service协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为,因此会有上面的错误提示。

      解决方法:把“LR80WebservicesFPI_setup.exe”和“lrunner_web_sevices_path_1.exe”两个补丁打上即可解决。

      8.VuGen支持Netscape的客户证书吗?

      不支持。目前的VuGen 8.0版本中仅支持Internet Explorer的客户端证书。录制脚本时可以先从Netscape中导出所需的证书,然后将其导入到Internet Explorer中,并确保以相同的顺序导出和导入这些证书。而且,在每台将要录制或运行需要证书的Web Vuser脚本的计算机上都要重复执行前面的过程。

      9.VuGen会修改录制浏览器中的代理服务器设置吗?

      会修改。在开始录制基于浏览器的Web Vuser脚本时,VuGen首先会启动指定的浏览器。然后,VuGen会指示浏览器访问VuGen代理服务器。为此,VuGen会修改录制浏览器上的代理服务器设置。默认情况下,VuGen会立即将代理服务器设置更改为Localhost:7777。录制之后,VuGen会将原始代理服务器设置还原到该录制浏览器中。因此,在VuGen进行录制的过程中,不可以更改代理服务器设置,否则将无法正常进行。

      10.在LoadRunner脚本如何输出当前系统时间?

      LoadRunner提供了char *ctime(const time_t *time)函数,调用参数为一个Long型的整数指针,用于存放返回时间的数值表示。

      调用语句与返回值如下示例:

      typedef long time_t;

      Action()

      {

      time_t t;

      lr_message(“Time in seconds since 1/1/70: %ld\n”,time(&t));

      lr_message(“System time and date: %s”,ctime(&t));

      }

      输出结果为:

      Time in seconds since 1/1/70: 1185329968

      System time and date:Wed Jul 25 10:19:28 2007

      11.一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。为什么从第二次迭代开始发生错误?

      这种现象多是由于在“Run-time Setting”的“Browse Emulation”的设置中,勾选了“Simulate a new user on each iteration”及其下面的选项“Clear cache on each iteration”这两个选项的含义是每次迭代时模拟一个新的用户及每次迭代时清除缓存。

      由于脚本迭代时,init和end只能执行一次,如果每次迭代都模拟一个新的用户并清除缓存,则用户登录信息将一并清除,因此迭代时可能会发生错误。

      12.虚拟客户脚本“Run-time Setting”中的线程和进程运行方式的区别?

      如果选择“Run Vuser as a process”,则场景运行时会为每一个虚拟用户创建一个进程;选择“Run Vuser as a thread”则将每个虚拟用户作为一个线程来运行,在任务管理器中只看到一个mmdrv.exe,这种方式的运行效率更高,能造成更大的压力,时默认选项。

      另外,如果启用了IP欺骗功能,则先在Controller中选中Tools菜单下的“Expert Mode”,然后将Tools菜单下的“Options>General”标签页中的IP地址分配方式也设置为与Vuser运行方式一致,同为线程或进程方式。

      13.在Controller中运行Web相关测试场景时,经常会有很多超时错误提示,如何处理这类问题?

      这主要有脚本的默认超时设置引起。当回放Web脚本时,有时候由于服务器响应时间较长,会产生超时的错误。这时需要修改脚本的运行时配置。

      进入“Run-time Setting”对话框后,依次进入“Internet Protocol→Preference”。然后点击“Options…”按钮,进入高级设置对话框,可以修改各类超时设置的默认值。

      14.为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?

      在Windows计算机的标准设置下,操作系统的默认限制只能使用几百个Vuser,这个限制与CPU或内存无关,主要是操作系统本身规定了默认的最大线程数所导致。要想突破Windows这个限制,须修改Windows注册表。以Windows XP Professional为例。

      (1)打开注册表后,进入注册表项HKEY_LOCAL_MACHINE中的下列关键字:System\CurrentControlSet\Control\Session Manager\SubSystems。

      (2)找到Windows关键字,Windows关键字如下所示:

      %SystemRoot%\system32\csrss.exe bjectDirectory=\Windows

      SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1

      ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2

      ProfileControl=Off MaxRequestThreads=16

      SharedSection=1024,3072,512关键字的格式为xxxx,yyyy,zzz。其中,xxxx定义了系统范围堆的最大值(以KB为单位),yyyy定义每个桌面堆得大小。

      (3)将yyyy的设置从3072更改为8192(即8MB),增加SharedSection参数值。

      通过对注册表的更改,系统将允许运行更多的线程,因而可以在计算机上运行更多的Vuser。这意味着能够模拟的最大并发用户数量将不受Windows操作系统的限制,而只受硬件和内部可伸缩性限制的约束。

     

      录制脚本为空
     
      LR录制是客户端与服务器的数据交互,只有在有交互的时候才可以录制到脚本。
     
      1. 交互方式不一样,通过客户端的server进行交互,在scrīpt中选择最后一个track processes created as COM local servers  [选择scrīpt里的最后一个选项]. 2. 非客户端与服务器的交互的一种操作,在页面上点前进或后退,如果页面是从缓存中取出来的,那么也就没有和服务器数据交互,所以也录制的为空脚本。   [windows注册表中禁用缓存]. 3. 协议选择错误,b/s不一定走http协议,还可能是https(http+ssl)。   [最基础的错误].录制出错。
     
      1.  选择internet里选项里的连接里的局域网设置的代理不能选,因为LR在录制的时候会动态选择。
      2.  网页里的恶意代码,检测的时候响应LR录制脚本[用工具检测恶意代码,然后卸载恶意代码,eg:Ad_Aweare].

      3. 防病毒软件和防火墙,在录制时暂时关闭。
      4. 因为LR自身原因报错或者有些脚本不能录制下来[录制是最好选用scrīpt view,此时会报错,但能写下脚本,是因为LR无法解析,可以手工修改,而tree view 就直接停止了。
     
      Loadrunner不支持默认的浏览器
     
      有时候,我们上网的时候,不小心会将某个浏览器设置为默认的浏览器,而我们不知道,这个时候,我们用loadrunner进行录制的时候,会提示loadrunner不支持系统设置的默认的浏览器,因此,需要我们重新选择浏览器,我们可以利用Reconding optiom中的Browser选项设置支持的浏览器,我们还可以利用下面的方法,将IE设置为默认的浏览器,因为loadrunner是支持IE的。设置方法如下:
     
      在IE“工具(T)”菜单→“Interner选项”→“程序”选项卡里,确保“检查Internet Explorer是否为默认的浏览器”选项打上√。然后在你启动IE时,如果IE非默认浏览器就会出现提示窗是否把IE设置为默认。

  • IT版歌曲,嘿嘿,收藏了

    2011-08-19 11:06:18

    IT版歌曲,嘿嘿,收藏了。我可是打了招呼的哦,嘿嘿,帮作者喧传一下~~

    IT版《没那么简单》
    改词:拙 文

    没那么简单
    就能找到一只铁饭碗
    尤其是在
    看过了那么多的下岗
    总是不安 学会加班
    谁超越了谁的期望

    没那么简单
    傻傻的干待遇全不看
    变得实际
    也许好也许坏各一半
    不爱换岗 一多也习惯
    不怕投简历 也不怕面试

    遇见伯乐就日行千里
    遇见坎坷就鞭策自己
    领导说的话
    认真听一听  
    最后照执行 
    挑起肩上沉重压力
    一杯咖啡配电脑
    在周末晚上
    翻开了设计
    情绪埋在代码

    开发没有那么容易
    每个人有他的粗心
    把握能拼搏的年纪  
    轰轰烈烈燃烧自己
    测试没有那么容易
    反反复复修改用例  
    什么都敢争的年纪
    如今最年轻
    所以最上进  
    如今

    没那么简单
    傻傻的干待遇全不看
    变得实际
    也许好也许坏各一半
    不爱换岗 一多也习惯
    不怕投简历 也不怕面试官

    遇见伯乐就日行千里
    遇见坎坷就鞭策自己
    领导说的话
    认真听一听  
    最后照执行 
    挑起肩上沉重压力
    一杯咖啡配电脑
    在周末晚上
    翻开了设计
    情绪埋在代码里

    开发没有那么容易
    每个人有他的粗心
    把握能拼搏的年纪  
    轰轰烈烈燃烧自己
    测试没有那么容易
    反反复复修改用例  
    什么都敢争的年纪
    如今最年轻
    所以最上进  
    如今

    开发没有那么容易
    每个人有他的粗心
    把握能拼搏的年纪  
    轰轰烈烈燃烧自己
    测试没有那么容易
    反反复复修改用例  
    什么都敢争的年纪
    如今最年轻
    所以最上进  
    如今

    这是最伤身
    但却最激情
    的IT

     

    测试的你
    作者:拙文
    明天你是否会想起
    昨天你写的用例
    明天你是否还惦记
    曾经做测试的你
    领导们都已想不起
    曾经加班的你
    我也是偶然看用例
    才想起同事的你
    谁聘了质量把关的你
    谁安慰加班的你
    谁和Bug纠缠到底
    谁确保每次升级

    你从前总是很细心
    从不让离职出现在QC里
    你也曾无意中说起
    薪水比开发效率还低
    那时候系统需求很乱
    日子总过得太忙
    你总说离职遥遥无期
    转眼就各奔东西
    谁聘了质量把关的你
    谁安慰加班的你
    谁看了你给开发提的建议
    谁把它删在回收站里

    从前的日子都远去
    我也将有我的小弟
    我也会给她看用例
    给他讲测试的你
    谁聘了质量把关的你
    谁安慰加班的你
    谁和Bug纠缠到底
    谁确保每次升级

     

    《找一个字代替》
    改词:拙 文

    (第一遍)
    我想编一行码给你   
    满足你对项目的惦记
    让纠结过后的迷糊变得清晰
    我想发两个毒给你   
    种在你发烧的本本里
    于是测试时我可以一直看你
    如何的挑剔

    不想留一个BUG给你
    却发现这真的不容易
    让加班过后的成绩随风而去
    打了多少个包给你  
    把键盘敲碎在代码
    这样的交替你看我睡眼迷离
    不烦不着急

    翻遍TD
    将千言万语
    找一个字代替
    却发现累是最深的痕迹
    修复就苦苦苦自己  
    跳过又少少少业绩
    需求就不必问  
    是合不合逻辑
    修复就苦苦苦自己
    跳过又少少少业绩
    刻一个累自己在整个项目里

    (第二遍)
    我想编一行码给你
    满足你对项目的惦记
    让纠结过后的迷糊变得清晰
    我想发两个毒给你   
    种在你发烧的本本里
    于是测试时我可以一直看你
    如何的挑剔

    翻遍TD
    将千言万语
    找一个字代替
    却发现累是最深的痕迹
    修复就苦苦苦自己
    跳过就少少少业绩
    需求就不必问  
    是合不合逻辑
    修复就苦苦苦自己
    跳过就少少少业绩
    刻一个累自己在整个项目里
    修复就苦苦苦自己
    跳过就少少少业绩
    需求就不必问  
    是合不合逻辑
    修复就苦苦苦自己
    跳过就少少少业绩
    刻一个累自己在整个项目里

  • 用户注册和密码修改测试点

    2011-05-16 15:19:34

    转贴

    一.用户注册

    只从用户名和密码角度写了几个要考虑的测试点,如果需求中明确规定了安全问题,Email,出生日期,地址,性别等等一系列的格式和字符要求,那就都要写用例测了~
    以等价类划分和边界值法来分析
    1.填写符合要求的数据注册: 用户名字和密码都为最大长度 (边界值分析,取上点)
    2.填写符合要求的数据注册 :用户名字和密码都为最小长度 (边界值分析,取上点)
    3.填写符合要求的数据注册:用户名字和密码都是非最大和最小长度的数据(边界值分析,取内点)
    4.必填项分别为空注册           
    5.用户名长度大于要求注册1位(边界值分析,取离点)
    6.用户名长度小于要求注册1位(边界值分析,取离点)
    7.密码长度大于要求注册1位(边界值分析,取离点)
    8.密码长度小于要求注册1位(边界值分析,取离点)
    9.用户名是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了,如含有空格,#等,看需求是否允许吧~)
    10.密码是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了)
    11.两次输入密码不一致(如果注册时候要输入两次密码,那么这个是必须的)
    12.重新注册存在的用户
    13.改变存在的用户的用户名和密码的大小写,来注册。(有的需求是区分大小写,有的不区分)
    14.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号显示


    二.修改密码
    当然具体情况具体分析哈~不能一概而论~
    实际测试中可能只用到其中几条而已,比如银行卡密码的修改,就不用考虑英文和非法字符,更不用考虑那些TAP之类的快捷键.
    而有的需要根据需求具体分析了,比如连续出错多少次出现的提示,和一些软件修改密码要求一定时间内有一定的修改次数限制等等。

    1.不输入旧密码,直接改密码
    2.输入错误旧密码
    3.不输入确认新密码
    4.不输入新密码
    5.新密码和确认新密码不一致
    6.新密码中有空格
    7.新密码为空
    8.新密码为符合要求的最多字符
    9.新密码为符合要求的最少字符
    10.新密码为符合要求的非最多和最少字符
    11.新密码为最多字符-1
    12.新密码为最少字符+1
    13.新密码为最多字符+1
    14.新密码为最少字符-1
    15.新密码为非允许字符(如有的密码要求必须是英文和数字组成,那么要试汉字和符号等)
    16.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号
    17.看密码是否区分大小写,新密码中英文小写,确认密码中英文大写.
    18.新密码与旧密码一样能否修改成功.

  • LoadRunner对不同协议的选择

    2011-05-03 17:34:47

    【IT168 技术文档】以前使用Loadrunner只选择过web(Http/Html),但其实协议多种多样。在B/S结构的网站多种业务的特点需要选择不同的协议,耿电在给我们就介绍了用过的不同的协议。协议如何选择呢,寻找了相关资料。

      LoadRunner首先是一个测试工具,其次是一个性能测试工具,然后是该工具是一个基于协议,也就是说LoadRunner测试的对象都需要使用通信协议,对于那些不使用通信协议仅仅进行本地处理的软件例如Microsoft Word,LoadRunner就不适用。说到通信协议我们来熟悉一下协议的分层,按照OSI的分层模型,分层结构如下:

      LoadRunner对不同协议的选择

      按照TCP/IP协议的分层,分层结构如下:

      LoadRunner对不同协议的选择

      第一个分层是由OSI制定但不实用,后一个是目前广泛使用且被业界认做既定标准的协议分层,下文探讨的LoadRunner协议选择即按TCP/IP协议的分层模型讨论。

      接着来说说LoadRunnerVuGen中的协议分类,VuGen(LR8.1)中的协议分类如下表所示:

      LoadRunner对不同协议的选择

      LoadRunner VuGen中的协议与文章开头所说的通信协议还是有一定的区别的,例如像LoadRunner VuGen中的C 模板、Visual Basic 模板、Java 模板、Javascript. 和 VBScript. 类型的脚本均为开发语言,非通信协议。

      一般来说协议选择有如下原则:

      B/S结构,选择WEB(Http/Html)协议;

      C/S结构,可以根据后端数据库的类型来选择,如SybaseCTLib协议用于测试后台的数据库为Sybase的应用;MSSQLServer协议用与测试后台数据库为SQL Server的应用;

      对于有些使用纯JAVA编写的C/S结构的东东,采用JAVA,而且不能录制只能手工编写代码(工作量和难度还是有的)。同样不能录制的还包括C、VB Script、VB、VBNet User协议。

      对于一些没有数据库的Windows应用,可选用Windows Sockets底层协议;使用了数据库但使用的是ODBC连接的数据则选择ODBC协议;对于Windows Sockets协议来说,最适合的那些基于Socket开发的应用程序;但是由于网络通讯的底层都是基于Socket的,因此几乎所有的应用程序都能够通过Socket来录制,哪可能有人会问,哪既然Socket都能录制下来,还要那么多协议做什么,价格还贼贵,其实最主要的原因就是Socket录制的代码可读性较差,如果Socket的脚本可读性较高的话,实话就没有其他协议出现的必要性了。

      对于邮件来说,首先要看你收邮件的途径,如果你通过WEB页面收发邮件,毫无疑问,你选择协议时就需要选择HTTP协议,如果你通过邮件客户端,像OutLook、FoxMail之类的,则需要根据操作不同选择不同的协议了,例如发邮件你可能要选择SMTP、收邮件你可能需要选择POP3。

      Telnet、SSH选择RTE协议(SSH不知道是不是,有待考证)。

  • 感悟

    2011-04-29 10:07:42

         记不清是一个月前还是两个月前,给个时间坐标就是千里的哪三分地儿耕好的时候,我答应他写点东西,算是送给他的“生日礼物”。可是,光阴似剑,转眼到了五一的七周岁生日了,我的礼物还没送出去。哎,哪个千里可能在心底骂我吧?还有哪个云层,哎,心中对这哥充满了深深的,深深的歉意,何止一个不好意思,两个对不起了得?怎么老做对不起人的事儿啊,呃,你俩就原谅我吧,至于什么原因,你懂的。(贼笑)

             近日心中总是蠢蠢欲动的想写点啥,可是总是坐不下来。前几日一位同事在过道与我走了迎面,羞涩的点头示意问候,让我迅速的分析出这个小男生肯定是刚毕业,刚参加工作不久的小师弟,因为哪份羞涩是我曾经有过的。接着昨天在和大学同学在QQ上聊天时,她说现在办公室里就她和一个大学生,她很忙,都得一个人干,我便问,既然是两个人为啥你一个人做,她答我说,哪个人只是扫扫地,打扫卫生,我便说,你不能这样啊,咱们也刚毕业过,这新人需要带,不能光让人家打扫卫生啊。同学说还没毕业刚进来学习的,嗯,这孩子也算是可以,知道自己进来是学习的,在其它工作上帮不上师傅便做些力手能及的事情,搞搞卫生等边角料的事情也是应该的。再接着昨天晚上和朋友吃饭,他说公司在招人,他面试,不知不觉己是公司的骨干了。还有一次在过马路的时候听到两位银行工作的人的闲聊,大概内容就是这批升职的人中就是毕业4-5年的我们这一代。这些都让我觉的,原来我们真的长大了,离校园越来越远了,我一味的只看到了,毕业这些年后,谁谁结婚了,谁谁生娃了,谁谁买车了,谁谁买房了。。。。我杂就没有注意到,谁谁升职了,谁谁涨薪了?更没有注意到,在不知不觉中,我们都成了别人眼中的哪谁谁谁。在自己平凡的岗位上都己经开始带徒弟当师傅了,早己成了又一波人眼中的“牛人”,“大师”了,也是别人心中钦佩的某某某了。。。。这就是岁月的见证吧?

           走过的这些年,让我们不再有刚出校园的生涩,反倒是多了几分成熟与稳重;不再是哪个对任何工作都充满迷惑,对任何事情都充满了不自信的小屁孩儿了,反倒是走过的路,挫折也好,失败也好都变成了经验,在我们再遇到问题的时候,拿出来参考,我们是被压力推着往前走的,我们的能量也是被逼出来的,因为我们从走出校园,踏入社会,获得一份工作的哪刻起,身上就己经多了一份责任,我们身上瞬时间多了很多角色,称谓,慢慢地,慢慢地,我们从一个打杂工发展成了可以扛起一份小责任到大重担的角色,多了职务,又叠加了一些角色。。。。这个时候,我才知道,原来我走过了一些路,我才知道当初给我谈话的前辈们说的一些话,谈的一些经验,他们是走过了,吸取教训了一些教训,不想让后辈们再走,想给后辈们一些经验好走个直径。如今,我们也是这样,也想回头看看正在走我们路的师弟师妹们,把自己的亲身经历讲给他们听,不让他们走太多弯路。看到他们不听,或者不能按自己说的云做,我也可以理解,因为路不管是平坦还是曲折都必须自己经历一下,哪么我们面对我们的后辈时也应该给他们犯错的机会,因为这就是人生吧?

           面对后辈这个词,我突然感到自己是多么多么不称职的前辈。因为论坛上越来越少的有我的身影,QQ上也越来越少的发现我的亮着的头像。就算有时候亮着,她晃动的频率又是多高呢?也许是被问同样一个问题,我的热情不再哪么高涨了,也许是我真的没有哪么多时间放在聊天上了,也许。。。还有很多也许。不管过程是什么样的,结果都是,一个多么不负责任的百合啊。你曾经无意间的一个经历,帮助了很多人,可又在另一些需要你帮忙的慕名来敲门的时候,你门是打开了,可总是不在家,也许我真的觉的没什么,没有觉的错过什么,可是对于哪些学弟学妹们来说,肯定不是这样想的,他们是因为渴望知道点什么才鼓起勇气扣门的,可是主人不在家,他们应该有多失望。曾经的曾经,百合不也是这样吗?以后,不会再这样了,再忙我也会为你们做点什么的,哪么是随便聊聊。不过考虑到实际情况,在线的时间真的不多,工作不在线,下班有其它的事,一天也就挂Q两三个小时,所以不可能随叫随到,有事留言吧,我会尽我所能的。

  • 每日英语

    2011-04-15 11:30:08

    2011-4-15

    I second your motion.我支持你。

    would you please sign this memo? 你可以在这个备忘录上签字吗?

    I would work like a dog.我得十分努力地工作

    a lucky dog.幸运儿。

    a clever dog。聪明的小孩儿

     

  • 会计科目名称和编号

    2011-04-12 10:41:26

    会计科目名称和编号

      顺序号编号名称

      (一)资产类

      1 1001现金

      2 1002银行存款

      3 1009其他货币资金

      100901外埠存款

      100902银行本票存款

      100903银行汇票存款

      100904信用卡存款

      100905信用证保证金存款

      100906存出投资款

      4 1101短期投资

      110101股票

      110102债券

      110103基金

      110110其他

      5 1102短期投资跌价准备

      6 1111应收票据

      7 1121应收股息

      8 1131应收账款

      9 1133其他应收款

      10 1141坏账准备

      11 1201在途物资

      12 1211材料

      13 1231低值易耗品

      14 1243库存商品

      15 1244商品进销差价

      16 1251委托加工物资

      17 1261委托代销商品

      18 1281存货跌价准备

      19 1301待摊费用

      20 1401长期股权投资

      140101股票投资

      140102其他股权投资

      21 1402长期债权投资

      140201债券投资

      140202其他债权投资

      22 1501固定资产

      23 1502累计折旧

      24 1601工程物资

      25 1603在建工程

      160301建筑工程

      160302安装工程

      160303技术改造工程

      160304其他支出

      26 1701固定资产清理

      27 1801无形资产

      28 1901长期待摊费用

      (二)负债类

      29 2101短期借款

      30 2111应付票据

      31 2121应付账款

      32 2151应付工资

      33 2153应付福利费

      34 2161应付利润

      35 2171应交税金

      217101应交增值税

      21710101进项税额

      21710102已交税金

      21710103减免税款

      21710104出口抵减内销产品应纳税额

      21710105转出未交增值税

      21710106销项税额

      21710107出口退税

      21710108进项税额转出

      21710109转出多交增值税

      217102未交增值税

      217103应交营业税

      217104应交消费税

      217105应交资源税

      217106应交所得税

      217107应交土地增值税

      217108应交城市维护建设税

      217109应交房产税

      217110应交土地使用税

      217111应交车船使用税

      217112应交个人所得税

      36 2176其他应交款

      37 2181其他应付款

      38 2191预提费用

      39 2201待转资产价值220101接受捐赠货币性资产价值

      220102接受捐赠非货币性资产价值

      40 2301长期借款

      41 2321长期应付款

      (三)所有者权益类

      42 3101实收资本

      43 3111资本公积

      311101资本溢价

      311102接受捐赠非现金资产准备

      311106外币资本折算差额

      311107其他资本公积

      44 3121盈余公积

      312101法定盈余公积

      312102任意盈余公积

      312103法定公益金

      45 3131本年利润

      46 3141利润分配

      314101其他转入

      314102提取法定盈余公积

      314103提取法定公益金

      314109提取任意盈余公积

      314110应付利润

      314111转作资本的利润

      314115未分配利润

      (四)成本类

      47 4101生产成本

      410101基本生产成本

      410102辅助生产成本

      48 4105制造费用

      (五)损益类

      49 5101主营业务收入

      50 5102其他业务收入

      51 5201投资收益

      52 5301营业外收入

      53 5401主营业务成本

      54 5402主营业务税金及附加

      55 5405其他业务支出

      56 5501营业费用

      57 5502管理费用

      58 5503财务费用

      59 5601营业外支出

      60 5701所得税

      附注

      小企业可以根据实际需要,对上述科目作必要的增减或合并:

      1.采用计划成本进行材料日常核算的小企业,可以增设“物资采购”和“材料成本差异”科目。

      2.预收款项和预付款项较多的小企业,可设置“预收账款”和“预付账款”科目。

      3.低值易耗品较少的小企业,可以将其并入“材料”科目。

      4.小企业内部各部门周转使用的备用金,可以增设“备用金”科目。

      5.小企业接受其他单位委托代销商品,可以增设“受托代销商品”、“代销商品款”科目。

      6.小企业根据自身的规模和管理等要求,可以将“生产成本”、“制造费用”科目合并为“生产费用”科目,并设置相关的明细科目。

      7.对外提供劳务较多的小企业,可以增设“劳务成本”科目核算所提供劳务的成本。

  • 快速认识loadrunner

    2011-04-08 10:34:40

        -------------------------------------------本文转自网络

       LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用 LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。

      对象

       LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner能支持广泛的协议和技术,为您的特殊环境提供特殊的解决方案。

    主要功能

    轻松创建虚拟用户

      使用LoadRunner的Virtual User Generator,您能很简便地创立起系统负载。该引擎能

      

    LoadRunner

    够生成虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为。它先记录下业务流程(如下订单或机票预定),然后将其转化为测试脚本。利用虚拟用户,您可以在Windows ,UNIX 或Linux 机器上同时产生成千上万个用户访问。所以LoadRunner能极大的减少负载测试所需的硬件和人力资源。

      用Virtual User Generator 建立测试脚本后,您可以对其进行参数化操作,这一操作能让您利用几套不同的实际发生数据来测试您的应用程序,从而反映出本系统的负载能力。以一个订单输入过程为例,参数化操作可将记录中的固定数据,如订单号和客户名称,由可变值来代替。在这些变量内随意输入可能的订单号和客户名,来匹配多个实际用户的操作行为。

      为了进一步确定您的Virtual user 能够模拟真实用户,您可利用LoadRunner控制某些行为特性。例如,只需要点击一下鼠标,您就能轻易控制交易的数量,交易频率,用户的思考时间和连接速度等。

    创建真实的负载

      Virtual users 建立起后,您需要设定您的负载方案,业务流程组合和虚拟用户数量。用LoadRunner的Controller,您能很快组织起多用户的测试方案。Controller 的Rendezvous 功能提供一个互动的环境,在其中您既能建立起持续且循环的负载,又能管理和驱动负载测试方案。

      而且,您可以利用它的日程计划服务来定义用户在什么时候访问系统以产生负载。这样,您就能将测试过程自动化。同样您还可以用Controller 来限定您的负载方案,在这个方案中所有的用户同时执行一个动作---如登陆到一个库存应用程序----来模拟峰值负载的情况。另外,您还能监测系统架构中各个组件的性能---- 包括服务器,数据库,网络设备等----来帮助客户决定系统的配置。

    定位性能问题

      LoadRunner内含集成的实时监测器,在负载测试过程的任何时候,您都可以观察到应用系统的运行性能。这些性能监测器为您实时显示交易性能数据(如响应时间)和其它系统组件包括application server, web server,网路设备和数据库等的实时性能。这样,您就可以在测试过程中从客户和服务器的双方面评估这些系统组件的运行性能,从而更快地发现问题。

      利用LoadRunner的ContentCheck TM ,您可以判断负载下的应用程序功能正常与否。ContentCheck 在Virtual users 运行时,检测应用程序的网络数据包内容,从中确定是否有错误内容传送出去。它的实时浏览器帮助您从终端用户角度观察程序性能状况。

    分析结果以精确定位问题所在

      一旦测试完毕后,LoadRunner收集汇总所有的测试数据,并提供高级的分析和报告工具,以便迅速查找到性能问题并追溯原由。使用LoadRunner的Web 交易细节监测器,您可以了解到将所有的图象、框架和文本下载到每一网页上所需的时间。例如,这个交易细节分析机制能

      够分析是否因为一个大尺寸的图形文件或是第三方的数据组件造成应用系统运行速度减慢。另外,Web 交易细节监测器分解用于客户端、网络和服务器上端到端的反应时间,便于确认问题,定位查找真正出错的组件。例如,您可以将网络延时进行分解,以判断DNS 解析时间,连接服务器或SSL 认证所花费的时间。通过使用LoadRunner的分析工具,您能很快地查找到出错的位置和原因并作出相应的调整。

    重复测试保证系统发布的高性能

      负载测试是一个重复过程。每次处理完一个出错情况,您都需要对您的应用程序在相同的方案下,再进行一次负载测试。以此检验您所做的修正是否改善了运行性能。

      LoadRunner完全支持EJB 的负载测试。这些基于Java 的组件运行在应用服务器上,提供广泛的应用服务。通过测试这些组件,您可以在应用程序开发的早期就确认并解决可能产生的问题。

      利用LoadRunner, 您可以很方便地了解系统的性能。 它的Controller 允许您重复执行与出错修改前相同的测试方案。它的基于HTML 的报告为您提供一个比较性能结果所需的基准,以此衡量在一段时间内,有多大程度的改进并确保应用成功。由于这些报告是基于HTML 的文本,您可以将其公布于您公司的内部网上,便于随时查阅。

      接下来的文章编者就将辑录一篇网上的使用LoadRunner®来测试BEA中间件产品文章来与大家分享如何使用LoadRunner进行实际的性能测试

    性能测试

    1. LoadRunner的虚拟用户

      LoadRunner使用虚拟用户(Virtual users)来模拟实际用户对业务系统施加压力。虚拟用户在一个中央控制器(controller station)的监视下工作。 

      在做一个测试方案时,要做的第一件事就是创建虚拟用户执行脚本。LoadRunner提供了Virtual User Generator来录制或编辑虚拟用户脚本。

      2. 使用Vugen创建虚拟用户执行脚本

      A.从菜单中选择运行Virtual User Generator:

      B.创建一个单协议脚本,选择协议类型为"Tuxedo 7"

      C.在弹出的窗口中输入Tuxedo客户机程序的可执行文件名(SimpApp.exe),并选择"Record into Action"为Action。

      点击"OK"开始录制脚本,这时Vugen就会启动Simpapp.exe,如下图所示,输入WSNADDR,输入字符串(Tuxedo is powerful!)之后,点击TOUPPER,TUXEDO服务器完成请求后把输出字符串(TUXEDO IS POWERFUL!)写到"Output string"中,点击停止录制按钮。

      D.编辑Vuser脚本。在C中做的所有操作都被录了下来,记录到一个脚本文件中,其内容如下,把它存为simpapp。

      脚本内容如下:

      #include "lrt.h"

      #include "replay.vdf"

      Actions()

      {

      lrt_tuxputenv("WSNADDR=//172.22.32.25:7110");

      lr_think_time(3);

      tpresult_int = lrt_tpinitialize(LRT_END_OF_PARMS);

      lrt_abort_on_error();

      data_0 = lrt_tpalloc("STRING", "", 1);

      lrt_strcpy(data_0, sbuf_1);

      data_1 = lrt_tpalloc("STRING", "", 1);

      tpresult_int = lrt_tpcall("TOUPPER", data_0, 0, &data_1, &olen, 0);

      lrt_abort_on_error();

      lrt_tpfree(data_0);

      lrt_tpfree(data_1);

      lrt_tpterm();

      return 0;

      }

      代码中加粗的函数是LoadRunner对TUXEDO函数的二次包装。

      E.点击工具栏中的"执行"按钮来执行我们刚才录制的脚本,确保执行无误。

      3. 使用控制器(Controller)来调度虚拟用户

      A.从菜单中选择运行Controller:

      B.创建一个新的Scenario,选择刚才录制的脚本(simpapp):

      点击"OK",弹出Scenario调度界面。在"Quantity"中输入100,表示使用100个虚拟用户。(虚拟用户与购买的LICENSE有关联)

      C.点击"Edit Schedule"来编辑压力调度。

      D.选择"Runtime settings"来作运行时设置。

      在Pacing的设置中,"Number of Iterations"用于设置Vusers的Actions被执行的次数;"Start new iteration"用于设置调度器在什么时机迭代执行Vusers的Actions。

      "Think Time"用于设置Vusers的反应和思考时间,以尽量做到和正常人一样来施压。"Ignore think time"表示忽略思考时间,这是理想状态,一般不使用。"As recorded"表示按照录制时的实际操作时间。"Multiply recorded think time by"表示Vusers的思考时间是实际录制时间的若干倍。

      在"Miscellaneous"中设置一些杂项,如使用进程还是使用线程等。对于TUXEDO,好象只能选进程模式。

      E.选择"Start scenario"来开始本次压力测试调度。

      执行结果分析如下:

      施压时间为5分41秒,Vusers数量为100,一共完成的Actions交易数量为5625笔,平均响应时间为5.561秒,TPS为17.8。[1]

    LoadRunner组件
    1、VuGen虚拟用户生成器) 用于捕获最终用户业务流程和创建自动性能测试脚本 (也称为虚拟用户脚本)。
      2、Controller 控制器)用于组织、驱动、管理和监控负载测试。
      3、Load Generator负载生成器用于通过运行虚拟用户生成负载。
      4、Analysis 分析器)有助于您查看、分析和比较性能结果。
    实例应用
    软件测试工具中如何巧用LoadRunner的随机函数
      LoadRunner有自带的随机函数,如果巧妙的加以采用,能解决一些看似很困难的实际问题。
      一个项目的性能测试。与数据库直连,根据外部传入的SQL ID和SQL参数,从指定数据库中读取SQL模版,拼装成真实的SQL语句、执行,并将得到的结果放入缓存中。目的是减少数据库的压力。
      该系统将支撑大量的SQL操作,性能自然成为备受关注的焦点之一。
      由于它跟SQL语句相关,在真实环境下,同一时间可能执行着不同类型的SQL,即便是同一类型,其参数也各式各样。那么,怎样才能模拟出最符合实际情况的性能测试场景呢?
      首先设计场景,即,在LoadRunner中按照比例随机取到某一类型的SQL,再随机传入参数给它,让最终的每条SQL都是随机生成,各不相同。
      从场景中,可以看到,此处涉及双重随机。只采用loadruner的参数设置是无法实现的。此时需要想办法先按设定好的比例随机取到SQL,然后在每条SQL上随机取参数列表中的参数。
      于是想到了loadrunner的随机函数。先实现随机取SQL ID,之后再在特定的SQL中随机取参数列表中的参数。
      LoadRunner中,随机函数是rand(),它用来产生0到rand_max之间的随机整数。函数原型是
      int rand ( void );
      然而调用rand之前,必须给随机数产生一个随机种子。这个种子由srand()函数产生。其原型是
      int srand ( seedTime );
      采用上述两个函数,就能实现第一重随机了。具体脚本代码如下:
      
    //generate rand number
      int rNum = 0;
      srand(time(NULL));
      rNum = rand() % 10;
      lr_output_message(”the number is :%d”,rNum); //print the current random number
      生成随机数后,再按比例用if … else … 来取到各种类型的SQL,并给它们传参。具体脚本代码如下:
      //get certain SQL and random value
      if (rNum>=0 && rNum<2) {
      web_url(”test”, “URL=http://host_name:8080/interface?sqlId=sqlid_name2&value={random_para2} “,
      ”Resource=0″,
      ”RecContentType=text/html”,
      ”Referer=”,
      ”Snapshot=tn.inf”,
      “Mode=HTTP”,
      LAST);
      }
      …
      else if(rNum>=8 && rNum<10){
      web_url(”test”, “URL=http://host_name:8080/interface?sqlId=sqlid_name2&value={random_para2} “,
      ”Resource=0″,
      ”RecContentType=text/html”,
      ”Referer=”,
      ”Snapshot=tn.inf”,
      “Mode=HTTP”,
      LAST);
      }
      else {
      rNum = 0;
      lr_output_message(”the number is :%d”,rNum);
      }
     注:sqlid_name是SQL ID名称;random_para是通过file方式实现的随机参数;tn是web_url函数的快照名称。
      通过上面的脚本,实现了性能测试设计的场景。调试通过后,放入Controller中执行。实际执行过程中,Vuser将会按比例随机取到不同类型的SQL,并随机取到SQL中的参数,执行特定的SQL语句。
      巧用LoadRunner的随机函数,能解决不少实际问题。[2]
      用LoadRunner分析资源占用率
      
      

    LoadRunner

    1. 平均事务响应时间
      Average Transation Response Time 优秀:<2s
      良好:2-5s
      及格:6-10s
      不及格:>10s
      2. 每秒点击率
      Hits per Second
      当增大系统的压力(或增加并发用户数)时,吞吐率和TPS的变化曲线呈大体一致,则系统基本稳定若压力增大时,吞吐率的曲线增加到一定程度后出现变化缓慢,甚至平坦,很可能是网络出现带宽瓶颈.同理若点击率/TPS曲线出现变化缓慢或者平坦,说明服务器开始出现.
      3. 请求响应时间
      Time to Last Byte
      4. 每秒系统处理事务数
      Transaction per second
      5. 吞吐量
      Throughout
      6. CPU利用率
      Processor / %Processor Time 好:70%
      坏:85%
      很差:90%+
      7. 数据库操作消耗的CPU时间
      Processor / %User Time 如果该值较大,可以考虑是否能通过友好算法等方法降低这个值。如果该服务器是数据库服务器, Processor\%User Time 值大的原因很可能是数据库的排序或是函数操作消耗了过多的CPU时间,此时可以考虑对数据库系统进行优化。
      8. 核心态CPU平均利用率
      Processor /%Privileged Time 如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统
      9. 处理列队中的线程数
      Processor / Processor Queue Length 如果该值保持不变(>=2)个并且%Processor Time 超过90%,那么可能存在处理器瓶颈。如果发现超过2,而处理器的利用率却一直很低,那么或许更应该去解决处理器阻塞问题,这里处理器一般不是瓶颈。
      10. 文件系统缓存
      Memory / Cache Bytes 50%的可用物理内存
      11. 剩余的可用内存
      Memory / Avaiable Mbytes 至少要有10% 的物理内存值
      12. 每秒下载页数
      Memory / pages/sec 好:无页交换
      坏:CPU每秒10个页交换
      很差:更多的页交换
      13. 页面读取操作速率
      Memory / page read/sec 如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足
      14. 物理磁盘利用率
      Physical Disk / %Disk Time 好:<30%
      坏:<40%
      很差:<50%+
      15. 物理磁盘平均磁盘I/O队列长度
      Physical Disk / Avg.Disk Queue Length 该值应不超过磁盘数的1.5~2 倍。要提高性能,可增加磁盘
      16. 网络吞吐量
      Network Interface / Bytes Total/sec 判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽,结果应该小于50%
      17. 数据高速缓存区命中率 命中率应大于0.90最好
      18. 共享区库缓存区命中率 命中率应大于0.99
      19. 监控 SGA 中字典缓冲区的命中率 命中率应大于0.85
      20. 检测回滚段的争用 小于1%
      21. 监控 SGA 中重做日志缓存区的命中率
      应该小于1%
      22. 监控内存和硬盘的排序比率 最好使它小于 10%[3]
    安装
    LoadRunner 分为Windows 版本和Unix 版本。如果所有测试环境基于Windows平台,那么只要安装Windows 版本即可。
      LoadRunner的Unix版本仅提供Load Generator组件的安装(即LoadRunner中的负载生成器)。也就是说,这个负载生成器可以在Unix环境下安装和运行,并提供给Controller进行远程管理。但是,脚本的录制和场景的设计必须在Windows平台完成。
      系统要求
      
    运行LoadRunner,内存最好在128M 以上,LoadRunner7.8 的最低要求。 内存最好在512M 以上,安装LoadRunner 的磁盘空间至少剩余500M。操作系统最好为Windows 2000。
  • VI编辑器的使用方法

    2010-08-06 19:44:54

    一、vi的工作模式
    vi有两种工作模式:
      编辑模式:用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释为命令执行,而是作为文本写到用户的文件中。
      指令模式:用来编辑、存盘和退出文件的模式。
        运行vi后,首先进入指令模式。此时输入的任何字符都被视为指令,键入的命令不会在屏幕上显示。
        从指令模式切换到编辑模式,则可以按“Insert”键或“i”键,从编辑模式切换到指令模式,可按“Esc”键。
        状态行是屏幕底部一行,被vi编辑器用来反馈编辑操作结果。错误消息或提供信息的消息会在状态行中显示出来。

    二、vi的启动和退出
    1.启动vi
        在系统图示字符下键入“vi”+“空格”+“文件名”,如:vi test.txt
        vi可以自动载入所要编辑的文件或是开启一个新文件。
    2.退出vi
    在指令模式下键入如下命令可以退出vi:
      :q 如果用户只是读文件的内容而未对文件进行修改,可以在命令模式下输入“:q”退出vi。
      :q! 如果用户对文件的内容作了修改,又决定放弃对文件的修改,则用“:q!”命令。
      :w! 强行保存一个vi文件,如果该文件已存在,则进行覆盖。
      :wq 保存文件并退出vi。
      ZZ 快速保存文件的内容,然后退出vi。功能和“:wq”相同。
      :w filename   相当于“另存为”。
      :n,mw filename   将第n-m行的文本保存到指定的文件filename中。

    三、vi长指令和短指令
      长指令:以冒号开头,键入冒号后,在屏幕的最末尾一行会出现冒号提示符,等待用户键入指令,输入完指令后回车,vi会执行该指令。
      段指令:与快捷键相似,键入短指令后,vi不会给任何提示就直接执行。
    1.输入输出命令
      a 在光标后输入文本
      A 在当前行末尾输入文本
      i 在光标前输入文本
      I 在当前行开始输入文本
      o 在当前行后输入新一行
      O 在当前行前输入新一行
    2.光标移动命令
      b 移动到当前单词的开始
      e 移动到当前单词的结尾
      w 向后移动一个单词
      h 向前移动一个字符
      l 向后移动一个字符
      j 向下移动一行
      k 向上移动一行
    3.删除操作命令
      x 删除光标所在的字符
      dw 删除光标所在的单词
      dd 删除当前行
      d$ 删除光标至行尾的所有字符
      D 与“d$”命令相同
    4.替换操作命令
      r 替换光标所在的字符
      R 替换字符序列
      cw 替换一个单词
      ce 与“cw”命令相同
      cb 替换光标所在的前一字符
      c$ 替换自光标位置至行尾的所有字符
      C 与“c$”命令相同
      cc 替换当前行
    5.查询操作命令
      /abc 向后查询字符串“abc”
      ?abc 想前查询字符串“abc”
      n 重复前一次查询
      N 重复前一次查询,但方向相反
    6.拷贝粘贴命令
      yw 将光标所在单词拷入剪贴板
      y$ 将光标至行尾的字符拷入剪贴板
      Y 与“y$”命令相同
      yy 将当前行拷入剪贴板
      y 将选取的内容拷入剪贴板
      p 将剪贴板中的内容粘贴在光标后
      P 将剪贴板中的内容粘贴在光标前
    7.其他操作命令
      v 选取文本内容
      u 取消上一次的操作
      U 可以恢复对光标所在行的所有改变
      J 把两行文本链接到一起
      :set 用来设置或浏览vi系统当前的选项(加参数“all”后查看所有选项的列表)
      :X 对所编辑的文件进行简单加密

    四、vi的高级应用
    1.设置vi环境
        vi编辑器的行为可以通过设置编辑参数来定义。
        使用vi的set命令进行设置。vi在进行设置前必须处于指令模式,但选项的改变是临时的,只在用户当前编辑回话下有效,当用户退出vi编

    辑器时,设置会被丢弃。
      autoindent选项
        将新行与前一行的开始对准,缩写:ai
        该选项将用户键入的每个新行与前一行的开始对齐。该选项对于使用程序语言编程时十分有用。本选项的默认值是noai。
      ignorecase选项
        在搜索命令下忽略大小写,缩写:ic
        vi编辑器提供大小写敏感的搜索,要使vi忽略大小写,键入“:set ignorecase”,要返回大小写敏感状态,键入“:set noignorecase”.
      magic选项
        在搜索时,允许使用特殊字符。
        某些符号在用于搜索时有特殊的含义。当用户将这些符号开头置为nomagic时,这些符号不再有特殊含义。
      number选项
        显示行号,缩写:nu
        vi编辑器一般情况下不显示每行的行号。可以改变number选项来显示行号。
      report选项
        告知用户最后一个命令作用行的行号。
        vi编辑器对用户的编辑工作并不给予任何反馈,如果希望在屏幕上看到自己编辑的反馈信息,用户可以通过编辑report选项来实现。
      scroll选项
        设定在指令模式下使用“Ctrl+d”命令翻滚的行数。
      shiftwidth选项
        设定缩进空格数,一般与autoindent一同使用,缩写:sw
      showmode选项
        在屏幕右角显示vi编辑器模式,缩写:smd
      terse选项
        缩短错误信息。
      wrapmargin选项
        将右边界设定为一定的字符个数,缩写:wm
        用户的终端屏幕通常为80列,当键入到行的末尾时,屏幕即开始一个新行,这就是行回绕。在用户按回车键时,屏幕同样开始一个新行。

    因此,屏幕上一行的长度可以为1-80个字符之间的任何长度。但是,vi编辑器只在用户按回车时,才在用户文件中生成一个新行。如果用户在

    按回车前键入了120个字符,这时键入的文本看起来是在2行,但实际在文件中,这120个字符只在1行中。如果要限制行长度,一是在到达屏幕

    行末尾前按回车换行,另一种是设定wrapmargin选项使vi编辑器自动插入回车。


    2.缩写操作符
        缩写操作符“:ab”命令使得用户给任何字符串指定缩写,该功能可以帮主用户提高输入速度。用户可以为自己经常输入的文本选择一个易

    输入的缩写。
        例如:键入“:ab uox Unix Operating System”命令,当vi处于文本输入模式时,用户键入“uox”接着键入一个空格时,vi自动将键入的

    “uox”变为“Unix Operating System”。
        取消缩写“:unab”命令可以取消一个缩写,例如:键入“:unab uox”命令即可。
        想列出已经设置了的所有缩写,键入“:ab”命令即可。
    3.宏操作符
        宏操作符“:map”命令使用户能将一系列按键指定给某一按键。给用户一个在指令模式下的快捷按键。
        例如:键入“:map q dd”命令,此后处于指令模式时,每当用户键入q时,vi编辑器自动执行“dd”命令。
        取消宏操作“:unmap”命令。
        用户也可以使用map指令指定功能键,例如:键入“:map #n dd”命令,其中“#n”代表以n为功能键号的功能键。
    4.“.exrc”文件
        用户在vi编辑器中所设置的所有选项都是临时的,当用户退出时,它们都会失效。要使这些设置永久保存,可以将选项的设置保存到文件

    “.exrc”中。
        当用户打开vi编辑器时,它自动查看用户当前的工作目录中的“.exrc”文件,并根据在文件中的内容设置编辑环境。如果vi没有在当前目

    录中发现“.exrc”文件,则将查找用户的主目录,并根据在哪里发现的“.exrc”文件设置编辑环境。如果vi一个“.exrc”文件也没找到,则

    对选项使用默认值。
        “.exrc”文件属于启动文件。
    例如:建立一个“.exrc”文件。
    在终端中键入“vi .exrc”,回车。
    在vi编辑器中键入:
      set autoindent
      set shiftwidth=2
      set nomagic
      set number
      set scroll=20
      set showmode
    保存退出即可
    5.运行Shell命令
        用户可以在vi的命令行运行Linux Shell命令,使得用户可以临时抛开vi来运行Shell命令。
        vi编辑器用“!”来通知vi其后面是一个Shell命令。例如:键入“:!date”命令,vi编辑器将清除屏幕,输出当前系统时间,后按任意键返回vi编辑器,并可以继续编辑。
        如果用户系统将Shell命令执行的结果加到文件文本中,可以使用“:r!”和相应的Shell命令来将命令结果写到用户文件文本中。

  • 唠叨

    2010-08-05 22:04:07

       由于工作性质决定白天不能上网,只能晚上上网,所以导致最近加我QQ的朋友,或者在论坛上发邮件给我的朋友,我没有及回复。在这里向大家道个谦,如果对目前的状况还很迷惑,不知道方向的,可以和我留言,我看到后会回复的。

     嘻嘻,汇报下我的近况。工作己经很顺利了,至少我不怕了,面对哪些东东,心里很开心。这几天工作特别的开心。一句话,累并快乐着,我现在在享受我的工作。。我的工作开始走上正轨了,继续加油。

  • 感谢篇

    2010-07-14 22:55:43

       在之前的日子,不管是51陪着我渡过,还是我陪着51渡过,总是形影相伴,现在己经淡出论坛快一个月了吧,不冒泡的日子里,我在努力的适应新岗位。

       不管是从性质,环境还是生活规律,都和之前有很大差距,所以我要努力去适应。在这段日子里我的焦急心还是没抑制住,有哪么两三天,它跳出来作祟,急的我想哭,不过很快调整了心态,慢慢的去接受新东西,一口吃不了个胖子,反正都得慢慢来。不会就问,这是我做为新员人的“权力”,现在问什么都不丢人,以后混的久了还不会才是丢老人了。所以和我一样正在适应新环境,学习新东西的朋友们,保持冷静,不要急,不要怕。别人会的你一定也会,努力了,哪就是迟早的事儿。

       这两天的心情不错,接受能力也提高不少,感觉这两三撑握了不少东东,我想,我的困难期快结束了,至少可以独立行走了,虽然偶尔遇到障碍物,还需要人扶一把,但是至少不需要扶着墙走路了。我的主观能动性开始体现出来了,因为开始向不同的人求教了,。于是乎,组里的人也都熟悉起来了。感觉一切都开始顺了。。。嘻嘻真好

       想想我挺幸福的,真的,有这么多热心的人帮助我。感谢小杜子,感谢我导师,感谢我身边每一位。发现好心情的情况下做事,效率极高。好吧,我要开开心心的工作。工作,生活不如意的地方,就把它当作沙子吧,让它沉到瓶底,我依然是一瓶清彻的净水。

  • 杂谈

    2010-06-24 10:52:33

    在公司的日子己经接近尾声,工作己交接完毕,表也填了,就等人事回来开证明了。

    想想这两年,除了钱赚的少了点,还是挺开心的。

    呵呵,六月,总的来说过的还很好,工作的顺利,使我挥去了五月感情的不悦。

    挺好的,简简单单的一个人

    过着简简单单的日子

    如果有一天再能拥有一份简简单单的爱情

    也便让父母放了心。

    下周开始去一个新的工作环境

    开始展开新的工作

    挺好

    一切都是简简单单

     

  • [论坛] 关于web测试的资料集

    2010-06-23 10:48:57

    最近发现论坛里有好多做web测试的同行,我也趁这两天有空,把我手上的关于web测试方面的资料贴上来,大家看看,了解一下,为了方便查看,我不用附件形式了,发贴形式,大家如想收集到自己电脑里,可以copy一下。
    安全性测试:
    Web应用系统的安全性测试区域主要有:
      (1)现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。
      (2)Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。
      (3)为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。
      (4)当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。
      (5)服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。

    导航测试:        导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问题,可以决定一个Web应用系统是否易于导航:导航是否直观?Web系统的主要部分是否可通过主页存取?Web系统是否需要站点地图、搜索引擎或其他的导航帮助?
              在一个页面上放太多的信息往往起到与预期相反的效果。Web应用系统的用户趋向于目的驱动,很快地扫描一个Web应用系统,看是否有满足自己需要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉Web应用系统的结构,因此,Web应用系统导航帮助要尽可能地准确。
              导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容,内容在什么地方。
              Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。
    整体界面测试 :
    整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致?
    对整体界面的测试过程,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。
      对所有的可用性测试来说,都需要有外部人员(与Web应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。
      四、客户端兼容性测试
      1、平台测试
      市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。
      因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试
      2、浏览器测试
      浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、javascript、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,javascript是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。
      测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。

    图形测试 :
    在Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:
        (1)要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。
      (2)验证所有页面字体的风格是否一致。
      (3)背景颜色应该与字体颜色和前景颜色相搭配。
      (4)图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩。
      3、内容测试
      内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。
      信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行,例如使用Microsoft Word的"拼音与语法检查"功能;信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口,也就是一般Web站点中的所谓"相关文章列表"。

    在Web工程过程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证 是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。然而, Internet和Web媒体的不可预见性使测试基于Web的系统变得困难。因此,我们必须为测试和评估复杂的基于Web的系统研究新的方法和技术。
    本文将 web 测试分为 6 个部分:
    1.       功能测试
    2.       性能测试(包括负载/压力测试)
    3.       用户界面测试
    4.       兼容性测试
    5.       安全测试
    6.       接口测试
    本文的目的是覆盖 web 测试的各个方面,未就某一主题进行深入说明。
    1 功能测试
    1.1 链接测试
    链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可 分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web应用系统上没有孤立的页 面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。
    链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web应用系统的所有页面开发完成之后进行链接测试。
    采取措施:采用自动检测网站链接的软件来进行。
    推荐软件:
    Xenu Link Sleuth 免费 绿色免安装软件
    HTML Link Validator 共享(30天试用)
    1.2 表单测试
    当用户通过表单提交信息的时候,都希望表单能正常工作。
    如果使用表单来进行在线注册,要确保提交按钮能正常工作,当注册完成后应返回注册成功的消息。如果使用表单收集配送 信息,应确保程序能够正确处理这些数据,最后能让顾客能让客户收到包裹。要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解 释和使用这些信息。
    当用户使用表单进行用户注册、登陆、信息提交等操作时,我们必须测试提交操作的完整性,以校验提交给服务器的信息的 正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指 定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。
    1.3 数据校验
    如果系根据业务规则需要对用户输入进行校验,需要保证这些校验功能正常工作。例如,省份的字段可以用一个有效列表进行校验。在这种情况下,需要验证列表完整而且程序正确调用了该列表(例如在列表中添加一个测试值,确定系统能够接受这个测试值)。
    在测试表单时,该项测试和表单测试可能会有一些重复。
    1.2和1.3的采取措施:第一个完整的版本采用手动检查,同时形成WinRunner(QTP)脚本;回归测试以及升级版本主要靠WinRunner(QTP)自动回放测试。
    1.4 cookies测试
    Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。
       如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作。测试的内容可包括Cookies是否起作用,是否按预定的时间进行 保存,刷新对Cookies有什么影响等。如果在 cookies 中保存了注册信息,请确认该 cookie能够正常工作而且已对这些信息已经加密。如果使用 cookie 来统计次数,需要验证次数累计正确。
    采取措施:
         1 采用黑盒测试:采用上面提到的方法进行测试
    2 采用查看cookies的软件进行(初步的想法)
    可以选择采用的软件
    IECookiesView v1.50
    Cookies Manager v1.1
    1.5 数据库测试
    在Web应用技术中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。
    在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。
    采取措施:暂时没有更好的测试方法
         考虑结合到1.2和1.3的测试中
    1.6 应用程序特定的功能需求
    最重要的是,测试人员需要对应用程序特定的功能需求进行验证。尝试用户可能进行的所有操作:下订单、更改订单、取消订单、核对订单状态、在货物发送之前更改送货信息、在线支付等等。这是用户之所以使用网站的原因,一定要确认网站能像广告宣传的那样神奇。
    采取措施:深刻理解需求说明文档
    1.7 设计语言测试
    Web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML等。当在分布式环境中开 发时,开发人员都不在一起,这个问题就显得尤为重要。除了HTML的版本问题外,不同的脚本语言,例如Java、JavaScript、 ActiveX、VBScript或Perl等也要进行验证。
    2 性能测试
    2.1 连接速度测试
    用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。
    另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。
    2.2 负载测试
    负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某 个时刻同时访问Web系统的用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现 象?Web应用系统能否处理大量用户对同一个页面的请求?
    2.3 压力测试
    负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。
    进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。
    压力测试的区域包括表单、登陆和其他信息传输页面等。
    负载/压力测试应该关注什么
    测试需要验证系统能否在同一时间响应大量的用户,在用户传送大量数据的时候能否响应,系统能否长时间运行。可访问性 对用户来说是极其重要的。如果用户得到“系统忙”的信息,他们可能放弃,并转向竞争对手。系统检测不仅要使用户能够正常访问站点,在很多情况下,可能会有 黑客试图通过发送大量数据包来攻击服务器。出于安全的原因,测试人员应该知道当系统过载时,需要采取哪些措施,而不是简单地提升系统性能。
    瞬间访问高峰
    如果您的站点用于公布彩票的抽奖结果,最好使系统在中奖号码公布后的一段时间内能够响应上百万的请求。负载测试工具能够模拟 X 个用户同时访问测试站点。
    每个用户传送大量数据
    网上书店的多数用户可能只订购 1-5 书,但是大学书店可能会订购 5000 本有关心理学介绍的课本? 或者一个祖母为她的 50 个儿孙购买圣诞礼物(当然每个孩子都有自己的邮件地址) 系统能处理单个用户的大量数据吗?
    长时间的使用
    如果站点用于处理鲜花订单,那么至少希望它在母亲节前的一周内能持续运行。如果站点提供基于 web 的 email 服务,那么点最好能持续运行几个月,甚至几年。可能需要使用自动测试工具来完成这种类型的测试,因为很难通过手工完成这些测试。你可以想象组织100 个人同时点击某个站点。但是同时组织 100000 个人呢。通常,测试工具在第二次使用的时候,它创造的效益,就足以支付成本。而且,测试工具安装完成之后,再次使用的时候,只要点击几下。
    采取措施:采用测试工具WAS、ACT协助进行测试

    3 用户界面测试
    3.1 导航测试
    导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连 接页面之间。通过考虑下列问题,可以决定一个Web应用系统是否易于导航:导航是否直观?Web系统的主要部分是否可通过主页存取?Web系统是否需要站 点地图、搜索引擎或其他的导航帮助?
    在一个页面上放太多的信息往往起到与预期相反的效果。Web应用系统的用户趋向于目的驱动,很快地扫描一个Web应 用系统,看是否有满足自己需要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉Web应用系统的结构,因此,Web应用系统导航帮助要尽可 能地准确。
    导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容,内容在什么地方。
    Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。
    3.2 图形测试
    在Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:
    (1)要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。
    (2)验证所有页面字体的风格是否一致。
    (3)背景颜色应该与字体颜色和前景颜色相搭配。
    (4)图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩,最好能使图片的大小减小到 30k 以下
    (5)最后,需要验证的是文字回绕是否正确。如果说明文字指向右边的图片,应该确保该图片出现在右边。不要因为使用图片而使窗口和段落排列古怪或者出现孤行。
    通常来说,使用少许或尽量不使用背景是个不错的选择。如果您想用背景,那么最好使用单色的,和导航条一起放在页面的左边。另外,图案和图片可能会转移用户的注意力。
    3.3内容测试
    内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。
    信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷; 信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行,例如使用Microsoft Word的"拼音与语法检查"功能;信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口,也就是一般Web站点中的所谓"相关文 章列表"。
    对于开发人员来说,可能先有功能然后才对这个功能进行描述。大家坐在一起讨论一些新的功能,然后开始开发,在开发的 时候,开发人员可能不注重文字表达,他们添加文字可能只是为了对齐页面。不幸的是,这样出来的产品可能产生严重的误解。因此测试人员和公关部门一起检查内 容的文字表达是否恰当。否则,公司可能陷入麻烦之中,也可能引起法律方面的问题。测试人员应确保站点看起来更专业些。过分地使用粗体字、大字体和下划线可 能会让用户感到不舒服。在进行用户可用性方面的测试时,最好先请图形设计专家对站点进行评估。你可能不希望看到一篇到处是黑体字的文章,所以相信您也希望 自己的站点能更专业一些。最后,需要确定是否列出了相关站点的链接。很多站点希望用户将邮件发到一个特定的地址,或者从某个站点下载浏览器。但是如果用户 无法点击这些地址,他们可能会觉得很迷惑。
    3.4 表格测试
    需要验证表格是否设置正确。用户是否需要向右滚动页面才能看见产品的价格?把价格放在左边,而把产品细节放在右边是否更有效? 每一栏的宽度是否足够宽,表格里的文字是否都有折行?是否有因为某一格的内容太多,而将整行的内容拉长?
    3.5 整体界面测试
    整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致?
    对整体界面的测试过程,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。
    对所有的用户界面测试来说,都需要有外部人员(与Web应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。
    4 兼容性测试
    4.1 平台测试
    市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web 应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外 的操作系统下可能会运行失败。
    因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。
    4.2 浏览器测试
    浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、JavaScript、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,JavaScript是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有 不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。
    测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。
    4.3 分辨率测试
    页面版式在 640x400、600x800 或 1024x768 的分辨率模式下是否显示正常? 字体是否太小以至于无法浏览? 或者是太大? 文本和图片是否对齐?
    4.4 Modem/连接速率
    是否有这种情况,用户使用 28.8 modem下载一个页面需要 10 分钟,但测试人员在测试的时候使用的是 T1 专线? 用户在下载文章或演示的时候,可能会等待比较长的时间,但却不会耐心等待首页的出现。最后,需要确认图片不会太大。
    4.5 打印机
    用户可能会将网页打印下来。因此网也在设计的时候要考虑到打印问题,注意节约纸张和油墨。有不少用户喜欢阅读而不是 盯着屏幕,因此需要验证网页打印是否正常。有时在屏幕上显示的图片和文本的对齐方式可能与打印出来的东西不一样。测试人员至少需要验证订单确认页面打印是 正常的。
    4.6 组合测试
    最后需要进行组合测试。600x800 的分辨率在 MAC 机上可能不错,但是在 IBM 兼容机上却很难看。在 IBM 机器上使用 Netscape 能正常显示,但却无法使用 Lynx 来浏览。如果是内部使用的 web 站点,测试可能会轻松一些。如果公司指定使用某个类型的浏览器,那么只需在该浏览器上进行测试。如果所有的人都使用 T1 专线,可能不需要测试下载施加。(但需要注意的是,可能会有员工从家里拨号进入系统) 有些内部应用程序,开发部门可能在系统需求中声明不支持某些系统而只支持一些那些已设置的系统。但是,理想的情况是,系统能在所有机器上运行,这样就不会 限制将来的发展和变动。
    采取措施:根据实际情况,采取等价划分的方法,列出兼容性矩阵

    5 安全测试
    即使站点不接受信用卡支付,安全问题也是非常重要的。Web 站点收集的用户资料只能在公司内部使用。如果用户信息被黑客泄露,客户在进行交易时,就不会有安全感。
    5.1 目录设置
    Web 安全的第一步就是正确设置目录。每个目录下应该有 index.html 或 main.html 页面,这样就不会显示该目录下的所有内容。我服务的一个公司没有执行这条规则。我选中一幅图片,单击鼠标右键,找到该图片所在的路径"… com/objects/images"。然后在浏览器地址栏中手工输入该路径,发现该站点所有图片的列表。这可能没什么关系。我进入下一级目录 "…com/objects" ,点击 jackpot。在该目录下有很多资料,其中引起我注意的是已过期页面。该公司每个月都要更改产品价格,并且保存过期页面。我翻看了一下这些记录,就可以 估计他们的边际利润以及他们为了争取一个合同还有多大的降价空间。如果某个客户在谈判之前查看了这些信息,他们在谈判桌上肯定处于上风。
    5.2 SSL
    很多站点使用 SSL 进行安全传送。你知道你进入一个 SSL 站点是因为浏览器出现了警告消息,而且在地址栏中的 HTTP 变成 HTTPS。如果开发部门使用了SSL,测试人员需要确定是否有相应的替代页面(适用于3.0 以下版本的浏览器,这些浏览器不支持SSL。当用户进入或离开安全站点的时候,请确认有相应的提示信息。是否有连接时间限制?超过限制时间后出现什么情 况?
    5.3 登录
    有些站点需要用户进行登录,以验证他们的身份。这样对用户是方便的,他们不需要每次都输入个人资料。你需要验证系统 阻止非法的用户名/口令登录,而能够通过有效登录。用户登录是否有次数限制? 是否限制从某些 IP 地址登录? 如果允许登录失败的次数为3,你在第三次登录的时候输入正确的用户名和口令,能通过验证吗? 口令选择有规则限制吗?  是否可以不登陆而直接浏览某个页面?
    Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。
    5.4 日志文件
    在后台,要注意验证服务器日志工作正常。日志是否记所有的事务处理? 是否记录失败的注册企图? 是否记录被盗信用卡的使用? 是否在每次事务完成的时候都进行保存? 记录IP 地址吗? 记录用户名吗?
    5.5 脚本语言
    脚本语言是常见的安全隐患。每种语言的细节有所不同。有些脚本允许访问根目录。其他只允许访问邮件服务器,但是经验 丰富的黑客可以将服务器用户名和口令发送给他们自己。找出站点使用了哪些脚本语言,并研究该语言的缺陷。还要需要测试没有经过授权,就不能在服务器端放置 和编辑脚本的问题。最好的办法是订阅一个讨论站点使用的脚本语言安全性的新闻组。 

    6 接口测试
    在很多情况下,web 站点不是孤立。Web 站点可能会与外部服务器通讯,请求数据、验证数据或提交订单。
    6.1服务器接口
    第一个需要测试的接口是浏览器与服务器的接口。测试人员提交事务,然后查看服务器记录,并验证在浏览器上看到的正好是服务器上发生的。测试人员还可以查询数据库,确认事务数据已正确保存。
    这种测试可以归到功能测试中的表单测试和数据校验测试中
    6.2 外部接口
    有些 web 系统有外部接口。例如,网上商店可能要实时验证信用卡数据以减少欺诈行为的发生。测试的时候,要使用 web 接口发送一些事务数据,分别对有效信用卡、无效信用卡和被盗信用卡进行验证。如果商店只使用 Visa 卡和 Mastercard 卡, 可以尝试使用 Discover 卡的数据。(简单的客户端脚本能够在提交事务之前对代码进行识别,例如 3 表示 American Express,4 表示 Visa,5 表示 Mastercard,6 代表Discover。)通常,测试人员需要确认软件能够处理外部服务器返回的所有可能的消息。
    这种情况在远程抄表中可能会体现到
    6.3 错误处理
    最容易被测试人员忽略的地方是接口错误处理。通常我们试图确认系统能够处理所有错误,但却无法预期系统所有可能的错 误。尝试在处理过程中中断事务,看看会发生什么情况?订单是否完成?尝试中断用户到服务器的网络连接。尝试中断 web 服务器到信用卡验证服务器的连接。在这些情况下,系统能否正确处理这些错误?是否已对信用卡进行收费?如果用户自己中断事务处理,在订单已保存而用户没有 返回网站确认的时候,需要由客户代表致电用户进行订单确认。
    采取措施:在理解需求的基础上,充分发挥想象力,尽量比较全面的列出各种异常情况。

    7 结论
       无论你在测试 internet、intranet 或者是 extranet 应用程序,web 测试相对于非 web 测试来说都是更具挑战性的工作。用户对 web 页面质量有很高的期望。在很多情况下,就像业务功能一样,页面用于维护和发展公共关系,所以第一印象非常重要。

    [ 本帖最后由 月上百合 于 2010-6-23 10:47 编辑 ]
  • oracle常用命令

    2010-06-21 21:03:42

    一、ORACLE的启动和关闭
    1
    、在单机环境下
    要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下
    su - oracle
    a
    、启动ORACLE系统
    oracle>svrmgrl
    SVRMGR>connect internal
    SVRMGR>startup
    SVRMGR>quit
    b
    、关闭ORACLE系统
    oracle>svrmgrl
    SVRMGR>connect internal
    SVRMGR>shutdown
    SVRMGR>quit
    启动oracle9i数据库命令:
    $ sqlplus /nolog
    SQL*Plus: Release 9.2.0.1.0 - Production on Fri Oct 31 13:53:53 2003
    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
    SQL> connect / as sysdba  
    Connected to an idle instance.
    SQL> startup^C
    SQL> startup
    ORACLE instance started.
    2
    、在双机环境下
    要想启动或关闭ORACLE系统必须首先切换到root用户,如下
    su 
     root
    a
    、启动ORACLE系统
    hareg 
    y oracle
    b
    、关闭ORACLE系统
    hareg 
    n oracle
    Oracle
    数据库有哪几种启动方式
    说明:
    有以下几种启动方式:
    1
    startup nomount
    非安装启动,这种方式启动下可执行:重建控制文件、重建数据库
    读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。
    2
    startup mount dbname
    安装启动,这种方式启动下可执行:
    数据库日志归档、
    数据库介质恢复、
    使数据文件联机或脱机,
    重新定位数据文件、重做日志文件。
    执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,
    但此时不对数据文件和日志文件进行校验检查。
    3
    startup open dbname
    先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,
    这种方式下可访问数据库中的数据。
    4
    startup,等于以下三个命令
    startup nomount
    alter database mount
    alter database open
    5
    startup restrict
    约束方式启动
    这种方式能够启动数据库,但只允许具有一定特权的用户访问
    非特权用户访问时,会出现以下提示:
    ERROR

    ORA-01035: ORACLE 
    只允许具有 RESTRICTED SESSION 权限的用户使用
    6
    startup force
    强制启动方式
    当不能关闭数据库时,可以用startup force来完成数据库的关闭
    先关闭数据库,再执行正常启动数据库命令
    7
    startup pfile=参数文件名
    带初始化参数文件的启动方式
    先读取参数文件,再按参数文件中的设置启动数据库
    例:startup pfile=E:Oracleadminoradbpfileinit.ora
    8
    startup EXCLUSIVE
    二、用户如何有效地利用数据字典
      
     ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库的产生而产生随着数据库的变化而变化,
    体现为sys用户下的一些表和视图。数据字典名称是大写的英文字符。
        
    数据字典里存有用户信息、用户的权限信息、所有数据对象信息、表的约束条件、统计分析数据库的视图等。
    我们不能手工修改数据字典里的信息。
      很多时候,一般的ORACLE用户不知道如何有效地利用它。
      dictionary   全部数据字典表的名称和解释,它有一个同义词dict
        dict_column
       全部数据字典表里字段名称和解释
        
    如果我们想查询跟索引有关的数据字典时,可以用下面这条SQL语句:
        SQL>select * from dictionary where instr(comments,'index')>0;
        
    如果我们想知道user_indexes表各字段名称的详细含义,可以用下面这条SQL语句:
        SQL>select column_name,comments from dict_columns where table_name='USER_INDEXES';
        
    依此类推,就可以轻松知道数据字典的详细名称和解释,不用查看ORACLE的其它文档资料了。
        
    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。
        1
    、用户
                
    查看当前用户的缺省表空间
                SQL>select username,default_tablespace from user_users;
            
    查看当前用户的角色
            SQL>select * from user_role_privs;
            
    查看当前用户的系统权限和表级权限
            SQL>select * from user_sys_privs;
            SQL>select * from user_tab_privs;
        2
    、表
                
    查看用户下所有的表
                SQL>select * from user_tables;
                
    查看名称包含log字符的表
                SQL>select object_name,object_id from user_objects
                    where instr(object_name,'LOG')>0;
                
    查看某表的创建时间
                SQL>select object_name,created from user_objects where object_name=upper('&table_name');
                
    查看某表的大小
                SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
                    where segment_name=upper('&table_name');
                
    查看放在ORACLE的内存区里的表
                SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
        3
    、索引
                
    查看索引个数和类别
                SQL>select index_name,index_type,table_name from user_indexes order by table_name;
                
    查看索引被索引的字段
                SQL>select * from user_ind_columns where index_name=upper('&index_name');
                
    查看索引的大小
                SQL>select sum(bytes)/(1024*1024) as "size(M)" from user_segments
                    where segment_name=upper('&index_name');
        4
    、序列号
                
    查看序列号,last_number是当前值
                SQL>select * from user_sequences;
        5
    、视图
                
    查看视图的名称
                SQL>select view_name from user_views;
                
    查看创建视图的select语句
                SQL>set view_name,text_length from user_views;
                SQL>set long 2000;                
    说明:可以根据视图的text_length值设定set long 的大小
                SQL>select text from user_views where view_name=upper('&view_name');
        6
    、同义词
                
    查看同义词的名称
                SQL>select * from user_synonyms;
        7
    、约束条件
                
    查看某表的约束条件
                SQL>select constraint_name, constraint_type,search_condition, r_constraint_name
                    from user_constraints where table_name = upper('&table_name');
            SQL>select c.constraint_name,c.constraint_type,cc.column_name
                from user_constraints c,user_cons_columns cc
                where c.owner = upper('&table_owner') and c.table_name = upper('&table_name')
                and c.owner = cc.owner and c.constraint_name = cc.constraint_name
                order by cc.position;
        8
    、存储函数和过程
                
    查看函数和过程的状态
                SQL>select object_name,status from user_objects where object_type='FUNCTION';
                SQL>select object_name,status from user_objects where object_type='PROCEDURE';
                
    查看函数和过程的源代码
                SQL>select text from all_source where owner=user and name=upper('&plsql_name');
    三、查看数据库的SQL
    1
    、查看表空间的名称及大小
        select t.tablespace_name, round(sum(bytes/(1024*1024)),0) ts_size
        from dba_tablespaces t, dba_data_files d
        where t.tablespace_name = d.tablespace_name
        group by t.tablespace_name;
    2
    、查看表空间物理文件的名称及大小
        select tablespace_name, file_id, file_name,
        round(bytes/(1024*1024),0) total_space
        from dba_data_files
        order by tablespace_name;
    3
    、查看回滚段名称及大小
        select segment_name, tablespace_name, r.status,
        (initial_extent/1024) InitialExtent,(next_extent/1024) NextExtent,
        max_extents, v.curext CurExtent
        From dba_rollback_segs r, v$rollstat v
        Where r.segment_id = v.usn(+)
        order by segment_name ;
    4
    、查看控制文件
        select name from v$controlfile;
    5
    、查看日志文件
        select member from v$logfile;
    6
    、查看表空间的使用情况
        select sum(bytes)/(1024*1024) as free_space,tablespace_name
        from dba_free_space
        group by tablespace_name;
        SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE,
        (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
        FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C
        WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE_NAME;
    7
    、查看数据库库对象
        select owner, object_type, status, count(*) count# from all_objects group by owner, object_type, status;
    8
    、查看数据库的版本
        Select version FROM Product_component_version
        Where SUBSTR(PRODUCT,1,6)='Oracle';
    9
    、查看数据库的创建日期和归档方式
        Select Created, Log_Mode, Log_Mode From V$Database;
    四、ORACLE用户连接的管理
    用系统管理员,查看当前数据库有几个用户连接:
    SQL> select username,sid,serial# from v$session;
    如果要停某个连接用
    SQL> alter system kill session 'sid,serial#';
    如果这命令不行,找它UNIX的进程数
    SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr;
    说明:21是某个连接的sid
    然后用 kill 命令杀此进程号。

    五、SQL*PLUS使用
    a
    、近入SQL*Plus
    $sqlplus 
    用户名/密码
       
    退出SQL*Plus
    SQL>exit
    b
    、在sqlplus下得到帮助信息
    列出全部SQL命令和SQL*Plus命令
    SQL>help
    列出某个特定的命令的信息
    SQL>help 
    命令名

    c
    、显示表结构命令DESCRIBE
    SQL>DESC 
    表名

    d
    SQL*Plus中的编辑命令
    显示SQL缓冲区命令
    SQL>L

    修改SQL命令
    首先要将待改正行变为当前行
    SQL>n
    CHANGE命令修改内容
    SQL>c/
    /
    重新确认是否已正确
    SQL>L

    使用INPUT命令可以在SQL缓冲区中增加一行或多行
    SQL>i
    SQL>
    输入内容

    e
    、调用外部系统编辑器
    SQL>edit 
    文件名
    可以使用DEFINE命令设置系统变量EDITOR来改变文本编辑器的类型,在login.sql文件中定义如下一行
    DEFINE_EDITOR=vi

    f
    、运行命令文件
    SQL>START test
    SQL>@test

    常用SQL*Plus语句
    a
    、表的创建、修改、删除
    创建表的命令格式如下:
    create table 
    表名 (列说明列表);

    为基表增加新列命令如下:
    ALTER TABLE 
    表名 ADD (列说明列表)
    例:为test表增加一列Age,用来存放年龄
        sql>alter table test
            add 
    Age number(3));

    修改基表列定义命令如下:
    ALTER TABLE 
    表名
    MODIFY 
    (列名 数据类型)
    例:将test表中的Count列宽度加长为10个字符
        sql>alter atble test
            modify 
    County char(10));

    b
    、将一张表删除语句的格式如下:
    DORP TABLE 
    表名;
    例:表删除将同时删除表的数据和表的定义
    sql>drop table test

    c
    、表空间的创建、删除


    六、ORACLE逻辑备份的SH文件

    完全备份的SH文件:exp_comp.sh

    rq=` date +"%m%d" `

    su - oracle -c "exp system/manager full=y inctype=complete file=/oracle/export/db_comp$rq.dmp"

    累计备份的SH文件:exp_cumu.sh

    rq=` date +"%m%d" `

    su - oracle -c "exp system/manager full=y inctype=cumulative file=/oracle/export/db_cumu$rq.dmp"

    增量备份的SH文件: exp_incr.sh

    rq=` date +"%m%d" `

    su - oracle -c "exp system/manager full=y inctype=incremental file=/oracle/export/db_incr$rq.dmp"

    root
    用户crontab文件
    /var/spool/cron/crontabs/root
    增加以下内容

    0 2 1 * * /oracle/exp_comp.sh

    30 2 * * 0-5 /oracle/exp_incr.sh

    45 2 * * 6 /oracle/exp_cumu.sh

    当然这个时间表可以根据不同的需求来改变的,这只是一个例子。


    七、

  • linux常用命令

    2010-06-21 21:01:31

    1、最常用的命令列表

    下面列出十个在使用linux过程中使用频率最高的命令。这里只作简单介绍,具体用法请参考后面内容。

    cat,显示文件内容。cd,改变目录路径。cp,复制文件。find,查找文件。grep,搜索、过滤信息。ls,列出目录信息。more,分页显示。rm,删除文件或目录。vi,调用vi文本编辑器。who,显示登录用户信息。

    Poweroff 关机,shutdown关机重启,file 显示文件类型,mkdir创建目录,grep 在指定的文本文件中查找指定的字符串,dd转换及输入数据,mv 移动文件或目录,文件或目录改名, diff比较并显示文件差异的部分,comm比较文件内容,ln建立文件之间的链接,rmdir删除空目录,zip压缩文件或目录,unlink删除软链接,clear清楚界面,

    2. chmod----改变一个或多个文件的存取模式(mode)

    chmod [options] mode files

    只能文件属主或特权用户才能使用该功能来改变文件存取模式。mode可以是数字形式或以who opcode permission形式表示。who是可选的,默认是a(所有用户)。只能选择一个opcode(操作码)。可指定多个mode,以逗号分开。

    options

    -c--changes

    只输出被改变文件的信息

    -f--silent--quiet

    chmod不能改变文件模式时,不通知文件的用户

    --help

    输出帮助信息。

    -R--recursive

    可递归遍历子目录,把修改应到目录下所有文件和子目录

    --reference=filename

    参照filename的权限来设置权限

    -v--verbose

    无论修改是否成功,输出每个文件的信息

    --version

    输出版本信息。

    who

    u 用户     g       o 其它     a 所有用户(默认)

    opcode

    + 增加权限    - 删除权限     = 重新分配权限

    permission

    r      w    x 执行    s 设置用户(或组)ID

    t 设置粘着位(sticky bit),防止文件或目录被非属主删除

    u 用户的当前权限   g 组的当前权限    o 其他用户的当前权限

    作为选择,我们多数用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4()2()1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。

    还可设置第四位,它位于三位权限序列的前面,第四位数字取值是421,代表意思如下:

    4,执行时设置用户ID,用于授权给基于文件属主的进程,而不是给创建此进程的用户。

    2,执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户。

    1,设置粘着位。

    实例:

    $ chmod u+x file               file的属主增加执行权限

    $ chmod 751 file              file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限

    $ chmod u=rwx,g=rx,o=x file    上例的另一种形式

    $ chmod =r file                为所有用户分配读权限

    $ chmod 444 file               同上例

    $ chmod a-wx,a+r               同上例

    $ chmod -R u+r directory       递归地给directory目录下所有文件和子目录的属主分配读的权限

    $ chmod 4755           设置用ID,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限。

    3. chgrp----修改文件或目录的所属组

    chgrp [options] newgroup files/directorys

    组名可以用组的ID号,也可用/etc/group中的组名。只有文件的属主或特权用户(root)才可改变它的组。

    options

    -c--changes 只输出被改变文件的信息

    -f--silent--quiet 当不能改变文件组属性时,不通知文件的用户

    --help 输出帮助信息。

    -R--recursive 可递归遍历子目录,把修改应到目录下所有文件和子目录

    --reference=filename 参照filename的组信息来设置当前文件的组

    -v--verbose 输出详细信息

    --version 输出版本信息。

    实例:

    $ chgrp root test           test的所属组更改root

    $ chgrp -R mysql test       递归地把test目录及该目录下所有文件和子目录的组属性设置成mysql

    $ chgrp root *              把当前目录中所有文件的组属性设置成root

    4. chown----设置一个或多个文件或目录的属主身份

    chown [options] newowner files/directorys

    新的属主可以是用户的ID号,也可以是/etc/passwd里的登录名。chown也可接受这样的形式:newowner:newgroupnewowner.newgroup。同时改变所属组的属性。如果句点和冒号后没有组名,则组改变为新属主的组。只有文件或目录的当前属主才有权改变它的属性。

    options

    -c--changes 只输出被改变文件的信息

    --dereference 跟踪符号链接

    -h--no-dereference 改变每一个符号链的属主身份,而不是被引用文件的属主身份

    -f--silent--quiet 当不能改变文件属主属性时,不通知文件的用户

    --help 输出帮助信息。

    -R--recursive 可递归遍历子目录,把修改应到目录下所有文件和子目录

    --reference=filename 把属主改变成filename文件的属主

    -v--verbose 输出详细信息

    --version 输出版本信息。

    5. date----显示、修改系统时间

    date [options][+format][date]

    $ date -s 06/09/2004     修改日期(按月日年格式)

    $ date -s 13:56:00         修改时间(按时分秒格式)

    $ date -r test                 显示test文件最后一次的修改时间

    $ date +'%Y-%m-%d'   yyyy-mm-dd格式显示日期,其它格式请参考帮助

    $ clock -r             查询BIOS时间

    $ clock -w           把修改后的时间写回BIOS

    6. df-----显示已安装文件系统的磁盘容量状态

    df [options][name]

    $ df -h                 以友好的格式输出所有已安装文件系统的磁盘容量状态

    $ df -m /home      M为单位输出home目录的磁盘容量状态

    $ df -k                 K为单位输出所有已安装文件系统的磁盘容量状态

    $ df -i                  报告空闲的、用过的或部份用过的(百份比)索引节点

    $ df -t ext3 仅显示文件类型为ext3的文件系统的磁盘状态

    $ df -x ext3 仅显示文件类型不为ext3的文件系统的磁盘状态

    $ df -T                 除显示文件系统磁盘容量大小外还显示文件系统类型

    $ df -l                  仅显示本地文件系统。

    7. fdisk----分区表查询工具

    fdisk [options][driver]

    $ fdisk -l          列出所有分区信息

    8. hdparm----硬盘管理

    hdparm [options][driver]

    $ hdparm -d  /dev/hda           显示硬盘的DMA模式是不打开,1代表on

    $ hdparm -tT /dev/hda           测试硬盘的写性能

    $ hdparm -d1 /dev/hda           开启dma功能

    $ hdparm -d1 -X68 -c3 -m16 /dev/hda 

    选项说明:

    -c3:把硬盘的IO模式从16位转成32位。

    -m16:改变硬盘的多路扇区的读功能,-m16使硬盘在一次I/O中断中读入16个扇区的数据。

  • 1842/10<12345678910>

    用户菜单

    我的栏目

    我的存档

    数据统计

    RSS订阅

    Open Toolbar