发布新日志

  • LoadRunner监控Linux与Windows方法

    2013-08-14 17:25:44

    LoadRunner监控Linux与Windows方法


      一、监控windows系统:

      1、监视连接前的准备工作

      1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Service (开始—)运行 中输入services.msc,开启对应服务即可)。

      2)在被监视的WINDOWS机器上:右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹 (要是没有自己手动加上)。

      3)在安装LR的机器上,开始—》运行,输入 \\被监视机器IP\C$ 然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限,可以使用LR去连接了。(LR要连接WINDOWS机器进行监视要有管理员帐号和密码才行。)

      问题:在执行步骤3)时,输入 \\被监视机器IP\C$,出现不能以administrator身份访问被监控系统(若采用这种方式用LR对其监控的话,会提示:“找不到网络路径”)的情况,现象就是用户名输入框是灰色的,并且默认用户是guest。

      解决办法:这是安全策略的设置问题(管理工具 -> 本地安全策略 -> 安全选项 ->“网络访问:本地帐户的共享和安全模式”)。默认情况下,XP的访问方式是“仅来宾”的方式,如果你访问它,当然就固定为Guest来访问,而guest账户没有监控的权限,所以要把访问方式改为“经典”模式,这样就可以以administrator的身份登陆了。修改后,再次执行步骤3),输入管理员用户名和密码,就可以访问被监控机器C盘了。

      若这样都不行的话(可能是其它问题引起的),那只好采取别的方法了。在服务器的机子上,通过windows自带的“性能日志和警报”下的“计数器日志”中新增加一个监控日志(管理工具—)性能—)性能日志和警报),配置好日志,也能监控服务器的cpu、memory、disk等计数器。当然,这种方法就不是用LR来监控了。

      2、用LR监视windows的步骤

      在controller 中,Windows Resources窗口中右击鼠标选择Add Measurements,添加被监控windows的IP地址,选择所属系统,然后选择需要监控的指标就可以开始监控了。

      二、监控linux

      1 准备工作

      可以通过两种方法验证服务器上是否配置了rstatd守护程序:

      ①使用rup命令,它用于报告计算机的各种统计信息,其中就包括rstatd的配置信息。使用命令rup 10.130.61.203,此处10.130.61.203是要监视的linux/Unix服务器的Ip,如果该命令返回相关的统计信息。则表示已经配置并且激活了rstatd守护进程;若未返回有意义的统计信息,或者出现一条错误报告,则表示rstatd守护进程尚未被配置或有问题。

      ②使用find命令

      #find / -name rpc.rstatd,该命令用于查找系统中是否存在rpc.rstatd文件,如果没有,说明系统没有安装rstatd守护程序。

      如果服务器上没有安装rstatd程序(一般来说LINUX都没有安装),需要下载一个包才有这个服务,包名字是rpc.rstatd-4.0.1.tar.gz. 这是一个源码,需要编译,下载并安装rstatd(可以在[url]http://sourceforge.net/projects/[/url]rstatd<wbr>这个地址下载)

      下载后,开始安装,安装步骤如下:

      tar -xzvf rpc.rstatd-4.0.1.tar.gz

      cd rpc.rstatd-4.0.1/

      ./configure —配置操作

      make —进行编译

      make install —开始安装

      rpc.rstatd —启动rstatd进程

      2)安装完成后配置rstatd 目标守护进程xinetd,它的主配置文件是/etc/xinetd.conf,它里面内容是一些如下的基本信息:

      #

      # xinetd.conf

      #

      # Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.

      # Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.

      #

      defaults

      {

      log_type = FILE /var/log/xinetd.log

      log_on_success = HOST EXIT DURATION

      log_on_failure = HOST ATTEMPT

      #only_from = localhost

      instances = 30

      cps = 50 10

      #

      # The specification of an interface is interesting, if we are on a firewall.

      # For example, if you only want to provide services from an internal

      # network interface, you may specify your internal interfaces IP-Address.

      #

      # interface = 127.0.0.1

      }

      includedir /etc/xinetd.d

      我们这里需要修改的是/etc/xinetd.d/下的三个conf文件 rlogin,rsh,rexec这三个配置文件,打这三个文件里的disable = yes都改成 disable = no ( disabled 用在默认的 {} 中 禁止服务)或是把# default: off都设置成 on 这个的意思就是在xinetd启动的时候默认都启动上面的三个服务!

      说明:我自己在配置时,没有disable = yes这项,我就将# default: off改为:default: on,重启后(cd /etc/init.d/ ./xinetd restart)通过netstat -an |grep 514查看,没有返回。然后,我就手动在三个文件中最后一行加入disable = no,再重启xinetd,再使用netstat -an |grep 514查看,得到tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN结果,表明rsh服务器已经启动。

      只要保证Linux机器上的进程里有rstatd和xinetd这二个服务就可以用LR去监视了。

      两点小的技巧:

      ①检查是否启动: rsh server 监听的TCP 是514。

      [root@mg04 root]# netstat -an |grep 514

      tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN

      如果能看到514在监听说明rsh服务器已经启动。

      ②检查是否启动: rstatd

      输入命令: rpcinfo -p

      如果能看到类似如下信息:

      程序 版本 协议 端口

      100001 5 udp 937 rstatd

      100001 4 udp 937 rstatd

      100001 3 udp 937 rstatd

      100001 2 udp 937 rstatd

      100001 1 udp 937 rstatd

      那就说明rstatd服务启动了,(当然这里也可以用ps ax代替)

      ③重起xinetd方法:

      在suse linux如下操作:

      cd /etc/init.d/

      ./xinetd restart

      看到网上有的地方说使用如下命令:

      # service xinetd reload

      # /sbin/service xinetd rstart

      不知道是在什么系统用的。

      ④安装rsh,和rsh-server两个服务包方法

      a. 卸载rsh

      # rpm –q rsh----------查看版本号

      # rpm -e 版本号---------卸载该版本。

      b.安装

      # rpm –ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm

      ⑤在启动rpc.rstatd时,会报错“Cannot register service: RPC: Unable to receive;errno = Ction refused”。

      解决方法如下:

      # /etc/init.d ./portmap start

      # /etc/init.d ./nfs start

      然后再次启动rpc.rstatd就好了。

      最后,在controller中,将UNIX resources拖放到右边窗口里面,右击鼠标选择Add Measurements,添加被监控linux的IP地址,然后选择需要监控的指标就可以了。

      三、监控UNIX

      lr监控UNIX,UNIX先启动一rstatd服务

      以下是在IBM AIX系统中启动rstatd服务的方法:

      1、 使用telnet以root用户的身份登录入AIX系统

      2、 在命令行提示符下输入:vi/etc/inetd.conf

      3、 查找rstatd,找到

      #rstatd sunrpc_udp udp wait root /usr/sbin/rpc.rstatd rstatd 100001 1-3

      4、将#去掉

      5、:wq保存修改结果

      6、命令提示符下输入:refresh –s inetd 重新启动服务。

      这样使用loadrunner就可以监视AIX系统的性能情况了。

      注:在HP UNIX系统上编辑完inetd.conf后,重启inetd服务需要输入inetd -c

      UNIX上也可以用rup命令查看rstatd程序是否被配置并激活

      若rstatd程序已经运行,重启时,先查看进程ps -ef |grep inet,然后杀掉进程,再refresh –s inetd进行重启。

  • Web测试总结(转载)

    2013-08-14 17:08:09

    Web测试总结


    一、输入框

    1、字符型输入框:(1)字符型输入框:英文全角、英文半角、数字、空或者空格、特殊字符“~!@# ¥%……&*?[]{}”特别要注意单引号和&符号。禁止直接输入特殊字符时,使用“粘贴、拷贝”功能尝试输入。 (2)长度检查:最小长度、最大长度、最小长度-1、最大长度+1、输入超工字符比如把整个文章拷贝过去。 (3)空格检查:输入的字符间有空格、字符前有空格、字符后有空格、字符前后有空格 (4)多行文本框输入:允许回车换行、保存后再显示能够保存输入的格式、仅输入回车换行,检查能否正确保存(若能,检查保存结果,若不能,查看是否有正常 提示)、(5)安全性检查:输入特殊字符串 (null,NULL, ,javascript,<script>,</script>,<title>,<html>,<td>)、 输入脚本函数(<script>alert("abc")</script>)、 doucment.write("abc")、<b>hello</b>)

    2、数值型输入框:(1)边界值:最大值、最小值、最大值+1、最小值-1  (2)位数:最小位数、最大位数、最小位数-1最大位数+1、输入超长值、输入整数  (3)异常值、特殊字符:输入空白(NULL)、空格或"~!@#$%^&*()_+{}|[]\:"<>?;',./?;:'-= 等可能导致系统错误的字符、禁止直接输入特殊字符时,尝试使用粘贴拷贝查看是否能正常提交、word中的特殊功能,通过剪贴板拷贝到输入框,分页符,分节 符类似公式的上下标等、数值的特殊符号如∑,㏒,㏑,∏,+,-等、

    输入负整数、负小数、分数、输入字母或汉字、小数(小数前0点舍去的情况,多个小数点的情况)、首位为0的数字如01、02、科学计数法是否支持1.0E2、全角数字与半角数字、数字与字母混合、16进制,8进制数值、货币型输入(允许小数点后面几位)、(4)安全性检查:不能直接输入就copy

    3、日期型输入框:(1)合法性检查:(输入0日、1日、32日)、月输入[1、3、5、7、8、10、12]、日输入[31]、月输入[4、6、9、11]、日输入[30][31]、输入非闰年,月输入[2],日期输入[28、29]、输入闰年,月输入[2]、日期输入[29、30]、月输入[0、1、12、13]  (2)异常值、特殊字符:输入空白或NULL、输入~!@#¥%……&*(){}[]等可能导致系统错误的字符 (3)安全性检查:不能直接输入,就copy

    二、搜索功能

    若查询条件为输入框,则参考输入框对应类型的测试方法

    1、功能实现:(1)如果支持模糊查询,搜索名称中任意一个字符是否能搜索到 (2)比较长的名称是否能查到 (3)输入系统中不存在的与之匹配的条件 (4)用户进行查询操作时,一般情况是不进行查询条件的清空,除非需求特殊说明。

    2、组合测试:(1)不同查询条件之间来回选择,是否出现页面错误(单选框和多选框最容易出错)(2)测试多个查询条件时,要注意查询条件的组合测试,可能不同组合的测试会报错。

    三、添加、修改功能

    1、特殊键:(1)是否支持Tab键 (2)是否支持回车键

    2、提示信息:(1)不符合要求的地方是否有错误提示

    3、唯一性:(1)字段唯一的,是否可以重复添加,添加后是否能修改为已存在的字段(字段包括区分大小写以及在输入的内容前后输入空格,保存后,数据是否真的插入到数据库中,注意保存后数据的正确性)

    4、数据 正确性:(1)对编辑页的每个编辑项进行修改,点击保存,是否可以保存成功,检查想关联的数据是否得到更新。(2)进行必填项检查(即是否给出提示以及提 示后是否依然把数据存到数据库中;是否提示后出现页码错乱等)(3)是否能够连续添加(针对特殊情况)(4)在编辑的时候,注意编辑项的长度限制,有时在 添加的时候有,在编辑的时候却没有(注意要添加和修改规则是否一致)(5)对于有图片上传功能的编辑框,若不上传图片,查看编辑页面时是否显示有默认的图 片,若上传图片,查看是否显示为上传图片 (6)修改后增加数据后,特别要注意查询页面的数据是否及时更新,特别是在首页时要注意数据的更新。 (7)提交数据时,连续多次点击,查看系统会不会连续增加几条相同的数据或报错。(8)若结果列表中没有记录或者没选择某条记录,点击修改按钮,系统会抛 异常。

    四、删除功能

    1、特殊键:(1)是否支持Tab键 (2)是否支持回车键

    2、提示信息:(1)不选择任何信息,直接点击删除按钮,是否有提示 (2)删除某条信息时,应该有确认提示

    3、数据 实现:(1)是否能连续删除多个产品 (2)当只有一条数据时,是否可以删除成功 (3)删除一条数据后,是否可以添加相同的数据 (4)如系统支持批量删除,注意删除的信息是否正确 (5)如有全选,注意是否把所有的数据删除 (6)删除数据时,要注意相应查询页面的数据是否及时更新 (7)如删除的数据与其他业务数据关联,要注意其关联性(如删除部门信息时,部门下游员工,则应该给出提示) (8)如果结果列表中没有记录或没有选择任何一条记录,点击删除按钮系统会报错。

    五、注册、登陆模块

    1、注册功能:(1)注册时,设置密码为特殊版本号,检查登录时是否会报错 (2)注册成功后,页面应该以登陆状态跳转到首页或指定页面 (3)在注册信息中删除已输入的信息,检查是否可以注册成功。

    2、登陆 功能:(1)输入正确的用户名和正确的密码 (2)输入正确的用户名和错误的密码 (3)输入错误的用户名和正确的密码 (4)输入错误的用户名和错误的密码 (5)不输入用户名和密码(均为空格)(6)只输入用户名,密码为空 (7)用户名为空,只输入密码 (8)输入正确的用户名和密码,但是不区分大小写 (8)用户名和密码包括特殊字符 (9)用户名和密码输入超长值 (10)已删除的用户名和密码 (11)登录时,当页面刷新或重新输入数据时,验证码是否更新

    六、上传图片测试

    1、功能 实现:(1)文件类型正确、大小合适 (2)文件类型正确,大小不合适 (3)文件类型错误,大小合适 (4)文件类型和大小都合适,上传一个正在使用中的图片 (5)文件类型大小都合适,手动输入存在的图片地址来上传 (6)文件类型和大小都合适,输入不存在的图片地址来上传 (7)文件类型和大小都合适,输入图片名称来上传 (8)不选择文件直接点击上传,查看是否给出提示 (9)连续多次选择不同的文件,查看是否上传最后一次选择的文件

    七、查询结果列表

    1、功能 实现:(1)列表、列宽是否合理 (2)列表数据太宽有没有提供横向滚动 (3)列表的列名有没有与内容对应 (4)列表的每列的列名是否描述的清晰 (5)列表是否把不必要的列都显示出来 (6)点击某列进行排序,是否会报错(点击查看每一页的排序是否正确)(7)双击或单击某列信息,是否会报错

    八、返回键检查

    1、一条已经成功提交的记录,返回后再提交,是否做了处理

    2、检查多次使用返回键的情况,在有返回键的地方,返回到原来的页面多次,查看是否会出错

    九、回车键检查

    1、在输入结果后,直接按回车键,看系统如何处理,是否会报错

    十、刷新键检查

    1、在Web系统中,使用刷新键,看系统如何处理,是否会报错

    十一、直接URL链接检查

    1、在Web系统中,在地址栏直接输入各个功能页面的URL地址,看系统如何处理

    十二、其他

    1、在测试时,与网络有关的步骤必须考虑到断网的情况

    2、每个页面都有相应的Title

    3、在测试的时候要考虑到页面出现滚动条时,滚动条上下滚动时,页面是否正常

    4、URL不区分大小写

    5、某个字段是唯一的,当多个用户并发点击产生该字段时,检查系统怎么处理

    6、对于电子商务网站,当用户并发购买数量大于库存的数量时,系统如何处理

    7、测试数据避免单纯输入“123”、“abc“之类的,让测试数据尽量接近实际

    8、进行测试时,尽量不要用超级管理员进行测试,用新建的用户进行测试。测试人员尽量不要使用同一个用户进行测试

    9、做功能测试的时候,也要注意系统的性能(如操作的响应时间、内存使用情况)

    十三、界面和易用性测试

    1、风格、样式、颜色是否协调

    2、界面布局是否整齐、协调(保证全部显示出来的,尽量不要使用滚动条

    3、界面操作、标题描述是否恰当(描述有歧义、注意是否有错别字)

    4、操作是否符合人们的常规习惯(有没有把相似的功能的控件放在一起,方便操作)

    5、提示界面是否符合规范(不应该显示英文的cancel、ok,应该显示中文的确定等)

    6、界面中各个控件是否对齐

    7、日期控件是否可编辑

    8、日期控件的长度是否合理,以修改时可以把时间全部显示出来为准

    9、查询结果列表列宽是否合理、标签描述是否合理

    10、查询结果列表太宽没有横向滚动提示

    11、对于信息比较长的文本,文本框有没有提供自动竖直滚动条

    12、数据录入控件是否方便

    13、有没有支持Tab键,键的顺序要有条理,不乱跳

    14、有没有提供相关的热键

    15、控件的提示语描述是否正确

    16、模块调用是否统一,相同的模块是否调用同一个界面

    17、用滚动条移动页面时,页面的控件是否显示正常

    18、日期的正确格式应该是XXXX-XX-XX 或XXXX-XX-XX XX:XX:XX

    19、页面是否有多余按钮或标签

    20、窗口标题或图标是否与菜单栏的统一

    21、窗口的最大化、最小化是否能正确切换

    22、对于正常的功能,用户可以不必阅读用户手册就能使用

    23、执行风险操作时,有确认、删除等提示吗

    24、操作顺序是否合理

    十四、兼容性测试

    兼容性测试不只是指界面在不同操作系统或浏览器下的兼容,有些功能方面的测试,也要考虑到兼容性,比如涉及到ajax、jquery、javascript等技术的,都要考虑到不同浏览器下的兼容性问题。

    十五、链接测试

    主要是保证链接的可用性和正确性,它也是网站测试中比较重要的一个方面。

    十六、业务流程测试

    业务流程,一般会涉及到多个模块的数据,所以在对业务流程测试时,首先要保证单个模块功能的正确性,其次就要对各个模块间传递的数据进行测试,这往往是容易出现问题的地方,测试时一定要设计不同的数据进行测试。

    十七、安全性测试

    (1)SQL注入(登陆页面)

    (2)XSS跨网站脚本攻击:程序或数据库没有对一些特殊字符进行过滤或处理,导致用户所输入的一些破坏性的脚本语句能够直接写进数据库中,浏览器会直接执行这些脚本语句,破坏网站的正常显示,或网站用户的信息被盗,构造脚本语句时,要保证脚本的完整性。

      document.write("abc")

      <script>alter("abc")</script>

    (3)URL地址后面随便输入一些符号

     (4)验证码更新问题


  • linux下的定时执行工具Crontab(转载)

    2013-08-14 17:06:13

    linux下的定时执行工具Crontab(转载)


    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务: 



    /sbin/service crond start //启动服务 
    /sbin/service crond stop //关闭服务 
    /sbin/service crond restart //重启服务 
    /sbin/service crond reload //重新载入配置 

    你也可以将这个服务在系统启动的时候自动启动: 
    在/etc/rc.d/rc.local这个脚本的末尾加上: 
    /sbin/service crond start 

    现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用: 

    1、直接用crontab命令编辑 

    cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明: 

    crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数 
    crontab -l //列出某个用户cron服务的详细内容 
    crontab -r //删除某个用户的cron服务 
    crontab -e //编辑某个用户的cron服务

     


    比如说root查看自己的cron设置:crontab -u root -l 
    再例如,root想删除fred的cron设置:crontab -u fred -r 
    在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e 
    进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt 

    这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下: 

    分钟 (0-59) 
    小時 (0-23) 
    日期 (1-31) 
    月份 (1-12) 
    星期 (0-6)//0代表星期天 

    除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"*/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。以下举几个例子说明问题: 

    每天早上6点 

    0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。 

    每两个小时 

    0 */2 * * * echo "Have a break now." >> /tmp/test.txt 

    晚上11点到早上8点之间每两个小时,早上八点 

    0 23-7/2,8 * * * echo "Have a good dream:)" >> /tmp/test.txt 

    每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点 

    0 11 4 * 1-3 command line 

    1月1日早上4点 

    0 4 1 1 * command line 

    每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。 

    2、编辑/etc/crontab 文件配置cron 

    cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用 cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:

    SHELL=/bin/bash 

    PATH=/sbin:/bin:/usr/sbin:/usr/bin 



    MAILTO=root      //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号 

    HOME=/    //使用者运行的路径,这里是根目录 

    # run-parts 

    01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本 
    02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
    22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本 
    42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本 

    大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。

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

    基本格式 :
    *  *  *  *  *  command
    分 时 日 月 周 命令

    第1列表示分钟1~59 每分钟用*或者 */1表示
    第2列表示小时1~23(0表示0点)
    第3列表示日期1~31
    第4列表示月份1~12
    第5列标识号星期0~6(0表示星期天)
    第6列要运行的命令


    crontab文件的一些例子:

    30 21 * * * /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示每晚的21:30重启lighttpd 。


    45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示每月1、10、22日的4 : 45重启lighttpd 。


    10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示每周六、周日的1 : 10重启lighttpd 。


    0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启lighttpd 。


    0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
    上面的例子表示每星期六的11 : 00 pm重启lighttpd 。


    * */1 * * * /usr/local/etc/rc.d/lighttpd restart
    每一小时重启lighttpd


    * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
    晚上11点到早上7点之间,每隔一小时重启lighttpd


    0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
    每月的4号与每周一到周三的11点重启lighttpd


    0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
    一月一号的4点重启lighttpd


  • LoadRunner使用遇到的问题集锦

    2013-08-14 16:59:04

    LoadRunner使用遇到的问题集锦


    • 文章来源:【转载】

    1、把HTML的内容输出到LOG中的方法

      1、在脚本要记录HTML的URL前面加入函数:web_create_html_param("MyHtml", "<html>", "");;

      2、在脚本要记录HTML的URL后面加入函数:lr_output_message("###the HTML is %s", lr_eval_string(" {MyHtml}"));;

      3、在Controller中设置Run-Time Settings,把log设置为Always Send Message;

      4、在Controller中设置Run-Time Settings,把Miscellaneous设置为在发生错误时继续运行(在这里不是必须);

      5、在Controller中设置Run-Time Settings,把Preferences设置为Enable image and text check;(在这里不是必须);

      6、在Controller的日志文件RES中可以查看到每个虚拟用户的LOG;

    2、如何在Controller中添加系统资源检测

      今天早上突然想把Windows的性能监视放到LR中,达到方便快捷的目的,下面的是具体的步骤:

      1、使用192.168.0.159作为监控的对象,开通Remote Procedure Call和Remote Registry两个服务,Remote Registry一般都是给禁止的,可以改为手动并启动;

      2、在159中右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹;

      3、在159中使用命令netstat /ano查看445端口是否被打开;

      4、输入\\192.168.0.159\c$,再输入用户名和密码,如果能进入c盘,那就说明有控制权了;

      5、在Controller的Run中找到Windows Resources,对图点击右键中的Add Measurements,添加计数器;

      6、需注意159机上的BlackIce;

      7、对Windows Resources Graph的技巧使用,可以冻结窗体,导出HMTL,显示某个计数器等;

    3、对ANALYSIS中不能导出页面细分下的子项的问题的处理方法?

      1、问题描述:对ANALYSIS的导出WORD功能中只能导出树中的图表,在页面细分中点击不同的节点会有不同的图表,但是却无法把所有节点的图表一起导出;

      2、如果想生成Time to First Buffer Breakdown下面Login事务和Loading事务下的图表都导出来,方法就是新建两张Time to First Buffer Breakdown图表,在不同的下面点击图表,并修改名称;

      3、在导出列表中选中要导出的图表:Time to First Buffer Breakdown-All && Time to First Buffer Breakdown-Login && Time to First Buffer Breakdown-Loading;

      4、总结:虽然这样做有点麻烦,但是比之前点击每个图再导出一个WORD来有用的多,但是LR可以做到在导出列表中以树的形式显示可以导出的图表,不过LR要解决图表没有名称的问题;

    4、在中文版Analysis中显示系统资源图的原因与解决

      1、是否可以通过修改ACCESS记录来修改这个BUG?

      2、不知道它添加图表的列表是不是通过数据库LOAD的?迄今还没有找到这些记录,只找到资源图表数据;

      3、解决办法1:是用VNC截图,但是这样只能看到计数器曲线,没什么意义;

      4、解决办法2:在Controller中导出系统资源数据,里面有量化数据,比较真实,不过每个场景都要导出一次就很麻烦,并且不好管理,无法对数据进行帅选和合并,如果打开导出的页面有乱码,那就在编码方式选择"自动选择";

      5、解决办法3:使用英文版生成的ANALYSIS,再拿到中文版下面,是可以看到系统资源这个图表的,其实我应该早想到这样的,因为在中文版下无法显示不是Analysis的错,而是Controller的错,Analysis里面是包括ACCESS和其它包含系统资源的记录的,所以在中文版是能显示的;

    5、终于使用LR实现了不同虚拟用户使用不用的帐号登陆,实行不同用户并发的问题

      1、在脚本设计中添加参数,参数名称为LoginUserName,选择参数类型为FILE;

      2、很关键的一步就是:选者UNIQUE和EACH ITERATION/ONCE;

      3、在脚本中把登陆名改为参数名;

      4、使用Controller进行测试,在运行时设置LOG记录;

      5、查看LOG,可以看到每个虚拟用户是使用不同的帐号登陆的;

      6、总结:使用SEQUENTIAL会使得参数每次出现的地方的值都不一样;如何想使用更多用户的登陆可以使用参数数据库化;

    (参考:LoadRunner参数化)

    6、 LR参数数据库化(姑且这么叫,就是参数的来源于数据库)实践

      1、以XQP登陆帐号为例,把bw_Users表中的UserName做为参数LoginUserName的值;

      2、过程都比较简单,需要注意的是使用FILE参数类型,参数值列表中的值只有100个,其它的可以通过Edit with Notepad查看;

      3、在Update Value on 中有以下几个选项:

      Each Occurrence:在运行时,每遇到一次该参数,便会取一个新的值;

      Each iteration:运行时,在每一次循环中都取相同的值;

      Once:运行时,在每次循环中,该参数只取一次值;

      可以看出,是按照从脚本小范围到大范围的选择;

      4、在Select next row 有以下几种选择:

      Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取;

      Random:在每次循环里随机的读取一个,但是在循环中一直保持不变;

      Unique :唯一的数。注意:使用该类型必须注意数据表有足够多的数;

      Same Line As 某个参数(比如Name):和前面定义的参数Name 取同行的记录;通常用在有关联性的数据上面;

      可以看出,是和循环(迭代)很有关系的;

    7、 发现可以对参数数据库化的数据进行作弊,作弊方法如下:

      1、使用数据库管理器导出想要的数据为EXCEL;再保存为dat文件,再参数设置里面引用该文件;

      2、在脚本文件夹中找到[参数名].dat文件;

      3、对[参数名].dat文件进行编辑,把EXCEL中的数据拷贝到dat文件中;

      4、进入脚本编辑,查看参数,可以见到刚刚拷贝的数据;

      总结:虽然这个方法没什么很大用处,但是在无法使用VUGenerator连接数据库的时候就非常有用;

    8、当在此函数中,查找的text="中文"时,LR硬是报错,换成英文字体便成功。后来,查了好久,发觉是Record-Options 中我勾选了support charset中的UTF-8,可能是录制过程中LR捕捉到的是中文,而回放过程中此函数在HTML原文件中查找到的却是乱码?总而言之,把此选项去除之后,重新录制脚本,回放能够成功了!

     

    9LoadRunner场景执行时出现错误:“load generator is currently running the maximum number of vuser of this type”

    解决方法:

    Loadruuner默认场景并发最大用户数=1000,所以需要设置load generator->Details->Vuser limits->Other Vusers更换参数值即可,如10000;当然需要你的序列号是支持,目前最大支持6.2w的序列号。

  • 系统性能调优经验分享(转载)

    2013-08-14 16:57:00

    系统性能调优经验分享(转载)


    性能优化的思路

    首先是较为精准的定位问题,借助于相应的工具包,分析系统性能瓶颈在哪,在根据其性能指标,以及所处于层级决定选择优化的方式方法。在选择优化的方式方法时,大家可以参照以下章节调优方法,架构优化递进,进行正确的,有针对性,有步骤的优化。可能会发现部分指导思想或许有相悖嫌疑,大可不必较真,系统优化的过程本身就是一个不断分离+共享的组合拳,至于具体选择哪种优化方式,根据具体需求来定,但大型应用发展的总体思路是不断分离,在通过索引(非数据库)进行关联起来,

    切记:优化一定要对系统进行细致的望闻问切,找到性能问题根源切入点,而不被表象迷糊,对症下药,发现病症所在的医生并不比操作手术刀的医生水平差。本文有工具包一章节,对于需要做优化的人员,需要熟悉,他就是我们诊断所用的CT,例如我们发现内存高了,首先想到不是内存不够用,而是为什么如此消耗内存,用工具看看内存消耗在什么地方,试想之,如在医院,病人告诉医生,他心脏不好,医生就换心脏,那样的话,每个人只要熟练掌握菜刀,都可以做医生

    迭代优化

    性能优化未必一次性就能满足的,可能此处瓶颈消失了,系统一旦运转快速后,在其他地方又发现新的性能瓶颈,所以性能优化是一个迭代的工作。直至满足系统需要的性能指标。

    优化的成本

    系统性能设计或优化是否可以一步升天,按照最好的分布式架构进行设计和优化呢,单个节点一直也运转及其健康,理论上是可以达到共产国际的,但实际实施层面不可取,必须结合实际的非功能需求进行设计和优化,一则一步到极致的话,系统的成本太过虑庞大,光是性能设计和优化的成本就高于系统本身给客户所提供的价值,也造成研发成本开销过大。二则好像能够架构这样完美系统的人还没诞生。所以一句话也同样适合架构师:有理想而不理想化,废话少扯:具体见法则

    调优方法

    数据库优化

    很多应用,优化DB往往是最直接,最方便,见效最显著的,但并非所有的系统性能都处在瓶颈,或者DB瓶颈解决之后,可能应用层瓶颈,WEB层瓶颈,甚至架构瓶颈都会冒出来了,所以数据库优化十分重要,但往往很多人理解系统优化就是数据库优化,是不全面的。优化角色一般推荐具备较深数据知识的程序员,或者专业的DBA,而不只是会CRUD开发人员

    ◆ 建立正确的主键,外键,以及索引

    ◆  分离原则:读写分离,业务数据分离

    a) 分库

    b) 分区

    c) 分表

    d) 分列(将大字段,不常用的隔离到他表,按需查询)

    ◆  选择隔离级别:某些对数据一致性要求不高的,可以牺牲部分一致性,降低加锁阻塞

    ◆  保证事务简短以及减少不必要的锁机制。

    ◆  查询优化规则:

    e) 避免表内的相关子查询;

    f) 避免排序或为尽可能少的行排序,

    g) 做大量数据排序时相关数据放在临时表中

    h) .尽量在where后多传查询条件,以减少不必要返回的行

    i) .尽量select只需要的字段,以减少不必要返回的列

    ◆  分页存储过程:大列表的查询也可以利用分页存储过程达到优化效果。

    ◆  利用数据库缓存,视图,临时表等最大程度优化系统,并对存储过程和函数进行必要的优化

    ◆  如有需要,可以冗余表中字段,避免联合查询

    ◆  如有需要,也可以将表内的大字段分离到单独表中,使其单独查询

    ◆  必做多表关联时,尽量过滤不符条件表中数据,减少笛卡尔积计算量

    ◆  复杂表表:如实时性要求不高,尽量后台任务计算,避免动态查询

    应用层优化

    应用层优化侧重于应用层本身的逻辑优化,算法优化,代码优化等,优化的角色可以是熟悉应用的程序员

    ◆  优化算法,选择合适高效的算法,降低不必要的递归,循环、多层循环嵌套等计算

    ◆  避免申请过多的不必要的内存开销

    ◆  降低内存泄露(using,Dispose,弱引用,Finalize)

    ◆  使用频率较低的大文件,大对象,大数组等使用完毕后,及时释放

    ◆  使用频率较高的大文件,大对象,大数组尽量缓存

    ◆  考虑多线程技术

    ◆  选择适当的通信方式:长连接,短连接,有以下方式Socket、Remoting、Web Services(Rest,Soap)、WCF、 Named Pipes

    ◆  降低应用之间通信次数,例用户认证服务,工作流服务,数据库服务

    ◆  降低应用之间传输数据量,不必要传输的不传,少传

    ◆  缓存机制:缓存常用的,不易变化的,偶有变化,可以考虑缓存依赖机制

    ◆  支持异步计算,降低等待时间

    ◆  考虑延迟加载,或者提前加载两种方式

    ◆  分离原则:分离业务模块,如分离大I/O模块、分离高耗内存模块,分离高耗宽带模块

    ◆  考虑分布式应用,分布式存储,如以上所有仍然搞不定的

    Web优化

    Web优化偏向于熟悉前端开发的技术人员

    ◆  减少http请求

    ◆  避免404错误

    ◆  在html页面header加入缓存标签

    ◆  Gzip压缩网页

    ◆  减少cookie体积

    ◆  使用外部的js和css

    ◆  消减js和css

    ◆  压缩js

    ◆  使用css sprites技术,众多图片合成在一起,通过CSS切分,降低图片传输的频率和数据量

    ◆  可以使用静态网页的,避免使用动态网页

    架构优化递进

    为以示与应用层优化的区别,本文对架构的描述更侧重偏向于物理层面,再次赘述下,涉及变更架构的,需要我们的应用具有良好的拓展性,考验我们的架构师平时的功底,如何刚刚好满足需求以及两三年内业务增量,但并非架构做的越强大,越灵活,越可配置,越易水平拓展就是越好的,其一考虑此应用的投入产出比,换言之,是否值得投入这么多架构设计成本,其二架构设计也是具有一定的时效性的,IT速度太快了,今天的好东西未必是明天的好东西,年轻貌美的姑娘,总有变成老太婆那一天嘛,再者、越灵活的架构,就意味着存在更多的配置项,从某一方面,反而增加了系统的复杂度,最后、很多大型,成熟的应用,也并非一蹴而就,而是通过不断的调整优化,不断变更架构的。圣人也并非天生的,而是不断的总结,提炼,优化,重构

    ◆  硬件方面使用高性能的小型机、存储设备。使用极好的网络带宽

    ◆  物理分离Web Server和DB Server或者其他服务如:用户认证服务

    ◆  缓存

    ü 数据缓存机制

    ü 页面缓存机制

    ◆  物理分离业务模块,单业务单独部署一台服务器

    ◆  部署多台Web Server

    ◆  Web负载均衡-F5

    ◆  数据读写分离

    ◆  使用消息队列 进行各种应用间进行同步/异步计算

    ◆  应用间选择合适的通信方式,通信协议

    ◆  Web分布式,应用分布式,数据分布式

    ◆  分布式的节点使用高性能服务器,小型机群,辅以高速网络带宽等

    工具包

    ◆  进程管理器,CPU,内存,I/O

    ◆  日志:IIS日志,Windows日志,系统本身日志

    ◆  使用dotTrace,跟踪方法执行时间,找出速度慢的方法,针对性优化

    ◆  Sql Profile跟踪SQL耗时情况,针对性优化

    ◆  HttpWatch跟踪请求耗时,以及发送和收到数据量

    ◆  Performance Count,使用计数器,统计相关性能指标

    ◆  CLRProfiler内存泄露检测工具

    ◆  LoadRunner,压力测试,发现性能瓶颈

    其他补充

  • 如何使用LoadRunner监控Windows

    2013-08-14 16:46:31

    如何使用LoadRunner监控Windows


    • 文章来源:【转载】

    1、监视连接前的准备工作

    1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) Remote Registry Service (开始—)运行 中输入services.msc,开启对应服务即可)

    2)在被监视的WINDOWS机器上:右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹(要是没有自己手动加上)

    3)在安装LR的机器上,开始—》运行,输入 \\被监视机器IP\C$ 然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限,可以使用LR去连接了。(LR要连接WINDOWS机器进行监视要有管理员帐号和密码才行。)

    问题:在执行步骤3)时,输入 \\被监视机器IP\C$,出现不能以administrator身份访问被监控系统(若采用这种方式用LR对其监控的话,会提示:“找不到网络路径”)的情况,现象就是用户名输入框是灰色的,并且默认用户是guest

    解决办法:这是安全策略的设置问题(管理工具 -> 本地安全策略 -> 安全选项 ->“网络访问:本地帐户的共享和安全模式”)。默认情况下,XP的访问方式是“仅来宾”的方式,如果你访问它,当然就固定为Guest来访问,而guest账户没有监控的权限,所以要把访问方式改为“经典”模式,这样就可以以administrator的身份登陆了。修改后,再次执行步骤3),输入管理员用户名和密码,就可以访问被监控机器C盘了。

    若这样都不行的话(可能是其它问题引起的),那只好采取别的方法了。在服务器的机子上,通过windows自带的“性能日志和警报”下的“计数器日志”中新增加一个监控日志(管理工具—)性能—)性能日志和警报),配置好日志,也能监控服务器的cpumemorydisk等计数器。当然,这种方法就不是用LR来监控了。

    2、用LR监视windows的步骤

    controller 中,Windows Resources窗口中右击鼠标选择Add Measurements,添加被监控windowsIP地址,选择所属系统,然后选择需要监控的指标就可以开始监控了。

  • Web测试最容易遗漏的地方

    2013-08-14 16:23:45

    Web测试最容易遗漏的地方


    • 文章来源:【转载】

    1.浏览器的后退按钮 
      提交表单一条已经成功提交的记录,back后再提交,看系统会如何处理。检查多次使用back健的情况在有back的地方,back,回到原来的页面,再back,重复几次,看是否会报错。
    2.通过修改URL中的参数,向服务器发起请求,看看会有什么样的结果
      利用一些工具,如http watch,可以记录和捕获向服务器发起的URL请求,然后修改其中的参数向服务器发起请求.该功能点可以和安全测试结合起来.
    3.对表单多次提交
      对提交按钮快速多次点击提交,看看会不会在数据库中形成多条记录.网速或响应快时,这点容易被遗漏,但用户的网络可能慢,很容易多次点击提交.如果前端做了处理,试试捕获在提交时生成的URL,绕过页面,再次对服务器发起请求,会有什么结果
    4.光标的跳转
      执行操作后,光标是否停留在合适的位置.如邮箱登录,输完用户名回车后,光标应该跳转到密码框内.细节问题,但是影响用户感受

    5.tab键是否功能正确
      和光标的跳转类似,特别是在有输入项时,查看tab键的焦点顺序是否正确
    6.对全角/半角符号的输入测试
      有输入项时,要考虑全/半角字条的输入,及GBK字符
    7.多版本IE测试

    [转帖] 电子商务网站--界面测试的测试点
    界面是软件,网站 与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。目前界面的设计引起软件设计人员的重视的程度还远远不够,直到最近网页制作的兴起,才受到专家的青睐。而且设计良好的界面由于需要具有艺术美的天赋而遭拒绝。

      目前流行的界面风格有三种方式:多窗体、单窗体以及资源管理器风格,无论那种风格,以下规则是应该被重视的。
    1:易用性:
      按钮名称应该易懂,用词准确,屏弃没楞两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。

    易用性细则:
    1):完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。
    2):完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。
    3):按功能将界面划分区域块,用Frame框括起来,并要有功能说明或标题。
    4):界面要支持键盘自动浏览按钮功能,即按Tab键、回車鍵的自动切换功能。
    5):界面上首先要输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。
    6):同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。
    7):分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab
    8):默认按钮要支持Enter及选操作,即按Enter后自动执行默认按钮对应操作。
    9):可寫控制項檢測到非法輸入後應給出說明並能自動獲得焦點。
    10):Tab键的顺序与控件排列顺序要一致,目前流行总体从上到下,同时行间从左到右的方式。
    11):核取方塊和選項框按選擇幾率的高底而先後排列。
    12):核取方塊和選項框要有默認選項,並支援Tab選擇。
    13):選項數相同時多用選項框而不用下拉清單框。
    14):界面空间较小时使用下拉框而不用选项框。
    15):选项数較少时使用选项框,相反使用下拉列表框。
    16):专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词语。

    2:
    规范性:
    通常界面设计都按Windows界面的规范来设计,可以说:界面遵循规范化的程度越高,则易用性相应的就越好。小型软件一般不提供工具厢。

    规范性细则:
    1):常用菜单要有命令快捷方式。
    2):完成相同或相近功能的菜单用横线隔开放在同一位置。
    3):菜单前的图标能直观的代表要完成的操作。
    4):菜单深度一般要求最多控制在三层以内。
    5):工具栏要求可以根据用户的要求自己选择定制。
    6):相同或相近功能的工具栏放在一起。
    7):工具栏中的每一个按钮要有及时提示信息。
    8):一条工具栏的长度最长不能超出屏幕宽度。
    9): 工具栏的图标能直观的代表要完成的操作。
    10):系统常用的工具栏设置默认放置位置。
    11):工具栏太多时可以考虑使用工具箱。
    12):工具箱要具有可增减性,由用户自己根据需求定制。
    13):工具箱的默认总宽度不要超过屏幕宽度的1/5。
    14): 状态条要能显示用户切实需要的信息,常用的有:
    目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。

    15):滚动条的长度要根据显示信息的长度或宽度能及时变换,以利于用户了解显示信息的位置和百分比。
    16):状态条的高度以放置五好字为宜,滚动条的宽度比状态条的略窄。
    17):菜单和工具条要有清楚的界限;菜单要求凸出显示,这样在移走工具条时仍有立体感。
    18):菜单和状态条中通常使用5号字体。工具条一般比菜单要宽,但不要宽的太多,否则看起来很不协调。
    19): 右键快捷菜单采用与菜单相同的准则。
    3:帮助设施:
    系统应该提供详尽而可靠的帮助文档,在用户使用产生迷惑时可以自己寻求解决方法。
    帮助设施细则:
    1):帮助文档中的性能介绍与说明要与系统性能配套一致。(我们的系统帮助文档都是系统的祖先时期的说明,让人困惑)。
    2):打包新系统时,对作了修改的地方在帮助文档中要做相应的修改。
    3):操作时要提供及时调用系统帮助的功能。常用F1。
    4):在界面上调用帮助时应该能够及时定位到与该操作相对的帮助位置。也就是说帮助要有即时针对性。
    5):最好提供目前流行的联机帮助格式或HTML帮助格式。
    6):用户可以用关键词在帮助索引中搜索所要的帮助,当然也应该提供帮助主题词。
    7):如果没有提供书面的帮助文档的话,最好有打印帮助的功能。
    8):在帮助中应该提供我们的技术支持方式,一旦用户难以自己解决可以方便的寻求新的帮助方式。


    4:合理性:
    屏幕对角线相交的位置是用户直视的地方,正上方四分之一处为易吸引用户注意力的位置,在放置窗体时要注意利用这两个位置。
    合理性细则:
    1):父窗体或主窗体的中心位置应该在对角线焦点附近。
    2):子窗体位置应该在主窗体的左上角或正中。
    3):多个子窗体弹出时应该依次向右下方偏移,以显示窗体出标题为宜。
    4):重要的命令按钮与使用较频繁的按钮要放在界面上注目的位置。
    5):错误使用容易引起界面退出或关闭的按钮不应该放在易点击的位置。横排开头或最后与竖排最后为易点位置。
    6):与正在进行的操作无关的按钮应该加以屏蔽(Windows中用灰色显示,没法使用该按钮)。
    7):对可能造成数据无法恢复的操作必须提供确认信息,给用户放弃选择的机会。
    8):非法的输入或操作应有足够的提示说明。
    9): 对运行过程中出现问题而引起错误的地方要有提示,让用户明白错误出处,避免形成无限期的等待。
    10): 提示、警告、或错误说明应该清楚、明了、恰当。
    5:美观与协调性:
    界面应该大小适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。
    美观与协调性细则:
    1): 长宽接近黄金点比例,切忌长宽比例失调、或宽度超过长度。
    2): 布局要合理,不宜过于密集,也不能过于空旷,合理的利用空间。
    3): 按钮大小基本相近,忌用太长的名称,免得占用过多的界面位置。
    4): 按钮的大小要与界面的大小和空间要协调。
    5): 避免空旷的界面上放置很大的按钮。
    6):放置完控件后界面不应有很大的空缺位置。
    7): 字体的大小要与界面的大小比例协调, 通常使用的字体中宋体9-12较为美观,很少使用超过12号的字体。
    8): 前景与背景色搭配合理协调,反差不宜太大,最好少用深色,如大红、大绿等。常用色考虑使用Windows界面色调。
    9): 如果使用其他颜色,主色调要柔和,具有亲和力与磁力,坚决杜绝刺目的颜色。
    10): 大型系统常用的主色有"#E1E1E1"、"#EFEFEF"、"#C0C0C0"等。
    11): 界面风格要保持一致,字的大小、颜色、字体要相同,除非是需要艺术处理或有特殊要求的地方。
    12): 如果窗体支持最小化和最大化或放大时,窗体上的控件也要随着窗体而缩放;切忌只放大窗体而忽略控件的缩放。
    13):对于含有按钮的界面一般不应该支持缩放,即右上角只有关闭功能。
    14): 通常父窗体支持缩放时,子窗体没有必要缩放。
    15):如果能给用户提供自定义界面风格则更好,由用户自己选择颜色、字体等。


    6:菜单位置:
    菜单是界面上最重要的元素,菜单位置按照按功能来组织。
    菜单测试细则:
    1): 菜单通常采用“常用--主要--次要--工具--帮助”的位置排列,符合流行的Windows风格。
    2): 常用的有“文件”、“編輯”,“查看”等,幾乎每個系統都有這些選項,當然要根據不同的系統有所取捨。
    3): 下拉菜单要根据菜单选项的含义进行分组,並且按照一定的规则进行排列,用横线隔开。
    4): 一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。
    5): 没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。
    6): 如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。
    7): 菜单深度一般要求最多控制在三层以内。
    8): 对常用的菜单要有快捷命令方式,组合原则见8。
    9): 对与进行的操作无关的菜单要用屏蔽的方式加以处理,如果采用动态加载方式——即只有需要的菜单才显示——最好。
    10): 菜单前的图标不宜太大,与字高保持一直最好。
    11): 主菜单的宽度要接近,字数不应多于四个,每个菜单的字数能相同最好。
    12): 主菜单数目不应太多,最好为单排布置。

    13):菜单条是否显示在合适的语境中?

    14):应用程序的菜单条是否显示系统相关的特性(如时钟显示)?

    15):下拉式操作能正确工作吗?

    16):菜单、调色板和工具条是否工作正确?

    17):是否适当地列出了所有的菜单功能和下拉式子功能?

    18):是否可能通过鼠标访问所有的菜单功能?

    19):相同功能按钮的图标和文字是否一致?

    20):是否能够用其他的文本命令激活每个菜单功能?

    21):菜单功能是否随当前的窗口操作加亮或变灰?

    22):菜单功能是否正确执行?

    23):菜单功能的名字是否具有自解释性?

    24):菜单项是否有帮助,是否语境相关?

    25):在整个交互式语境中,是否可以识别鼠标操作?

    26):如果要求多次点击鼠标,是否能够在语境正确识别?

    27):如果鼠标有多个按钮,是否能够在语境中正确识别?

    28):光标、处理指示器和识别指针是否随操作恰当地改变?
    7:独特性:
    如果一味的遵循业界的界面标准,则会丧失自己的个性.在框架符合以上规范的情况下,设计具有自己独特风格的界面尤为重要。尤其在商业软件流通中有着很好的迁移默化的广告效用。

    测试细则:
    1): 安装界面上应有单位介绍或产品介绍,并有自己的图标。
    2): 主界面,最好是大多数界面上要有公司图标。
    3): 登录界面上要有本产品的标志,同时包含公司图标。
    4): 帮助菜单的“关于”中应有版权和产品信息。
    5): 公司的系列产品要保持一直的界面风格,如背景色、字体、菜单排列方式、图标、安装过程、按钮用语等应该大体一致。


    8:快捷方式的组合
    在菜单及按钮中使用快捷键可以让喜欢使用键盘的用户操作得更快一些 在西文Windows及其应用软件中快捷键的使用大多是一致的。
    菜单中:
    1):面向事务的组合有:
    Ctrl-D 删除 ;Ctrl-F 寻找 ;Ctrl –H替换;Ctrl-I 插入 ;Ctrl-N 新记录 ;Ctrl-S 保存 Ctrl-O 打开。
    2):列表:
    Ctrl-R ,Ctrl-G定位;Ctrl-Tab下一分页窗口或反序浏览同一页面控件;。
    3):编辑:
    Ctrl-A全选;Ctrl-C 拷贝;Ctrl-V 粘贴;Ctrl-X 剪切;Ctrl-Z撤消操作;Ctrl-Y恢复操作。
    4)文件操作:
    Ctrl-P 打印;Ctrl-W 关闭。
    5):系统菜单
    Alt-A文件;Alt-E编辑;Alt-T工具;Alt-W窗口;Alt-H帮助。
    6):MS Windows保留键:
    Ctrl-Esc 任务列表 ;Ctrl-F4 关闭窗口; Alt-F4 结束应用;Alt-Tab 下一应用 ;Enter 缺省按钮/确认操作 ;Esc 取消按钮/取

    消操作 ;Shift-F1 上下文相关帮助。
    按钮中:
    可以根据系统需要而调节,以下只是常用的组合。
    Alt-Y确定(是);Alt-C取消;Alt-N 否;Alt-D删除;Alt-Q退出;Alt-A添加;Alt-E编辑;Alt-B浏览;Alt-R读;Alt-W写。
    这些快捷键也可以作为开发中文应用软件的标准,但亦可使用汉语拼音的开头字母。
    9:安全性考虑:
    在界面上通过下列方式来控制出错几率,会大大减少系统因用户人为的错误引起的破坏。开发者应当尽量周全地考虑到各种可能发生的问题,使出错的可能降至最小。如应用出现保护性错误而退出系统,这种错误最容易使用户对软件失去信心。因为这意味着用户要中

    断思路,并费时费力地重新登录,而且已进行的操作也会因没有存盘而全部丢失。
    安全性细则:
    1):最重要的是排除可能会使应用非正常中止的错误。
    2):应当注意尽可能避免用户无意录入无效的数据。
    3):采用相关控件限制用户输入值的种类。
    4):当用户作出选择的可能性只有两个时,可以采用单选框。
    5):当选择的可能再多一些时,可以采用复选框,每一种选择都是有效的,用户不可能输入任何一种无效的选择。
    6):当选项特别多时,可以采用列表框,下拉式列表框。
    7):在一个应用系统中,开发者应当避免用户作出未经授权或没有意义的操作。
    8):对可能引起致命错误或系统出错的输入字符或动作要加限制或屏蔽。
    9):对可能发生严重后果的操作要有补救措施。通过补救措施用户可以回到原来的正确状态。
    10):对一些特殊符号的输入、与系统使用的符号相冲突的字符等进行判断并阻止用户输入该字符。
    11):对错误操作最好支持可逆性处理,如取消系列操作。
    12):在输入有效性字符之前应该阻止用户进行只有输入之后才可进行的操作。
    13):对可能造成等待时间较长的操作应该提供取消功能。
    14):特殊字符常有;;’”><,`‘:“[”{、\|}]+=)-(_*&&^%$#@!
    ,.。?/还有空格。
    15):与系统采用的保留字符冲突的要加以限制。
    16):在读入用户所输入的信息时,根据需要选择是否去掉前后空格。
    17):有些读入数据库的字段不支持中间有空格,但用户切实需要输入中间空格,这时要在程序中加以处理。


    10:多窗口的应用与系统资源:
    设计良好的软件不仅要有完备的功能,而且要尽可能的占用最底限度的资源。
    1):在多窗口系统中,有些界面要求必须保持在最顶层,避免用户在打开多个窗口时,不停的切换甚至最小化其他窗口来显示该窗口。

    2):在主界面载入完毕后自动卸出内存,让出所占用的WINDOWS系统资源。
    3):关闭所有窗体,系统退出后要释放所占的所有系统资源 ,除非是需要后台运行的系统。
    4):尽量防止对系统的独占使用。

    5):窗口能否基于相关的输入或菜单命令适当地打开?

    6):窗口能否改变大小、移动和滚动?

    7):窗口中的数据内容能否使用鼠标、功能键、方向箭头和键盘访问?

    8):当被覆盖并重调用后,窗口能否正确地再生?

    9):需要时能否使用所有窗口相关的功能?

    10):所有窗口相关的功能是可操作的吗?

    11):是否有相关的下拉式菜单、工具条、滚动条、对话框、按钮、图标和其他控制可为窗口可用,并适当地显示?

    12):显示多个窗口时,窗口的名称是否被适当地表示?

    13):活动窗口是否被适当地加亮?

    14):如果使用多任务,是否所有的窗口被实时更新?

    15):多次或不正确按鼠标是否会导致无法预料的副作用?

    16):窗口的声音和颜色提示和窗口的操作顺序是否符合需求?

    17):窗口是否正确地关闭?

  • 测试类型

    2013-07-16 22:39:06


    测试类型


    黑盒测试:基于需求和功能性,不是基于内部设计和代码的任何知识。
    白盒测试:基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。
    单元测试:最微小规模的测试;以测试某个功能或代码块。典型地由程序员而非测试员来做,因为它需要知道内部程序设计和编码的细节知识。这个工作不容易作好,除非应用系统有一个设计很好的体系结构;还可能需要开发测试驱动器模块或测试套具。
    累积综合测试:当一个新功能增加后,对应用系统所做的连续测试。它要求应用系统的不同形态的功能能够足够独立以可以在全部系统完成前能分别工作,或当需要时那些测试驱动器已被开发出来;这种测试可由程序员或测试员来做。
    集成测试:一个应用系统的各个部件的联合测试,以决定他们能否在一起共同工作。部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。这种类型的测试尤其与客户服务器和分布式系统有关。
    功能测试:用于测试应用系统的功能需求的黑盒测试方法。这类测试应由测试员做,这并不意味着程序员在发布前不必检查他们的代码能否工作(自然他能用于测试的各个阶段)。
    系统测试:基于系统整体需求说明书的黑盒类测试;应覆盖系统所有联合的部件。
    端到端测试:类似于系统测试;测试级的“宏大”的端点;涉及整个应用系统环境在一个现实世界使用时的模拟情形的所有测试。例如与数据库对话,用网络通讯,或与外部硬件、应用系统或适当的系统对话。健全测试:典型地是指一个初始化的测试工作,以决定一个新的软件版本测试是否足以执行下一步大的测试努力。例如,如果一个新版软件每5分钟与系统冲突,使系统陷于泥潭,说明该软件不够“健全”,目前不具备进一步测试的条件。
    衰竭测试:软件或环境的修复或更正后的“再测试”。可能很难确定需要多少遍再次测试。尤其在接近开发周期结束时。自动测试工具对这类测试尤其有用。
    接受测试:基于客户或最终用户的规格书的最终测试,或基于用户一段时间的使用后,看软件是否满足客户要求。
    负载测试:测试一个应用在重负荷下的表现,例如测试一个Web站点在大量的负荷下,何时系统的响应会退化或失败。
    强迫测试:在交替进行负荷和性能测试时常用的术语。也用于描述在异乎寻常的重载下的系统功能测试之类的测试,如某个动作或输入大量的重复,大量数据的输入,对一个数据库系统大量的复杂查询等。
    性能测试:在交替进行负荷和强迫测试时常用的术语。理想的“性能测试”(和其他类型的测试)应在需求文档或质量保证、测试计划中定义。
    可用性测试:对“用户友好性”的测试。显然这是主观的,且将取决于目标最终用户或客户。用户面谈、调查、用户对话的录像和其他一些技术都可使用。程序员和测试员通常都不宜作可用性测试员。
    安装/卸载测试:对软件的全部、部分或升级安装/卸载处理过程的测试。
    恢复测试:测试一个系统从如下灾难中能否很好地恢复,如遇到系统崩溃、硬件损坏或其他灾难性问题。
    安全测试:测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时怎么样。这可能需要复杂的测试技术。
    兼容测试:测试软件在一个特定的硬件/软件/操作系统/网络等环境下的性能如何。
    比较测试:与竞争伙伴的产品的比较测试,如软件的弱点、优点或实力。
    Alpha测试:在系统开发接近完成时对应用系统的测试;测试后,仍然会有少量的设计变更。这种测试一般由最终用户或其他人员完成,不能由程序员或测试员完成。
    Beta测试:当开发和测试根本完成时所做的测试,而最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其他人员完成,不能由程序员或测试员完成。
  • 测试计划编写策略

    2013-07-16 18:51:15

     

    测试计划编写策略


    测试计划描述了如何进行测试,有效的测试计划会驱动测试工作的完成,使测试执行、测试分析以及测试报告的工作开展更加顺利。

    一、测试计划的重要性和目的

    1  测试计划的重要性

    测试计划是在软件测试中最重要的步骤之一,它在软件开发的前期对软件测试做出清晰,完整的计划,不光对整个测试起到关键性的作用,而且对开发人员的开发工作,整个项目的规划,项目经理的审查都有辅助性作用。

    2  测试计划的目的

    测试计划描述所要完成的测试,包括测试背景、测试目的、风险分析、所需资源、任务安排和进度等:

    1)将需求和总体设计分解成可测试,应该测试,推迟测试和无法测试的范围

    2)对每个范围制订测试的策略和方法

    3)制订release和停止测试的标准

    4)准备测试所需要的环境

    5)确定测试风险

    6)确定软件测试目标

    7)确定测试所需要的资源其其他相关信息

    8)制订测试进度和任务安排

    二、测试计划编写基本策略

    1、测试计划编写依据:项目计划、项目计划的评估状态以及业务的理解

    2、测试计划编写时间:尽早开始。原则上应该在需求定义完成之后开始编写测试计划,对于开发过程不是十分清晰和稳定的项目,测试计划也可以在总体设计完成后开始编写。

    3、测试计划的编写与实施人员:测试计划应该由测试小组组长或最有经验的测试人员来进行编写,测试计划由测试人员来实施,测试人员可以对测试计划进行相关人员确认后进行调整。

    4、测试计划的变更:测试计划是一个发展变化的文档,会随着项目的进展、人员或环境的变动而变化,确保测试计划是最新的而且依据测试计划执行测试工作。

    5、测试计划的优先级别:没有谁可以保证通过测试后的产品没有缺陷,也没有公司会允许无休止的测试。好的测试是一个有代表性、简单和有效的测试,在测试计划中,必须制定测试的优先级和重点。

    6、测试计划的评审:测试计划需要由高级测试人员或测试组长制订,在经验不足或条件限制的软件测试计划的制订时,需要多名测试人员共同制订和修正.

    1)软件项目经理负责评审测试计划的方向正确性和软件开发按照总体设计方案实施(如有改动,需通知测试人员修改计划),并保证软件具有可测试性

    2QA人员评审测试过程的正确性和能够按照计划要求的正确实施

    3)高级经理评审测试计划的导言和范围的正确性

    7、测试计划的管理

    测试计划将按照项目编码或软件名称和版本进行管理,所有文档放置于CVS

    8、测试计划制定过程:

    1       评估项目计划和状态

    2       组建测试小组

    3       了解项目风险

    4       制定测试计划

    5       审查测试计划

    9、测试计划的原则

    1       尽早开始

    2       灵活变更

    3       合理评审

    4       简洁易读

    三、测试计划的主要内容

    测试计划的内容会因不同的项目以及项目的大小而有所不同,一般而言在测试计划中应该清晰描述以下内容:

    1  测试目标:对测试目标进行简要的描述。

    2  测试概要:摘要说明所需测试的软件、名词解释、以及提及所参考的相关文档。

    3  测试范围:测试计划所包含的测试软件需测试的范围和优先级,哪些需要重点测试、哪些无需测试或无法测试或推迟测试。

    4  重点事项:列出需要测试的软件的所有的主要功能和测试重点,这部分应该能和测试案例设计相对应和互相检查。

    5  质量目标:制定测试软件的产品质量目标和软件测试目标。

    6  资源需求:进行测试所需要的软硬件、测试工具、必要的技术资源、培训、文档等。

    7  人员组织:需要多少人进行测试,各自的角色和责任,他们是否需要进行相关的学习和培训,什么时候他们需要开始,并将持续多长时间。

    8  测试策略:制定测试整体策略、所使用的测试技术和方法。

    9  发布提交:在按照测试计划进行测试发布后需要交付的软件产品、测试案例、测试数据及相关文档。

    10              测试进度和任务人员安排:将测试的计划合理的分配到不同的测试人员,并注意先后顺序.如果开发的Release不确定,可以给出测试的时间段.对于长期大型的测试计划,可以使用里程碑来表示进度的变化。

    11              测试开始/完成/延迟/继续的标准:制定测试开始和完成的标准;某些时候,测试计划会因某种原因(过多阻塞性的Bug)而导致延迟,问题解决后测试继续。

    12              风险分析:需要考虑测试计划中可能的风险和解决方法。

     

  • 测试实施常见难题及对策

    2013-07-16 18:49:39

     

    测试实施常见难题及对策

    一、不能重现的bug该如何处理?

    bug应该可重现,问题重现才可以让开发快速原因定位并解决问题。在测试的过程中偶尔会碰到一些不能重现的问题,对于这类型的问题应该:

    1  首先,测试人员应该想办法重现,如果实在不行,也应该将bug产生的条件和出现的问题做一个记录,建议开发根据问题的描述来进行原因定位。当然了,即使开发解决了问题,如果不能重现,也不能有效地验证。

    2  根据经验,一般的问题的产生都可以找到重现的规律的,只是看花的时间和成本。严重的bug一定要想办法找到原因,而优先级别低的问题可以考虑成本先将bug搁置,以后重现的时候再让开发解决。通常,不能很快找到规律的问题都是一些比较重要且奇怪的问题,开发一般不能根据描述进行定位,此时测试工程师应该有很强的责任心和信心想办法重现问题。

    3  关于bug的重现,有一点非常重要的是,一定要开发人员与测试人员很好地配合,bug的重现效率才会更高,测试人员千万一个人不要闷头闷脑地在那冥思苦想,而应该及时把问题和看法与开发人员交流,毕竟程序是他们写的,大家一起探讨可以有效地促进问题的解决。复杂的问题并不是一个人就可以轻易就解决的,而是一个团队的结晶,要懂得充分利用团队的力量。

    4  注意bug出现的时候的日志,通常程序日志都包含着很重要的信息,从那些信息中分析出现问题的条件,并尝试重现。

    5  碰到问题时,应该尽量将出错信息作为关键字在互联网搜索,有可能别人也碰到了类似的问题并解决了,即使没有人解决过相同的问题,在互联网上也有很多资料,可以帮助你获取灵感。

    6  必要时,写一些简单的测试程序来帮助重现问题。

    下面我会讲一个在实际测试过程中不能重现的问题的解决方法与过程,可能这个问题对于刚入门的人来说有点难理解,不要紧,你不需要看明白问题的原因和代码,但需要学会这个复杂的问题的解决方法,并应用到实际的测试当中。

    1  问题的描述:某短信发送模块出现core,但由于core信息紊乱不能定位到出错原因且无法重现导致core的规律。

    2  问题重现过程:

    1       使用gdbcore原因进行追踪,发现core信息中含有的错误信息为:#0  0xff1c5a18 in _malloc_unlocked () from /lib/libc.so.1
    #1  0xff1c57f0 in malloc () from /lib/libc.so.1

    2       以这两句core信息作为关键字在google上搜索,一些文章上类似问题的分析中获取经验,初步推断是由于内存溢出而产生的core

    3       将这些文章转发给开发负责人,并讨论可能导致的原因,开发从文章中获取灵感,写测试程序对推断进行测试

    4       同时测试人员详细分析程序运行日志,发现出现core之前,短信编码为平时少见的245,而短信的长度则是一个临界值140字节

    5       测试人员从程序运行日志中得到启发,发送一条短信编码为245且短信长度为140字节的短信,果然出现了相类似core

    6       开发人员分析根据测试结果分析导致core的原因: 调用sprintf打印短信内容的时候导致了内存溢出,而这样溢出会覆盖它后面的内存块的内存管理区域,在紧接着的malloc操作中就会发生段错误,从而导致了core的出现。

    这个问题的原因,因为多人的参与,得到了准确的定位和解决,虽然原因是我最先发现的,但问题的准确定位和解决并不是归公到某个人,而是大家一起努力的结果,团队的结晶。

    二、暂时无法解决的问题

    在测试的过程中,开发可能会在bug回复的时候告诉你暂时无法解决该问题,这个时候作为测试的负责人,应该怎样处理呢?

    1  首先,确实问题是否真的无法解决,解决需要付出的成本有多大。

    2  其次,确认问题的严重性,如果此类问题不解决,是否会导致严重的后果。

    3  对于会导致严重后果的问题,一定要坚持让开发解决,并且想办法帮助开发解决问题。测试人员应该主动协助开发人员找到问题的原因和解决方法,并充分利用团队的资源,请教对这个领域比较有经验的工程师,大家一起讨论问题的解决方法。

    4  对于对系统不会造成危害的问题或虽然有微小的危害但修改成本过高而又可以人为避免,则可以将问题遗留到下一版本解决或关闭这个bug,并在bug报告中说明原因和注意事项。

    5  这个时候,测试人员的态度非常重要,在告诉开发这个问题一定需要解决的时候态度是温和的坚定,并让他意识到问题的严重性。试想想,如果你板着脸孔冷冰冰地丢给开发一句这个问题一定要解决!扭头就走,他会是怎样的反应呢?可以笑的时候就笑吧,大家都是工作,不要将工作的氛围搞得太僵,大家在一个和谐的环境中工作才会保持愉悦的心情。

    6  发现问题之后测试人员可能心里会嘀咕反正这是开发的问题就让开发去折腾吧,如果你一不小心这样想了,那就偷偷的想几秒钟好了,这个念头闪过之后,作为bug负责人的你怎么忍心看着开发一个人手忙脚乱呢?测试和开发其实是一个整体,在这个整体中的每个人都有责任去解决问题。

    三、测试工程师和开发工程师的意见不一致

    1  首先,客观地比较自己的建议和开发的意见哪个更好。

    2  如果开发的方法的确是比较优化,那就应该接受开发的意见;如果经过对比之后还是觉得自己的建议更好,那就坚持自己的建议,并详细给开发解释你的建议,通过对比两者之间的差别婉转地告诉开发你的建议值得采纳。

    3  如果双方还是对各自的意见相持不下,可以跟项目经理一起讨论,由项目经理衡量应该采取哪种处理方法。不过,有时候,项目经理也不一定站在你这边,你可能还需要花脑筋说服项目经理或被项目经理说服。

    4  当然,这个问题的讨论前提是问题值得花时间和精力去研究讨论,如果是一些比较简单或次要的问题,就没必要花那么长的时间去计较了,放过开发吧,也许他真的觉得这个问题没必要这样修改或者是他也修改到很累很烦了,这么简单的一个问题何不让开发轻松一下?

    四、开发工程师不配合工作

    1  先进行一个自我检讨:我的态度有问题吗?我报的bug是否都描述清楚了?我所发现的问题是否有价值?如果这些问题的答案是否定的,那么自己先改正了,开发会看大到你的改变,也会调整自己的态度的。

    2  在一个团队中有一、两个不合作的开发工程师是正常的,不可能每个人都那么配合那么好态度,也没必要自己觉得很难受,因为问题在于他的身上,你做对了自己该做的就行了。

    3  不要去逃避,双方之间换一种有效的沟通方法。比如,在MSN上交流不清楚,就换成电话或面对面,听到你愉快的声音或看到亲切的面孔,对双方之间的互动更加有帮助。但不要说着说着就火冒三仗,面红耳赤了哦!如果你也是火暴的脾气,面对面交流双方很容易争执起来,那么就通过MSN或邮件来交换意见吧!总之,交流的方式是很多的,选择双方更能有效沟通的交流渠道会达到事半功倍的效果。

    4  尽量避免与对方直接冲撞。人的自尊心都是很强的,学历越高或能力越强的人,通常自尊心也是越强,你尊重他他才会尊重你,说得通俗点,你给了他面子、给了他台阶,他才会给你面子给你台阶。即使双方之间发生了争执,也不要太过介怀,只是工作而已,大方点继续对他真诚的微笑。

    5  如果他实在不配合,必要的时候,可以适当表达你的立场,或者委婉地向他的领导反映或者将你们之间的交互邮件抄送给他的领导。这是一个有效的方法,但同时也是一个容易引发新的矛盾的方法,记住这样做是为了有效解决问题,而不是在别人背后打小报告。这是在工作,对事不对人。

            在我的team中,有一个开发的态度非常不配合,不管是对我还是其它的测试人员。曾经有一段时间跟他的合作让我觉得非常的难受,后来在一个新的项目启动中,我作为测试负责人,而他作为开发负责人,我对新项目的工作热情一下子降到了冰点。幸运的是,我很快调整了自己的心理状态,要改变别人,首先要改变自己,首先让别人信服自己。于是,我花了很多的时间和精力去研究规范和业务需求,同时也会学习该项目相关的技术,在他的设计文档提交的时候,因为我对业务的透彻理解,指出了他在设计和业务流程处理上的不少问题,在设计上给他不少的帮助,就在这合作的过程中,我们的关系慢慢得到改善。讲这个故事,我是想说,在我们的工作开展的过程中,会遇到各种各样的人,并不是每个人都那么容易合作,但开发人员一般也不会是不讲理的人,改善相互之间的合作关系最好的方法是先让对方肯定你。

    五、如何处理不能迅速定位的工程故障

    对于一些不能迅速定位的工程故障,开发很自然寄望于测试环境能将问题重现,如果能够轻易在测试环境重现,那肯定是一件好事,不过通常如果是一些简单的容易出现的问题,在测试的时候肯定就已经发现问题了;正是因为问题的复杂或者是一些测试时没有考虑过的问题,才遗留到工程上导致出现故障。

    1 查看工程环境程序日志,如果没有查询的权限,请工程实施人员帮忙查找,分析日志查找到问题的原因或相关线索。

    2  如果日志的提示信息足够,可以根据日志定位原因,则在测试环境中按照日志提示构造条件相同的测试案例测试,尝试在测试环境中将问题重现。

    3  如果不能从日志中获取足够的信息,而且测试环境中也无法把问题重现,那么先跳出思维定势,想想为什么会出现这样的故障,可能导致的原因有那些,自己还有哪些测试点或异常没有考虑到,测试环境和配置与实际的工程环境和配置有哪些差异等等。同时主动与开发负责人、工程实施人员以及有经验的项目经理讨论,分析可能导致的原因。

    查看(1060) 评论(0) 收藏 分享 管理

  • 忘记root密码的修改方法

    2013-07-16 18:46:33

    如果是root密码:

    方法一:
    MySQL
    提供跳过访问控制的命令行参数,通过在命令行以此命令启动MySQL服务器:
    safe_mysqld --skip-grant-tables&
    即可跳过MySQL的访问控制,任何人都可以在控制台以管理员的身份进入MySQL数据库。
    需要注意的是在修改完密码以后要把MySQL服务器停掉重新启动才会生效
    先找到mysql.server 然后停止mysql服务
    # mysqld_safe --skip-grant-tables --skip-networking &
    # mysql
    >use mysql;
    >update user set password=PASSWORD("new-password") where user="root";
    >flush privileges;

    方法二:
    可以进行如下的步骤重新设置MySQLroot密码:
    1
    .首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。
    因为在重新设置MySQLroot密码的期间,MySQL数据库完全出于没有密码保护的
    状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL
    外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全
    状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。
    2
    .修改MySQL的登录设置:
    # vi /etc/my.cnf
    [mysqld]的段中加上一句:skip-grant-tables
    例如:
    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    skip-name-resolve
    skip-grant-tables
    保存并且退出vi
    3
    .重新启动mysqld
    # /etc/init.d/mysqld restart
    Stopping MySQL: [ OK ]
    Starting MySQL: [ OK ]
    4
    .登录并修改MySQLroot密码
    # /usr/bin/mysql
    Welcome to the MySQL monitor. Commands end with ; or \g.
    Your MySQL connection id is 3 to server version: 3.23.56
    Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.
    mysql> USE mysql ;
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    Database changed
    mysql> UPDATE user SET Password = password ( ‘new-password’ ) WHERE User = ‘root’ ;
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 2 Changed: 0 Warnings: 0
    mysql> flush privileges ;
    Query OK, 0 rows affected (0.01 sec)
    mysql> quit
    Bye
    5
    .将MySQL的登录设置修改回来
    # vi /etc/my.cnf
    将刚才在[mysqld]的段中加上的skip-grant-tables删除
    保存并且退出vi
    6
    .重新启动mysqld
    # /etc/init.d/mysqld restart
    Stopping MySQL: [ OK ]
    Starting MySQL: [ OK ]

    windows
    1.
    以系统管理员身份登陆系统。
    2.
    打开cmd—–net start 查看mysql是否启动。启动的话就停止net stop mysql.
    3.
    我的mysql安装在d:\usr\local\mysql4\bin下。
    4.
    跳过权限检查启动mysql.
    d:\usr\local\mysql4\bin\mysqld-nt –skip-grant-tables
    5.
    重新打开cmd。进到d:\usr\local\mysql4\bin下:
    d:\usr\local\mysql4\bin\mysqladmin -uroot flush-privileges password “newpassword”
    d:\usr\local\mysql4\bin\mysqladmin -u root -p shutdown
    这句提示你重新输密码。
    6.
    cmdnet start mysql
    7.
    搞定了。
    2
    MySQL4.1以上版本一种密码错误问题的解决方法
    1 # SET PASSWORD FOR ’some_user’@’some_host’ = OLD_PASSWORD(‘newpwd’);
    2 # FLUSH PRIVILEGES;
    3
    Mysql数据库修复
    myisamchk -r -q d:\mysql\data\latin1\*
    r
    代表修复
    q
    代表快速
    d:\mysql\data\latin1\*
    数据库里面 *代表里面的所有的文件

    方法三:
    如果你忘记了你的MYSQLroot口令的话,你可以通过下面的过程恢复。
    1.
    mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。
    kill `cat /mysql-data-directory/hostname.pid`
    你必须是UNIXroot用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。
    2.
    使用`--skip-grant-tables' 参数来启动 mysqld
    3.
    使用`mysql -h hostname mysql'命令登录到mysqld server ,用grant命令改变口令。你也可以这样做:`mysqladmin -h hostname -u user password 'new password''
    (其实也可以用use mysql; update user set password =password('yourpass') where user='root' 来做到。)
    4.
    载入权限表: `mysqladmin -h hostname flush-privileges' ,或者使用 SQL 命令`FLUSH PRIVILEGES'。(当然,在这里,你也可以重启mysqld。)

    方法四:(一定要先备份)
    1
    ,重新在另一台电脑上安装相同版本的MySQL
    2
    ,删除忘记密码的电脑中MySQL安装目录中\data\mysql的全部内容(要先停止MySQL服务)
    3
    Copy新装的电脑上MySQL安装目录中\data\mysql的全部内容 to 刚刚删除的目录中
    4
    ,启动MySQL服务

    这样就只有一个root用户了,密码为空……

    修改Mysql root密码

    方法1 SET PASSWORD命令

      mysql -u root

      mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

    方法2:用mysqladmin

      mysqladmin -u root password "newpass"

      如果root已经设置过密码,采用如下方法

      mysqladmin -u root password oldpass "newpass"

    方法3 UPDATE直接编辑user

      mysql -u root

      mysql> use mysql;

      mysql> UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';

      mysql> FLUSH PRIVILEGES;

    在丢失root密码的时候,可以这样

      mysqld_safe --skip-grant-tables&

      mysql -u root mysql

      mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='root';

      mysql> FLUSH PRIVILEGES;

     

  • linux常用指令简介

    2013-07-16 18:45:02

    linux常用指令简介


    linux
    常用指令集列表(持续更新):
    cd  ls  pwd  su  du  rm  cp  mv  >  >>  |  sort  find  cat  more  less  top  ps  free  df  wget  uname  grep  tar  kill  wc  chmod  chown  adduser  mkdir  touch  crontab  date  type/which  reboot  halt  shutdown  split  diff  mount  umount  fdisk  passwd  ssh  scp  rcp  sync  rsync  samba  ifconfig netstat  ping  man  sleep  alias  sed  ulimit  clear  uniq    awk



    cd 切换目录

    常用参数:
    ~
    回到用户主目录
    ..
    返回上级目录



    ls 列表方式查看指定目录下的文件和文件夹

    常用参数:
    -l list,
    列出指定目录下的所以文件和文件夹
    -t time,
    按时间排列
    -a all,
    包括隐藏文件,隐藏文件前带.



    pwd 查看当前所在目录位置



    su 切换登录用户
    用法: su [username]



    du 显示目录或文件的大小,占用磁盘空间

    使用方式:
    du [options] [
    目录或文件]
    常用参数:
    -h
    --human-readable K,M,G为单位,提高信息的可读性
    -s
    --summarize 仅显示总计



    rm 删除文件和目录

    使用方式:
    rm [options] source..
    常用参数:
    -r
    递归删除目录和文件,强制删除
    -f force
    不论文件是否存在,不用提示



    cp 复制文件

    使用方式:
    cp [options] source dest(
    目的对象)
    cp [options] source..  directory
    cp aaa bbb
    复制aaa并更名为bbb
    常用参数:
    -r
    递归拷贝文件夹里的内容
    -f
    如果目标文件夹有同名文件,先删除再拷贝



    mv 移动文件,文件重命名,剪切文件

    使用方式:
    mv [options] source dest
    mv [options] source.. directory
    mv aaa bbb aaa
    重命名为bbb



    > >> 重定向
    >
    把标准输出写入到指定文件,从文件头开始,会覆盖原文件
    >>
    把标准输出写入到指定文件,从文件尾开始,追加到原文件之后



    | 管道,导流,把标准输出导入到标准输入
    使用方式:
    ps aux | grep mysql >>a.log



    sort 对文本文件内容排序,以行为单位

    使用方式:
    sort [options][
    文件]
    常用参数:
    -m
    --merge 合并
    -r
    --reverse 反序排列
    -u
    --unique 去重
    -n
    按数值排序
    -k
    按指定列排序
    -t
    指定列分隔符
       eg: sort -n -t "/" -k 3 filea
    文件以/分割的第3列按数值排序
    -b
    忽略每行前面的空白部分,从第一个可见字符开始比较

     



    find 在目录层级里查找文件和内容,可以指定名称、类别、时间、大小、权限等组合,只有完全相符的才会被列出来

    使用方式:
    find expression(
    表达式)
    find . -type f  
    表示查找当前目录及其子目录下类型是f的档案 ( . 表示当前目录)
    常用参数:
    -mount, -xdev :
    只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案
    -amin n :
    在过去 n 分钟内被读取过
    -anewer file :
    比档案 file 更晚被读取过的档案
    -atime n :
    在过去 n 天过读取过的档案
    -cmin n :
    在过去 n 分钟内被修改过
    -cnewer file :
    比档案 file 更新的档案
    -ctime n :
    在过去 n 天过修改过的档案
    -empty :
    空的档案
    -gid n or -group name : gid
    n 或是 group 名称是 name
    -ipath p, -path p :
    路径名称符合 p 的档案,ipath 会忽略大小写
    -type f
    类型是f的档案
    -name filename
    名称是filename的档案
    -size n
    大小是n单位的档案,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytesw 是二个位元组



    cat 把文件内容串连后传到标准输出

    使用方式:
    cat file1 file2 >>file3
    把文件1 2内容追加到3
    常用参数:
    -n
    --number 1 开始对所有输出的行数编号
    -b
    --number-nonblank -n 相似,只不过对于空白行不编号
    -s
    --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行



    more 类似cat,会逐页显示方便阅读,按空白键pagedown,按b(back)pageup,而且还有搜寻字串的功能(vi相似)




    less more 相似,允许使用者往回卷动以浏览已经看过的部份

    主要参数:
    -p
    回到file第一行
    -b
    前一页 pageup
    -backspace
    下一页 pagedown




    top 任务管理器,实时显示进程状态,cpu使用情况等



    ps  显示瞬时进程的动态,内容与top差不多.
    包括:pid,user,%cpu(cpu使用率),%mem(内存使用率),VSZ(虚拟内存占用大小),stat(状态),start(启用时间),time(执行时间),command(所执行的指令)

    主要参数:
    -aux

Open Toolbar