日历

« 2008-10-08  
   1234
567891011
12131415161718
19202122232425
262728293031 

统计信息

  • 访问量: 1831
  • 日志数: 32
  • 图片数: 1
  • 文件数: 1
  • 书签数: 3
  • 建立时间: 2007-07-30
  • 更新时间: 2008-10-07

我的最新日志

  • 游标使用

    2008-10-07



    --声明一个游标
    DECLARE MyCURSOR CURSOR FOR

    SELECT id FROM student

    --打开游标
    open MyCURSOR

    --声明两个变量
    declare @id  int
    declare @name char(20)
    declare @sid int
    declare @sname char(60)
    declare @pid   int
    declare @pname char(60)
    declare @cid   int


    --循环移动
    fetch next from MyCURSOR into @id
    while(@@fetch_status=0)
      begin
        select @sid = s.id ,@sname = s.name ,@pid = p.id ,@pname = p.name, @cid = c.cid
               from student s ,score c ,project p
               where s.id = c.sid and p.id =c.pid
     --插入数据
        insert into info
        (id ,sid ,sname ,pid ,pname ,scid)
        values
        (@id ,@sid,@sname,@pid,@pname,@cid)     
        fetch next from MyCURSOR into @id
      end  
    close MyCURSOR
    deallocate MyCURSOR



     



  • 多表插入

    2008-10-07

     
    --创建一个新的表
      create table t0910
     (id int ,name char(10),project char(20))
    -- 从student , score 两张表中取数据,然后放到t0910表中.
      insert into t0910
      select s.id , s.name ,t.name from student s , score t
    大家可能会问,我们要这样的操作有什么用呢?
      其实这个要求当时遇到一个全新的系统,里面的数据几乎没有,那么怎么办呢? 后来想了一个可以通过多表的插入来构建数据,
      先在student 表里面创建一定的数据,score 表里面的数据... 来生成t0910里面的数据... 这样的就可以生成 student*score 这样多的数据...大量的数据才可以满足性能测试的要求...

  • 如果这样,中国人肯定很牛B

    2008-10-07

    如果这样搭配,中国不强都不行!!
    国家 主席:李世民
    军委 主席:成吉思汗
    军委副主席:毛泽东
    人大委员长:孙中山
    国务院总理:诸葛亮
    外交 部长:周恩来
    外交部发言人:宋美龄
    国防 部长:曹操
    教育 部长:孔子
    卫生 部长:华佗
    环保总局局长:老子
    国家反贪局局长:国朝民
    农业 部长:贾思勰
    水利 部长:大禹
    建设 部长:秦始皇
    地质 部长:张衡
    公安 部长:展昭
    国土资源部长:徐霞客
    发展与改革委员会主任:商鞅
    最高人民法院院长:包拯
    国家禁 毒署署长:林则徐
    妇联 主任:武则天
    新闻出版署署长:纪晓岚
    后勤 部长:李连英
    中东特使:张骞
    台湾事务办公厅:郑成功
    海关总署:郑和
    文化部长:唐伯虎
    拆迁办主任:孟姜女
    计生委主任:唐僧
    医务 处长:李时珍
    航空航天部部长:嫦娥
    国家跳水队队长:屈原
    等咱中国强大了,全叫老外考中文四六级!文言文太简单,全用毛笔答题,这是便宜他们。惹急了一人一把刀一个龟壳,刻甲骨文!论文题目就叫:论三个代表!到了考听力的时候全用周杰伦的歌,《双截棍》听两遍,《菊花台》只能听一遍。告诉他们这是中国人说话最正常的语速!阅读理解全是政府工作报告,口试要求唱京剧,实验就考包粽子。考死他们。
  • TUXEDO 监控

    2008-9-20

      什么是TUXEDO 可能大家都知道的,但是它重要的功能是什么呢?有什么指标要我们去监控,获取到的数据怎么样来分析呢?
      我在银行做中间件的监控工作,但是只知道监控,当我想知道TUXEDO什么时候是个瓶颈的时候,没有人能告诉,我也查询过许多的资源,结束是一无所获... 我一直在想一个问题,有一个不知道怎么分析,不知道什么时候瓶颈的数据,意义何在? 我们的分析师也不知道,应该要什么数据.怎么分析? 可怜啊...现在做性能测试难道就是这样的吗?多大的一个银行项目啊... 费了多少钱在上面?让我们做性能测试? 当然包括结果的整理!
      我感觉很可怜啊...自己和银行
      不管怎么说,还是知道来监控的,下面是我写的监控TUXEDO方面的东东..希望给不了解的人一点帮助
      #!/bin/sh
    #tuxedo.sh 
    num=1
    loopnum=10000
    sleep_time=60

    Tday=$(date +%y%m%d)
    file_path="/home/ap/perfmon/$Tday/"
    file_ser="tux"
    #file_ser="mq"
    file_ip=`netstat -in|awk '{print $4}'|grep 128|grep -v 128.199|sort|head -1`
    file_time=$(date +%Y%m%d%H%M)
    file_format=".txt"
    path_log=$file_path$file_ser-$file_ip-$file_time$file_format

    if [ ! -d $file_path ]
    then
       mkdir $file_path
       chmod 777 $file_path
    fi

    while [ $num -lt $loopnum ]
    do
    date_time=$(date +%y-%m-%d-%H-%M-%S)
    echo $date_time >>$path_log
    #消信队列的实现长度
    echo pq | tmadmin -r|grep -v  GWTDOMAIN|awk '($6!="0.0")&&($6!="-") {print ;a=a+$6;} END {print "pq Ave. Len is :"a}' >>$path_log
    #实际的请示数,每一个时刻的.
    echo pq | tmadmin -r |grep -v  GWTDOMAIN|awk '$5!="0" {print ;b=b+$5;} END {print "pq # Queued is :"b}' >>$path_log

    echo "----PCLT INFO----" >>$path_log
    #每一个时间,服务处理的事务数
    echo pclt |tmadmin -r | grep -v "0/0/0"| awk '$6!="0/0/0" {print ;c=c+$6;} END {print "pclt Bgn/Cmmt/Abrt total is :"c}' >>$path_log

    echo "----PSR INFO-----" >>$path_log 
    #客户端实际的连接数,每一个时刻的数值
    echo psr |tmadmin -r |awk '$8 ~/IDLE/ {h=h+1} END {print "IDLE TOTAL IS "h}' >>$path_log

    echo "-----PSC INFO-----" >>$path_log
    #service的运行情况和处理的交易数。 
    echo psc |tmadmin -r |awk '$8!="AVAIL" {print ;g=g+1} END {print "PSC NO avail total is "g-5}' >>$path_log

    num=$(($num + 1))
    sleep $sleep_time
    done 
    exit 
  • LoadRunner JAVA协议 来测试SQL性能

    2008-9-20

      大家可能都知道 ODBC 协议是可以录制下来,SQL SERVER 2000 但是这个协议是底层的协议,所以好多东西是我们不想要的,也有好多东西,是我们不知道的.所以参数化,及维护脚本太难度了..由于这样的原因,所以本要用JAVA代码来写了一个测试SQL的程序.
       /*
     * LoadRunner Java scrīpt. (Build: 873)
     * Writer fangtiesui
     * scrīpt Descrīption: sql 查询性能测试脚本 
     * DATE : 2008-09-19                    
     */
    import java.io.*;
    import lrapi.lr;
    import java.sql.*;
    public class Actions
    {
            int sum = 0; 
    public int init() throws Throwable {
    return 0;
    }//end of init        
    public int action() throws Throwable {
             try{    

    String sqldriver = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
    Class.forName(sqldriver);
    System.out.println("数据库驱动程序注册成功!");
    String url ="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=school";
    String user = "sa";
    String password = "sa";
    String sel = "select * from student where id >950";
    Connection conn = DriverManager.getConnection(url,user,password);
           System.out.println("数据库连接成功");
    lr.start_transaction("查询学生表");
           Statement sta = conn.createStatement();
           ResultSet rs = sta.executeQuery(sel);
           System.out.print("\t"+"id"+"\t"+"name" + "\t"+"addr"+"\t"+"tel"+"\n");
         while(rs.next())
         {
          System.out.print("\t"+rs.getInt(1));
          System.out.print("\t"+rs.getString(2));
          System.out.print("\t"+rs.getString(3));
          System.out.println("\t"+rs.getString(4));
          sum = sum + 1 ;
         }
          rs.close();
          sta.close();
          conn.close();
     }catch(Exception e){
    e.printStackTrace(); 
    System.out.println("Test Failed");
       }
          
             lr.message("Sum = "+sum);
    lr.end_transaction("查询学生表", lr.AUTO);
    return 0;
    }//end of action
    public int end() throws Throwable {
    return 0;
    }//end of end
    }

  • tcl 和 shell 实现自动化启动远程shell

    2008-9-11

    1.要安装一个tcl 与 expect 这两个软件.运行环境linux 或是 unix 
      #这个脚本可以传递四个参数: 用户,密码,IP,脚本路径
    #!/usr/bin/expect
    #scrīptName: login_start_command.exp
    proc do_login_console {LoginName PassWord} {
                    expect "*login*"
                    send "$LoginName\n"
                    expect "*Password*"
                    send "$PassWord\n"
                    expect "*]"
                    send_user "\nLogin Successfully!\n"
    }

    proc do_exec_cmd {CommandPath} {
              expect "*]"
              send "sh $CommandPath\n"
              expect "*]"
              send_user "\n\ncommand exec Finished...\n\n"
    }

    if {$argc<4} {
        puts stderr "less parameters...."
        exit 1
    }

    set IpAddress   [lindex $argv 0]
    set LoginName   [lindex $argv 1]
    set PassWord    [lindex $argv 2]
    set CommandPath [lindex $argv 3]

    spawn telnet $IpAddress
    do_login_console $LoginName $PassWord
    do_exec_cmd $CommandPath
    close
    exit 0
     传递参数 IP USRE PWD  执行SHELL脚本的文件.
  • 用VBS实现Loadrunner多场景的执行(转)

    2008-9-09

    '用VBS实现Loadrunner多场景的执行


    Set WshShell=Wscrīpt.CreateObject("Wscrīpt.Shell")
    WshShell.Run "cmd.exe /C c:\\db.lrs",1,true
    '指定位置,打开场景,

    Wscrīpt.Sleep 3000
    WshShell.AppActivate "Mercury LoadRunner 控制器 - db.lrs - [*]"
    '把Loadrunner置为激活状态

    Wscrīpt.Sleep 1200
    WshShell.Sendkeys "%{S}"
    '执行行Alt+s 开始场景

    Wscrīpt.Sleep 1000
    WshShell.Sendkeys "{ENTER}"
    '如果提示覆盖执行回车

    Wscrīpt.Sleep 2000
    WshShell.Run "cmd.exe /C tskill wlrun"
    '运行2S(可设定)后 结束进程Wlrun

    Wscrīpt.Sleep 2000
    WshShell.Run "cmd.exe /C c:\\db1.lrs",1,true
    '指定位置,打开第二个场景,

    Wscrīpt.Sleep 3000
    WshShell.AppActivate "Mercury LoadRunner 控制器 - db.lrs - [*]"
    '把Loadrunner置为激活状态

    Wscrīpt.Sleep 1200
    WshShell.Sendkeys "%{S}"
    '执行行Alt+s 开始场景

    Wscrīpt.Sleep 1000
    WshShell.Sendkeys "{ENTER}"
    '如果提示覆盖执行回车

    Wscrīpt.Sleep 2000
    WshShell.Run "cmd.exe /C tskill wlrun"
    '运行2S(可设定)后 结束进程Wlrun

    把上述代码Copy到记事本中,重新保存为*.VBS

    执行就可以实现

    用VBS实现Loadrunner多场景的执行

    用Bat也可以:

    类如下东东:

    SET M_ROOT="D:\Program Files\Mercury\LoadRunner\bin\"
    %M_ROOT%\wlrun.exe -TestPath "c:\db.lrs" -Run

  • loadrunner 测试内存泄露

    2008-9-09

      近来无事,想看看什么情况下是内存的泄露,所以就写了一个小代码来看看...
          char *p =(char *)malloc(1024 * sizeof(char)) ;
          char *str = "memory overflow is never happen in my program!";
          memcpy(p,str,strlen(str)+1);

          lr_error_message("%s",p);

      这个 *P 不停的获取内存.只到内存没有可以分配的资源为止, 这部分内存完全可以回收再用的,但是这个代码却没有将内存回收,只是一味的分配内存,所以说这样的话,无管是多大的内存都会吃光的...当时候程序运行就 会比较慢的... 如果是在本机,小心点,如果用controller  来压你的机器会快就会很慢的.. 
  • LoadRunner内部结构(转)

    2008-9-08

    LoadRunner内部结构(转)

    1,             被测系统是由驱动进程mdrv.exe(多线程驱动的进程)r3vuser.exe来产生压力的,其中r3vuser.exe仿真应用程序的客户端,如IE浏览器。它执行了三个主要的操作:

           Kli> cpp (C 语言pre-processor)

           1cci C语言编译器),建立ci文件,然后使用被测系统的协议相关的驱动来执行。

     

    通过在Windows批处理脚本中启动Mdrv.exe来默默地启动运行。

    Mdrv能自动停止加载Vuser,因为他们与VuserWindows负载生成器上的CPU使用监视器之间互相通信。

    Windows机器上,对于每一个基于JavaVuser都有一个独立的JVM

    2,             虚拟用户通过在负载生成器客户端机器上使用agent3900 magentproc.exe)作为服务或者进程来按照组(在指定的负载生成器上运行相同脚本的虚拟用户的集合)启动虚拟用户。

    3,             每一个拥有代理的机器维护一个在.qtp文件中的执行日志

    4,             当日志被启用后,代理同样会在结果文件中为每一个虚拟用户(由虚拟用户组分开)建立一系列日志文件。

    5,             在执行过程中, 这些文件可以通过在Controller机器上的view > Show Output窗口中显示。

    6,             在预先设置延时上,Controller上运行的Scheduler指导代理(通过Windows 54345端口,或者Unix上的动态端口)去初始化场景会话.Controller(wlrun.exe)在请求中发送一份场景的拷贝.

    7,             代理是由每一个负载生成器上的Remote Agent Dispatcher进程(以前叫Remote Command Launcher(RCL))启动的.

    8,             每一个根据场景(.lrs)定义文件中设置的代理来决定哪一个虚拟用户组和脚本需要在主机上运行.

          ## 这就是说Controller可以从DOS的批处理文件(.batch)中启动.

      REM Start Controller:
    SET M_ROOT=C:\Program Files\Mercury Interactive\LoadRunner\bin
    cd %M_ROOT%
    wlrun.exe -TestPath D:\Dev\Dev1.lrs -port 8080 -Run -DontClose

    l       包含的-Run 参数与手动的点开始场景自动运行是一样的. 这不是一个很好的方法,因为你可能需要决定从以前的运行中收集文件或者想改变输出文件夹.

    l       这是假设系统环境变量PATH已经被更新了,包括LoadRunner的安装.

    9, Controller通过使用   Windows 操作系统文件夹里的参数值来启动.因为LoadRunner被设计成在一个机器上一次只能运行一个Controller实例,所以需要使用Windows文件夹.

     ## 为了在几个应用之间快速的切换, Controller工作之后保存LoadRunnerini文件, 然后使用记事本来制作一个批处理文件. 在执行wlrun之前拷贝应用程序的指定版本的ini文件. 下面是一个应用程序文件拷贝的例子:

    copy %WinDir%/wlrun7-XXX.ini   %WinDir%/wlrun7.ini
    copy %WinDir%/wlrun7-XXX.dft   %WinDir%/wlrun7.dft

    需要修改一些默认值:

    l       wlrun7.ini文件的output区域, MaxNumberOfOutputMessages= from 10000 to 100000, 这就限制了存储在数据库中的输出信息的数目.

    l       MaxOutputUIRowsToShow限制了在Controller的输出窗口中显示的信息/错误行总数.

    l       LoadRunner程序文件的 dat\protocols       文件夹下的QTWeb.lrp文件的[Vugen]部分, 添加一个MaxThreadPerProcess=5来限制由每个负载生成器mdrv.exe进程管理的线程数.

    l       存储在wlrun5.ini wlrun7.dft文件中的DefaultScenarioDir, DefaultscrīptDir, DefaultResultDir, [Recent File List]几个数据的值会在每次Controller改变的时候更新。

    10,             Vu scrīpts中定义的每个虚拟用户进行的操作是用LoadRunnerVuGen.exe生成的. 当这个程序启动后, 它在windows文件夹下存储了comparamui.INI文件来保存[LastTablesUsed]下面文件的历史,并且保存由Insert > New Parameter > Dates 菜单指定的[ParamDialogDates].

    VuGenWindows文件夹下存储和检索vugen.ini文件.当使用JAVA的时候,需要添加一些其他的调试选项:

    [DynaDlg]
    JavaLevel=3

    当在VuGen 8.1中使用8.0的脚本, Vugen.ini中加入信息:

    [Editor]
    OLDEDITOR = 1

    VuGenLR文件夹template/qtweb default.cfg和脚本文件里打开.

    Vu scrīpts可以使用脚本外部的参数文件来获得的变量值进行编码.

    更多关于VuGen的信息请看脚本编写的章节.

    11. 运行过程中,执行结果存储到一个结果文件夹中.

        我喜欢在场景执行中把结果设置成自动产生结果.这样,LoadRunner会在每次启动一个场景之后自动产生一个子增的结果名. 例如,结果名称Res1会自动增长到Res12或有时候是R   es11-1.

    错误被写到output.mdb微软Access数据库中。

    12. 在每一个结果文件夹中, 程序自动创建Log文件夹来包含每个组的日志文件. 运行之后,Controller中查看日志文件, , .然后在组中点右键,选择 Show Vuser Log

    13. 场景运行的时候, 监视器在本地维护每个主机的计数器.

    14. 运行完成之后, "collate"进程处理.eve.lrr结果文件, 并且在结果文件夹下创建一个临时的.mdb数据库.

    在处理大数据量的结果时, 为了防止错误发生,使用MSDE. ……

    15.分析模块(8,320K analysisu.exe)使用mdb数据库中的数据来产生分析图表和报告.

    16. 每一次场景运行后的结果文件results_name.lrr,也叫分析文档文件,由分析程序来读取并且显示百分位图表.

  • shell 读取配置文件

    2008-8-24

    shell 读取配置文件来取参数的值. 在许许多多自动化的脚本中,很学用.
    #!/bin/sh
     filepath="/home/test/test.txt"
    while read LINE
        do
         user=`echo $LINE | awk '{print $1}'`
         pwd=`echo $LINE | awk '{print $2}'`
      done <$filepath
     
Open Toolbar