发布新日志

  • 接口测试在淘宝的应用(转)

    xiongxiongyym 发布于 2009-02-04 17:17:28

     一、为什么做接口测试

      目前的BS结构的软件层级体系大致如下,对此的功能测试也主要是针对表现层的内容,下图灰色的部分是未测试的内容(占80%的比例)。

      

      对于较小型的网站,通过表现层的测试,路径会大致渗透到下面各个层级。但是一个超大型的网站,其层级会有4层甚至更多,每一个层级又可能包含相互关联的不同业务。如同一个城市的自来水系统,如果只测试水龙头里面是否有水,水质是否优良,这显然远远不够。要想点办法对此进行改进,设想如下图。

      

      对于底下几层,采用单元测试,持续集成;对于表现层,采用QTP和类似的工具,编写测试代码,设计测试条件,做到大部分的自动化测试。这样以来,测试的覆盖率会大大提升(灰色部分占20%左右)。如此测试,从技术上来看并没有太大的障碍,从成本上来讲,就是需要大批的能写测试代码的技术人员,这些人员的技能丝毫不逊于开发人员,他们需要完成的测试代码量要高于软件本身的代码量。而一旦自动化的功能测试体系建立起来,在软件的重构和发展的过程中,测试的效率会大大提高。一个成熟的测试体系运转起来就像下图所示了。前图是测试的几个纬度,后图是功能测试的几个组成部分。

      

      

      而整个测试的流程大致如下:(其中安全测试是功能测试的一部分)

      

    二、选用什么样的测试工具

      基于Java技术的软件代码,有一些比较成熟的测试框架,Junit、Dbunit等等。Junit已经有了很长时间的应用,在JDK1.5之后,其推出了基于annotation的Junit4.4版,使单元测试的代码更加简洁,开发人员可以更加专注于对接口中业务逻辑的校验。Dbunit是一个测试数据的框架,它能够使用excel或xml文件里的数据来对数据库做插入,对比,删除等逻辑,可以完成数据的生成和校验。Junit和Dbunit结合使用就可以完成业务逻辑和数据方面的校验。

      当一个项目的测试代码编写完毕的时候,我们需要对此进行持续集成,业界总是有一些慷慨无私的人来帮助可爱的开发人员,CruiseControl是一个不错的持续集成工具。每当有代码提交到版本管理工具的时候,它都不知疲倦的执行测试代码,通过邮件和IM软件告诉我们,哪些通过测试了,哪些发现问题了。这个时候你可以相当有自信的说“一切尽在掌握”,这神情会比刘德华都要帅。

      但对于一个大型的网站来说,其单元测试也非测试“helloWorld”一样如此简单,最大的难题是解决代码之间的依赖性。淘宝网主演主要的架构是基于 Spring的,一般的系统分至少三层,业务层、逻辑层、持久层。spring架构下这三层通过配置文件来装载起来,持久层依赖于自己的配置文件、逻辑层依赖于自己的和持久层的、业务层依赖于三种配置文件。如果有发送邮件,调用外部接口等,还需要相应的配置文件和接口服务器。这种情况下,要做一个单元测试,需要配置很多东西,任何一个配置有误都无法启动spring容器,而且这些配置都在xml文件里面,内容是否正确无法自动检测。要做业务层的测试,不是一个容易的事情。其中持久层的东西相对固定,需要配置的文件也较少,相比较而言,这一层测试很容易完成,逻辑层和业务层的测试难度成指数性增长。

      三、需要什么样的工作流程

      我们不要提测试驱动开发,或者TDD之类的名词,适合我们的就是最好的,或许我们可以成为测试开发并驾齐驱。接口测试的工程师我们叫做测试开发工程师,在项目启动的时候就要参与进来,要做需求的分析,系统设计,在开发人员编写功能代码的同时,我们在编写测试代码,无所谓谁快谁慢,写好功能代码就测试,或者写好测试代码就写功能实现。当编码完毕的时候,也是接口测试完毕的时候,然后测试开发工程师写一份测试报告,送给功能测试工程师,告诉他们哪些东西我们测试过,哪些东西需要重点关注。

      

      当系统发布运行之后,功能修改的时候我们修改测试代码,平时我们就重点关注CruiseControl,一旦它报错,那一定是有些代码出问题了,Just fix it!

      四、需要什么样的规范

      Java编码规范想必都比较清楚,OK,去做好它。另外请在注释里面写清楚测试的场景,输入输出,异常情况。测试代码的可读性一定要高于功能代码。

      五、到底是单元测试还是接口测试

      OK,看这么多想必都搞糊涂了,我们测的是接口,写的是单元测试的代码,爱叫什么是什么吧。

  • QTP与word、excel、txt

    liuxueyi 发布于 2010-11-27 20:51:13

    读文件代码参考:

    '强制打开变量声明开关

    Option Explicit

    Const ForReading = 1,ForWriting = 2,ForAppending = 8

    Dim fso,fil

    '创建fso对象

    Set fso=CreateObject("Scripting.FileSystemObject")

    '打开文件

    Set fil=fso.OpenTextFile ("d:\calc.txt",ForReading)

    '读取文件内容

    Do While not fil.AtEndOfStream

             MsgBox fil.ReadLine

    Loop

    '关闭文件

    fil.Close

    '释放文件

    Set fil=Nothing

    Set fso=Nothing

     

    读取一个excel文件中每一个单元格的内容

    Option Explicit

    Dim xlApp,xlWorkBook,xlWorkSheet

    '创建Excel应用程序对象

    Set xlApp=CreateObject("excel.application")

    xlApp.Visible=True

    '打开指定的工作簿

    Set xlWorkBook=xlApp.Workbooks.Open("d:\calc.xls")

    '指定工作表

    Set xlWorkSheet=xlWorkBook.Sheets("Sheet1")

    '获取有效区域的行数和列数

    Dim iRowCount,iColumnCount,i,j

    iRowCount=xlWorkSheet.UsedRange.Rows.Count

    iColumnCount=xlWorkSheet.UsedRange.Columns.Count

    For i=1 To iRowCount

             For j=1 To iColumnCount

                       MsgBox xlWorkSheet.Cells(i,j)&vbNewLine

             Next

    Next

    '关闭工作簿

    xlWorkBook.Close

    '退出excel程序

    xlApp.Quit

    '释放excel资源

    Set xlWorkSheet=Nothing

    Set xlWorkBook=Nothing

    Set xlApp=Nothing

     

    Word读写实例

    1:

    '打开word应用程序

    Set WordApp = createobject ("word.application")

    oWordApp.visible=true

    msgbox "word应用程序被打开"

    oWordApp.quit

     

    2:

    '创建一个新文档

    Set WordApp = createobject ("word.application")

    Set WordDoc =oWordApp.Documents.Add

    '文件另存为a.doc

    oWordDoc.SaveAS "c:\a.doc"

    msgbox "文件创建成功"

    oWordDoc.close

    oWordApp.quit

    Set WordDoc =nothing

    Set WordApp =nothing

     

    3.1

    ''一。打开一个文档

    Set WordDoc = getobject ("c:\a.txt")

    Set WordApp = oWordDoc.Application

    oWordApp.visible =true

    msgbox "文档已经打开!"

     

    3.2

    '二。打开一个文档

    '打开word应用程序

    Set WordApp = createobject ("word.application")

    oWordApp.visible=true

    msgbox "word应用程序被打开"

    Set oWordDoc =oWordApp.Documents.open("c:\a.doc")

    msgbox "文档已经打开"

    oWordDoc.close

    oWordApp.quit

    Set WordDoc= nothing

    Set WordApp =nothing

     

    4:

    'word中写入内容

    editword  "c:\a.doc","QTPword的操作"

    Function editword (filepath,content)

                  Set WordApp = createobject ("Word.application")

                  wordapp.Visible = true

                  Set doc=WordApp.Documents.Open(filepath)

                  doc.Content =content

                  doc.Save

                  Set doc=nothing

                  Set WordApp = nothing

                  ReadWord =true

    End Function

     

     

    5向一个文档中插入表格
    EditWord "c:\a.doc"

     

    Function EditWord(filepath)

     

        Set WordApp = CreateObject("Word.application")

        oWordApp.visible = True

        Set WordDoc = oWordApp.Documents.Open(filepath)

        oWordDoc.Range.Select

        Set WordSet = oWordApp.Selection

        With oWordSet

            Set NewTable = .Tables.Add(.range, 5, 3)

            oNewTable.Range.Font.size = 8

            i = 1

            oNewTable.Cell(i, 1).Range.Text = "i"

            oNewTable.Cell(i, 2).Range.Text = "i*2"

            oNewTable.Cell(i, 3).Range.Text = "i*3"

     

            For i =2 to 5

                 oNewTable.Cell(i, 1).Range.Text = i-1

                 oNewTable.Cell(i, 2).Range.Text = (i-1)*2

                 oNewTable.Cell(i, 3).Range.Text = (i-1)*3

            Next

           

        End with

                  oWordDoc.save

                  oWordApp.quit

                  Set WordDoc = nothing

                  Set WordApp = nothing

     

       

       end function


    6
    word中插入图片

    EditWord "d:\testbbk.doc","d:\test.bmp"

    Function EditWord(filepath, filepic)

        Set WordApp = CreateObject("Word.application")
        oWordApp.visible = True
        Set WordDoc = oWordApp.Documents.Open(filepic)
        oWordDoc.Range.Select
        Set WordSet = oWordApp.Selection
        With oWordSet
            Set Img = .InlineShapes.AddPicture(filepic, False, True)
            oImg.Width = oImg.Width*0.50
            oImg.Height = oImg.Height*0.50
            '
    中间对齐
            oImg.Range.ParagraphFormat.Alignment = 1
            .TypeParagraph
            .TypeText "qtp
    学习之对word的基本操作"
            .TypeParagraph
       
        End with
       
       end function

    7.
    word中插入文本

    EditWord "C:\testbbo.doc", "QTP
    学习之word"

    Function EditWord(filepath, content)

        Set WordApp = CreateObject("Word.Application")

        oWordApp.Visible = True

        Set doc = oWordApp.Documents.Open(filepath)

        doc.Content = content

        doc.save

        Set doc = Nothing

        Set WordApp = Nothing

        ReadWord = True

     

    End Function

     

     

  • 使用LR测试Oracle数据库经验总结

    senciya 发布于 2010-03-10 12:57:58

    1、我将登录SQL*Plus的操作也录制在Action中,添加迭代运行会报错,提示如下:

    Action.c(11): Error: lrdo_server_attach: "OCIServerAttach" return-code=OCI_ERROR, error-code=24309:
    Action.c(11): Error:     ORA-24309: 已连接至服务器
    Action.c(11): server_attach: ERROR, return-code=LRDE2009.  ServerHandle=OraSrv1, ServerID="customs"
    Abort was called from an action.

    解决办法:1、将登陆SQL*Plus的操作录制在vuser_init中;2、同时录制退出SQL*Plus的操作

    2、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
    Action.c(37): Error: lrdo_ora8_exec: "OCIStmtExecute" return-code=OCI_ERROR,error-code=00054:

    解决方法:把lrd_ora8_exec(OraSvc1, OraStm<i>, 0, 0, &uliRowsProcessed, 0, 0, 0, 0, 0);
    改为:lrd_ora8_exec(OraSvc1, OraStm<i>, 0, 0, &uliRowsProcessed, 0, 0, 0, 0, 1);

    3、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
    Action.c(13): Error: lrdo_server_attach: "OCIServerAttach" return-code=OCI_ERROR, error-code=12514:

    解决办法:开启数据库服务器监听,启动数据库服务器。

    4、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
    Action.c(26): Error: C interpreter run time error: Action.c (26): Error -- Unresolved symbol : lrd_session_begin.

    解决办法:在vuser_init中添加 #include "lrd.h"

    5、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
    Starting iteration 1.
    Starting action Action.
    Action.c(13): Error: lrdo_server_attach: "OCIServerAttach" return-code=OCI_ERROR, error-code=12541:
    Action.c(13): Error: ORA-12541: TNS: 没有监听器
    Action.c(13): server_attach: ERROR, return-code=LRDE2009. ServerHandle=OraSrv1, ServerID="lr"

    解决办法:启动数据库服务器,开启listener。如果需要使用isqlplus的话,开启服务:$isqlplusctl start

    6、测试压力上来以后,会有好多Vuser出现Error,具体报错如下:
    Action.c(13): Error: lrdo_server_attach: "OCIServerAttach" return-code=OCI_ERROR, error-code=12514:
    Action.c(13): Error: ORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME
    Action.c(13): server_attach: ERROR, return-code=LRDE2009. ServerHandle=OraSrv1, ServerID="lr"

    解决办法:检查压力机Oracle客户端解析文件tnsnames.ora,确保正确配置了这个文件。
    检查测试的数据库服务器,确保正确配置了监听,并已经开启。

    7、使用Controller产生负载,最后测试数据只有以下4条性能曲线:Running Vusers、Trans Response Time、Trans/Sec(Passed)、Total Trans/Sec(Passed)、其余的Throughput、HTTP Responses per Second、Connections等等性能统计项均显示为灰色,没有统计数据

    解决办法:因为sqlplus.exe是一个win32程序,那么在测试的过程中只统计上面的四项,它不会统计Throughput这些Web测试才有的性能曲线。
    所以,如果想对数据库服务器测试的更全面,这个时候就要使用isqlplus来发出查询。
    1)在DB server上启动isqlplus服务:isqlplusctl start
    2)启动VuGen,在客户端(压力机)启动isqlplus的Web页面
    3)输入用户名、密码,我这里采用scott/tiger@lr
    OK!录制完成之后,产生压力执行测试。顺利结束之后,可以看到如下曲线已经抓取出来了:
    Throughput、HTTP Responses per Second、Connections
    剩余的工作就是如何分析性能数据了。

  • BugFree安装全部流程(mysql+apache+php+bugfree)

    look心 发布于 2010-04-19 16:58:55

    基础环境是最小化安装的Red Hat Enterprise AS4 U2(600兆左右)
    需要安装编译运行库gcc RPM包。
    “+”主要安装包 “-”需要依赖的包
    ----------------------------------mysql
    +gcc-3.4.4-2.i386.rpm
    -cpp-3.4.4-2.i386.rpm
    -glibc-devel-2.3.4-2.13.i386.rpm
    -glibc-headers-2.3.4-2.13.i386.rpm
    -glibc-kernheaders-2.4-9.1.98.el.i386.rpm
    +gcc-c++-3.4.4-2.i386.rpm
    -libstdc++-devel-3.4.4-2.i386.rpm
    ----------------------------------php
    +flex-2.5.4a-33.i386.rpm
    一、先安装mysql-4.0.25
    软件获取:
    http://www.mysql.com/downloads/index.html
    安装步骤:
    将包放置/usr/src
    tar zxvf mysql-4.0.25.tar.gz
    cd mysql-4.0.25
    ./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql
    make
    make install
    复制配置文档
    cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
    #prefix=/usr/local/mysql mysql安装的目标目录
    #sysconfdir=/etc my.cnf配置文件的路径
    #localstatedir=/var/lib/mysql 数据库存放的路径
    安装完以后要初始化数据库,当然你是升级的话不用做这步;
    /usr/local/mysql/bin/mysql_install_db
    如果系统没有mysql这个用户的话,最好做以下这步:
    useradd -M -o -r -d /var/lib/mysql -s /bin/bash -c "MySQL Server" -u 27 mysql
    然后我启动mysql
    /usr/local/mysql/bin/mysqld_safe &
    ok,先看看mysql能否正常工作
    mysql -u root mysql
    初始数据库没有口令,修改口令用:
    mysqladmin -u root -p '123456'
    一般情况下都是不能正常链接数据库,错误提示一般为:
    ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    ERROR 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)
    其实网上大家问的最多的都是整个问题,说什么链接不到mysqld.sock,其实大家不妨看看mysql的错误日志就
    明白怎么回事,我这里的错误日志是在
    /var/lib/mysql/*.err 你会发现mysql只所以不能启动,是因为/var/lib/mysql的权限不允许mysql服务访问,
    英文mysql默认是调用mysql用户来启动服务的,好了,既然知道是什么原因找到不能启动,那就简单了。我们
    只要
    chown -R mysql:mysql /var/lib/mysql 就行,如果还是启动不了,再慢慢调试权限,反正一般启动不了都是
    权限的问题。
    如果大家还是不能启动不了的话,那就用我的比较繁琐的权限的设置,反正我每次都是这么做的,一般不会有
    问题,见下:
    chown -R root /usr/local/mysql
    chgrp -R mysql /usr/local/mysql
    chown -R root /usr/local/mysql/bin
    chgrp -R mysql /usr/local/mysql/bin
    chgrp -R mysql /var/lib/mysql
    chmod 777 /var/lib/mysql
    chown -R root /var/lib/mysql/mysql
    chgrp -R mysql /var/lib/mysql/mysql
    chmod 777 /var/lib/mysql/mysql
    chown -R root /var/lib/mysql/mysql/*
    chgrp -R mysql /var/lib/mysql/mysql/*
    chmod 777 /var/lib/mysql/mysql/*
    chmod 777 /usr/local/mysql/lib/mysql/libmysqlclient.a

    做完上面的步骤,然后把你编译目录的一个脚本COPY过去
    cp support-files/mysql.server /etc/rc.d/init.d/mysqld
    chkconfig --add mysqld
    用ntsysv设置使mysql每次启动都能自动运行。
    好了,至此mysql安装完毕,你可以这样起动你的mysql服务
    /etc/rc.d/init.d/mysqld start
    下面这步比较关键,
    ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
    ln -s /usr/local/mysql/include/mysql /usr/include/mysql
    大家可以不做这步,大可以在编译其他软件的时候自定义myslq的库文件路径,但我还是喜欢把库文件链接到默
    认的位置,这样你在编译类似PHP,Vpopmail等软件时可以不用指定mysql的库文件地址。
    二、安装apache_1.3.36。我这里讲的都是采用DSO动态编译的方法编译Apache.
    至于有关apache的编译方法,可以参考我以前的文章《apache的静态/动态编译在apache+php+mysql的应用》
    http://www.5ilinux.com/apache01.html

    软件获取:
    http://httpd.apache.org/
    将包放置/usr/src
    tar zvxf apache_1.3.36.tar.gz
    cd apache_1.3.36
    修改src/include/httpd.h 增大最大线程数
    #define HARD_SERVER_LIMIT 256
    改成
    #define HARD_SERVER_LIMIT 2560
    保存退出编译apache
    ./configure --prefix=/usr/local/apache --enable-module=so --enable-module=rewrite --enable-
    shared=max --htdocsdir=/var/www
    make
    make install
    #这里我们通过enable-module参数告诉设置脚本,我们需要启动so和rewrite模块,so模块是用来提DSO支持的
    apache核心模块,而rewrite模块则是用意实现地址重写的模块,由于rewrite模块需要DBM支持,如果在初次安
    装时没有编译进apache,以后需要用到时需要重新编译整个apache才可以实现。为此除非你可以确定以后不会
    用到rewrite模块,否则还是建议你在第一次编译的时候把rewrite模块编译好。
    enable-shared=max 这个参数的作用时编译apache时,把除了so以外的所有apache的标准模块都编译成DSO模块
    。而不是编译进apache核心内。
    好了安装apache很简单的哦,启动apache看看
    /usr/local/apache/bin/apachectl start
    /usr/local/apache/bin/apachectl graceful
    然后用ie看http://你的服务器地址。应该能看到熟悉的apache羽毛标志。
    三、安装PHP4.3.9
    软件获取:
    http://www.php.net/downloads.php
    将包放置/usr/src
    tar zvxf php-4.3.9.tar.gz
    cd php-4.3.9
    ./configure \
    --prefix=/usr/local/php \
    --with-mysql=/usr/local/mysql \
    --with-apxs=/usr/local/apache/bin/apxs
    make
    make install
    参数解释--with-mysql=/usr/local/mysql指向你安装mysql的路径。--with-apxs指向apache的apxs文件的路径

    vi /usr/local/apache/conf/httpd.conf
    查找
    在此范围添加
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    然CPOPY PHP的配置文件
    cp /usr/src/php4.3.9/php.ini.dist /usr/local/php/lib/php.ini
    修改php.ini文件
    register_globals = On
    ok!重新启动一下apache服务器
    /usr/local/apache/bin/apachectl restart
    然后写个php测试页info.php:内容如下

    四、BugFree 1.0
    下载BugFree
    http://bugfree.1zsoft.com
    将包放到/usr/src下
    unzip BugFree.zip
    mv BugFree /var/www/
    修改权限
    chmod -R 777 /var/www/BugFree
    创建数据库
    mysql> create database BugFree;
    为BugFree 库分配访问权限。默认的可以使用root帐号。
    mysql> GRANT ALL PRIVILEGES ON BugFree.* TO
    [email=root@localhost]root@localhost[/email]
    IDENTIFIED BY '123456' WITH GRANT OPTION;
    建立各个表
    mysql -u root -p 123456 BugFree
    访问install.php页面,生成ConfigBug.inc.php文件
    访问http://服务器域名或IP/BugFree/install.php页面,根据页面提示填写参数,生成BugFree的配置文件,
    将其保存到Include目录下面,命名为ConfigBug.inc.php文件。

    用管理员账号登录,建立初始的项目,建立权限系统。

    命令方式:
    数据的简单备份还原
    mysqldump -u root -p123456  BugFree > BugFree-200070301.sql

    mysql -u root -p123456  BugFree

    注:123456 是口令,与-p之间没有空格
    phpmyadmin:

    数据的导入导出,窗口操作,略。。。

    注:phpmyadmin安装时将phpmyadmin/libraries/config.default.php 复制一份命名config.inc.php 修改其中登陆mysqlserver的用户名及密码。




    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15901/showart_248864.html
  • Linux中JDK的安装和配置方法

    zhangtieing 发布于 2007-04-23 00:08:06

    安装JDK

    sun网站上直接下载JDKhttp://java.sun.com/j2se/1.4.2/download.html 提供了两个下载:

    1
    RPM in self-extracting file (j2sdk-1_4_2_04-linux-i586.bin, 32.77 MB) 这个是自解压的文件,在linux上安装如下:

    # chmod u+x ./j2sdk-1_4_2_04-linux-i586.bin

    # ./j2sdk-1_4_2_04-linux-i586.bin

    在按提示输入yes后,jdk被解压到./j2sdk1.4.2_04目录下。为与下面2JDK安装路径一致,我们进行下列操作,/usr/java下建立安装路径,并将文件考到该路径下:

    # mkdir /usr/java

    # cp -fr ./j2sdk1.4.2_04 /usr/java



    2
    RPM in self-extracting file (j2sdk-1_4_2_04-linux-i586-rpm.bin, 32.77 MB)这个也是一个自解压文件,不过解压后的文件是j2sdk-1_4_2_04-linux-i586-rpm包,执行rpm命令装到linux上就可以了。安装如下:

    #chmod u+x ./j2sdk-1_4_2_04-linux-i586-rpm.bin

    # ./j2sdk-1_4_2_04-linux-i586-rpm.bin

    # rpm -ivh j2sdk-1_4_2_04-linux-i586-rpm

    安装软件会将JDK自动安装到 /usr/java/j2sdk1.4.2_04目录下。

    二、配置环境变量

    1.
    修改用户环境变量

    假设使用java的用户为 kunp,编辑该用户的.bashrc文件进行环境变量设置。

    # vi /home/kunp/.bashrc

    .bashrc文件中加入:

    export JAVA_HOME=/usr/java/j2sdk1.4.2_04
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    2.
    修改所有用户的环境变量

    # vi /etc/profile

    在该文件中加入:

    export JAVA_HOME=/usr/java/j2sdk1.4.2_04
    export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
    export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

    一定要在CLASSPATH路径中加入$CLASSPATH:

  • 即使工作条件很艰苦,即使公司管理很糟糕,这都不是我们让自己心情恶劣的理由。

    jerrygu625 发布于 2010-04-07 13:52:04

    陈奕清 

    听冯小刚说:只要你还在上班,你就不能算是一个成功人士,以为是在嘲笑上班族都是失败者。听一位80后女孩宣称自己从不受上班之苦,又以为是豪门千金才有的特权。细问之下,原来人家的意思是:我做的本来就是我最喜欢做的事,所以感觉不出来自己是在上班,觉得自己每天都玩得很开心,月末居然还可以领钱,实在太划算了!想起席慕容家里那位因为只爱洗衣服,而拒绝顺便做保洁赚外快的小时工,再想起某位作家的话:应该把事业上升到游戏的高度,任何事情觉得不好玩,就一定玩不好。才明白他们说的,原来都是敬业不如乐业的道理。

    一位拍摄野生动物的摄影师,在被问及如何克服种种艰辛坚持工作时,不以为然地摇摇头说:所谓艰苦完全是一种主管感受,我从来没有觉得自己的工作苦,更没有觉得需要坚持。这里有外人无法体会的乐趣,尤其当我蛰伏数日,终于捕捉到稍纵即逝的珍贵画面时,那种幸福难以言传,何来艰辛和痛苦?要让自己不上班,也就是感觉不到上班,就不要随波逐流,而要选择自己真正喜爱的事去做,让工作成为享受从而陶醉其中,这是上上策。

    然而这种选择毕竟不是人人都敢做,或都能做的。大多数人只能被工作选择。但即使这样,工作中仍有天堂地狱之分,而且往往只在一念之间。

    出门打车,一招手,一辆出租戛然停下,一听目的地,司机脸色顿时难看了起来。不是甜活儿,于是黑着脸将车风驰电掣般地开了起来,偏偏又遭遇红灯,终于忍无可忍,掏出电话打给哥儿们一通抱怨,一边诉苦一边大骂交通拥堵,客人被不点名地数落得如坐针毡,红灯也在他的咒骂声中变得格外漫长。终于熬到目的地遥遥在望,却发现路边有人打车,黑脸司机立刻靠边不由分说地要求客人下车多走几步,而就在与客人争执的当口,另一辆空车接走了路边的客人,黑脸司机则在这边狠捶方向盘,吼着倒霉透顶!

    越是穷凶极恶追逐利益,越容易被种种幸运远远抛开。这样的人,用贪欲和功利亲手扼杀着自己的快乐,把职场变成了活生生的地狱。另一些人却总有办法把职场变得美妙如天堂,即使他们做得也是辛苦而平凡的工作。

    雪后初晴,一辆载重大货车风尘仆仆驶来,却似有别样的风采。仔细端详,发现车鼻子上竟然活灵活现立着一个袖珍小雪人,看样子是用车前脸的积雪堆成的,那雪娃娃精神抖擞地高踞车头,笑咪咪地在太阳下闪着银光,仿佛映射着主人烂漫的童心和明朗的心情,谁见谁开心。

    骄阳似火,一位泥水匠汗流浃背地推着独轮车独自往返运送着红砖,推着推着忽然莞尔一笑,对着自己的小车说:看你!跑那么快我都快追不上了!黑红的脸膛上满是愉快的自得其乐,那吱吱扭扭的小车也仿佛在淘气地与他相应和,跑得更起劲了。

    数九寒天,值夜班的露天停车管理员全副武装仍在瑟瑟发抖,老车管员神秘地透露给新伙伴一个高招:有轿车新驶入车位停好后,只要赶紧去斜靠在车前脸上,就可以享受发动机残留的余温。新同事一试,高兴得直竖大拇指,那一缕若有若无的温暖让他们在奇寒彻骨的冬夜里发出了心满意足的微笑。

    即使工作条件很艰苦,即使公司管理很糟糕,这都不是我们让自己心情恶劣的理由,更不是让自己一事无成的理由。快乐并不是一个地方,而是一个方向、一种选择,快乐并不需要理由,它只是一个决定,只要你决定快乐工作,就一定能制造出职场天堂。地狱和天堂都是人造的,无论你想铸造的是职场天堂,还是职场地狱,你都可以找到成千上万个老师。你可以很沮丧,也可以很幸福,可以很成功,也可以很失败,关键就看你决定与谁同行、向谁学,以及学什么。

  • QA与QC解析

    铁皮小巫 发布于 2010-04-09 17:24:09

        面试的HR第一个问题就是谈谈你对QA与QC的理解,之前只在一本书上看到过一段非常简短的介绍。因为没有真正理解两者的含义,回答得稀里糊涂的,感觉很不好,于是下来在网络上搜查了相关的内容,摘录一下,与各位正在学习中的朋友一起来看看大家对这两个名词的理解,加深一下认识,不当之处,敬请指正。

        严格说来,QA和QC都属于质量管理的一环.QA的目标是预防缺陷和错误的发生,而QC则是找出缺陷和错误.这两种方式在运作上的方向是有不同,qa是属于防御性的方法,而QC采取主动出击的方法.
        还有一种理解是,软件质量由组织,流程,和技术三个方面来决定,其中QA是从流程方面来保证软件质量,而测试是从技术方面来保证软件质量,包括静态测试和动态测试.QC属于质量管理活动的一类,包含测试,跟踪和监督等活动(这是从具体质量活动类型来划分).

         QA(QualityAssurance)即“质量保证”,QC(QualityControl)是“质量控制”。QA监控公司质量保证体系的运行状况,对公司的质量保证体系的质量负责QC对每一个阶段或者关键点的产出物(工件)进行检测,对产出物的质量负责。
        如果将软件的生产比喻成一条产品加工生产线的话,那QA只负责生产线本身的质量保证,而不管生产线中单个产品的实际质量情况,QA通过保证生产线的质量来间接保证软件产品的质量。

       针对软件企业的软件开发过程而言,QA可以进一步明确为SQA,即:软件质量保证,只负责软件开发流程的质量(关注流程),企业内相对应的角色为软件质量保证人员,有的企业就直接称之为SQA。QC可以进一步明确为SQC,即:软件质量控制,只负责软件开发过程中各个阶段产出的工件的质量(关注结果),产出的工件可能是相关的文档或者代码等,企业内相对应的角色为软件测试人员。
        SQA和SQC虽然主要的工作都是为了保证软件的质量,但是着眼点不尽相同。SQA通过控制过程来保证软件产品的质量,而SQC是通过控制每个阶段的“结果”来保证软件产品的质量。

       如果企业中只有SQA而没有SQC,企业得到了一个很好的流程(生产线),但是如果我们的生产源头没有得到有效控制,进入生产线的材料是残次品,那不管我们的流程控制得多好,最终的产品的质量都不会高。

       因为在软件产品的开发过程当中,几乎所有的原材料都是自己生产的,如需求规格说明书、概要设计、详细设计等,单靠过程的控制无法得到无缺陷的“原材料”。由于软件开发的固有特性,我们在每一步的生产加工过程中,都会引入新的缺陷,不管流程多么完美。所以,在每一阶段完成后,都需要对上一阶段的工作产品进行检验,评估这个阶段的工作产品是否符合预定的质量要求,只有这样才能保证最终软件产品的质量。

       如果企业当中只有SQC而没有SQA的角色,在每一个阶段SQC都找出了相应的缺陷,如果单从质量保证的观点来看,在理想情况下,上述的软件企业的质量的确是没有问题,因为在每一个阶段,通过大量专业SQC(测试)的努力工作,找出了软件产品中的全部缺陷,这样的产品质量当然没有问题了。

       但是我们从另外一个角度看:首先软件中的缺陷在理论上是不可能被全部找出来的,这主要由于软件测试的不可遍布性。其次,维护一个上述的软件测试团队,成本是相当高的,目前国际上还没有哪个商业性的公司能够维护得起。另外,如果在软件生产的过程中,只单一强调对结果的检验环节,而忽视过程控制,会造成持续的返工,极大地推迟交付产品的日期,最终造成软件开发的失败。提高软件的质量,不是持续不断地进行测试,而是要改变软件开发的方式,改变我们的流程,在过程中保证软件产品的质量。
       
       所以SQA和SQC缺一不可,两种角色必须相互配合,在“过程”和“结果”都正确的基础上,才能有效改善软件产品的质量。

       

  • 系统测试全过程(转载)

    mcy16 发布于 2010-03-31 10:18:58

    系统测试全过程


    我一直感觉系统测试总像马拉松总是测试不完,什么时候上线,什么时候算终点。虽然提交客户了,可是对于质量仍然心里没底,对于测试的效果没有评价的依据。后来经过高人指点,终于领悟到至关重要的精髓:明确测试目标!
        如果要将系统进行全面测试,那么就要有一套完整的测试阶段,每个阶段都以测试目标为标准,科学、有序地进行测试,那么测试效率也就会自然而然跟着提高。
    测试阶段分为:测试前准备、需求分析、测试计划、测试设计、测试执行、测试结果。
    1.测试前准备阶段
    主要是相关业务的学习。业务知识是测试的根本依据,只有业务过关了,以后才能有效的进行测试工作。
    了解业务步骤:
    a、了解业务名词;
    b、对现有系统的学习:功能点、业务场景等;
    c、分析现有系统数据库,了解数据的走向。

    2.需求分析阶段
    需求是项目开发的基础,也是测试的依据。所以需求分析一定要做。但是很多公司是没有详细的需求文档的,那如何进行需求分析呢?
    此时分析数据库就是一个非常好的方法:
    a、每张表的索引和约束条件;
    b、数据的来源、走向;
    c、数据的存储、变化;
    d、数据间的关联;
    e、表与表间的关系;
    这些分析都可以为了解业务场景和之后的测试用例设计打好基础。
    3.测试计划阶段
        我们总是觉得被测试进度紧逼、计划失控、测试不完全等等状态,其实解决这些情况的最好方法就是:制定测试目标。
        在计划初期先明确测试目标,制定不同层次目标的执行标准,指导后期设计不同级别的测试用例,跟踪不同级别的缺陷修改。在测试时间较紧情况下,至少可以先把保证所有功能正常操作的最低目标版本先提交给客户,不会再有手忙脚乱,心里没底的状况。
    测试目标分为:
                最低目标
                基本目标
                较高目标
                最高目标  等级别

    可以使用表格形式来规范目标准侧,例如:

    测试目标准则表

    目标
    测试范围
    需求覆盖率

    最低目标:正常的输入+正常的处理过程,有一个正确的输出
    (明确的功能点全部列出来)
    1.功能:

    正常功能

    异常功能

    单功能   

    业务场景

    非功能:16种测试类型
    2.输入覆盖率:

    有效无效

    处理过程:基本流

              备选流

    状态变化:正常、异常

    输出

    SRS00001

    SRS00002

    SRS00003

    基本目标:对异常的输入有错误的捕获,并进行相应提示或屏蔽
    较高目标:对隐式需求进行测试
    根据公司规模不同,确定测试目标级别也可不同。一般小公司有最低标、基本目标即可,大公司可以提高目标标准,直接从基本目标开始,直至最高目标。

    4.具体的ST用例的编写以及执行
    测试用例设计的粒度一直是个讨论对象,很多时候总会强调时间很紧啊,如果时间再多点,我的用例肯定会设计的再细一些!!
    是不是设计的越细就一定越好呢,不一定,测试是无穷尽的,使用穷举方法来进行测试是不科学的。
    因为制定了测试目标,那么就应该根据测试目标,在设计测试用例时也要制定设计用例目标。

    比如:按照最低目标选择测试用例
    输入—>有效
    处理—>有效
    输出—>有效
    按照最低目标的宗旨,只要是设计出来的测试用例足以覆盖和验证系统基本功能可以正常使用,那么这些测试用例的粒度就足够细了!从而提高了设计用例效率,同时也提高了测试效率。

    5.测试之后的评估
    实现一级测试目标之后都要进行评审工作,根据评审结果进行系统版本发布。例如:

    1.保证所有需求都有测试用例
    2.保证所有功能的正常操作和正常操作有对应的测试用例          V1.0版本
    3.保证所有功能的异常校验有对应的测试用例                    V2.0版本
    4.各功能组合形成的业务流有对应的测试用例                    V3.0版本
    5.各功能或整体软件所需满足的非功能性需求有对应的测试用例    V4.0版本

    这样做既可以对代码版本进行控制,也可以应对需求变更的问题。

        也许“确定测试目标”还不能彻底解决复杂测试工作中出现的问题,但是我觉得这最起码可以让你的测试工作变得有条理;跟领导汇报工作的时候业绩和工作效率有凭可据;面对需求变更的时候有理可依!
  • SXF面试总结

    lx_yykl 发布于 2009-09-09 22:32:25

    昨天接到SXF的电话,说通知我去面试SQA,说实话,虽然有考虑过换行,但不是很迫切,也是有一搭没一搭的去碰碰运气,比较就在我家附近,这是最吸引我的一点!

    之前从没从事过SQA的工作,对SQA的认识也仅停留在公司过CMMI的阶段,几个Leader兼职SQA,但CMMI过后就没人管了。这次去面试也是想了解下这方面的市场需求……

    面试的人很多,有开发、测试、SQA还有系统架构师,与我之前见过的不同的是,他们通知面试的人全部是男生,这与我们公司正好相反,可能是招的自动化测试吧。哎……

    趁现在还记得就列一下面试的内容吧:

    1、针对简历问些以前公司的主要业务、是否加班(我猜这个公司肯定经常加班)

    2、为什么来应聘(晕死),这个职位与你的职业发展想吻合吗?未来三年的职业规划是什么?

    3、CMMI3有几个过程域,分别是什么?在这些过程域中对风险是如何定义的

    4、什么时候结束测试?写测试用例时又哪些方法?怎样评价一个测试用例是不是好的测试用例?

    5、用C语言写一个十个数从大到小的排序程序

    6、读一段Shell脚本,说一下作用

    还有一个关于通信专业知识的题目:

    7、说一下香农定理的内容?说一下数据通信的归零码与不归零码。(谁说大学的基础知识没用啊,真是后悔毕业后又把学到的东西还给老师了)

    香农定理:香农定理则描述了有限带宽、有随机热噪声信道的最大传输速率与信道带宽、信号噪声功率比之间的关系.
    在有随机热噪声的信道上传输数据信号时,数据传输率Rmax与信道带宽B,信噪比S/N关系为: Rmax=B*Log⒉(1+S/N)

    Shell脚本我本来就没接触过,我就不做评价了。但C语言冒泡……罚自己写十遍!

    作为通信类的学生,香农定理和归零码之类的不应该忘记啊……基础知识还是要牢记啊~~~虽然没成功,但还是学到了很多东西,能阶段性的检验下自己的状态,为下一次做准备,要加油哦!

  • 测试面试题No4(整理帖)

    原点 发布于 2009-05-18 13:51:41

    软件测试工程师的面试题

    如果别人问我这些题目,我想我会大致这样回答,各位从事软件测试的同志们帮我看看回答的怎么样。

    01. 为什么要在一个团队中开展软件测试工作?

    答:软件测试在整个一个团队中占有非常重要的地位,具体来说就是测试是一个发现软件错误的过程,执行软件测试会以最少的人力和时间,系统的找到软件存在的缺陷和错误,建立起开发人员和使用者对软件的信心。

    02. 您是否了解以往所工作的企业的软件测试过程?如果了解,请试述在这个过程中都有哪些工作要做?分别由哪些不同的角色来完成这些工作?

    答:软件测试部门配合系统分析人员软件需求分析讨论,并根据需求说明书制定《项目测试计划》,编写测试用例,建立测试环境。
    软件测试人员负责软件开发部门的新产品测试及原有产品的升级测试,负责软件问题解决过程跟踪,负责软件开发文档开发工作的规范化及管理开发部门的产品文档,制作用户手册及操作手册,负责产品的上线测试,监督软件开发过程的执行,提高产品质量。

    03. 您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?(对于软件测试部分,可以简述)
    答:需求人员连同系统分析人员&测试人员开会讨论需求。系统分析人员写出需求分析说明,并连同系统分析人员&测试人员&需求人员开会讨论可行性。系统分析人员写出详细设计说明书,程式人员编码,给出系统流程图。交与测试人员,测试人员给出Bug统计表。

    04. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
    答:从事过write test plan,creation of test case,进行功能测试,性能测试,编写测试工具,文档的管理等,比较擅长与写测试用例和进行功能测试。

    05. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
    答:有功能测试,性能测试,可靠性测试,安全性测试,负载测试,压力测试,安装/卸载测试,启动/停止测试,兼容性测试,互连测试,文档测试,恢复测试,回归测试,可使用性测试,容量测试。
    功能测试只对软件的功能是否满足用户需求来做测试。性能测试需要和压力和负载测试联合起来。

    06. 请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。

    黑盒测试:把测试对象当成一个黑盒子,测试人员完全不考虑逻辑结构和内部特性,只依据程式的需求说明书来检查程式的功能是否满足它的功能说明。
    白盒测试:把测试对象当成一个透明的盒子,允许测试人员利用程序内部逻辑结构及相关信息,设计或选择测试用例,对程式所有逻辑路径进行测试。
    单元测试:白盒测试的一种,对软件设计中的单元模块进行测试。
    集成测试:在单元测试的基础上,对单元模块之间的连接和组装进行测试。
    系统测试:在所有都考虑的情况下,对系统进行测试。
    验收测试:第三方进行的确认软件满足需求的测试。

    07. 测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
    答:测试计划工作是对测试工作内容的一个有效的组织和规划,能保证测试工作有效的展开。测试计划工作包括测试目标,测试范围的定义,测试方法的选择,测试进度里程碑,测试资源的有效配置和管理。
    测试计划工作也称为测试策略,主要描述测试工程的总体方法和目标,描述目前在进行那一阶段的测试(单元测试,集成测试,系统测试)以及每一阶段内进行的测试种类(功能测试,性能测试等)确定测试范围,生成测试数据等。
    其中软件计划中的测试目标最重要,他的软件测试的所需要达成的最终结果。

    08. 您认为做好测试计划工作的关键是什么?
    答:1. 明确测试的目标,增强测试计划的实用性
    2. 坚持“5W”规则,明确内容与过程,'what''why''when''where''how'
    3. 采用评审和更新机制,保证测试计划满足实际需求
    4. 分别创建测试计划与测试详细规格、测试用例

    09. 您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    答:有黑盒和白盒两种测试种类,黑盒有等价类划分法,边界分析法,因果图法和错误猜测法。白盒有逻辑覆盖法,循环测试路径选择,基本路径测试。
    例子:在一次输入多个条件的完整性查询中。利用等价类划分法则和边界分析法则,首先利用等价类划分法,可以一个或多个结果是OK的测试用例,然后确认多个NG的测试用例,然后利用边界值分析法,可以对结果分别是OK和NG的测试用例进行扩展和补充。

    10. 您认为做好测试用例设计工作的关键是什么?

    答:测试用例设计工作的关键是对可行的和不可行的都要考虑。
    1,输入 2,详细的操作步骤 3,预期输出 4,实际输出。

    11. 请以您以往的实际工作为例,详细的描述一次测试用例设计的完整的过程。

    12. 您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容。

    13. 您以往是否曾经从事过性能测试工作?如果有,请尽可能的详细描述您以往的性能测试工作的完整过程。

    14. 您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。
    答:有使用过LoadRunner,该工具能够录制测试人员的操作步骤,然后对这个操作步骤模拟出多个用户来播放出来。
    1。Visural User Genertor创建脚本,选择协议,录制操作,编辑操作。
    2。中央控制器(Controller)调度虚拟用户。创建场景,选择脚本,建立虚拟用户,设计shedual,设置ip spoofer。
    3。运行脚本。分析shedual。
    4。分析测试结果。

    15. 您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
    答:性能测试工作的目的是检查系统是否满足在需求说明书中规定的性能,性能测试常常需要和强度测试结合起来,并常常要求同时进行软件和硬件的检测。
    性能测试主要的关注对象是响应时间,吞吐量,占用内存大小(辅助存储区),处理精度等。

    16. 在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
    答:检测时间,系统环境,硬体环境,严重程度,程式版本,确认人,功能模块,问题描述,详细操作步骤,是否会重现。
    问题描述和详细操作步骤要尽可能的详细。Bug应该尽量用书面语,对与严重程度比较高的缺陷要在相同环境下在测试一遍。

    在C/S模式下,如果条件满足可以使用替换法来确认是client端的问题还是server端的问题。

  • Jmeter变量参数化及函数应用(转)

    mklodoss 发布于 2009-09-09 14:53:22

    我们在使用Jmeter录制脚本后,经常会对已录制的脚本进行修改,需要把一些参数使用一些变量替代,Jmeter是支持这些功能的,不过是通过函数实现的。下面举一个简单的例子,使用随机数替代一个参数:
            打开录制好的脚本,点击Jmeter的“选项”,选择“函数助手对话框”(或者使用快捷键“Ctrl+F”),在“选择一个功能”的下拉框中选择“_Random”,然后在“函数参赛”中会出现三个参数有用户来设置,第一个参数是“一个范围内的最小值”,即所要取的随机数的最小值,我们设置成1;第二个参数是“一个范围内的最大值”,即所要取的随机数的最大值,我们设置成100;第三个参数是“函数名称”,即用于存储在测试计划中其他的方式使用的值,我们设置成Random。设置好上面的三个参数后,点击“生成”按钮,这样就会在对话框的最下面生成一个字符串“${__Random(1,100,Random)}”,然后我们找到要替换的参数,把它的值换成前面生成的字符串就可以了,然后每次运行的时候,这个参数会变成一个1到100之间的随机数。
            我们在上个例子中可以看到Jmeter提供了很多函数,能满足咱们在测试中的大多数需要,下面来讨论几个常用的函数。
            _StringFromFile,这个函数是从一个文件中取到一个字符串,这个函数和LoadRunner中的File变量差不多,不过LoadRunner可以直接从数据库中查询记录,自动生成文件,而Jmeter需要我们借助第三方工具生成文本文件(我们可以通过数据库查询工具查出结果,然后拷贝到一个文本文件中,这样就是40万人民币的软件和免费软件之间的差别,嘿嘿)。生成文本文件后就可以设置这个函数的参数了,参数分别是“输入文件的全路径”,“函数名称”,“Start file sequence number”,Final file sequence number”。第一个参数就是咱们前面生成的文件的完整路径,即文件路径+文件名.扩展名(文件路径可以写成相对路径或绝对路径)。第二个参数是用于存储在测试计划中其他的方式使用的值(其实我也一直不明白这个参数的用处,不设置有些函数也能正常使用,不过最好还是随便设置一下吧,因为还有一些函数不能缺省)。第三和第四个参数的用途有两个,如果一起使用可以从多个文件中读取字符串。如果只使用第四个参数则表示对同一个文件读取多次。

    例如:${_StringFromFile(test#'.'txt,,1,2)} 可以读取test1.txt和test2.txt,多线程使用时,从test1的第一条记录开始读取,test1的记录读取完成后,自动从test2.txt的第一行继续读取。

    ${_StringFromFile(test1.txt,,,2)} 读取test.txt两次,多线程使用时,从test1的第一条记录开始读取,test1的记录读取完成后,再次返回test1.txt的第一行继续读取。以上两种情况时,如果文件中数据读取完成,则循环会自动终止。

             _counter,这个函数是一个计数器,用于统计函数的使用次数,它从1开始,每调用这个函数一次它就会自动加1,它有两个参数,第一个参数是布尔型的,只能设置成“TRUE”或者“FALSE”,如果是TRUE,那么每个用户有自己的计数器,可以用于统计每个线程歌执行了多少次。如果是FALSE,那就使用全局计数器,可以统计出这次测试共运行了多少次。第二个参数是“函数名称”。
            _javaScript,我个人认为这个函数是最好用的函数,通过它能使用JavaScript所支持的所有函数,比如当前的系统日期,系统时间等,它的参数也有两个,第一个是“JavaScript. expression to evaluate”,这个参数是JavaScript的语句表达式,我们可以输入任何的JavaScript支持语句,调用JavaScript自带的函数(可惜不能使用自己写的JavaScript函数,有点遗憾)。第二个参数是“函数名称”。
            _threadNum,这个函数没有任何参数,它用于得到当前运行的线程编号。
            _machineName,这个函数用于返回当前的主机名,有一个参数,是“函数名称”。
            _log,用于记录日志,它可以将一条信息记录到指定的日志文件中,并返回所记录的信息。它有三个参数。第一个是“String to be logged”,即要记录到日志文件中的内容。第二个是“Log level”,即日志的等级,这个参数只能设置成OUT, ERR, DEBUG, INFO,WARN or ERROR,如果这个参数不设置,函数默认为“INFO”。第三个参数是“Throwable text”,即要抛出的文本信息,如果不设置,函数会抛出Java自定义的异常。
            _logn,这个函数和_log的功能一样,参数和使用都完全相同,唯一个差别在于_log会返回记录到日志中的信息,而_logn不返回任何信息。
            _intSum,用于计算多个整数的和,可以是计算正整数和负整数的和,它有N个参数,最少有3个参数,最多不限。最后一个参数是函数名称,前面的其它参数是要求和的整数。这个函数在函数对话框中只显示3个参数,如果要计算多个整数,可以通过添加参数实现,不过最后一个参数一定是函数名称。
            除了上面介绍的几个函数外,Jmeter还支持了更多更强大的函数,比如_BeanShell,_regexFunction等,如果有需要设置更复杂场景的朋友可以仔细研究一下,可以在函数助手对话框中点击“帮助”,读取这些函数的使用帮助(我的英语水平有限,不能准确的翻译函数帮助,就不在这里献丑了)。另外,Jmeter还支持自定义的脚本语言的开发,比如Java和BeanShell等,可以自己写测试语句,咱们下次讨论如何使用Jmeter自定义的语言开发测试脚本,下次再说,嘿嘿。


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/li_ok/archive/2006/12/14/1442495.aspx
  • 导入导出文件测试点

    liyuan_400 发布于 2009-08-19 19:11:30

    1.1数据接口文件的测试方法:

     1.1.1 导出:

    1.         文件名的正确验证(如果导出文件命名中有中文需详细关注)

    2.         导出文件格式的验证(如之间的分割符,是否有表头等,换行是否正确)

    3.         是否在设定的时间生成导出文件

    4.         导出出错时系统如何处理(如是否正常发送报警邮件,邮件的格式和内容是否正确)

    5.         导出文件的格式是否正确(如字段是否正常,分割符,换行是否正确)

    6.         能否按配置中的设置导入正确的路径下

    7.         接口文件的内容验证(如特殊数据类型(日期)是如何处理的,某字段值为空时如何处理,各个字段值内容是否正确)

    1.1.2 导入:

    1.         定时抓取导入的文件是否正确

    2.         抓取导入的文件时,抓取失败系统如何处理(例如发送报警邮件)

    3.         修改要导入的文件格式(包括多列、中间分割符不正确等),系统能否抓取导入文件

    4.         修改要导入的文件内容(包括,数据类型不正确、非空字段为空等),系统能否抓取,失败如何处理

    5.         导入的文件是否正常入库(包含特殊字符,数据库的转义字符等,如何处理)

     

    1.2 关于数据报表的测试 

    1.业务性数据报表

     

      测试方法:通过增加、删除、修改相关业务或相关业务的参数,查看统计报表数据变化和数据准确性

     

    2.只有统计功能的数据仓库类报表

     

       测试方法:1.建立数据仓库模型,模拟所有的应用表

                    2.通过SQL语句和手工计算,对数据进行对比

Open Toolbar