最近在研究自动化测试

发布新日志

  • LoadRunner11破解详细过程

    2011-12-21 13:26:47

    1.从HP官方网站上下载loadRunner11版本;

    2.点击"setup.exe"开始安装,按照提示一步一步的按照直到结束;

    3.用LR8.1中的mlr5lprg.dll、lm70.dll覆盖LR11安装目录下“bin”文件夹中的对应文件;

    4.使用“LR删除注册表”应用程序删除注册表中的相关信息,如果不删除当我们输入licence时就会报错(注意要将Loadrunner先关闭);

    5.当删除成功后,再启动LoadRunner11,选择“configuration-->LoadRunner Licence”;

    6.在弹出的对话框中输入如下licence:

    golba-100: AEAMAUIK-YAFEKEKJJKEEA-BCJGI

    web-10000: AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB

    这时就成功了!

     

     

  • QTP9.5的破解过程

    2009-01-13 19:49:28

    今天安装了QTP9.5后,就按照以前破解QTP9.2的方法来进行破解,但是发现运行mgn-mqt82.exe时出现错误,后来查找了一些资料并尝试破解,最终破解成功,以下是破解的步骤:

    1. 在C:\Program Files目录下新建Mercury Interactive文件夹,然后将mgn-mqt82.exe放到该文件夹下;

    2. 进入C:\Program Files\Common Files\Mercury Interactive目录下,新建文件夹License Manger;

    3. 执行mgn-mqt82.exe;

    4. 进入到“C:\Program Files\Common Files\Mercury Interactive\License Manager”目录下用记事本打开“lservrc”文件,将生成的license复制到QTP9.5的install license中,即可破解。

    注意:指需要复制“#”前面的字符串,如“G3UL587EOCWGTXR6IAHETFL8HCAHDCG5TYS6GGQSBK8UUSC99AM9XVUBUMEZNUAUCH7DT4JIKF”

     

  • 在Linux系统中搭建Apache、Tomcat的过程

    2008-12-04 17:13:09

    接下来安装Tomcat:

    6. http://tomcat.apache.org/index.html 上下载最新版本的Tomcat(Tomcat 6.0.18), 一般是

       下载Binary文件,我下载的是apache-tomcat-6.0.18.tar.gz

    7.     解压文件:

             Shell> cd /home

             Shell>tar –xzvf apache-tomcat-6.0.18.tar.gz   这里假定文件放在/root目录下

        解压成功后就会在/home 目录下生成apache-tomcat-6.0.18目录

     

    8. apache-tomcat-6.0.18中的内容复制到Tomcat目录下:

          Shell> cd /home

          Shell> ln –s apache-tomcat-6.0.18 Tomcat

          这样就会在home目录下生成一个Tomcat目录

     

    9. 配置Tomcat环境变量:

          同样需要修改/etc/profile中的内容:

          Shell> vi /etc/profile

          在文件的末尾加上如下信息:

          CATALINA_HOME=/home/Tomcat

          Export CATALINA_HOME

     

    10. 启动Tomcat:

          Shell> cd /home/Tomcat

          Shell> bin/startup.sh

          则会出现如下消息:

          Using CATALINA_HOME=/home/Tomcat

          Using CATALINA_BASE=/home/Tomcat

          Using JAVA_HOME=/home/JDK/jdk1.6.0_10

     

    11. 测试Tomcat是否安装成功

          打开浏览器,并在地址栏输入: http://localhost:8080

          如果出现Tomcat 的主页面,就表示安装成功了。

     

     

     

     

     

     

     

     

  • 在Linux系统中搭建Apache、Tomcat过程

    2008-12-04 17:01:08

    这2天忙于搭建测试环境,以下是搭建Apache、Tomcat的详细步骤:

    一、安装Apache:

       1.从网上下载Apache: httpd-2.2.10.tar.gz (source file);

           2. 解压httpd-2.2.10.tar.gz的安装包:

         Shell> tar –xzvf http-2.2.10.tar.gz

           3. 编译并安装Apache:

             Shell> cd httpd-2.2.10

             Shell> ./configure --prefix=/usr/local/Apache   配置安装路径

        Shell> make   编译

        Shell> make install   安装

        4.启动apache server:

            Shell> cd /usr/local/Apache

            Shell> bin/apachectl start

            5.  验证apache是否安装成功

        打开浏览器,并在地址栏输入:http://localhost , 如果出现“It Works!,则表明安装成功了。

    二、安装Tomcat:

        安装Tomcat之前必须先安装JDK:

        1.http://java.sun.com/网站上下载JDK(jdk-6u10-linux-i586.bin).

         2. 给文件加上可以执行的权限:

               Shell> Chmod  + X  /home/ jdk-6u10-linux-i586.bin   这里文件放在 /home目录下

     

       3. 执行jdk-6u10-linux-i586.bin,即安装:

          

          Shell>cd  /home/JDK

              

                Shell> ./ jdk-6u10-linux-i586.bin

               在安装的过程中会出现很多协议内容,直接按“Enter”键,直到最后出现“would you

       Like to accept the protocols yes or no;

     输入 yes,系统就开始安装该文件,安装完后在JDK目录下生成一个jdk1.6.0_10的文档。

     

    4.配置环境变量:

     

             修改/etc/profile 文件,直接在shell中修改,过程如下:

             Shell> vi /etc/profile

    打开文件后,按i键,在profile文件的末尾加上如下内容:

    JAVA_HOME=/home/JDK/jdk1.6.0_10

    PATH=$ JAVA_HOME/bin:$PATH

    CLASSPATH=.:$ JAVA_HOME/lib/tools.jar:$ JAVA_HOME/lib/dt.jar

    Export  JAVA_HOME  PATH  CLASSPATH

    Press “ESC” key, 输入“: wq”保存退出

    重新启动计算机.

     

    5. 验证配置环境的正确性:

     

         下面写一个HelloWorld.java的例子来检验环境变量是否正确:

             Shell> vi HelloWorld.java

             在文件中输入以下代码:

             Class HelloWorld

    {

             Public static void main(String arg[])

             {

                       System.out.println(“Hello World in Linux!”);

             }

             }

    Shell> javac HelloWorld.java

    Shell> java HelloWorld

    如果输出以下信息,就表示JDK已经安装成功了:

    Hello World in Linux!

     

           

  • MySql常用命令总结

    2008-11-27 17:13:37

    这2天将MySql的一些常用命令总结了一下,详细信息如下:

    1. 登录MySql:

    shell> mysql '没有密码的情况

    shell> mysql -u username -p password '有密码的情况

    shell> mysql -h hostname -u username -p password ' hostname 表示Mysql的主机名称

    2. 退出MySql:

    shell> quit

    3. 修改密码:

    shell> mysqladmin -u username password newpassword ' 增加密码

    shell> mysqladmin -u username -p oldpwd password newpwd '修改密码

    4. 增加新用户,并给新用户授权:(由于该命令是在Mysql环境下运行的,因此所 有语句后面都要加上“;”

    mysql> grant privileges on database.tables to 'username'@'hostname' identified by password with grant option;

    5. 显示所有的数据库:

    mysql> show databases; ' mysql搭建好后,系统默认有3个数据库: information_schema、test、mysql . mysql库很重要它里面有MYSQL的系统信息,我 们改密码和新增用户,实际上就是用这个库进行操作。

    6. 显示指定数据库中的表:

    mysql> show tables from databasename;

    7. 显示指定表中的列:

    mysql> show columns from tablename from database;

    8. 创建数据库:

    mysql> create database databasename;

    9. 创建数据库中的表:

    mysql> use databasename; mysql> create table tablename(字段定义列表);

    10. 查看表中的记录:

    mysql> select * from tablename; ' 注意要先进入该数据库

    11. 修改表中的数据:

    mysql> update tablename set field=newvalue where field=value;

    12. 删除表中的数据:

    mysql> delete from tablename where field=value;

    13. 删除数据库、表:

    mysql> drop database databasename;

    mysql> drop table tablename;

    14. 备份数据库:(该命令是在shell中运行)

    shell> cd /usr/local/mysql/bin ' 假定mysql安装在local目录下

    shell> mysqldump --opt database > back-file.sql

    更全的方式是:

    shell>mysqldump -h hostname -u username -p password databasename >/opt/share/1/backup.sql

  • linux系统下搭建MySql的步骤

    2008-11-26 22:13:30

    今天尝试在Linux系统中搭建MySql数据库,经过了几番波折,最终搭建成功,一下是搭建的步骤:

    1.从网上下载解压安装包:MySql-5.0.67-linux-i686-glibc23.tar.gz;

    2.创建mysql组和mysql用户:

      1> shell> groupadd mysql

      2> shell> useradd -g mysql mysql

    3.解压并安装Mysql:

      shell> cd /usr/local  '进入local目录下

      shell> tar -xzvf /tmp/MySql-5.0.67-linux-i686-glibc23.tar.gz '这里安装包放在tmp目录下

      shell> ln -s MySql-5.0.67-linux-i686-glibc23 mysql  '这里做一个链接

    4.添加MySQL配置文件:如果你想要设置一个选项文件,使用support-files目录中的一个作为模板.在这个

      目录中有4个模板文件,是根据不同机器的内存定制的.

      shell> cd mysql

      shell> cp/support-files/my-medium.cnf /etc/my.cnf

    5.设定目录访问权限,用mysql_install_db创建MySQL授权表初始化,并设置mysql,root帐号访问权限:

      shell> chown -R mysql .

      shell> chgrp -R mysql .

      shell> scrīpts/mysql_install_db --user=mysql

      shell> chown -R root .

      shell> chown -R mysql data

      注意:以上“.”不能少,否则会出错。

    6.运行mysql:

      shell> cd bin

      shell> ./mysqld_safe --user=mysql &

      如果运行成功的话,应该会出现类似这样的提示信息:

      [1] 3148

      Starting mysqld daemon with databases from /usr/local/mysql/data

      如果出现 mysql ended这样的语句,表示Mysql没有正常启动,你可以到log中查找问题,Log文件的通常

      在/etc/my.cnf中配置。

    7.为root用户设置密码,因为默认root用户的密码是空的,为了安全你需要修改密码

      shell> cd bin

      shell> mysqladmin -u root password "password"

    8.登录mysql:

      shell> mysql  '没有密码的情况

      shell> mysql -u root -p  '有密码的情况

      Enter password: password

    9.在Mysql服务器中设置用户的访问权限,允许被授权的用户能够从其它机器访问mysql数据库服务器:

      进入mysql:

      mysql> Grant all privileges on *.* to 'root'@'%' identified by 'password'

             with grant option; '*.* 代表database and tables

    10.从其它机器的mysql客户端访问服务器端的mysql数据库:

       在客户端输入以下信息:Mysql服务器IP、username、password、port:3306、databasename

       如果以上信息都正确,点击“确定”后,就可以访问mysql数据库了。

       注意:如果防火墙关闭了3306端口,需要将防火墙关闭。

       shell> /etc/init.d/iptables stop

    11.将mysql设置成自动启动:

       shell> cd /usr/local/mysql

       shell> cp support-files/mysql.server /etc/init.d/mysql

       shell> chmod +X /etc/init.d/mysql

       shell> chkconfig –add mysql

       shell> chkconfig –level 345 mysql on

       这样设置后,每次linux启动时mysql都会自动启动。

  • QTP读取Excel表格中的数据代码

    2008-11-20 19:45:33

    在构建自己的测试框架时,或者是从Excel读入外部数据进行检查时都要用到ExcelCOM对象编程方法,下面脚本中的ReadFile函数就实现了这样的功能,首先创建Excel应用程序对象,然后打开Excel文件,把Excel数据读取到一个数组中。

    '调用函数

    arrRange = ReadFile("D:\data.xls","Sheet1")
    'Msgbox UBound (arrRange,1)
    'Msgbox UBound (arrRange,2)
    '
    读取其中一个单元格的数据
    Msgbox arrRange(1,1)

    ' 输入:
    '             sFileName
    Excel文件
    '             sSheetName
    :表单名称
    '
    返回:
    '            
    包含Excel数据的数组

    Function ReadFile(sFileName,sSheetName)
    Dim oExcel
    Dim oSheet
    Dim oRange
    Dim arrRange

    On Error Resume Next
    '
    创建Excel应用程序对象
    Set ōExcel = CreateObject("Excel.Application")
    If err.Number <> 0 Then
    MsgBox "
    未能初始化Excel" & vbCrLf & _
    "
    请确保Excel已安装", vbCritical
    Exit Function
    End If
    On Error Goto 0

    On Error Resume Next
    '
    打开Excel文件
    oExcel.Workbooks.Open(sFileName)
    If err.Number <> 0 Then
    MsgBox "
    未能加载Excel文件" & vbCrLf & _
    "
    请确保Excel文件路径正确或格式正确", vbCritical
    Exit Function
    End If
    On Error Goto 0
    '
    获取表格的使用范围
    Set ōSheet = oExcel.Worksheets(sSheetName).UsedRange
    '
    获取从A列到Z列,从第1行到第1000行的范围i中的所有值
    Set ōRange = oSheet.Range("A1:Z1000")
    '
    Excel数据转换到数组
    arrRange = oRange.Value
    '
    关闭工作簿
    oExcel.WorkBooks.Item(1).Close
    '
    退出Excel
    oExcel.Quit
    Set ōExcel = Nothing
    '
    返回包含Excel数据的数组
    ReadFile = arrRange
    End Function


     


     

  • Http服务器常见状态代码定义

    2008-10-26 20:55:03

    在测试时常常会遇到服务器返回Http代码为404,500之类的错误信息,现在就将常见的服务器Http返回代码归纳如下:
    1. 成功2xx(Successful 2xx)
    表示客户端请求被成功接收、理解、接受。
    200 OK
    请求成功。回应的信息依赖于请求所使用的方法,如下:
    GET 要请求的资源已经放在回应的实体中了。
    HEAD 没有实体主体,回应中只包括标题信息。
    POST 实体(描述或包含操作的结果)。
    201 Created
    请求完成,结果是创建了新资源。新创建资源的URI可在回应的实体中得到。原始服务器应在发出该状态代码前创建该资源。如果该操作不能立即完成,服务器必须在该资源可用时在回应主体中给出提示,否则,服务器端应回应202(可被接受)。
    在本文定义的方法,只有POST可以创建资源。
    202 Accepted
    请求被接受,但处理尚未完成。请求可能不一定会最终完成,有可能被处理过程随时中断,在这种情况下,没有办法在异步操作中重新发送状态代码。
    202回应是没有义务的,这样做的目的是允许服务器不必等到用户代理和服务器间的连接结束,就可以响应其它过程的请求(象每天运行一次的,基于批处理的过程)。
    在某些回应中返回的实体中包括当前请求的状态指示、状态监视器指针或用户对请求能否实现的评估信息。
    204 No Content
    服务器端已经实现了请求,但是没有返回新的信息。如果客户是用户代理,则勿需为此更新自身的文档视图。该回应主要是为了在不影响用户代理激活文档视图的前提下,进行scrīpt语句的输入及其它操作。该回应还可能包括新的、以实体标题形式表示的元信息,它可被当前用户代理激活视图中的文档所使用。

    2.重定向(Redirection 3xx)
    该类状态码表示用户代理要想完成请求,还需要发出进一步的操作。这些操作只有当后跟的请求是GET或HEAD时,才可由用户代理来实现,而不用与用户进行交互。用户代理永远也不要对请求进行5次以上的重定向操作,这样可能导致无限循环。
    300 Multiple Choices
    该状态码不被HTTP/1.0的应用程序直接使用,只是做为3xx类型回应的缺省解释。存在多个可用的被请求资源。
    除非是HEAD请求,否则回应的实体中必须包括这些资源的字符列表及位置信息,由用户或用户代理来决定哪个是最适合的。
    如果服务器有首选,它应将对应的URL信息存放在位置域(Location field)处,用户代理会根据此域的值来实现自动的重定向。
    301 Moved Permanently
    请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源。有编辑链接功能的客户端会尽可能地根据服务器端传回的新链接而自动更新请求URI。 新的URL必须由回应中的位置域指定。除非是HEAD请求,否则回应的实体主体   (Entity-Body)必须包括对新URL超链接的简要描述。
    如果用POST方法发出请求,而接收到301回应状态码。在这种情况下,除非用户确认,否则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。
    注意:当在接收到301状态码后而自动重定向POST请求时,一些现存的用户代理会错误地将其改为GET请求。
    302 Moved Temporarily
    请求到的资源在一个不同的URL处临时保存。因为重定向有时会被更改,客户端应继续用请求URI来发出以后的请求。新的URL必须由回应中的位置域指定。除非是HEAD请求,否则回应的实体主体 (Entity-Body)必须包括对新URL超链接的简要描述。
    如果用POST方法发出请求,而接收到302回应状态码。在这种情况下,除非用户确认,否则用户代理不必自动重定向请求,因为这将导致改变已发出请求的环境。
    注意:当在接收到302状态码后而自动重定向POST请求时,一些现存的用户代理会错误地将其改为GET请求。
    304 Not Modified
    如果客户端成功执行了条件GET请求,而对应文件自If-Modified-Since域所指定的日期以来就没有更新过,服务器应当回应此状态码,而不是将实体主体发送给客户端。回应标题域中只应包括一些相关信息,比如缓存管理器、与实体最近更新(entity’s Last-Modified)日期无关的修改。相关标题域的例子有:日期、服务器、过期时间。每当304回应中给出的域值发生变化,缓存都应当对缓存的实体进行更新。

    3.客户端错误(Client Error )4xx
    4xx类的状态码表示客户端发生错误。如果客户端在收到4xx代码时请求还没有完成,它应当立即终止向服务器发送数据。除了回应HEAD请求外,不论错误是临时的还是永久的,服务器端都必须在回应的实体中包含错误状态的解释。这些状态码适用于任何请求方法。
    注意:如果客户端正在发送数据,服务器端的TCP实现应当小心,以确保客户端在关闭输入连接之前收到回应包。如果客户端在关闭后仍旧向服务器发送数据,服务器会给客户  端发送一个复位包,清空客户端尚未处理的输入缓冲区,以终止HTTP应用程序的读取、解释活动。
    400 非法请求(Bad Request)
    如果请求的语法不对,服务器将无法理解。客户端在对该请求做出更改之前,不应再次向服务器重复发送该请求。
    401 未授权(Unauthorized)
    请求需要用户授权。回应中的WWW-Authenticate标题域(10.16节)应提示用户以授权方式请求资源。客户端应使用合适的授权标题域(10.2节)来重复该请求。如果请求中已经包括了授权信任信息,那回应的401表示此授权被拒绝。如果用户代理在多次尝试之后,回应一样还是返回401状态代码,用户应当察看一下回应的实体,因为在实体中会包括一些相关的动态信息。HTTP访问授权会在11节中解释。
    403 禁止(Forbidden)
    服务器理解请求,但是拒绝实现该请求。授权对此没有帮助,客户端应当停止重复发送此请求。如果不是用HEAD请求方法,而且服务器端愿意公布请求未被实现原因的前提下,服务器会将拒绝原因写在回应实体中。该状态码一般用于服务器端不想公布请求被拒绝的细节或没有其它的回应可用。
    404 没有找到(Not Found)
    服务器没有找到与请求URI相符的资源。404状态码并不指明状况是临时性的还是永久性的。如果服务器不希望为客户端提供这方面的信息,还回应403(禁止)状态码。

    4.服务器错误(Server Error )5xx
    回应代码以‘5’开头的状态码表示服务器端发现自己出现错误,不能继续执行请求。如果客户端在收到5xx状态码时,请求尚未完成,它应当立即停止向服务器发送数据。除了回应HEAD请求外,服务器应当在其回应实体中包括对错误情况的解释、并指明是临时性的还永久性的。
    这类回应代码没有标题域,可适用于任何请求方法。
    500 服务器内部错误(Internal Server Error)
    服务器碰到了意外情况,使其无法继续回应请求。
    501 未实现(Not Implemented)
    服务器无法提供对请求中所要求功能的支持。如果服务器无法识别请求方法就会回应此状态代码,这意味着不能回应请求所要求的任何资源。
    502 非法网关(Bad Gateway)
    充当网关或代理的服务器从要发送请求的上游(upstream)服务器收到非法的回应。
    503 服务不可用(Service Unavailable)
    服务器当前无法处理请求。这一般是由于服务器临时性超载或维护引起的。该状态码暗示情况是暂时性的,要产生一些延迟。
    注意:503状态码并没有暗示服务器在超载时一定要返回此状态码。一些服务器可能希望在超载时采用简单处理,即断掉连接。



     

  • 如何使用LoadRunner来监控MySql数据库的性能

    2008-10-04 21:41:36

    一、利用SiteScope工具来监控

       在LoadRunner中没有提供直接监控MySQL的方法,但是在实际工作中需要我们对mysql数据库服务器进行监控,我们可以利用sitescope监控然后在lr中显示SiteScope监控的结果,达到间接监控mysql的目的。

       备注:Mercyry SiteScope 介绍:它是一款无代理监测解决方案,可确保分布式IT基础架构——如服务器、操作系统、网络设备、网络服务、应用和应用组件的可用性和性能。这款主动的、基于Web界面的基础架构监测解决方案是非常简洁的,而且完全根据客户度身定制,无需在您的上线系统中增加额外的代理。
    SiteScope为上线系统提供24×7的监控服务,为维护工程师及时发现问题提供帮助,确保系统架构内一切组建的正常运作。SiteScope在大量增加检测周期的同时也降低了维护人员的工作成本 。
    SiteScope能够监控UNIX服务器资源、windows服务器资源、weblogic应用服务器、IIS应用服务器、Oracle数据库、SQLServer数据库、F5、URL地址、Ping、内存、CPU、磁盘空间、服务等等系统架构内各种组建的运行状况;监控器按照指定频率对目标进行检测,一旦发现异常会及时向管理员发送意外事件的报警,警报可以通过声音提醒、email、短信等方式发送;另外,SiteScope还可以生成监测活动的汇总报告,该对象从日志文件中读取历史信息,接着总结、筛选信息,并生成图表格式的报告。

       SiteScope利用Database Query monitor监控指定的数据库,通过SiteScope监控器的SHOW STATUS 命令,获得相应数据,命令如下:

      show status where variable_name like ’innodb_buffer_pool_pages_total’

      为了确保监控请确认LoadRunner and SiteScope之间的端口, SiteScope和MySQL必须打开TCP 8888TCP 3306 . 还有SiteScope要监控必须要确保有JDBC的安装。 

    以下为监控前需要注意的地方:

      1. SiteScope to be deployed.
      2. Sufficient license points for Database Query monitor.
      3. TCP 8888 (default) opened two-way for LoadRunner to SiteScope.
      4. TCP 3306 (default) opened two-way for SiteScope to MySQL.
      5. Monitoring privileges for SiteScope to monitor MySQL.
      6. JDBC driver to be installed on SiteScope.
      7. Have knowledge of the counter you want to monitor.

    转自SiteScope帮助:

    Monitoring mySQL Databases

    Monitoring a MySQL database requires the use of a JDBC driver. To enable SiteScope to monitor a MySQL database:

    1. Download the JDBC driver from http://www.mysql.com/downloads/api-jdbc.html
    2. Uncompress the distribution file
    3. Among all the other files, you should find a file with a .jar extension.
    4. Copy the .jar file into the <SiteScope install path>/SiteScope/java/lib/ext directory
    5. Stop and restart SiteScope
    6. Now, use your browser to add a Database Query Monitor within SiteScope.

      The Database Connection URL format for the MySQL JDBC driver is:

      jdbc:mysql://<database hostname>[:<tcp port>]/<database>

      For example to connect to the MySQL database "aBigDatabase" on a machine using the standard MySQL port number 3306 you would use:

      jdbc:mysql://206.168.191.19/aBigDatabase

      If you are using a different port to connect to the database then you should include that port number as part of the IP address.

      The specification for the MySQL JDBC driver is: org.gjt.mm.mysql.Driver

      Enter this string into the Database Driver text box under the Advanced Options section of the Add Database Query Monitor form.

    二、通过编写脚本来进行监控

    // mysql_dll.cpp : Defines the entry point for the DLL application.

    #include "stdafx.h"
    #include "stdlib.h"

    MYSQL *conn=NULL;
    MYSQL_RES *p_res_ptr=NULL;
    MYSQL_ROW sqlrows;


    BOOL APIENTRY DllMain( HANDLE hModule,
                           DWORD  ul_reason_for_call,
                           LPVOID lpReserved
          )
    {
        return TRUE;
    }

    extern "C" int _declspec(dllexport) init_mysql_connection(char *str_server,char *str_username,char *str_pwd,char *str_Table)
    {
     conn=mysql_init(NULL);

        if(!conn)
     {
      printf("\nFailed to initate MySQL connection");
      return 1;
      exit(0);
     }
        else
     {
      printf("\nSuccess to initate MySQL connection");
      if (!mysql_real_connect(conn,str_server,str_username,str_pwd,str_Table,0,NULL,0))
      {
       printf( "Failed to connect to MySQL: Error: %s\n", mysql_error(conn));
      }
      else
      {
       printf("\nLogged on to %s sucessfully",str_server);
       return 0;
      }
      return 0;
     }
    }

    extern "C" int _declspec(dllexport) close_mysql_connection()
    {
     if(conn=NULL)
     {
      printf("\nConnection is Null");
      return 1;
      exit(0);
     }
     else
     {
         mysql_free_result(p_res_ptr);
      printf("\nClose connection");
      mysql_close(conn);   
      return 0;
     }
    }

    //"show status like \'qcache%\'"

    extern "C" int _declspec(dllexport) get_mysql_table_query(char *str_query)
    {
     int res=0;
     res=mysql_query(conn,str_query);
     if(res)
     {
      printf("Failed to mysql query: Error: %s\n", mysql_error(conn));
      return 1;
     }
     else
     {
      printf("\nSucess in Mysql Query");
      return 0;

     }

    }

     

    extern "C" int _declspec(dllexport) get_mysql_query_data(char *str_query,char *str_data)
    {
        unsigned long u1_numrow=0;
        unsigned int i_index = 0;
     p_res_ptr=mysql_use_result(conn);

     if(p_res_ptr){
     
      while((sqlrows=mysql_fetch_row(p_res_ptr))){
      
       if(*sqlrows[0]=*str_query)
       {
        strcpy(str_data,sqlrows[1]);
       
        
       }
      }
     }

     return NULL;

    }

     

    lr 9.1中代码:

    Action()
    {

            int i=0; 
            double x;
            char *str_data;
     
     
            str_data=(char *)malloc(20*sizeof(char));
            lr_load_dll("D:\\vc\\mysql_dll\\Debug\\mysql_dll.dll"); 
            i= init_mysql_connection("localhost","root","123456","mysql");
            lr_output_message("%d",i);
        
           for(;;)
           {
                get_mysql_query_data("Qcache_hits",str_data);
                i=get_mysql_table_query("show status like \'qcache%\'");
                lr_output_message("%d",i);
                x = atof(str_data);
                lr_user_data_point("hits",x);
                lr_think_time(5);
           }
            lr_output_message("%d",x);
         close_mysql_connection();
     return 0;
    }
     
  • LoadRunner脚本练习之文件操作

    2008-09-22 20:55:09

    下面是LoadRunner中常用的有关文件方面的操作:

    extern int errno;
    Action()
    {
     char new_dir[50]="D:\\newfile1";     //定义目录
     char new_file[50]="newfile1.txt";    //定义文件
     char filename[1024],command[1024];   //定义数组
     char filename[100]="D:\\newfile3\\newfile3.txt";   //定义文件目录

        char DirString[50]="D:\\newfile2";   //定义目录

        /* 创建一个目录 */
        if(mkdir(new_dir)) 
     {
      lr_output_message("Create new directory %s failed",new_dir);
      return -1;
        }
     else
     {
      lr_output_message("Create new directory %s successfully",new_dir);

     }

        /* 创建一个文件 */
        sprintf(filename,"%s\\%s",new_dir,"newfile3.txt");
     sprintf(command,"dir %s > %s /w",new_dir,filename);
     system(command);    //执行操作系统命令             

     lr_output_message("the new file name is:",filename); 

        /* 改变工作目录 */
        if(chdir(DirString)) 
     {
      lr_output_message("Unable to change the directory %s",DirString);
     }
      
     else

      lr_output_message("Change directory to %s",DirString);

        /* 删除文件 */
        if(remove(filename)==0)

      lr_output_message("Remove the file %s success",filename);
     else

      lr_output_message("Unable to remove the file %s error %d",filename,errno);

        /* 删除目录 */
        if (rmdir(new_dir)==0)

      lr_output_message("Remove the directory %s success",new_dir);
     else

      lr_output_message("Unable to remove the directory %s error %d",new_dir,errno);*/

     return 0;
    }


     

  • LoadRunner Monitor Linux System material

    2008-09-12 16:06:15

       今天用LoadRuner来监控Linux系统资源,遇到了一点麻烦,不过还是解决了,下面将操作的过程描述如下:

    1. 首先在Linux服务器上安装rpc.rstatd服务,这里用的是rpc.rstatd-4.0.1.tar.gz安装包,如果没有可以到该网址上去下载:http://sourceforge.net/projects/rstatd

    2. 执行安装包:

       解压安装包:tar -xvzf rpc.rstatd-4.0.1.tar.gz

       进入安装包:cd rpc.rstatd-4.0.1.tar.gz

       配置rpc.rstatd: ./configure

       编译rpc.rstatd: make

       安装rpc.rstatd: make install

    3. 重新启动xinetd:  /etc/init.d/xinetd restart;

    4. 修改etc/xinetd.d 目录下的3个conf(rlogin,rsh,rexec)文件中的disable均设置为no,

       即设置:disable=no,保存;

    5. 启动rpc.rstatd并查看是否真正启动该服务:

       【root@localhost ~】#rpc.rstatd

       【root@localhost ~】#rpcinfo -p

       结果如下:

      

       从上图中可以看出rpc.rstatd服务已经启动

    6. 启动LoadRunner并监控Linux系统资源:

       在controller中,将System resource Graphs中的Unix resources拖到右侧的监控区域中,并单击

       鼠标右键选择“Add Measurements”,在弹出的对话框中输入被监控的linux系统的IP地址,然后选择需

       要监控的性能指标,并点击“确定”,出现如下结果:

       Monitor name :UNIX Resources. Cannot initialize the monitoring on 10.10.15.62. 
    Error while creating the RPC client. Ensure that the machine can be connected and that it runs the rstat daemon (use rpcinfo utility for this verification).
    Detailed error: RPC: Failed to create RPC client.
    RPC-TCP: Failed to establish RPC server address.
    RPC-TCP: Failed to communicate with the portmapper on host '10.10.15.62'.
    RPC: RPC call failed.
    RPC-TCP: recv()/recvfrom() failed.
    RPC-TCP: Timeout reached. (entry point: CFactory::Initialize). [MsgId: MMSG-47190]

       检查原因,发现是Linux系统中的防火墙开启了并且阻挡了LoadRunner监控Linux系统的资源,因此要将

       防火墙关闭。

    7. 关闭防火墙: [root@localhost ~]# /etc/init.d/iptables stop;

    8. 重复步骤6,成功后结果如下图所示:

      

       通过上面的实例可以得知,有些时候防火墙也会阻止一些服务或功能,只要关闭它即可。

     

     

  • 个人空间

    2008-09-06 17:29:24

       从9月份开始,力争要及时的更新自己的Blog,以便将自己所学到的技术和经验及时的与大家共享,欢迎各位爱好软件测试的朋友们一起来探讨软件测试技术,谢谢!
  • 优秀的软件测试工程师应该具备的技术和品德

    2008-09-06 17:24:42

        从2006年下半年从事软件测试开始到现在已经有2年了,在这期间还参加过51testing周末精品班的培训,感觉培训对我的技能的提高起到了不少作用,现在就将自己的实际经验来与大家分享一下一名优秀的软件测试工程师应该具备哪些技能和品德:

       1.必须具有优秀的思想品德,主要包括:为人正直、有责任感、吃苦耐劳、团队合作精神;

       2.工作要非常认真,要有细心、耐心,并且有比较好的表达能力和沟通能力,以及很强的解决问题的能力;

       3.熟练掌握软件测试理论和流程、制定测试计划、编写测试策略、测试用例、执行测试,能从多角度发现BUG,以及熟悉BUG的处理流程和对结果进行分析;

       4.能够运用多种方法来编写测试用例,如:等价类划分、边界值、因果图、判定表、业务逻辑流程图、状态迁移图、结果输出域、正交矩阵等;

       5.能够熟练掌握一种或几种编程语言,如:C/C++、JAVA,脚本语言:VBscrīpt/Javascrīpt、Shell编程;

       6.能够熟练掌握一种或几种测试工具,如:QTP、LoadRunner等,测试管理工具:Quailty Center,还有一些BUG管理工具:Bugzilla、BugFree、JIRA等;

       7.最好是能够掌握性能测试:如非常熟悉LoadRunner的性能测试流程,比如制定性能测试计划、录制和编辑脚本、场景设计、运行并监控场景、对结果的分析并发现系统的瓶颈;

       8.懂开发,并且要对一些主流的开发框架比较熟悉,如:J2EE;

       9.熟悉常用的应用服务器,如:Weblogic、Tomcat等;

      10.熟悉常用的操作系统,如:Windows 系列、Linux,并熟悉Linux下的主要查询命令;

      11.熟悉一种或几种数据库,如:Oracle、Sql Server、My Sql等,能够熟练编写常用的SQl语句,掌握存储过程和触发器等,最好是能够对数据库进行调优;

      12.要有缺陷预防的意识,因为缺陷越发现的早越好,这个主要是看个人的天赋,有些人天生下来大脑的敏感性比较强,他能够一开始觉察到未来会出现什么风险,如果没有这种天赋,那就只有依靠自己的经验来判断;

      13.英语要好,要有比较好的听、说、读、写能力。

      以上是我个人认为一名优秀的软件测试工程师应该具备的技能和品德,可以参考一下,也欢迎各位提出自己宝贵的意见!


     

  • 面试时遇到的独立思考题

    2008-06-28 18:44:33

    最近去鼎桥通信有限公司面试,最后遇到一个这样的问题: 假如你是一家公司的技术人员,客户购买你们公司的产品后发现产品出现了很大的故障,比如机器都不能启动,而此时客户就在你身边,这个时候你怎么做? 欢迎大家踊跃发言,谢谢!
Open Toolbar