发布新日志

  • 如何高效的工作?

    2012-03-27 14:23:20

    在外企工作8年之际,有感而发。

    刚工作的前3年,be proactive和work hard很重要。这是打基础的阶段。做的越多对自己而后的成长越重要。

    往后,3-6年,则要形成自己的专业领域的系统知识网。争取成为专业领域的能手。这时候,应该是一名出色的individual contributor. 要work smart。

    再往后,7年以上,我们的角色往往会朝team leader转变,你要独立地负责整个项目或者项目的某个方面,这时候,系统思考和全局观变得十分重要。

    总结了几个tips:

    1. 遇到问题的时候,永远要考虑如何从系统或流程上解决问题,做RCA,然后follow up with action items。

    2. 要work smart. 做最有价值的事情,力争使自己在team 的价值最大化。

    3. 懂得放弃。人的精力是有限的,不要贪婪,放弃自己该放弃的。把自己能control的事情做到perfect。

    4. Make impact. 无论是做技术还是管理,success is all about making impact. 思考如何使别人或者项目更多的从我们自己的工作中受益,同时对自己或团队的工作要恰当地promote.

    5. Mark difference. 永远让自己有差异化竞争优势。当自己做一件事情的时候,思考:怎样做得与众不同?今年做的如何比去年更好?

    职场禁忌:

    1. 推卸责任。

    2. 抢功。

    3. 失信。

    想到另外一个tip。当自己做了一件令自己不太满意的事情的时候,学会放下。理由有二:

    1. 你在别人心中没有你自己想象得那么重要,别人没那么在意你。

    2. 人都是健忘的。给自己和他人一点时间,大家都会淡忘的。

  • Monitor disk activity using sar

    2012-03-27 13:48:56

    We can use sar to monitor disk IO activity on Linux. Sample output:

    sar -b

    05:53:03 PM       LINUX RESTART

    06:00:01 PM       tps      rtps      wtps   bread/s   bwrtn/s
    06:10:01 PM   1421.49    180.84   1240.66  10910.58  28497.24
    06:20:01 PM      4.82      0.35      4.47      8.94     52.26
    06:30:01 PM      3.75      0.02      3.74      0.12     42.17
    06:40:01 PM      5.70      0.07      5.63      0.56     59.60
    06:50:01 PM      3.57      0.01      3.57      0.04     39.61
    07:00:01 PM      5.19      0.16      5.03      2.48     65.62
    07:10:01 PM     68.31     51.25     17.06    532.22    266.63
    07:20:01 PM     64.88     40.02     24.86    353.28    453.28
    07:30:02 PM      3.76      0.01      3.75      0.04     41.58
    07:40:01 PM      6.85      0.06      6.79      0.48     68.28
    07:50:01 PM      3.58      0.01      3.58      0.04     39.77
    08:00:01 PM      5.00      0.00      5.00      0.00     65.03
    08:10:01 PM      6.72      0.29      6.43      3.57     68.12
    08:20:01 PM     52.87     18.09     34.78   1099.17    722.94
    08:30:03 PM   1872.56   1216.01    656.55  32150.18  49787.32
    08:40:03 PM   2868.76   1536.31   1332.45  36736.45  63411.69
    08:50:03 PM   2919.72   1739.57   1180.15  42117.65  57012.38
    09:00:01 PM   1877.46   1153.17    724.29  25919.17  37001.17
    09:10:01 PM     81.93     43.21     38.72    654.82    755.66
    09:20:01 PM     31.93     23.09      8.84    406.96    111.95
    09:30:01 PM     17.74      9.67      8.07    166.11    100.96
    09:40:01 PM     98.92     90.17      8.76   1587.67     97.32
    09:50:01 PM      9.19      2.82      6.37     49.47     77.05
    Average:       467.30    247.95    219.35   6213.88   9749.75

  • Mount a windows network folder to Linux

    2012-01-31 15:21:52

    [root@xPlore mnt]# mkdir /mnt/winshare

    [root@xPlore package]# mount -t cifs -o username=dmadmin //client/sharelocation /mnt/winshare


    It will then prompt for password. All settled!

    To unmount the share folder:

    [root@xPlore mnt]# umount /mnt/winshare

  • GCViewer

    2011-08-25 10:31:22

    启动GCViewer:

    java -jar gcviewer-1.29.jar

    产生GC Log:

    在JVM启动命令中附加选项 -Xloggc:C:\GCLogs\csGC.txt,如下

    set USER_MEM_ARGS=-Xms256m -Xmx256m -XX:PermSize=64m -XX:MaxPermSize=256m -Xss256k -XX:+DisableExplicitGC -Xrs -Xloggc:C:\GCLogs\csGC.txt

  • 【转载】LoadRunner在使用时遇到的问题及解决方法

    2011-03-31 15:12:38

    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应用中包含了与服务器进行交互的JavaApplet、基于浏览器的应用中包含了向服务器进行通信的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 since1/1/70: %ld\n”,time(&t));
     
      lr_message(“System time and date: %s”,ctime(&t));
     
      }
    复制代码
      输出结果为:

      Time in seconds since1/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操作系统的限制,而只受硬件和内部可伸缩性限制的约束。

  • 如何管理不合格的员工?

    2011-01-20 14:16:39

    和朋友聊天中学到的管理不合格员工三部曲:

    1. train

    2. transfer

    3. terminate

  • 提前预警与快速反应应对开发的DELAY

    2010-12-02 16:53:47

    经常碰到开发递交可测的版本时间较晚,导致QA没有足够的时间完成测试,在敏捷开发中尤其多见。那么,我们怎样应对呢?

    一般有两种方式,提前预警和快速反应。

  • 如何做好安装测试(Installer Test)?

    2010-10-28 09:16:28

    安装测试(Installer test)是软件测试中最基本,但却是至关重要的,怎样做好做优秀呢?

    安装测试分为以下几个部分:

    1. Fresh install

    即全新的测试环境下进行安装测试,包括Typical和Custom安装。如果是分布式的产品,考虑各组件集中装在一台机器上或分别装在不同的机器上。如果可以集群安装,也应设计集群安装的测试用例。

    2. Uninstall install

    即卸载。一般从控制面板中卸除。根据产品的设计,可能可以以其他方式卸除,也应一并测试。卸载后,文件应被删除,包括文件系统,注册表,快捷方式,环境变量等等。

    3. Maintenance install

    即维护安装,或repair installation. 指在已有的安装中,运行installer以添加/卸除组件或者改变安装配置等等。

    4. Silent install

    即使用命令行+配置文件安装。一般的installer都应提供silent install的功能。

    5. Upgrade

    即升级测试,软件从低版本升级到高版本的过程中使用的安装方式,在已有的客户环境中尤其常见。应保证安装成功,更重要的是升级后,客户已有的数据和配置不被破坏,产品功能正确。如果有metadata, metadata也应被升级。推荐在做升级测试是,预先导入合适的测试数据,模拟客户环境,再进行升级,最后做一个全面的回归测试。

    安装测试中检查什么呢?

    1. 首当其冲,应检查功能正确,包括安装过程中每界面上的元素都能正常工作,安装后产品可用。

    2. 安装后,检查相应的注册表、环境变量是否正确设置。检查快捷方式(包括开始菜单,桌面和Quick Lunch bar)是否正确创建。检查文件版本是否正确。

    3. 安装过程中所有拼写务必正确,不可以出现拼写错误。所有语句务必恰当正式。所有error message, warning也比较友好正式恰当。

    4. 易用性,包括Usability和Accessibility. 安装过程中所有界面都可以使用键盘进入,包括使用Tab+Enter, Alt+快捷键,Esc(取消安装)等等。

    5. 界面正确美观。包括logo正确。当用户桌面的display在不同情况下或使用不同的color theme时,都应能正确显示。

  • QA之外的Function Team想从QA口中知道什么?

    2010-10-27 22:16:33

    今天和朋友聊天,谈到QA之外的Function Team, 如DEV, PM, Architect想从QA口中知道什么,或者说他们关心什么。挺受启发。特此记录。

    1. Test Coverage

    2. Bug statistics,包括critical和serious bugs所占比例

    3. Bug Trend

    4. 哪一个Dev开发的module bug最多,哪一个feature bug最多,哪一个QA发现的bug最多

  • 提高C#编程水平的50个要点

    2010-09-26 16:52:58

    提高C#编程水平的50个要点

      1.总是用属性 (Property) 来代替可访问的数据成员

      2.在  readonly 和 const 之间,优先使用 readonly

      3.在 as 和 强制类型转换之间,优先使用 as 操作符

      4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if

      5.总是为自定义类重载 ToString 方法

      6.区别值类型和引用类型

      7.使用不可变的值类型(Immutable Atomic Value Types)

      8.在值类型中,确保0是一个合法的数据

      9.理解 ReferenceEquals, static Equals, instance Equals 和比较运算符(==)之间的关系

      10.理解 GetHashCode方法的缺陷

      11.在编写循环时,优先使用 foreach.

      12.在定义变量的时候就将其初始化

      13.使用静态构造函数来初始化静态成员变量

      14.用多个构造函数时,利用构造函数链

      15.使用using和try/finally来处理资源的释放

      16.尽量避免产生资源垃圾

      17.尽量避免使用装箱(boxing)和拆箱(unboxing)

      18.实现类的 Dispose 方法

      19.在接口和继承(Inheritance)之间,优先使用接口(interface)

      20.区分接口和重载(overrides)

      21.用委托(delegate)来实现回调(callback)

      22.用事件(event)来定义外部接口

      23.避免返回类内部成员的引用

      24.使用元数据来控制程序

      25.优先使用可序列化(serilizable)类型

      26.对需要排序的对象实现IComparable和IComparer接口

      27.避免使用 ICloneable接口

      28.避免使用类型转换操作符

      29.只有当基类加入了与派生类中现有的函数名称相同的函数时,才需要使用 new 操作符

      30.尽量使用 CLS-Compliant

      31.尽量编写短少,简单的函数

      32.尽量编写比较小的程序集(assembly)

      33.限定类型的可见性(visibility)

      34.编写大粒度的 web API

      35.在使用事件时,优先继承基类事件,而不是重新创建一个事件

      36.多使用 framework 的运行时调试 (DEBUG, TRACE, EVENTLOG等)

      37.使用.net标准的配置机制

      38.使用并且在类中支持.net的数据绑定功能 (Data Binding)

      39.使用.net的验证机制 (Validation)

      40.根据你的需求选择正确的集合类(Collection)

      41.在自定义结构中使用 DataSet

      42.利用属性(Attributes)

      43.不要过度使用反射(Reflection)

      44.创建完整的,应用程序特定的异常

      45.尽可能多的考虑程序可能出现的异常,并作出处理

      46.尽可能少的使用 Interop

      47.尽量使用安全代码 (safe code)

      48.多多学习、使用外部工具和资源

      49.准备使用 C# 2.0

      50.学习 ECMA 标准

      信心、恒心、决心和耐心,应该属于世界上的每一个人,同样也属于我自己。

  • QA如何更有效地发现复杂的BUG?

    2010-09-06 16:57:20

    QA如何更有效地发现复杂的BUG?

    Customer现场发现的问题往往非常复杂,而QA在常规的测试中较难发现。QA怎样进行有效的测试发现这些复杂的BUG呢?

    1. 使用一个不干净的测试环境测试。如可以使用运行过性能测试的环境进行功能测试,这样可以保证系统运行一段时间后功能仍然可靠。

    2. 对customer现场发现的bug进行分析,从中找原因。可能是对用户行为的理解、用户环境的模拟或者是测试的覆盖率等方面的原因。

    3. 借助于工具,如AppVerifier等.

    (待续)

  • web_reg_save_param的边界是html关键词时应注意转换

    2010-09-02 11:34:18

    使用web_reg_save_param做关联时,如果LB, RB是html的关键词,应注意转换。如:

    Server Response为

    _41"><nobr>00000000129C5BA17900DFF2C3BE2F7686AD411887CE5F8200<

    应将_41"&gt;&lt;nobr&gt; 转换为_41"><nobr>。

    加上escape,正确的写法为:

    web_reg_save_param("EntryID", "LB=_41\"\>\<nobr\>", "RB=\<", "Ord=All", "NOTFOUND=WARNING", LAST);

  • 在LoadRunner中从数组类型的参数随机取值的方法

    2010-09-02 11:25:10

    使用web_reg_save_param做关联后,有时候会有多个匹配值。为了模仿用户行为随机取一个值为后续transcation所用,可以使用lr_paramarr_random函数。例如:

    web_reg_save_param("EntryID", "LB=_41\"\>\<nobr\>", "RB=\<", "Ord=All", "NOTFOUND=WARNING", LAST);

    ...

    lr_save_string(lr_paramarr_random("EntryID"), "EntryID_Preview");

    上例中EntryID有多个值,以array存在。而EntryID_Preview便从中随机地取一个值。

  • [转载] 我的测试秘密和技术

    2010-08-11 13:38:09

    我的测试秘密和技术

      最近受邀请要给微软的一个团队讲解我个人的一些测试小秘密和常用的测试技术。其实,测试没有什么太多的秘密可言。如果说如何能发现更多的bug的话,那么我认为最最重要的是passion和experience. 但是,由于他们期望听到的是测试的techniques,我就列了一个我认为最重要的几个方面。现在发出来和大家共享一下吧。

      ·         Passion, Experience

      我觉得experience和passion最重要。有一个周六的半夜我突然有种想法应该给我测试的feature去做code review,就去了office一直工作到5:00am, 结果就发现了两个security bug. 之所以能有这个idea就是因为经验的积累造成,而能在周末凌晨工作几个小时则是因为passion. 我现在完全地享受能发现各种各样bug的生活了,已经对开发没有什么兴趣了。破坏软件真的是很有趣。

      ·         Understand features deeply

      o   Design

      o   Architecture

      o   Implementation

      o   Customer requirements

      理解这些非常的重要。你理解的越深,你就可能发现更多,更好的bug。

      ·         Tools

      o   App verifier

      o   Driver verifier

      o   Fuzzing tools

      o   Etc.

      Some tools are extremely useful. Some tools are very helpful. 很多人不理解我为什么每天都能发现一两个蓝屏的bug,其实90%的应该归功于这些tools。但是,虽然几乎微软每个人都知道这些tools,但真正经常使用的并不多。我发现一个有趣的问题,绝大多数我发现的bug并不需要特别的技术,而决定于态度。是一个你有没有去测的问题,只要去测,细心去测都能发现他们。

      ·         Code review+Debugging

      o   Security audit: buffer overflow, memory leak, AV

      o   Logic review

      Debugging 的技术非常非常重要,这是开发和测试的一个主要技术交集。就在我做完这个经验介绍以后,其他的feature里发现一个bug,他们怀疑是我们的 feature造成的。我出面跟他们的开发和开发组长进行交涉,最后给他们指出他们的代码里问题的所在。Code review和debugging是相辅相成的,不可分割。我一般进行两种code review。一种叫code audit, 不关心代码的逻辑,功能,只是检查有没有buffer overflow, memory leak, AV 等等。一种是logic review, 专门检查代码的逻辑是否合理。Code review是个bug farm, 熟悉之后你能发现大量的bug在里面。

      ·         Tenet tests:

      o   Reliability: tools, stress

      o   Security: fuzzing, code audit

      o   Performance: Xperf

      大家一般更多的关注与functional test。其实Reliability, Security和Performance测试都非常重要。每一个测试人员都应该具备进行这几方面测试的能力,从而给自己负责的feature经常性的,或者通过Lab进行这些测试,肯定能发现很多bug,这些一般都是非常好的bug。

      ·         Integration test

      大多数人只关心自己的component。其实很多bug发生在集成测试上。你需要学习其他相关的component, 从而能够想象很多cross feature的scenario进行测试,也能发现很多bug。

      ·         Looking for test holes

      o   Test cases

      o   Test tools

      o   Test owner history

      o   Old bugs analysis

      我在有时间的时候我会通过这几方面去寻找更多的bug。看看有没有没有cover的test case, 看看有没有新的test tool可以尝试,跟别人聊天看看自己component以前test owner的情况,以及分析一下最近发生的一些bug。同一个bug有没有可能出现在其他地方。

    版权声明:本文出自flysky19的51Testing软件测试博客,欢迎转载……

  • 如何进行输入合法性验证?

    2010-08-11 13:11:28

    软件测试,无论是界面还是API测试,很多涉及到输入的合法性验证,总结起来,需要从如下几方面考虑:

    1. 合法边界验证;
    2. 空值(null)验证;
    3. 重复的输入;
    4. 特殊字符,甚至是控制字符;
    5. 输入全为空格;
    6. 以空格开始或结尾。空格应被trim;
    7. 输入字符超过允许的字符数。

Open Toolbar