软件测试从业者,立志做出一番事业,2015加油~!

发布新日志

  • Junit4 参数化 【转】

    2012-04-12 14:52:45

    转自:http://ttitfly.javaeye.com/blog/178496
    JUnit4中参数化测试要点: 
    1. 测试类必须由Parameterized测试运行器修饰 
    2. 准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求: 
        1)该方法必须由Parameters注解修饰 
        2)该方法必须为public static的 
        3)该方法必须返回Collection类型 
        4)该方法的名字不做要求 
        5)该方法没有参数 
    


    如: 
    测试方法: 

    public int add(int a,int b){
    	return a+b;
    }
    

    测试代码:

    package org.test;  
      
    import java.util.Arrays;  
    import java.util.Collection;  
      
    import org.junit.Assert;  
    import org.junit.Test;  
    import org.junit.runner.RunWith;  
    import org.junit.runners.Parameterized;  
    import org.junit.runners.Parameterized.Parameters;  
    /** 
     * 参数化测试的类必须有Parameterized测试运行器修饰 
     * 
     */  
    @RunWith(Parameterized.class)  
    public class AddTest3 {  
      
        private int input1;  
        private int input2;  
        private int expected;  
          
        /** 
         * 准备数据。数据的准备需要在一个方法中进行,该方法需要满足一定的要求: 
     
             1)该方法必须由Parameters注解修饰 
             2)该方法必须为public static的 
             3)该方法必须返回Collection类型 
             4)该方法的名字不做要求 
             5)该方法没有参数 
         * @return 
         */  
        @Parameters  
        @SuppressWarnings("unchecked")  
        public static Collection prepareData(){  
            Object [][] bject = {{-1,-2,-3},{0,2,2},{-1,1,0},{1,2,3}};  
            return Arrays.asList(object);  
        }  
          
        public AddTest3(int input1,int input2,int expected){  
            this.input1 = input1;  
            this.input2 = input2;  
            this.expected = expected;  
        }  
        @Test  
        public void testAdd(){  
            Add add = new Add();  
            int result = add.add(input1, input2);  
            Assert.assertEquals(expected,result);  
        }  
          
    } 
  • Junit4 与Jnuint3 的区别

    2012-04-12 10:19:06

    下面通过和JUnit3的特性进行比较来总结JUnit的特性:
    (1)必须引入类TestCase(import junit.framwork.Test)
    -》Junit4 必须引入类Test(import org.junit.Test),必须引入类(import static org.junit.Assert.*)
    (2)必须继承类TestCase(class BaseClassTest extends TestCase)
    -》
    Junit4 不需要

    (3)测试方法必须以test开头(public void testMethod())
    -》
    Junit4 不需要,但是类开始的时候要标记@Test

    (4)通过assert*方法来判断结果(assertTure(baseClass.method().equals("test.BaseClass.class")))

    从上面的对比,可以看出JUnit4和JUnit3的区别在于:
    去掉与类TestCase的偶联性,利用标签(@Test)对TestCase触发。

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

    setUp和TearDown
    JUnit3测试运行程序会在运行每个测试之前自动调用setUp()方法。该方法一般会初始化字段,打开日志记录,重置环境变量,等等。

    在JUnit4中,仍然可以在每个测试方法运行之前初始化字段和配置环境。然而,完成这些操作的方法不再需要叫setUp(),只要用@Before注释来指示即可。

    在JUnit3中,使用tearDown()方法。

    对于JUnit4,可以给它取一个更自然的名称,并用@After注释它。

  • LoadRunner web_url函数【摘】

    2010-03-30 14:56:18

    web_url 
    语法: 
            Int Web_url(const char *name, const char * url, <Lists of Attributes>, [EXTRARES,<Lists of Resource Attributes>,LAST) 

    返回值 
            成功时返回LR_PASS (0),失败时返回 LR_FAIL (1)。 

    参数: 
            Name:VuGen中树形视图中显示的名称,在自动事务处理中也可以用做事务的名称。 

            url:页面url地址。 

            List of Attributes:(支持下列属性) 

            1 TargetFrame 

            2 TargetBrowser or TargetBrowserOrdinal 

            3 RecContentType  - 在录制期间响应的报头文本类型(text/html, application/x- javascript),这是为了确认目标URL是否是可录制的资源。 
            4 Referer - 要提交页面请求的URL .(获得当前页面,如果明确指出了位置,那么这个属性无效或者忽略。URL中写明了,要获取的页面) 
            5 Resource - 指定一个值说明这个URL是否是一个资源,0 表示不是资源,1 表示是资源 
            6 Snapshot  -  快照,快照文件名称,用来关联用的。 
            7 Mode  - 录制的等级,是否是HTML或者HTTP模式。 

            EXTRARES:分隔符,表示下列列表,是由script、active、java applet、flash产生的请求(具体设置在,Recorded options --Recording--选择 html base scritp --- html Reccorded  可以设置是否需要录制这些东西。)。 

            List of Resource Attributes:下载的资源属性 

    URL 
    The URL (Uniform. Resource Locator) of the web resource to load 
    通过URL地址(资源统一定位器)要下载的web资源 
    Referer 
    The URL of the referring web page. 
    发送下载请求的页面。比如一个swf要下载一个图片,那么swf就是referer 
    ENDITEM 
    A marker that indicates the end of each resource in the list. 
    列表中每个资源的结束标志符 
            LAST:属性列表结束的标记符。 



    说明 
            Web_url根据函数中的URL属性加载对应的URL,不需要上下文。 

           

            可以使用web_url 模拟从FTP服务器上下载文件。web_url 函数会使FTP服务器执行文件被真实下载时的操作。除非手工指定了"FtpAscii=1",下载会以二进制模式完成。 

            在录制选项中,Toos—Recording Option下,Recording选项中,有一个Advanced HTML选项,可以设置是否录制非HTML资源,只有选择了“Record within the current script. step”时,List of Resource Attributes才会被录制到。非HTML资源的例子是gif和jpg图象文件。 

            通过修改HTTP头可以传递给服务器一些附加的请求信息。使用HTTP头允许请求中包含其他的内容类型(Content_type),象压缩文件一样。还可以只请求特定状态下的web页面。 

            所有的Web Vusers ,HTTP模式下的WAP Vusers或者回放模式下的Wireless Session Protocol(WSP),都支持web_url函数。 
  • web_find()和web_reg_find()

    2010-03-26 16:01:01

    web_find()和web_reg_find() 【摘】

    这两个函数均用于内容的查找,但两者也有本质的区别,具体介绍如下:

    一、web_find()函数

    该函数的作用是“在页面中查找相应的内容”,常用参数及含义如下:

    web_find("web_find", //定义该查找函数的名称

    %vR`}1}0 "RightOf=a", //定义查找字符的右边界

    "LeftOf=b", //定义查找字符的左边界

    "What=name", //定义查找内容

    LAST);

    使用该函数注意以下事项:

    1、 位置

    该函数在页面内容显示出来以后,在页面中进行查找,所以只能写在要查找内容之后

    2、 录制模式

    该函数只能在基于HTML模式录制的脚本中进行查找

    3、 必须启用内容检查选项

    在runtime setting->Preferences里面,把Enable image and text check选中,否则不执行该查找函数

    4、 在VB和JAVA语法中不支持该函数

    该函数有以下一个缺点:

    1、 执行效率较低

    2、 不返回查找结果情况,如想在执行该函数后根据查找结果做进一步操作时,没有返回值可以依据

    例如:

    在页面中查找“登录成功”的字符串,如果找到该字符串在日志中输出“登录成功”,如果找不到该字符串,则在日志中输出“登录失败”,此时使用该函数没有依据来做此判断,但使用web_reg_find()函数,使用它其中的SaveCount可以进行判断,具体方法我们下面介绍。

    转载请注明出处:http://www.51testing.com/?41972

    二、web_reg_find()函数

    该函数的作用是“在缓存中查找相应的内容”,常用参数及含义如下:

    web_reg_find("Search=Body", //定义查找范围

    "SaveCount=ddd", //定义查找计数变量名称

    "Text=aaaa", //定义查找内容

    LAST);

    使用该函数注意以下事项:

    1、 位置

    该函数写在要查找内容的请求之前,通常情况下写在如下六个函数之前:

    Web_castom_request();web_image();web_link();web_submit_data();web_submit_form();web_url()

    2、 使用技巧

    在该函数的参数中有个“SaveCount”,该参数可以记录在缓存中查找内容出现的次数,我们可以使用该值,来判断要查找的内容是否被找到,下面举个例子来说明:(引用LR的帮助中的例子)

    // Run the Web Tours sample

    web_url("MercuryWebTours",

    "URL=http://localhost/MercuryWebTours/",

    "Resource=0",

    "RecContentType=text/html",

    "Referer=",

    "Snapshot=t1.inf",

    "Mode=HTML",

    LAST);

    // Set up check for successful login by looking for "Welcome"

    web_reg_find("Text=Welcome",

    "SaveCount=Welcome_Count",

    LAST);

    // Now log in

    web_submit_form("login.pl",

    "Snapshot=t2.inf",

    ITEMDATA,

    "Name=username", "Value=jojo", ENDITEM,

    "Name=password", "Value=bean", ENDITEM,

    "Name=login.x", "Value=35", ENDITEM,

    "Name=login.y", "Value=14", ENDITEM,

    LAST);

    // Check result

    if (atoi(lr__string("{Welcome_Count}")) > 0){ //判断如果Welcome字符串出现次数大于0

    lr_output_message("Log on successful."); }//在日志中输出Log on successful

    else{ //如果出现次数小于等于

    lr_error_message("Log on failed"); //在日志中输出Log on failed

    return(0); }

    我觉得这个方法非常有用,我们可以举一反三,应用到我们实际的项目中

    转载请注明出处:http://www.51testing.com/?41972

    三、插入函数的方法

    1、 手工写入,在需要插入函数的位置手工写入该函数

    2、 光标停留在要插入函数的位置,在INSERT菜单中,选择new step,在列表中选择或查找要插入的函数,根据提示填写必要的参数

    3、 在tree view模式下,在树状菜单中选中要插入函数的位置,右键,选择insert after或insert before,根据提示填写必要的参数

    四、总结

    1、 这两个函数函数类型不同,WEB_FIND是普通函数,WEB_REG_FIND是注册函数

    2、 WEB_FIND使用时必须开启内容检查选项,而WEB_REG_FIND则不没有此限制

    3、 WEB_FIND只能只用在基于HTML模式录制的脚本中,而WEB_REG_FIND没有此限制

    4、 WEB_FIND是在返回的页面中进行内容查找,WEB_REG_FIND是在缓存中进行查找

    5、 WEB_FIND在执行效率上不如WEB_REG_FIND

  • Java 冒泡排序算法

    2010-03-23 11:05:48

    package com.zzp.test;

    public class bubble {

    public static void main(String[] args) {
    int a[] = { 6, 7, 100, 5, 0, 8 };
    for (int j = 0; j < a.length; j++) {
    for (int i = 0; i < a.length - 1; i++) {
    if (a[i] > a[i + 1]) {
    int k = 0;
    k = a[i];
    a[i] = a[i + 1];
    a[i + 1] = k;
    }
    }
    }
    for (int l = 0; l < a.length; l++) {
    System.out.print(a[l] + "   ");

    }

    }

    }

  • TestLink1.6.0安装步骤

    2009-05-19 11:11:02

    1.安装准备

    PHP4.4.1
    MySQL4.1.16
    Apache2.0.55
    TestLink1.6.0


    2.安装Apache2.0.55

    安装过程【略】


    3.安装PHP4.4.1

    『1』下载压缩包,将压缩包解压缩到C:\PHP
    『2』将位于dlls和sapi文件夹中的文件移动到C:\PHP中
    『3』 将 PHP 目录添加到PATH环境变量中
    『4』将php.ini-recommended拷贝到c:\php目录下,重命名为php.ini
    『5』 注册动态链接库.打开命令提示行窗口(位于开始菜单),然后输入类似cd C:\php的命令进入 PHP 目录,最后输入regsvr32 php4activescript.dll注册该 DLL

           测试方法:
           -------------------------------------------
           测试ActiveScript是否正确工作,请创建一个新文件,命名为 test.wsf(这个扩展名很重要)然后输入:

             <job id="test">
               <script. language="ActivePHP">
               $WScript->Echo("Hello World!");
               </script>
             </job>

           保存并双击这个文件。如果您看到一个小窗口,内容为“Hello World!",说明安装成功。
          ---------------------------------------------

    『6』 将PHP集成到Apache 2.0 。将以下两行加入到 Apache 的 httpd.conf 配置文件中

         
            # 对 PHP 4 用这两行:
            LoadModule php4_module "c:/php/php4apache2.dll"
            AddType application/x-httpd-php .php
            # 配置 php.ini 的路径
            PHPiniDir "C:/php/"

    『7』验证PHP是否正确安装
          
            --------------------------------------------
         
            <!-- begin of test.php-->
              <?php phpinfo(); ?>
            <!--end of script-->

            将上述代码复制到一个名为test.php的文件中,创建的 test.php 文件复制到 Web 服务器的 htdocs 目录下然后打开浏览器,输入 http://yoursite/test.php,界面上将显示PHP的版本信息。
      
           ---------------------------------------------

    『8』 设置Session存储路径。修改php.ini文件,设置session.save_path = C:\windows\temp


    4.安装MySQL4.1.16

    注意事项:

    『1』数据库编码选择utf-8编码,避免中文发生乱码现象。

    『2』root帐号是否选择修改密码。Root初始密码为空,在安装界面中默认是要修改密码的。

    『3』是否允许root远程访问数据库。安装界面默认不允许root帐号远程访问数据库。

    『4』如果服务器上启用了防火墙,那么需要在防火墙设置中添加一个例外端口,如端口号为3306。


    5.安装TestLink1.6.0

    在安装TestLink1.6.0前,需要完成以下步骤:

    『1』安装运行所需要的环境:Webserver、php4和MySQL。可以参照前面的介绍进行安装。
    『2』将TestLink安装包保存到服务器
    『3』将TestLink安装包解压缩到Apache2的htdocs目录下,并重命名为testlink


    安装方式:手工安装

    安装步骤:

    『1』打开命令行窗口,输入:mysql –uroot –proot(注:假设安装MySQL时将root帐户的密码修改为root),进入MySQL
    『2』创建数据库。mysql> create database testlink;
    『3』使用新创建的testlink数据库。mysql> use testlink;
    『4』创建用户,并赋予适当的权利。

          mysql> grant select,insert,update,alter,index,create,delete,drop on testlink.* to tl@"%" identified by "123456";
          mysql> grant select,insert,update,delete,index,drop,create,alter on testlink.* to tl@"localhost" identified by "123456";

    『5』修改root和新创建的tl帐号的密码。

          mysql> update mysql.user set password = OLD_PASSWORD('root') where host = 'localhost' and user = 'root';
          mysql> update mysql.user set password = OLD_PASSWORD('123456') where host = '%' and user = 'tl';
          mysql> flush privileges;

    『6』切换用户,使用tl用户。
    『7』创建表及数据
          
          source <Apache Install Dir>\ Apache2\htdocs\testlink\install\sql\testlink_create_tables.sql
          source <Apache Install Dir>\ Apache2\htdocs\testlink\install\sql\testlink_create_default_data.sql

    『8』创建TestLink数据库配置文件.参照下面的代码创建<testlinkdir>/config_db.inc.php文件

          <?php // Automatically Generated by TestLink Installer
            define('DB_TYPE', 'mysql');
            define('DB_USER', 'tl');
            define('DB_PASS', '123456');
            define('DB_HOST', 'localhost'); //建议使用IP地址来代替localhost
            define('DB_NAME', 'testlink');
          ?>

    『9』

    注意:无论是自动安装还是手工安装,安装成功后,要将安装目录下的install目录移走,并在系统中修改admin的初始密码。


    需要修改的文件

    1 testlink目录中的config.inc.php 【解决界面中文乱码】

          修改内容如下:

          /** GUI CHARSET
          * Chinese users must comment the next line and uncomment the second one
          * @todo translate Chinese from gb2312 to UTF-8
          **/
          #define('TL_TPL_CHARSET', DB_SUPPORTS_UTF8 ? 'UTF-8' : 'ISO-8859-1');
          define('TL_TPL_CHARSET', 'gb2312'); // Chinese charset

    2 mysql/lib/function目录中的logging.inc.php【解决输入中文乱码问题】

          修改内容如下

          找到do_mysql_query函数,在 $nQuery++;下面加上,下面一行:
         
          mysql_query("SET NAMES 'latin1'");

  • testlink 故障处理

    2009-05-07 12:13:37

    1. apache 服务无法启动~~很诡异,不知为何,apache服务启动不成功,提示:the request operation has   failed !

    解决办法: 怀疑是80端口被占用的问题,用netstat查看端口,但是没有发现被占用(netstat命令不太会用,回头还要好好研究研究,很有用的命令)  ,从网上查看解决办法,如下:在dos命令行中进入apache安装的bin 目录下,运行 httpd.exe -w -n "apache2" -k start (其中apache2 为本机真是的服务名,又是很诡异我的bin目录下没有httpd.exe 这个可执行程序,所以不能用这个名利来查看 http.conf 文件中具体是哪一行出错了),无奈之下,修改apache 的端口 ,修改如下:listen 80----->linsten 192.168.0.112:800,保存重启服务,居然成功~~~,apache服务算是启动起来了~~

    2. 访问路径出错:提示404错误

    错误的原因:前段时间安装了mantis,修改了apache的httpd.conf文件,修改了directory 的设置,导致页面直接跳转至mantis的页面,而mantis还没有安装成功,导致页面出现404错误。

    解决办法:修改 documentroot "E:/WWWROOT"

                 <directory  "E:/WWWROOT">

    至此:可爱的testlink页面又出现了!哈哈

  • 2009软件测试趋势<转>

    2009-04-30 16:28:48

    2009年悄悄地来到了,送走了艰难的、折腾的2008年。人们对2009年会充满更多的期望,9是一个吉祥的数字,天长地久,而且农历是牛年,牛年更牛。

         到了2009年,该为软件测试写点什么。顺民意,预测一下2009年国内软件测试的十大热点。
    1. 基于云的测试将是新的课题,包括测试方法、技术和工具。而且,云环境下的测试也是减少测试成本的一个途径。
    2. 基于Web 2.0/Ajax 的软件测试技术还是热点。Java/Javascript技术变化很快,系统开发框架也是层出不穷。
    3. 软件测试自动化也还是热点,包括更多的开源测试工具、自动化测试模型和框架、自动化测试的理论研究等。
    4. 移动测试:移动计算、移动应用用来,包括3G的应用,移动测试(包括无线应用系统的测试)将会受到更多的关注,是测试的一个新的增长点。
    5. 虚拟技术(如Citrix、微软、VMware的产品)的日益普及,越来越多的测试团队会将虚拟技术应用于测试环境创建、维护和优化,甚至是测试的执行。
    6. 安全测试:软件系统安全形势更加严峻,对安全测试会提出更高的要求,软件工具厂商会推出更多的安全测试工具。
    7. 软件外包测试:中国软件外包迎来发展良机和挑战,大型的软件外包企业发展更快,小的软件外包企业困难增大、被兼并的可能性增大,软件测试在外包企业得到更好的发展。
    8. 测试培训:软件测试培训的竞争将更加激烈,无论宣传还是市场争夺,将会进入白热化的地步。ISTQB将成为2009年国内培训市场的一颗新星。
    9. 课程与图书:有越来越多的大学,为研究生和本科生开设“软件测试”课程。软件测试的图书在2008年很热,在2009年热度,可能依旧不减。
    10. 测试会议和沙龙:全国性或国际性的软件测试会议会成为新的热点之一,软件测试的沙龙越来越多。
  • mysql 字符集问题(转)

    2009-04-16 17:35:42

    前一段时间,一直被mysql的字符集困扰,今天就这方面的知识总结一下.
    MySQL的字符集支持(Character Set Support)有两个方面:
         字符集(Character set)和排序方式(Collation)。
    对于字符集的支持细化到四个层次:
         服务器(server),数据库(database),数据表(table)和连接(connection)。


    1.MySQL默认字符集

      MySQL对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。

    但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?

        (1)编译MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
        (2)安装MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
        (3)启动mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集;
        (4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为character_set_server
        (5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
        (6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
        (7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;

    简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的所有栏位的都用 UTF-8 存储。


    2.查看默认字符集(默认情况下,mysql的字符集是latin1(ISO_8859_1)
    通常,查看系统的字符集和排序方式的设定可以通过下面的两条命令:
         mysql> SHOW VARIABLES LIKE 'character%';
    +--------------------------+---------------------------------+
    | Variable_name            | Value                           |
    +--------------------------+---------------------------------+
    | character_set_client     | latin1                          |
    | character_set_connection | latin1                          |
    | character_set_database   | latin1                          |
    | character_set_filesystem | binary                          |
    | character_set_results    | latin1                          |
    | character_set_server     | latin1                          |
    | character_set_system     | utf8                            |
    | character_sets_dir       | D:"mysql-5.0.37"share"charsets" |
    +--------------------------+---------------------------------+

      mysql> SHOW VARIABLES LIKE 'collation_%';
    +----------------------+-----------------+
    | Variable_name        | Value           |
    +----------------------+-----------------+
    | collation_connection | utf8_general_ci |
    | collation_database   | utf8_general_ci |
    | collation_server     | utf8_general_ci |
    +----------------------+-----------------+

    3.修改默认字符集
      (1) 最简单的修改方法,就是修改mysql的my.ini文件中的字符集键值,
    如    default-character-set = utf8
          character_set_server =  utf8
       修改完后,重启mysql的服务,service mysql restart
       使用 mysql> SHOW VARIABLES LIKE 'character%';查看,发现数据库编码均已改成utf8
    +--------------------------+---------------------------------+
    | Variable_name            | Value                           |
    +--------------------------+---------------------------------+
    | character_set_client     | utf8                            |
    | character_set_connection | utf8                            |
    | character_set_database   | utf8                            |
    | character_set_filesystem | binary                          |
    | character_set_results    | utf8                            |
    | character_set_server     | utf8                            |
    | character_set_system     | utf8                            |
    | character_sets_dir       | D:"mysql-5.0.37"share"charsets" |
    +--------------------------+---------------------------------+

       (2) 还有一种修改字符集的方法,就是使用mysql的命令
         mysql> SET character_set_client = utf8 ;
         mysql> SET character_set_connection = utf8 ;
         mysql> SET character_set_database = utf8 ;
         mysql> SET character_set_results = utf8 ;
         mysql> SET character_set_server = utf8 ;

         mysql> SET collation_connection = utf8 ;
         mysql> SET collation_database = utf8 ;
         mysql> SET collation_server = utf8 ;


    一般就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。解决方法是在发送查询前执行一下下面这句:

    SET NAMES 'utf8';

    它相当于下面的三句指令:
    SET character_set_client = utf8;
    SET character_set_results = utf8;
    SET character_set_connection = utf8;

    总结:
    因此,使用什么数据库版本,不管是3.x,还是4.0.x还是4.1.x,其实对我们来说不重要,重要的有二:
      1) 正确的设定数据库编码.MySQL4.0以下版本的字符集总是默认ISO8859-1,MySQL4.1在安装的时候会让你选择。如果你准备使用UTF- 8,那么在创建数据库的时候就要指定好UTF-8(创建好以后也可以改,4.1以上版本还可以单独指定表的字符集)
      2) 正确的设定数据库connection编码.设置好数据库的编码后,在连接数据库时候,应该指定connection的编码,比如使用jdbc连接时,指定连接为utf8方式.


    参考 "关中刀客" 的  <Mysql编码问题>,原文地址http://lixiang.cn/?q=node/98

  • 关于utf-8编码GBK

    2009-04-16 16:39:20

    通俗的说:utf-8 是基于unicode编码的,适用国际化场合,日文,韩文都可以用;而GBK和GB2312是国标,主要用于编码常用汉字,GB2312出来的比较早,所以有些汉字和繁体好像不支持,GBK是对GB2312的一个改进版本。

    专业的来讲:utf-8用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。      GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBK大。

    对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。

    各个国家和地区所制定的不同 ANSI 编码标准中,都只规定了各自语言所需的“字符”。比如:汉字标准(GB2312)中没有规定韩国语字符怎样存储。这些 ANSI 编码标准所规定的内容包含两层含义:
    1. 使用哪些字符。也就是说哪些汉字,字母和符号会被收入标准中。所包含“字符”的集合就叫做“字符集”。
    2. 规定每个“字符”分别用一个字节还是多个字节存储,用哪些字节来存储,这个规定就叫做“编码”。
    各个国家和地区在制定编码标准的时候,“字符的集合”和“编码”一般都是同时制定的。因此,平常我们所说的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字符的集合”这层含义外,同时也包含了“编码”的含义。
    “UNICODE 字符集”包含了各种语言中使用到的所有“字符”。用来给 UNICODE 字符集编码的标准有很多种,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。

  • testlink 的基本使用(转)

    2009-04-16 15:52:47

    以下属于本人摘录内容:

    使用 TestLink 进行测试管理

    developerWorks
     

    将此页作为电子邮件发送



    TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,可以将测试过程从测试需求、测试设计、到测试执行完整的管理起来,同时,它还提供了好多种测试结果的统计和分析,使我们能够简单的开始测试工作和分析测试结果。

    TestLink 是sourceforge的开放源代码项目之一。作为基于web的测试管理系统,TestLink的主要功能包括:

    • 测试需求管理
    • 测试用例管理
    • 测试用例对测试需求的覆盖管理
    • 测试计划的制定
    • 测试用例的执行
    • 大量测试数据的度量和统计功能。

    TestLink的最新版本是1.6.2。在本文接下来的部分里,作者将详细地介绍使用TestLink1.6.0来进行测试管理的完整过程。

    一、安装启动

    1、 在安装TestLink1.6.0前,需要完成以下安装运行所需要的环境:Webserver、php4和MySQL。笔者推荐的安装环境如下:

    • Apache HTTP Server 2.0.59
    • Php 4.4.1
    • Mysql 4.1.21

    2、 将 TestLink 安装包保存到服务器,解压缩到 Apache2 的 htdocs 目录下,并重命名为 testlink。

    3、 自动安装 TestLink

    • 在浏览器输入访问地址http://yoursite/testlink/install/index.php,如:http://localhost:80/testlink/install/index.php
    • 选择new install,在进入的页面中,输入登录MySQL的用户名和密码,如root。提示安装成功,详细的安装说明请参照http://blog.csdn.net/judyxm/archive/2006/01/12/577148.aspx

    4、 登录testlink首页面。系统为testlink创建一个默认管理员账号,用户名和密码为:admin/admin。你可以使用这个账号访问TestLink 。登录http://127.0.0.1:80/testlink/index.php,如果你看到的页面如下,就说明你已经安装成功了。







    回页首


    二、初始配置(设置用户、产品)

    1、 用户设置

    在TestLink系统中,每个用户都可以维护自己的私有信息。admin可以创建用户,但不能看到其它用户的密码。在用户信息中,需要设置Email地址,如果用户忘记了密码,系统可以通过mail获得。

    TestLink系统提供了六种角色,分别是admin、leader、senior tester 、tester、guest、testdesigner。相对应的功能权限如下:(详见图)

    • Guest:只有读的权限,适合于查看测试用例和测试需求,以及项目分析的用户。
    • Testdesigner:可以开展测试用例和测试需求的所有工作。
    • Tester:只能执行测试用例。
    • Senior tester:可以查看和维护测试用例,并且可以执行测试用例,但是不能管理测试计划、分配测试任务。
    • Leader:可以开展测试规格和测试需求的所有工作,还可以管理测试计划、分配测试任务。
    • Admin:维护产品,用户。

    同时,支持不同地域用户对不同语言的需求,可以根据用户的喜好对用户提供不同的语言支持。



    2、 产品设置

    TestLink可以对多个产品进行管理,Admin进行产品设置后,测试人员就可以进行测试需求、测试用例、测试计划等相关管理工作了。TestLink支持对每个产品设置不同的背景颜色,方便管理。







    回页首


    三、测试需求管理

    测试需求是我们开展测试的依据。首先,我们对产品的测试需求进行分解和整理。一个产品可以包含多个测试需求规格,一个测试需求规格可以包含多个测试需求;

    • 创建测试需求规格
      对测试需求规格的描述比较简单,内容包含名称、范围。
    • 创建测试需求
      测试需求内容包含:需求ID、名称、范围、需求的状态,以及覆盖需求的案例。 TestLink提供了两种状态来管理需求:正确的(Valid)、不可测试的(not testable)。

    • 从文件导入测试需求
      Testlink提供了从文件导入测试需求的功能,支持的的文件类型有csv和csv(door)两种。




    回页首


    四、测试用例管理

    TestLink支持的测试用例的管理包含三层:分别为Component、Category、Test case。我们把Component对应到项目的功能模块,而把Category跟每个模块的function对应,Test case就是写在这些Category里的。我们可以使用测试用例搜索功能从不同的项目、成百上千的测试用例中查到我们需要的测试用例,甚至于可以直接将别的项目里写的测试用例复制过来,这样就解决了测试用例的管理和复用问题。

    但是,还有一个问题没有解决,那就是与测试需求的对应问题。在测试管理中,测试用例对测试需求的覆盖率是我们非常关心的,从需求规格说明书中提取出测试需求之后, Testlink提供管理测试需求与测试用例的对应关系的功能。

    • 创建Component
      Component的内容包括:名称、介绍、范围、相关的内容、约束。
    • 创建Category
      Category的内容包括:名称、测试范围和目标、配置信息、测试数据、测试工具
    • 创建 Test case
      测试用例的要素包括:测试用例名称、简要说明、步骤、期望结果、关键字。



      创建好的测试用例树如下:



    • 建立测试用例和测试需求的覆盖关系。
      选中左侧用例树中的测试用例,再选择右侧对应的测试需求,进行Assign即可。





    回页首


    五、测试计划制定

    在TestLink系统中,一个完整的测试计划包括:

    • 测试阶段的名称(如集成测试阶段、系统测试阶段)
    • 里程碑(明确每个测试阶段的开始和截止时间,以及完成A、B、C三种优先级的比例)
    • Build版本(定义本测试计划中需要测试的build版本,一般以产品名+时间来命名。)
    • 安排测试人员 (从用户列表中选择本测试计划的参与人员。)

    • 测试用例集
      • 制定优先级规则。优先级分为A、B、C三级,系统会根据用户定义的重要级别和风险级别的组合来确定优先级的归属。重要级别分为三级:Low、Medium、High。风险级别包括三级:1、2、3。
      • 从测试用例中选择本测试计划的测试用例集
      • 设置每个测试用例Category的重要级别和风险级别
      • 设置每个测试用例Category的责任归属。从本测试计划的测试人员列表中选择每个Category的Owner,由他来负责和完成测试用例的执行。




    回页首


    六、测试执行

    执行测试用例,按照对每个build版本的执行情况,记录测试结果。测试结果有四种情况可以选择:

    Not Run:还没有执行过

    Pass:执行通过

    Failed:执行失败

    Blocked:由于其它用例失败,导致此用例无法执行,被阻塞。





    回页首


    七、测试结果分析

    TestLink根据测试过程中记录的数据,提供了较为丰富的度量统计功能,可以直观的得到测试管理过程中需要进行分析和总结的数据:

    • 测试用例对测试需求的覆盖情况:哪些需求已经通过测试,哪些需求未通过测试,哪些需求处于阻塞状态,哪些需求还未开始测试。

    • 针对每个版本的测试用例执行情况:
      1)各种优先级的测试用例执行的比率
      2)各个模块的测试用例执行的比率
      3)各个测试人员测试用例的执行比率

    • 每个版本的执行情况

    • 所有测试用例在不同build版本的执行情况,显示?的地方表示还未执行。

    • 阻塞的测试用例列表

    • 失败的测试用例列表

    • 每个测试用例的bug数
      如果和bug跟踪系统连接的话,在下表中可以统计出每个测试用例的bug的数目





    回页首


    八、与bug跟踪系统集成

    TestLink提供了与多种bug跟踪系统关联的接口配置,目前支持的bug系统有Jira、bugzilla、mantis。配置方法的相关文档参照帮助。





    回页首


    九、其它易用性功能

    TestLink还提供了很多易用性的功能,比如:

    • 从测试需求直接生成测试用例
    • 文档的导入、导出功能
    • 测试报告可以导出为excel
    • 支持设定keyword




    回页首


    总结

    TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,我们可以将测试过程从测试需求、测试设计、到测试执行完整的管理起来,同时,它还提供了好多种测试结果的统计和分析,使我们能够简单的开始测试工作和分析测试结果。

    本文中,作者根据自己的使用经验,详细演示了如何使用TestLink来进行测试管理的全部过程,简单的介绍了TestLink的使用方法。希望能够帮助大家学会使用TestLink的基本功能,同时,大家可以参考这个过程和TestLink的帮助文档来实现对测试过程的管理。



    参考资料

  • 安装testlink 心得

    2009-04-15 13:31:35

       我的testlink1.6.0 的安装环境为:windows XP + Apache 2.0.55 + php 4.4.1 + mysql 4.1.13 (注意不同的版本可能导致testlink部署不成功)

        1. 首先安装apache , 因为本机没有安装别的webserver,那么apache 的安装比较顺利,没有出现异常,安装成功后可以再任务栏中看到apache已经启动起来了,在ie地址栏中输入localhost 中出现apache的测试结果页面(该页面存放的位置是是在<apache_install_dir/htdocs目录下) PS:如果之前安装了别的webserver的话,就先把占用80端口的服务给停掉,然后安装完之后,把apache的端口改掉就好了<apacheDir> \Apache2\conf\httpd.conf

       2. 安装和配置php. 因为之前对php没有任何概念,所以配置的比较辛苦。

         
        2.1 
    解压php-4.4.1-Win32.zip d:\php(即php.exe位于d:\php\php.exe);
        2
    2 将位于 d:\php\dlls d:\php\sapi 文件夹中的所有文件移动到d:\php文件目录下;
        2.3 
    添加d:\phpd:php\PEAR windowspath环境变量;
        2.4  
    复制一份php.ini-recommended d:\php目录下,改名为php.ini
        2.5  
    修改httpd.conf(位于d:\apach2\conf\httpd.conf),找到下面字段:
              #Example:
              #LoadModule foo_module modules/mod_foo.so
             
    在以上字段下面加上:
              #
    PHP 4 用这两行:LoadModule php4_module "d:/php/php4apache2.dll"

    # 别忘了从 sapi 目录中把 php4apache2.dll 拷贝出来!

              AddType application/x-httpd-php .php

              # 配置 php.ini 的路径

              PHPIniDir "d:/php"
         2.6  
    DirectoryIndex index.html index.html.var改成DirectoryIndex index.php index.html index.html.var
         2.7 
    DocumentRoot "D:/Apache2/htdocs"改成DocumentRoot "D:/wwwroot"  <Directory "D:/Apache2/htdocs">改成<Directory "D:/wwwroot">
         2.8
    .修改d:\php\php.ini设置extension_dir="d:/php/extensions",去掉extension=php_gd2.dll前面的分号;
         2.9  
    写测试php文件:
             <?php
               echo phpinfo();
              ?>
           
    保存为d:\wwwroot\test.php,在浏览器里面输入http://localhost/test.php, 页面将会展示php的信息,表明安装成功。

         3. 安装mysql

             3.1 mysql有绿色版的和安装版的,我选择的是安装版的。安装完成之后,用root用户登陆,创建一个名为testlink的库。又创建一个tl的用户,grant select,insert,update,alter on testlink.* tl@”%” indentified by “111111”

           4 安装testlink

              4.1 testlink的安装包解压。

    4.2  TestLink安装包保存到服务器

    4.3 TestLink安装包解压缩到Apache2htdocs目录下,并重命名为testlink(我在此重新配置了虚拟目录为d\wwwroot

    4.4 testlink有两种安装方式,一种是手动安装,需要自己去编辑配置文件,执行存储过程,比较麻烦,我使用的是自动安装。在ie中输入:http://localhost/testlink/install/index.php进入到安装界面,点击new install,系统会自动检测安装的环境配置是否正常,如果正常就ok,在此你需要填写数据库的用户名和密码。

    大功告成!!!!!!!

    FAQ: 1 testlink 登录页面,输入用户名和密码:提示:access denied for user tl@”localhost”(using password YES)

     问题的原因:安装完成testlink之后,修改了mysqltl用户的密码,使得访问受限。

    解决办法:删掉wwwroot下的testlink目录,重新安装testlink,系统校验时用新的密码。

     

     


     

     

  • DOM对象概述

    2009-03-30 09:50:35

    一、DOM:Document Object Model(文档对象模型),是由W3C组织制定的一套操作文档的

    应用编程接口。

        W3C(World Wide Web Consortium):万维网联盟,该组织的主要工作是制定Web技术的标准,其中DOM只是其中的一项标准,其他的标准还有CSS,XML,XHML等等。

    二、DOM分类:Core DOM, HTML DOM等等。Core DOM在所有的标记语言上都可以使用所以可以利用Core DOM来操作HTML文档,当然我们也可以利用HTML DOM提供的一些特殊的方法来操作HTML文档,但是要注意HTML DOM只能针对HTML文档使用,而不能用于其他的文档,比如XML文档等等。现在我们一起来学习Core DOM里面的一些常用的属性和方法。

    三、在正式学习Core DOM的属性和方法之前,先来了解一下HTML文挡的一些基本概念。

        任何一篇HTML文档被浏览器加载到计算机的内存后,都会被解析为一颗内存树。这颗树是由一个一个的节点构成的。其中节点有12种类型,但是最常用的只有3种,分别是元素节点、属性节点、文本节点。例如:

      

        test.html

        <html>

                <head>

               <title>DOM Example</title>

                </head>

            <body>

                        <div style="width:800px">This is my first demo!</div>

                     <font color=”red”>hello world!</font>

            <body>

        </html>

       

    其节点分解图如下:

    Html:(元素节点)

    Body:(元素节点)

    head:(元素节点)

    title:(元素节点)

    DOM Example:(文本节点)

    div:(元素节点)

    font:(元素节点)

    属性节点:

    style="width:800px"

    文本节点:This is my first demo!

    属性节点:

    color=”red”

    文本节点:hello world!

    练习:

    <div id=”testdiv”>

          <p>This is <em>my</em> content.</p>

    </div>

    画出其节点分解图

    四、DOM里的常见属性和方法

    getElementById:根据Id获得某个元素

    getElementsByTagName:获得指定标签名的所有元素

    getElementsByName:获得制定名称的所有元素

    nodeName:节点的名字

    nodeValue:节点的值

    nodeType:节点的类型(元素节点:1;属性节点:2;文本节点:3)

    ownerDocument:指向这个节点所属的文档

    firstChild:指向第一个子节点

    lastChild:指向最后一个子节点

    childNodes:获得所有的子节点

    previousSibling:指向前一个兄弟节点

    nextSibling:指向下一个兄弟节点

    parentNode:指向父节点

    hasChildNodes:当前节点是否有子节点

    attributes:返回元素节点的所有属性(返回的是一个数组)

         

          append:附加,添加

    appendChild(node):将node添加到childNodes的末尾

    removeChild(node):将node从childNodes中删除

    replaceChild(newNode, oldNode):将childNodes中的oldNode替换成newNode

    insertBefore(newNode, refNode):在childNodes中的refNode之前插入newNode

          因为元素节点才有属性,所以只有元素节点才能调用

    getAttribute,setAttribute, removeAttribute

    getAttribute:获得元素的指定属性值

    setAttribute:为元素的指定属性赋值

    setAttribute(属性名,属性值)

    removeAttribute:删除元素的指定属性

    createElement:创建元素节点

    createTextNode:创建文本节点

    五、例子

    Document.getElementsByTagName(“p”);

    Document.getElementsByName(“myName”);

    document.getElementsByTagName(“ 标签名字”);

    <html>

          <head>

          </head>

          <body>

               <p name=”myName”>aaa<p>

               <p name=”myName”>bbb</p>

               <p name=”myName”>ccc</p>

          </body>

    </html>

  • 如何重装loadrunner(转)

    2009-03-17 17:29:57

    如何重新安装LoadRunner
     
      如果安装LoadRunner最新版本失败,相信很多朋友都会遇到重新安装不成功的烦恼。原因可能是多种情况,可能是早期的LoadRunner版本兼容性问题导致安装失败,也可能安装过程中弹出组件注册失败的各种错误。如果正常重新安装,只能先让LoadRunner充分卸载。
     
      可以按以下的步骤操作:。
     
      1.保证所有LoadRunner的相关进程(包括ControllerVuGenAnalysisAgent Process)全部关闭。
     
      2.备份好LoadRunner安装目录下测试脚本,这些脚本一般存放在LoadRunner安装目录下的“scrīpts”子目录里。
     
      3.操作系统控制面板的删除与添加程序中运行LoadRunner的卸载程序。如果弹出提示信息关于共享文件的,都选择全部删除。
     
      4.卸载向导完成后,按照要求重新启动电脑。完成整个LoadRunner卸载过程。
     
      5.删除整个LoadRunner目录。(包括Agent Process)。
     
      6.在操作中查找下列文件,并且删除它们。
     
      1wlrun.*
     

      2vugen.*
     

      7.运行注册表程序(开始- 运行-regedit)。
     
      8.删除下列键值:
     
      如果只安装了MI公司的LoadRunner这一个产品,请删除:
     
      HKEY_LOCAL_MACHINESOFTWAREMercury Interactive.
     

      HKEY_CURRENT_USERSOFTWAREMercury Interactive.
     

      否则请删除:
     
      HKEY_LOCAL_MACHINESOFTWAREMercury InteractiveLoadRunner.
     

      HKEY_CURRENT_USERSOFTWAREMercury InteractiveLoadRunner.

      9.最后清空回收站。
     
      如果你完成了以上操作,你就可以正常的重新安装LoadRunner.最好保证安装LoadRunner时关闭所有的杀毒程序。因为以往在安装LoadRunner时同时运行杀毒程序会出现不可预知的问题。

     

    License的问题: 
           
    卸载:

           
    因为之前一直没有分析正确问题的所在,所以卸载和重新安装loadrunner好几次,关于卸载的一些问题,及时你按照卸载工具卸载了loadrunner,下次装的时候还是会包license失效,解决方法,要登录到注册表regedit中。
           
    删除如下内容:
            HKEY_CLASSES_ROOT\Mercury.Lm70Control
            HKEY_CLASSES_ROOT\Mercury.Lm70Control.1
           
    同时删除

            Mercury.Lm70ControlMgr
            Mercury.Lm70ControlMgr.1

           然后就使用查找功能,搜索“Mercury”,发现有Lm70Contro字样的东西都要删除掉。

           最后删除下面内容:

            HKEY_CURRENT_USER\Software\Mercury Interactive
            HKEY_LOCAL_MACHINE\SOFTWARE\Mercury Interactive

           删除完成后,继续填入license,下一步,如果还是不行,继续去注册表中删除上边内容,知道没有了,就OK了。
           
    这些都是自己做过实际操作的内容,希望对大家有帮助。

    ()  卸载后,执行安装过程时出现" license security violation.Operation is not allowed "提示信息,安装失败
    解决方案:
    license清理工具:我的文件里面有:deletelicense.tar,自己去下

    http://bbs.51testing.com/viewthread.php?tid=84208

  • sql 示例

    2009-03-06 10:59:08

    /*查询实例*/
    create table com
    (
    cid int primary key,
    cname varchar(10),
    ctel varchar(20)
    )--公司表
    create table dept
    (
    did int primary key,
    dname varchar(10),
    dtel varchar(20),
    cno int references com(cid)
    )--部门表
    create table emp
    (
    eid int primary key,
    ename varchar(10),
    etel varchar(10),
    dno int references dept(did)
    ) --员工表
    /*插入数据*/
    insert into com select 1001,'sun','120'
     union select 1002,'IBM','130'
     union select 1003,'top','140'
     union select 1004,'MS','150'--union 集合运算符,批量操作
    insert into dept select 2001,'财务部','110',1001
     union select 2002,'行政部','120',1001
     union select 2003,'组织部','130',1001
     union select 2004,'人事部','140',1001
    insert into emp select 3001,'rose','110',2001
     union select 3002,'jack','120',2002
     union select 3003,'tom','130',2003
     union select 3004,'mike','140',2004
     union select 3005,'wilin','150',2002
    /*多表连接查询*/
    select * from dept left outer join emp on emp.dno=dept.did
    --左外连接,左表的所有数据以及右表的匹配数据,不匹配显示NULL
    
    select * from emp left outer join dept on emp.dno=dept.did left outer join com on dept.cno=com.cid
    --多表左连接
    
    /*右连接*/
    select * from com right outer join dept on com.cid=dept.cno
    --右表中的所有数据,左表中的匹配数据,左表中不能和右表匹配的数据‘不显示’,
    --右表中的数据如果在左表中找不到匹配数据,会在对应左表位置显示为NULL
    
    /*内连接*/
    create table employee
    (
    eid int primary key,
    ename varchar(10),
    reportto int references employee(eid)
    )
    insert into employee select 1001,'rose',null
     union select 1002,'will',1001
     union select 1003,'yao',1001
     union select 1004,'gigi',1002
    select * from employee e inner join employee m on m.eid=e.reportto
    --显示员工与其直接上级的对应关系
    
    /*聚合函数*/
    create table goods
    (
    gid int,
    gname varchar(10),
    price money
    )
    insert into goods select 1002,'accp',3456
     union select 1002,'bccp',56
     union select 1003,'cccp',456
    /*错误事例*/
    select gid ,avg(price) as avgp from goods
    /*正确事例*/
    select gid ,avg(price) as avgp from goods group by gid
    --单行与聚合不能一起使用,除非一句单行进行分组
    
    /*错误事例*/
    select * from goods where price=max(price)
    /*正确事例*/
    select * from goods where price=(select max(price) from goods)
    --聚合函数不能出现在where指令中
  • 【转】LR通用性能分析流程

    2008-11-10 11:36:23

    第一步:从分析Summary的事务执行情况入手
    Summary主要是判定事务的响应时间与执行情况是否合理。如果发现问题,则需要做进一步分
    析。通常情况下,如果事务执行情况失败或响应时间过长等,都需要做深入分析。
    下面是查看分析概要时的一些原则:
    (1):用户是否全部运行,最大运行并发用户数(Maximum Running Vusers)是否与场景设计的最大运行并发用户数一致。如果没有,则需要打开与虚拟用户相关的分析图,进一步分析虚拟用户不能正常运行的详细原因;
    (2):事务的平均响应时间、90%事务最大响应时间用户是否可以接受。如果事务响应时间过长,则要打开与事务相关的各类分析图,深入地分析事务的执行情况;
    (3):查看事务是否全部通过。如果有事务失败,则需要深入分析原因。很多时候,事务不能正常执行意味着系统出现了瓶颈;
    (4):如果一切正常,则本次测试没有必要进行深入分析,可以进行加大压力测试;
    (5):如果事务失败过多,则应该降低压力继续进行测试,使结果分析更容易进行;
    ......
    上面这些原则都是分析Summary的一些常见方法,大家应该灵活使用并不断地进行总结与完善,尤其要主要结合实际情况,不能墨守成规。

    第二步:查看负载生成器和服务器的系统资源情况。
    查看分析概要后,接下来要查看负载生成器和待测服务器的系统资源使用情况:查看CPU的利用率和内存使用情况,尤其要注意查看是否存在内存泄露问题。这样做是由于很多时候系统出现瓶颈的直接表现是CPU利用率过高或内存不足。应高保证负载生成器在整个测试过程中其CPU、内存、带宽没有出现瓶颈,否则测试结果无效。而待测试服务器,则重点分析测试过程中CPU和内存是否出现了瓶颈:CPU需要查看其利用率是否经常达到100%或平均利用率一直高居95%以上;内存需要查看是否够用以及测试过程是否存在溢出现象(对于一些中间件服务器要查看其分配的内存是否够用)。

    第三步:查看虚拟用户与事务的详细执行情况。
    在前两步确定了测试场景的执行情况基本正常后,接下来就要查看虚拟用户与事务的执行情况。对于虚拟用户,主要查看在整个测试过程中是否运行正常,如果有较多用户不能正常运行,则需要重新设计场景或调整用户加载与退出方式再次进行测试。对于事务,重点关注整个过程的事务响应时间是否逐渐变长以及是否存在不能正常执行的事务。总之,对每个用户或事务的执行细节都应该认真分析不可轻易忽略;
    example1:一个性能逐步下降的服务器,需要进一步分析其性能下降的原因【可以查找是否存在内存泄露问题】;
    example2:一个性能相对稳定的服务器,但是响应时间偏大,这时需要分析程序算法是否存在缺陷或服务器参数的配置是否合理。

    第四步:查看错误发生情况。
    整个测试过程中错误的发生情况也应该是分析的重点。下面是查看错误发生情况的常用准则:
    (1)查看错误发生曲线在整个测试过程中是否是有规律变化的,如果有规律通常意味着程序在并发处理方面存在一定的缺陷。图5-9所示的每秒缺陷数量曲线十分有规律,这是因为服务器定期生成缓存文件导致用户不能正常访问而产生的错误;
    (2)查看错误分类统计,作为优化系统的参考。例如对于Web性能测试,当出现瓶颈时往往需要查看服务器的错误统计信息结果:如果“超时错误”占到90%以上,可能需要提高硬件配置;如果较多的“内部服务器错误”,则可能是程序方面存在问题。

    第五步:查看Web资源与细分网页。
    本步骤仅适用于Web性能测试。查看Web资源图时,往往结合前面对虚拟用户以及事务响应时间的分析结果,重点分析服务器的稳定性。对于网页细分功能则遵循如下原则:首先分析从用户发出请求到收到第一个缓冲为止,哪些环节比较耗时;其次找出页面哪些组成部分对用户响应时间影响较大;当对页面的性能问题定位后,就可以采取相关的解决方案。

  • 学好英语口语的方法

    2008-11-05 09:01:14

    英语口语学习方法
    1.练口语一定要进行背诵,可选用新概念3,4册,每星期背一篇,争取背得滚瓜烂熟,但注意背的时候要让思维与表达同步。背完了还可进行逆向思维的锻炼,即看课文的中文解释脱口而出英语。但大家发现背诵多了后思维模式会有所固定,说英语时自己只能说以前背过的内容,不会自己去组织语言,这是由于缺乏英语思维的缘故。此时应开始复述练习。

    2.复述分三阶段,即初级,中级,高级复述。
    (1)初级复述指复述初级阶段,应先看一篇文章,将其看熟或读熟后,用自己的语言(of course in english)结合课文所学生词将其大意简单表达出来,第一遍可能不是很流利,可复述多次,直到流利为止。
    (2)复述中级阶段要开始电影的复述,即看完一部电影后,用自己的话说出其大意,遇到不会表达的应立即查汉英字典。电影复述分两种,概括复述和细节复述。概括复述只复述其电影的大意,一个初步的轮廓,故复述时间较短(10分钟内)。而细节复述则要复述电影的方方面面,除了情节外,还要复述电影中景色描写,人物的内心活动等,还可以加上自己对这部电影的观点看法等,总之要细,故复述时间较长,一般为30分钟左右。英文电影能流利复述后还可复述一些中文电影与小说,如三国演义,水浒传等,都是很好的素材。(复述中文电影和小说有局限性,所以可以选择性地去复述)。如能熟练复述电影,小说,且能把电影的细节复述与概括复述自由转换,那就可进入高级阶段了。
    (3)高级阶段的任务是复述一些哲理性,专业性很强的文章,还有一些说明文,议论文,如什么叫做生活,形而上学与辩证法,中庸之道对国民性的影响,光合作用原理,大脑皮层的回沟与人类智商的关系等,可结合参考书进行。在此推荐六级阅读100篇,里面有很多各种类型的文章,很适合作为高级复述的材料。复述能极大地锻炼我们的英语思维,且提高我们对主题英语的表达力(如演讲,辩论等)。

    3.但复述也有其缺点,那就是有些chinglish,且在生活口语表达上有欠缺。要改变这个,就要大量的去看电影,这里的看电影是指将电影放到dvd上去放,因为dvd可转换字幕,可一遍一遍得看,直至全部听懂为止。还可把有用的表达法写下来,有空时随时翻阅。也可将其声音转到磁带上,一有空就听。争取将其听烂,这样的话你就可将电影中一些有用的表达映入脑海,也可提高对电影方面的听力。注意,练电影应从连续剧开始,然后再一步一步的突破整版电影 。忘了说了,我们可进行大量地阅读,大量地看电影来作为复述的材料来源。
  • 应用程序错误的解决办法

    2008-11-03 17:27:23

    运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。 
    “0x????????”指令引用的“0x????????”内存。该内存不能为“read”。 
    “0x????????”指令引用的“0x????????”内存,该内存不能为“written”。 
    一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。 

    故障分析 

    硬件方面: 
    一般来说,内存出现问题的可能性并不大,主要方面是:内存条坏了、内存质量有问题,还有就是2个不同牌子不同容量的内存混插,也比较容易出现不兼容的情况,同时还要注意散热问题,特别是超频后。你可以使用MemTest 这个软件来检测一下内存,它可以彻底的检测出内存的稳定度。 
    假如是双内存,而且是不同品牌的内存条混插或者买了二手内存时,出现这个问题,这时,就要检查是不是内存出问题了或者和其它硬件不兼容。 

    软件方面: 
    先简单说说原理:内存有个存放数据的地方叫缓冲区,当程序把数据放在其一位置时,因为没有足够空间,就会发生溢出现象。举个例子:一个桶子只能将一斤的水,当放入两斤的水进入时,就会溢出来。而系统则是在屏幕上表现出来。这个问题,经常出现在windows2000和XP系统上,Windows 2000/XP对硬件的要求是很苛刻的,一旦遇到资源死锁、溢出或者类似Windows 98里的非法操作,系统为保持稳定,就会出现上述情况。另外也可能是硬件设备之间的兼容性不好造成的。 

    几个例子 

    例一:打开IE浏览器或者没过几分钟就会出现"0x70dcf39f"指令引用的"0x00000000"内存。该内存不能为“read”。要终止程序,请单击“确定”的信息框,单击“确定”后,又出现“发生内部错误,您正在使用的其中一个窗口即将关闭”的信息框,关闭该提示信息后,IE浏览器也被关闭。 
    解决方法:修复或升级IE浏览器,同时打上补丁。看过其中一个修复方法是,Win2000自升级,也就是Win2000升级到Win2000,其实这种方法也就是把系统还原到系统初始的状态下。比如你的IE升级到了6.0,自升级后,会被IE5.0代替/运用腾讯浏览器/ 

    例二:在windows xp下双击光盘里面的“AutoRun.exe”文件,显示“0x77f745cc”指令引用的“0x00000078”内存。该内存不能为“written”,要终止程序,请单击“确定”,而在Windows 98里运行却正常。 
    解决方法:这可能是系统的兼容性问题,winXP的系统,右键“AutoRun.exe”文件,属性,兼容性,把“用兼容模式运行这个程序”项选择上,并选择“Windows 98/Me”。win2000如果打了SP的补丁后,只要开始,运行,输入:regsvr32 c:\winnt\apppatch\slayerui.dll。右键,属性,也会出现兼容性的选项。 

    例三:RealOne Gold关闭时出现错误,以前一直使用正常,最近却在每次关闭时出现“0xffffffff”指令引用的“0xffffffff”内存。该内存不能为“read” 的提示。 
    解决方法:当使用的输入法为微软拼音输入法2003,并且隐藏语言栏时(不隐藏时没问题)关闭RealOne就会出现这个问题,因此在关闭RealOne之前可以显示语言栏或者将任意其他输入法作为当前输入法来解决这个问题。 

    例四:我的豪杰超级解霸自从上网后就不能播放了,每次都提示“Ox060692f6”(每次变化)指令引用的“Oxff000011”内存不能为“read”,终止程序请按确定。 
    解决方法:试试重装豪杰超级解霸,如果重装后还会,到官方网站下载相应版本的补丁试试。还不行,只好换就用别的播放器试试了。 

    例五:双击一个游戏的快捷方式,“Ox77f5cdO”指令引用“Oxffffffff”内存,该内存不能为“read” ,并且提示Client.dat程序错误。 
    解决方法:重装显卡的最新驱动程序,然后下载并且安装DirectX9.0。 

    例六:一个朋友发信息过来,我的电脑便出现了错误信息:“0*772b548f”指令引用的“0*00303033”内存,该内存不能为“written”,然后QQ自动下线,而再打开QQ,发现了他发过来的十几条的信息。 
    解决方法:这是对方利用QQ的BUG,发送特殊的代码,做QQ出错,只要打上补丁或升级到最新版本,就没事了。 

    例七:我的笔记本电脑用的XP系统,有时关闭网页时会弹出tbrowser.exe遇到问题需要关闭,然后有弹出0x03e7c738指令引用的0x03e7c738内存,该内存不能为read,请问是怎么回事? 
    解决方法:先查杀一下病毒,另外如果你安装了浏览增强之类的软件,请卸掉。 

    例八:从桌面或开始菜单中打开任何一个程序, 出现错误提示:"0x........"指令引用的"0x00000000"内存,该内存不能为"read"。省略号代表可变值。而从运行中打开程序没问题。 
    解决方法:运行regedit进入注册表, 在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks下,应该只有一个正常的键值"{AEB6717E-7E19-11d0-97EE-00C04FD91972}, 将其他的删除(默认键值当然不要删除)。 

    例九:我三个月前配了台机子。系统比较不稳定,三个月内已经重装过多次系统,四五天前刚装过系统,可是经常随机地出现Explorer-应用程序错误,“0x4a01259d“指令引用的“0x00000000"内存。该内存不能为“read"。要终止程序,请单击“确定“。要调试程序,请单击“取消”。如果点确定,windows桌面就不见了。这种问题在之前的系统也出现过,不知道是不是硬件的问题? 
    解决方法:内存的兼容性问题!遇到这类问题,用户可以自行打开机器把内存的位置调动一下,看问题是否可以解决,如果问题依旧,可与你的朋友调换内存使用。 

    通过上面的几个例子,可以看到,出现故障的原因有好多种,下面列出已经提到和有可能发生的原因,方便查阅。 

    问题产生原因原因--解决方法 

    内存条坏了--更换内存条 

    双内存不兼容--使用同品牌的内存或只用一条内存 

    内存质量问题--更换内存条 

    散热问题--加强机箱内部的散热 

    内存和主板没插好或和其它硬件不兼容等--重插内存或换个插糟 

    硬盘有问题--更换硬盘 

    驱动问题--重装驱动。如果是新系统,要先安装主板驱动 

    软件损坏--重装软件 

    软件有BUG--打补丁或用最新的版本。 

    软件和系统不兼容--给软件打上补丁或者试试系统的兼容模式 

    软件和软件之间有冲突--如果最近安装了什么新软件,卸载了试试 

    软件要使用到其它相关的软件有问题--重装相关软件。比如播放某一格式的文件时出错,可能是这个文件的解码器有问题 

    病毒问题--杀毒 

    杀毒软件与系统或软件冲突--由于杀毒软件是进入底层监控系统的,可能与一些软件冲突,卸载了试试 

    系统本身有问题--有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序,像SP的补丁,最好要打上。如果还不行重装系统或更换其它版本的系统了。 

    =============================================== 
    Windows系统出现内存错误 

    使用Windows操作系统的人有时会遇到这样的错误信息:“0X????????指令引用的0x00000000内存,该内存不能written”,然后应用程序被关闭。如果去请教一些“高手”,得到的回答往往是“Windows就是这样不稳定”之类的义愤和不屑。其实,这个错误并不一定是Windows不稳定造成的。本文就来简单分析这种错误的常见原因。 

    一、应用程序没有检查内存分配失败 

    程序需要一块内存用以保存数据时,就需要调用操作系统提供的“功能函数”来申请,如果内存分配成功,函数就会将所新开辟的内存区地址返回给应用程序,应用程序就可以通过这个地址使用这块内存。这就是“动态内存分配”,内存地址也就是编程中的“指针”。 

    内存不是永远都招之即来、用之不尽的,有时候内存分配也会失败。当分配失败时系统函数会返回一个0值,这时返回值“0”已不表示新启用的指针,而是系统向应用程序发出的一个通知,告知出现了错误。作为应用程序,在每一次申请内存后都应该检查返回值是否为0,如果是,则意味着出现了故障,应该采取一些措施挽救,这就增强了程序的“健壮性”。 

    若应用程序没有检查这个错误,它就会按照“思维惯性”认为这个值是给它分配的可用指针,继续在之后的运行中使用这块内存。真正的0地址内存区保存的是计算机系统中最重要的“中断描述符表”,绝对不允许应用程序使用。在没有保护机制的操作系统下(如DOS),写数据到这个地址会导致立即死机,而在健壮的操作系统中,如Windows等,这个操作会马上被系统的保护机制捕获,其结果就是由操作系统强行关闭出错的应用程序,以防止其错误扩大。这时候,就会出现上述的“写内存”错误,并指出被引用的内存地址为“0x00000000”。 

    内存分配失败故障的原因很多,内存不够、系统函数的版本不匹配等都可能有影响。因此,这种分配失败多见于操作系统使用很长时间后,安装了多种应用程序(包括无意中“安装”的病毒程序),更改了大量的系统参数和系统文件之后。 

    二、应用程序由于自身BUG引用了不正常的内存指针 

    在使用动态分配的应用程序中,有时会有这样的情况出现:程序试图读写一块“应该可用”的内存,但不知为什么,这个预料中可用的指针已经失效了。有可能是“忘记了”向操作系统要求分配,也可能是程序自己在某个时候已经注销了这块内存而“没有留意”等等。注销了的内存被系统回收,其访问权已经不属于该应用程序,因此读写操作也同样会触发系统的保护机制,企图“违法”的程序唯一的下场就是被操作终止运行,回收全部资源。计算机世界的法律还是要比人类有效和严厉得多啊! 

    像这样的情况都属于程序自身的BUG,你往往可在特定的操作顺序下重现错误。无效指针不一定总是0,因此错误提示中的内存地址也不一定为“0x00000000”,而是其他随机数字。 

    如果系统经常有所提到的错误提示,下面的建议可能会有帮助: 

    1.查看系统中是否有木马或病毒。这类程序为了控制系统往往不负责任地修改系统,从而导致操作系统异常。平常应加强信息安全意识,对来源不明的可执行程序绝不好奇。 

    2.更新操作系统,让操作系统的安装程序重新拷贝正确版本的系统文件、修正系统参数。有时候操作系统本身也会有BUG,要注意安装官方发行的升级程序。 

    3.试用新版本的应用程序。
  • I Kneel only to god ,but i do not see him here

    2008-10-31 09:44:15

    .M.

     

    Michael Scofield  
      头脑。我理解的头脑,应该是智慧+冷静。作为这部戏的主角,导演很慷慨的把两点品质都赋予了Michael,他的智慧和冷静是贯穿始终的,近乎完美。  
    Lincoln Burrows  
      勇气。在整部戏中,Lincoln应该是最有男子汉气质的人了。他明知有圈套还是要去救出儿子;当监狱暴乱他遭遇T-Bag一伙时,在没有退路的情况下勇敢的搏斗,毫无惧色。  
      如果你失去了财富,那你失去了一点;如果你失去了名誉,那你失去了很多;如果你失去了勇气,那你把一切都失去了。  
    Benjamin Franklin  
      责任。作为一名美国军人,当他发现虐囚事件时,勇敢的站出来揭露,结果被迫害(当然在中国,不要学他这一点,否则会死的很难看);当他为了生计去给别人开偷来的卡车被抓时,为了不让妻子担心和维护在女儿心中的形象,扔谎称在服役,而独自承受坐牢的痛苦;为了和妻女团聚,冒着极大的风险越狱。  
      有责任感的男人是值得信赖的,朋友也不会抛弃他,看看那些帮助他妻子和女儿逃亡的黑人铁哥们吧。  
    John Abruzzi  
      尊严。因为那句著名的临终遗言:“我只向上帝下跪,但他不在这里。”当你赢得了尊严,也就赢得了别人的尊重,包括你的对手。  
    David Apolskis  
      忠诚。虽然开始David处于对鸡奸的恐惧和汉堡的诱惑,曾经出卖过Michael他们,但当时他并不是他们中的一员,而且Michael警告T-Bag不要打他的主意这件事情,他似乎也并不知道。  
      在最后,当他被FBI抓获时,他没有背叛自己的朋友,毅然的选择了忠诚。  
      我们都看到了FBI给他开出的价码:不追究他的越狱行为,并送他到一所高级监狱去服刑。的确如果他供出Michael他们,这种“重大立功表现”是很有可能得到这些的。  
      我想当他敲开那个同车的漂亮姑娘的家门时,他一定知道这对他意味着什么,毕竟他一共只被判了2年的刑期。  

    Theodore Bagwell  
      信念。作为最不受欢迎的一个同伴,他一开始就是被越狱小组排斥的,他是以差点杀死JohnAbruzzi为代价才保住了这张票,而且刚逃出监狱,就失去了一只手。  
      两次失去左手的是他,两次得到巨款也是他,别人都有朋友、家人帮忙或陪伴,只有他是孤独的,但他就凭着求生的信念,勇敢的活了下来。  
    Fernando Sucre  
      浪漫。作为一个只剩下16个月刑期的犯人,他越狱的理由竟然是怀孕的女友要和别人结婚。当他骑着朋友的大哈雷去拉斯维加斯准备在婚礼上把女友抢回来时,每个女人也许都在想:我要是他的女友该多幸福啊。  
    Sara Tancredi  
      敬业。当监狱开始暴乱的时候,她不顾警卫队长的劝告,执意进去抢救一个中暑的犯人;当生命垂危的JohnAbruzzi被送往直升飞机时,是她陪在旁边焦急但是很不失冷静的不断呼喊:“John,坚持住,呼吸,坚持住,你会没事的。”在那一刻,我觉得这个恶贯满盈的犯人更象她的亲人,那也是Sara最美的时候。大家可以去看看,在第1季第13集一开始,那一刻,Sara就象一个天使。
    Charles Patoshik
           梦想:从一个极有希望的数学博士候补人沦为趋向两极的精神分裂?失去人权,被人所耍弄,末名就被Scofield 连续欺骗了2次,在忍受着世人不平等目光下,仍然能一本正经的说出:“荷兰,我要住在风车里”。为什么?THE DREAM~~~无论身处何时何地,不管遭受怎样折磨不幸,在心中总有个DREAM~~~
    CHARLES WESTMORELAND  
           爱:“我还能走一两步。。。何必呢?我不是为了自己,我是为了我女儿。”不得不说,作为一个囚犯,他再清楚不过自己给家人带来的痛苦,做了那么多年牢,对自己的女儿能有多少关怀?多少照顾?原本就快出狱的他干吗要冒生命危险越狱?一个身单力薄的老年人面对五大三粗的狱警,完胜几率实在小得可怜,后来虽然搞定了,但还是身负重伤,就当时来看,如果立即去找医生是不会OVER的,可惜那个纵横江湖的D.B. Cooper宁是忍着伤痛,只为最后见女儿一面

  • 两年测试经验的总结

    2008-10-31 09:41:22

    测试工作,有轻松的时候,也有繁忙的时候,但总的来说忙大于轻松。记得刚上手测试时,不知道从何下手?产品的操作手册和命令手册,最基础的DD,却是新人最好的参考资料;产品的操作手册和命令手册面向的就是用户,对于新产品,用户也是新人;产品资料,不仅仅是告诉你怎么使用它,里面还包括很多概念的阐述,功能的简介,和部分实现方式;对于测试来说,都是很重要的资料。
      看产品资料的同时,也要
    学习产品所基于的协议,标准之类的;协议,标准阐述了功能的实现方式;在动手测试之前,需要有一定的了解。此时,不需要深究;以后随着测试的深入,自然而然会有更深的理解。

      当中,还应该初步掌握测试平台,测试工具和测试方法;不然开始工作时,那些测试工具会让你傻眼;虽然当你会用后是贼简单的DD,但是没有用过却是不怎么好用的DD!

      新人上手后,会经历这样的一个过程:自己测试的模块怎么问题很少,而其他同事复杂的模块的问题那么多,为啥呢?实际上是这样的吗?答案是否定的!因为新人刚开始,对产品的熟悉程度还不够把产品里隐藏较深的问题发掘出来;还有,毕竟是新人,还没有形成适合自己的一套测试方法和测试理论,这些都是需要通过长期的经验积累和总结才可以形成的。这时,新人可以查看前辈们的问题单,看看前辈们是怎么样进行测试的,他们的测试过程,方法是怎么样的?对于新人来说,问题单是很多的学习资料。对于自己的测试方法和理论的形成有促进的作用。

      之后,信任就开始了漫长的测试执行阶段。测试是具有重复性的,相同的功能模块,相同的产品测试久了会有厌倦的心理;这时需要适当的调整下。可以和同事换模块测试;不仅可以避免测试的重复性,还可以学习新的技术,而因为人与人之间的测试方法和测试理论总是不一样的,一个模块让不同的人来测试,可以测试出不一样的问题来,对于产品的测试,更有覆盖性。

      而后,等测试时间的增长,测试人员除了测试执行外,其他测试工作会越来越多:测试设计(测试点,测试用例的写作)、外对测试用例的协作、各种开发\测试文档资料的评审、对外测试支持、自动化脚本的写作、实验局开局等等;虽然这些工作对于测试执行来说,没有了相对的重复性,但是这些工作的难度或者说是复杂度是大大增加了:因为测试执行只需要跟着测试点跑功能就成,而后面的这些,可没有那么简单。就举对外测试支持来说,外面运营商或是产家的测试注重实际运用的测试,而新研发出来的产品在公司内部注重功能测试,当然也是注重实际应用的;可是是新产品,外面还没有大规模应用的情况下,相对来说,实验室的测试和外面的测试差距还是蛮大的,所以需要测试人员反应要快,能够在短时间内搭建好测试平台和测试环境,对对面突发性的测试需要进行验证;如果在产品不支持的情况下,需要研究出其他的解决方案来满足外面测试需要的功能。

      对于测试人员来说,在测试过程中,或多或少总是会发现一些不是必现的问题。对测试人员来说,需要把问题出现时的现场在问题单中描述的很清楚,(配置文件,操作过程log,流量的类型和大小等等)而且尽可能的对发现问题进行复现操作,当然这个过程也需要把握时间,因为测试版本的时间本来就是比较赶的,不能消耗过多的时间在复现问题上。当整个版本在该论测试完成后,可以考虑集中时间对不能重现的问题进行复现工作。而在复现工作过程中,可以开发人员进行交流。因为开发人员对于产品实现的流程比较测试人员要熟悉,一般来说开发可以提出一些很有价值的观点,有利于问题复线工作。

      测试产品时(测试资料,评审文档),测试人员需要带着怀疑的观点去测试,这个观点往往对于测试新人来说,是比较困难的。新人很容易是带着去验证的观点去测试(总是认为产品,文档资料都是正确),所以发现的问题比较少;当如果换个角度,采用怀疑的观点去测试时,会发现很多原先没有发现的问题。特别是一些设计方面的问题。虽然功能是没有问题的,但是实现的过程或是方法却不是最优的,这些问题是新人很难发现的,当然也是需要一定的经验积累的。

Open Toolbar