偶是测试新手,希望前辈们能多多指教。

发布新日志

  • QTP8.2 中无法显示Active Srceen

    2009-11-13 11:45:24

    当前电脑上安装的是IE7或以上版本,安装完QTP8.2,打开之后发现无法显示Active Screen,

    原因:IE7卸载,恢复IE6,(我将QTP也重装了)之后打开QTP可以显示Active Screen

     疑问:在恢复IE6之后不知道需不要再重装QTP,因为当时QTP也存在其他问题,所以顺便把QTP也重装了。

  • 如何设置让对象库不产生重复对象

    2009-09-23 16:02:16

    如何设置让对象库不产生重复对象

    tools --options---web ---page/frame. optinons
    都选择第二项.就OK了.
  • 提高QuickTest 性能

    2009-09-23 15:08:15

    录制时:1,QuickTest 启动时,不要在加载项管理器中加载不必要的加载项。这将缩短录制时间并提高测试运行性能。

    2,如果编辑测试时没有使用Active Screen,请在编辑测试时隐藏Active Screen 以缩短编辑反应时间。选择“视图”>“Active Screen”,或切换Active Screen 工具栏按钮隐藏Active Screen。

    3,1)如果正在测试Windows Applications,可以选择在每一步保存所有的Active Screen 信息、只在某些步骤保存信息或完全禁用Active Screen 捕获。可以在“选项”对话框中的“Active Screen”选项卡上设置该首选项。

    2)如果正在测试Web 应用程序,则可以禁用Active Screen 中所有步骤的屏幕捕获。在“选项”对话框中的“Active Screen”选项卡上,单击“自定义级别”打开“自定义Active Screen 捕获设置”对话框。
    [选择“禁止Active Screen 捕获”选项。这将缩短录制时间。]


    运行时:1,在“快速模式”下运行测试。在“选项”对话框中的“运行”选项卡上,选择“快速”选项。这将指示QuickTest 运行测试而不为每个步骤显示执行箭头,从而加快测试运行速度。


    当保存一个新测试,或使用“另存为”用新名保存测试时,可以通过清除 “保存”或“另存为”对话框中的“保存Active Screen 文件”选项。如果已经完成了测试设计并且计划将测试只用于测试运行时,该操作尤其有用。没有Active Screen 文件的测试打开速度更快,并且使用的磁盘空间明显更少。

    确定希望何时为测试结果捕获并保存应用程序图像。在“选项”对话框中的“运行”选项卡上,从“将步骤屏幕捕获内容保存到结果中”框中选择一个选项。可以通过保存屏幕捕获内容(仅在某些情况下),或根本不保存图像来缩短测试运行时间和减少磁盘空间。

    提示:保存无Active Screen 文件的测试后,如果需要恢复Active Screen 文件,请重新录制必要的步骤或使用“更新运行”选项为测试中的所有步骤重新捕获屏幕。

  • 当应用程序发生更改时如何维护QTP测试脚本?

    2009-09-23 14:59:22



    应用程序发生更改时维护测试的方法取决于应用程序更改的程度。这就是应创建一个小测试组而不是为整个应用程序创建一个大测试的主要原因之一。当应用程序发生更改时,可以重新录制部分测试。如果更改不重要,可以手动编辑测试将其更新。

    还可以使用QuickTest 的操作功能设计更多模块和有效测试。进行录制时,可以基于功能将测试划分为多个操作。当应用程序发生更改时,可以重新录制特定操作,而无需更改其余测试。尽可能插入对可重用操作的调用,而不是在几个测试中创建相同的脚本。这样,对原始可重用操作的更改就自动应用到调用该操作的所有测试上。

    如果有很多包含相同测试对象的测试和操作,建议使用共享对象库,这样就可以在一个集中位置更新对象信息。

    要更新检查点、Active Screen 中的信息,或更新有关对象属性更改时测试对象属性的信息,或要在不重新录制步骤的情况下在Active Screen 中添加新的对象或步骤,请使用“更新运行”选项。

    完成录制测试后是否可以增加或减少Active Screen 信息?

    如果发现录制后保存在Active Screen 中的信息不能满足测试编辑需要,或者不再需要Active Screen 信息,并且要缩减测试的大小,有多种方法可以更改与测试一起保存的Active Screen 信息量。

    要减少测试使用的磁盘区间,可以通过选择“另存为”删除Active Screen 信息,并清除“保存Active Screen 文件”复选框。

    如果选择在测试Windows Applications 时不将所有信息保存在Active Screen 中,则可以使用多种方法之一增加Active Screen 中保存的信息。

    确认“选项”对话框中“Active Screen”选项卡上的Active Screen 捕获首选项已设置为捕获所需要的信息量,然后执行下列操作:

    执行“更新运行”操作,为所有现有步骤在Active Screen 中保存所需信息量。

    重新录制包含要添加到Active Screen 中的对象的步骤。

    要重新录制步骤,请选择要在其后录制步骤的步骤,放置应用程序以匹配测试中的选定位置,然后开始录制。或者,在测试中要在其前面添加步骤的步骤处放置一个断点,然后运行测试到断点。这将把应用程序放到正确的位置以便录制步骤。
  • QTP一些很有用的代码

    2009-09-23 10:45:03

    QTP中一些很有用的代码

    1 生产随机数列
    第一种方法
    randomize'更新反回的数据
    funcation rand(k,n)
    n=int((k-1)*rnd+1)
    rand=n
    end funcation
    第二种方法
    n=randomnumber.value(1,255)

    2  当运行到表中的某一行,自动导出表中的所有数据
    row=datatable.getcurrentrow
    if row="5" then
      datatable.export("d:\data.xml")
    end if

    3 参数化密码
    webedit("txtpass").setsecure"sdsdf...."
    如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set

    4 如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
    if browser("web_name").dialog("dialog_name").exist(1) then'如果不出现=false
        error_message=browser("web_name").dialog("diaglog_name").static("用户密码错误!".getRoproperty("text")
       if error_message<>(datatable.value("error_info"))then
             msgbox(error_message)
          end if
         browser("web_name").dialog("diaglog_name").close
      end if
    这里我总结了两点技巧:
      一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
         二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理

    5  datatable.value("num")只在global形式下的一种省略形式;完整形式是:
    datatable.value("num",dtlocalsheet)
    -----向某一列的单元格赋值:
    datatable.value("column_name",dtlocalsheet)="nanjing"
    -----取得某一行具体值:
    datatable.setcurrentrow(n)
    msgbox(datatable.getsheet("global").getparameter("column_name").Rawvalue)
    或者kk=datatable.Rawvalue("column_name","action1")
    ----在run-time时,动态添加表格与数据
    kk=datatable.addsheet("sheet_name").addparameter("column_name","value").name;

    7   wintreeview一些操作
    选择一个条目:wintreeview.select(item)'根是0
    根的名称:wintreeview.getitem(0)

    8   数据库检查点模块:
    sub database_check
    set con=createobject("adodb.connection")
    con.open "Description=IBM_ODBC;DRIVER=SQL Server;SERVER=IBM;UID=sa;"&_
                     "WD=123456;APP=Quick Test Pro;WSID=IBM;DATABASE=IBM_table"
    'access方式:con.open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=d:\test.mdb"
    'Orocle方式:con.open "DRIVER={Oracle in OraHome92};SERVER=CESHI;UID=CND_TESTWD=CND;DBQ=CESHI;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=FFC=10;TLO=O;"
    set record=createobject("adodb.recordset")
    sql="select*from ibm_one_table"
    record.open sql,con
    DO
    if(record("ibm_table_column")="kai")then'//查找表格中有多少kai
    num=num+1;
    end if
    record.movenext
    loop until record.eof=true
    record.close
    set record=nothing
    con.close
    set con=nothing
    end sub

    9   换行符
    vbcr----chr(13)回车符// vblf----chr(10)换行符
        vbcrlf----chr(13)+chr(10)结合//type(chr(13)就相当于按了一上键盘上的enter

    10  Run from step有两种方式:
    在Keyword View模式会从本步骤运行到所有action结束
    在expert view模式仅会将本action运行结束

    11  由于对象属性原因,无法识别对象
    -----对于对象属性是变化的,可以参数化/或者用正则表达式
    -----报匹配多个对象错误,可以spy查看对象,添加一个该对象另一个唯一标识属性
    -----有时可以删除对象的变化的属性来解决识别问题
    ------对于多个完全相同的对象,可以采用添加index,location,createtime等特殊属性来识别
      (index:按照程序源码,绘制对象的先后标识对象,所以与其它相同对象是相互依赖,当其它对象发生
      变化后,原先的所有对象index属性要发生变化,开始是0;如index:=0;
            location:根据对象的位置进行确定,从上到下,从左到右;
      CreateTime:按照对象被浏览器打开的先后标识对象)
    ------另外换一种思维方式,采取等效的方法;比如用键盘代替鼠标或用操作系统本身特性去解决问题

    12  对系统文件的操作
    -------从系统的文件中获取信息及删除文件
      get_file_infor("c:\she.mpg")
       function get_file_infor(url)
        dim fso,f
        set fso=createobject("scripting.filesystemobject")
        set f=fso.getfile(url)
        f.name:f.size:f.type:f.datacreated'///获取文件信息
        fso.deletefile(url)'/////删除文件
       end function
    --------获取文件夹里所有文件信息
    get_folder_infor("c:\kai")
    function get_folder_infor(folder)
    dim fso,f,f1,n
    set fso=createobject("scripting,filesystemobject")
    set f=fso.getfolder(folder)
    set fc=f.files
    for each f1 in fc
    select case f1.name
    case"kai.mpg","she.mpg","dd.mp3"'//检查文件夹里是否含有这些文件
    end select
    next
    end function

    13   等待某个对象出现方法
    y=......waitproperty("visible",true,10000)

    14   防程序中断方法
    On error resume next
    On error goto handle

    15  数组的应用:
    name=array(1,2,"aa","bb")
    name(2)="aa"

    16  正则表达式应用模板
    进行日期YYYY-MM-DD的格式检查 :
    Function RegExpTest(patrn, strng)
      Dim regEx, Match, Matches      ' Create variable.
      Set regEx = New RegExp         ' Create a regular expression.
      regEx.Pattern = patrn         ' Set pattern.
      regEx.IgnoreCase = True         ' Set case insensitivity.
      regEx.Global = True         ' Set global applicability.
      Set Matches = regEx.Execute(strng)   ' Execute search.
      For Each Match in Matches      ' Iterate Matches collection.
        RetStr = RetStr & "Match found at position "
        RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
        RetStr = RetStr & Match.Value & "'." & vbCRLF
      Next
      RegExpTest = RetStr
    End Function
    date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"
    result_message=RegExpTest(date_pattern, inputbox("请你输入要检查的时间:"))'用其它正则表达式更改此处
    Select case result_message
    Case ""
             msgbox("你输入的日期格式与标准不匹配")
    case else  MsgBox(result_message)
    end select

    17   返回一个字符串在另一字符串中的位置
    instr(string1,string2)

    18   有时回放出现找不到对象时,可能不是由于你的代码问题,而是由于你的操作系统等设置问题;
    举例说明1:
    比如:你录制一个选择磁盘中的文件动作
    会录制为:
    .winlistview("  ").drap 46,99
    .winlistview("  ").draponitem "she.mp3"
    下次录制的时候,如果你的系统文件改为不显示扩展名,下次执行的时候,QTP就找不到she.mp3,只能找到she;
    举例说明2:
    有时由于不同操作系统以及不同的ie,导致有些窗口不能识别,比如在2000下弹出的网页对话框的标题是:
    “web对话框",而在2003上是”网页对话框"

    19  "is+*"类型function
    isarray'是否是数组
    isconnected'判断QTP是否连接到TD
    isdate'是否是合法的日期类型
    isempty'判断是否初始化
    isNull'判断是否为空值
    isNumeric'判断是否是数字型
    isobject'判断是否一个功能对象
    isready'判断设备是否准备就绪
    isRootFolder'是否是根目录

    20 Action之间的参数传递
    例如:在Action1中,有如下代码:
    out_str="This is out_string"
    RunAction "Action2",oneIteration,out_str
    在Acton2中,在其step->Action Properties中的,input参数栏,加入out_str后,
    msgbox(parameter("out_str")),就能正确显示参数了 

    21 WScript.Shell的一些应用
    set WshShell =CreateObject("WScript.Shell")
    WshShell.SendKeys "{ENTER}"     '模拟键盘进行操作
    WshShell.AppActivate "Calculator"             '启动应用程序

    22 获取对象属性名称用法:
    GetRoProperty----从应用程序界面上获取对象属性(即,是脚本运行时,获取的对象动态属性值)例如:获取对象库中index属性值,似乎只能用GetToProperty,因为应用程序界面上对象没有该属性,只是QTP为识别该对象创立的描述属性;
    GetToproperty----从对象库中描述对象的属性,静态值
    GetToProperties----获取用于标识对象的属性集;对于这个集合,有count等属性方法

    23 FireEvent的使用可以对一个对象进行更复杂的操作
    如:FireEvent("onfocus")   '使一个控件获取焦点
         FireEvent("ondblclick")  '实现双击/也可以在事件设定中针对该对象事件响应  

    24 模板的应用
    -----新建一个文本,输入一些新建Action时常包含的信息,然后保存为ActionTemplate.MST文件,
     并复制到QTP/dat目录下;这样每次新建action都会包含固定的信息了;
    例如:
    '-------------------脚本说明---------------
    '产品版本:      __Build(  )
    '测试员:
    '编写日期:
    '测试功能:
    '脚本类型:
    '被测试对象初始状态:
    '进展程度:
    '基本思路:
    '主要功能函数:
    '历史修改:
    '没解决的问题:
    '--------------------脚本内容-------------

    25 在对象库中,两个对象有时不能通过更改属性或命名来达到两个对象完全一致的替换;
    在web-mod项目中,我在对象库里添加了一个自动含有index标识属性的对象,然后每次通过SetToproperty来改变
    index值,对对象进行数据驱动,使其操作另一个对象,但脚本始终操作原先index属性值的对象;后来,把该对象
    删除掉,重新添加一个不自动含有index标识属性的该类对象,然后,手工添加,index标识属性,后来脚本能正常 工作了,可见两次的对象属性完全一致,但形成方式不一样,导致的结果往往也不一样;

    26 childobject的应用
    childobject可以返回界面上满足条件的对象集合,而且与对象库里是否有这些对象无关,这就可以简化对象库;
    返回的对象集合的count方法可以返回对象个数,这就可以通过下标对单个对象进行操作;在出现index标识对象时
    可以进行运用
    如:Set m_WinCheck=Description.Create()
          m_WinCheck("nativeclass").Value="Button"
          set All_WinCheck=Window("").Dialog("").Childobject(m_WinCheck)
          n=All_WinCheck.Count()
         for i=0 to n-1
          All_WinCheck(i).Set "ON"
         next
  • QTP捕获鼠标右键

    2009-09-21 16:31:55

    VbWindow("frmLogin").VbEdit("txtUserID").Set "admin"

    VbWindow("frmLogin").VbButton("Login(L)").Click

    VbWindow("frmMain").WinMenu("Menu").Select "Template Manager(T)"

    VbWindow("frmMain").VbWindow("frmTemplates").WinListView("ListView20WndClass").Select(0), micRightBtn

    Dim wshShell

            Set wshShell=CreateObject("WScript.Shell")

            For  i=1 to 1

                    wshShell.SendKeys  "{DOWN}"

                   

     

            Next

            wait  1

            wshShell.SendKeys  "{ENTER}"

     

    VbWindow("frmMain_2").VbWindow("frmTemplates").VbWindow("FrmDocumentType").VbButton("Add(A)").Click

    VbWindow("frmMain_2").VbWindow("frmTemplates").VbWindow("FrmDocumentType").VbWindow("FrmInput").VbEdit("Text1").Set DataTable("DoucmentTypeName", dtGlobalSheet)

  • checkpoint的返回值

    2009-09-21 12:25:36

    代码是check checkpoint(),你需要在check后面加一个(),使代码变为check .(checkpoint())并且在整行的前面加上一个变量(变量无需提前定义)

    a = Browser("").Page("").Frame("reportFrame").Check (CheckPoint("列表"))

    这样检查点的返回值就可以被a记录下来,那么就可以通过判断a的值来确定检查点是否通过

  • global与current的区别

    2009-09-21 12:06:35

    Global全局参数:

    他控制整个Action的运行次数,global里有几行参数,则运行几次脚本

    Current Action:

    对应于单一的Action的参数,对于一个Action没有实际的意义,而几个Action共同在一个脚本中使用时,就由他来控制单一Action的循环次数

  • (qtp)Reporter对象的ReportEvent方法

    2009-09-17 16:22:52

    语法

    Reporter.ReportEventEventStatus, ReportStepName, Details [, in]

     Argument  Type  Descrīption
     EventStatus  Number or pre-defined constant

    状态值:

    0micPass:将本步骤的运行结果状态设置为“Pass”,并向Result中产生报告信息。

    如果想在报告中生成“通过”报告,用本状态值。

    1micFail:将本步骤的运行结果状态设置为“Fail”,并向Result中产生报告信息。当脚本中运行本语句时,整个测试的结果状态是“fails”

    如果想在报告中生成“失败”报告,用本状态值。如果运行了本语句,则整个测试的状态为“Fail”。

    2micDone:仅向Result中产生报告信息,但不影响整个测试的结果状态。

    如果想在报告中生成“完成”报告,用本状态值。

    3micWarning:SResult中产生报告信息,但是不会中断测试的运行,也不影响测试的pass/fail status

    如果想在报告中生成“警告”报告,用本状态值。运行这个语句后,整个测试结果状态为“Warning”。

     ReportStepName  String 将在报告中显示的步骤名称(object name).
     Details  String 报告的详细信息。这些信息是本条报告的“Details”信息。
     in  N/A  Not in use

    举例: 下面的例子使用ReprotEvent方法来报告一个失败信息。

    Reporter.ReportEvent1, "Custom Step", "The user-defined step failed."

    Reporter.ReportEventmicFail, "Custom Step", "The user-defined step failed."
  • GetROProperty,GetTOProperties,GetTOProperty的区别

    2009-09-17 15:08:30

    GetToProperty:Returns the value of the specified property from the test object description.
    GetTOProperties:Returns the collection of properties and values used to identify the object.
    GetROProperty:Returns the current value of the test object property from the object in the application.
    举个例子:
    假设在库中有一个对象"窗口A",用于识别该对象的属性有2个,
    一个属性是"text",在库中记录的值是"QQQQ".
    另一个属性是"name",记录的值是"MM"
    在实际运行脚本时属性"text"的值是"PPPP"而不是"QQQQ"
    那么:
    Window("窗口A").GetToProperty("text")返回的是:"QQQQ"
    Window("窗口A").GetRoProperty("text")返回的是:"PPPP"
    Window("窗口A").GetToProperties("text")返回的是用于识别"窗口A"的两个属性和值的集合

  • QTP中DATA TABLE 和ACTIVE SCREEN不见了

    2009-09-14 15:52:46

     
       QTP中DATA TABLE 和ACTIVE SCREEN不见了?,在view中点击这两项也没反应,怎么样让其显示呢?
     
     
       解决方法:
    依次点击 Tools --> Options...--> General ,然后点击 Restore Layout 按钮就可以了
  • 当前安全设置禁止运行该页中的ActiveX控件.因此,该页可能无法显示"

    2009-09-14 15:47:32

      

        用网站来做录制时会有个ActiveX的报错:"当前安全设置禁止运行该页中的ActiveX控件.因此,该页可能无法显示"

       在成功录制完后,只要对QTP进行任何操作就会报错,点确定后倒是可以进行继续操作的,而且如果不点确定,报错框过子大约十秒就会自动消失,操作过程中这个报错框会时不时就跳出来,比较麻烦

    照以下那样设置就不能再报这个错了

    Options->Active Screen->Advanced...-> 选中Disabled和Load ActiveX controls

  • 我对于增加功能的测试用例考虑不足之处

    2009-07-29 09:25:23

             关于新增功能的测试点,主要是考虑是否可增加一个已存在的名称,按照我之前的理解,其测试用例无非就是输入一个已存在的字段名称,看程序是否给出提示。但是我确忽略了一个重要的问题,那就是如果在已存在的字段名称之前或之后加空格的话,程序是否会在对空格作出处理之后,仍给出提示信息。

             针对每一个测试点,不仅要纵向的(发散性思维)考虑,还要横向的考虑。

  • 2009年要有所收获

    2009-07-28 18:21:14

            2009年的7月即将过完了,而我在新公司也呆了4个月了。在这四个月里我学到了什么呢?

           1, 业务:

            对于公司业务的了解似乎也只达到50%

           原因:

           这四个月中后两个月,我之前熟悉的大部分需求都改变了。开发商讨修改需求,然后简单的写完需求分析文档,制定好开发计划,而我只是被告知什么时候可以开始进行测试了,在开发期间我也因为别的项目比较紧急,而没时间去了解需求,而向开发了解时,却发现他们也不是很清楚。不知道他们在这种状况下能开发出怎样的系统。而我又怎样去测试呢?

           2,测试能力:

           待续。。。。

     

            不要去抱怨外界环境阻碍了自己的成长进步,殊不知在外界环境的阻碍下自己可能成长的更快。

     

        

  • 加强发散性思维的培养

    2009-07-28 16:04:09

           最近公司在验收一个外包软件,测试工作由我担任,在验收标准中有个需求是这样的:下载的视频,图片必须缓存到手机本地。针对这一需求点,验收标准中没有提到可能带来的问题,而我在测试过程中也没有想过这一功能点会引发什么问题。就在验收前的会议上,在说到这个需求点时,技术总监随口就说了一个很明显的问题:随着用户对软件的使用,手机里的视频图片会越来越多,到时候就占满了手机内存,影响用户对其他功能的使用,所以软件应该增加自动清除缓存的机制。

           真是惭愧,我一个专业的测试人员既然没有意识到这么明显的问题,看来很是欠缺发散性思维啊。。。。

  • 让数据库性能测试性能有所保障【转载】

    2009-07-10 17:16:19

     
    2009年01月09日 星期五 15:07
    虽然说SQL Server数据库本身提供了很好的锁管理机制。但是,从某一方面来说,其实数据库只是一些客户端应用程序的“傀儡”。这主要是因为客户端应用程序对服务器上获取的锁几乎有完全的控制能力。客户端应用程序发出的查询请求以及对结果的处理方式,往往具有直接的控制能力。所以,如果应用程序在设计上稍有不合理的情况时,就会因为锁机制而导致阻塞。

      如当遇到如下几种情形时,就可能会导致阻塞情况的发生。

      一、客户端取消查询后没有回滚实务。

      查询是大部分应用程序经常发生的作业。但是,用户通过前台客户端应用程序查询后台数据库时,有时候往往会因为各种原因取消查询。如用户打开查询窗口后,因为死机或者用户觉得反映速度慢强制取消查询。但是,当客户端取消查询时,若没有加上回滚事务的语句,则此时,因为用户已经向服务器发送了查询请求,所以,后台数据库中所涉及的表,都已经加L上了锁。故即使用户取消查询后,所有在事务内获取的锁都将会保留。此时,若其他用户也需要查询这些表或者用户重新打开查询窗口想通过输入查询条件来提高系统响应速度时,就会发生阻塞的现象。

      二、客户端没有及时取得所有查询的结果。

      通常情况下,用户将查询请求发送到服务器之后,前台应用程序必须立即完成提取所有结果行。如果应用程序没有提取所有结果行的话,就会产生一个问题。因为只要应用程序没有及时提取所有结果,锁可能会留在表上而阻塞其他用户。既然应用程序已经将SQ语句递交给服务器,则该应用程序就必须提取所有的结果行。若应用程序不遵循这个原则的话(如因为一时疏漏而没有配置),就无法从根本上解决阻塞问题。

      三、查询执行时间过长。

      有些查询会耗用比较长的时间。如因为查询语句设计不合理或者查询设计到的表与记录比较多时,都会使得查询的执行时间加长。如有时候用户需要对纪录进行Update或者Delete操作时,如果涉及的行比较多时,就会获取很多的锁。这些锁无论是否最终升级到表锁,都会阻塞其他查询。

      故通常情况下,不要将长时间运行的决策支持查询和联机事务处理查询混在一起。

      当数据库遇到阻塞时,往往需要检查应用程序递交的SQL语句本身,以及检查与连接管理、所有结果行的处理等有关的应用程序行为。通常情况下,为了避免因锁冲突所导致的阻塞,笔者有如下建议。

      建议一:查询完成后提取所有的结果行。

      有些应用程序为了提高用户查询的响应速度,会有选择的提取所需要的记录。这个“小聪明”看起来很合理,但是,却会造成更大的浪费。因为查询结果没有及时提取的话,锁就不能释放。当其他人查询数据时,就会发生阻塞。

      所以,笔者建议在应用程序设计时,对于数据库中查询的记录要及时的提取。可以通过其他方式,如添加查询条件、或者后台查询的方式,来提高查询的效率。同时,在应用程序层面设置合理的缓存,也可以非常明显的提高查询效率。

      建议二:在事务执行时不要让用户输入内容。

      虽然在事务执性的过程中,可以让用户参与进来,以提高互动性。但是,我们数据库管理员往往不建议这么做。因为若要用户在事务执行过程中输入参数,会延长事务的执行时间。虽然人比较聪明,但是其反应速度仍然没有电脑那么快。所以,在执行过程中加入让用户参与的过程,会延长事务的等待时间。故除非有特殊的需要,不要在应用程序的执行过程中,提醒用户输入参数。一些事务执行必须的参数,最好在事先就提供。如可以通过变量等预先把需要的参数传入进去。

      建议三:使事务尽可能的简短。

      笔者认为,数据库管理员应该把一些问题简单化。当某个需求需要很多SQL语句才能够完成时,不妨把任务进行分解。同时,也把事务分解成一些简短的事务。

      如数据库中一张产品信息表,其记录数量有二百万条。现在处于管理的需要,把一次性更改其中的一百五十万条记录时。若通过一个事务进行更改,则其时间会比较长。若其中还牵涉到级联更新的话,则时间会更长。

      针对这种情况,我们就可以学着把事务简短话。如这个产品信息中,可能有产品类型字段。那么在更新数据时,我们能否不一次性进行更新。而是通过产品类别字段进行控制,

    对记录进行分次更新的。如此每个类别的更新事务所耗用的时间就可能会大大缩短。如此虽然操作的时候,会需要多个步骤。但是,往往可以有效避免阻塞情况的发生,提高数据库的性能。

      建议四:子查询与列表框,最好不要同时使用。

      有时候在应用程序设计的时候,通过列表框确实可以提高用户输入的速度与准确率,但是,若前台应用程序没有缓存机制的话,往往会造成阻塞。

      如在一个订单管理系统中,可能需要频繁的输入销售代表。为了用户输入的方便,销售代表往往设计成一个列表框。每次需要输入时,前台应用程序都会从后台中进行查询销售代表信息(如果应用程序没有涉及缓存)。一方面,子查询的速度本来就比较慢;其次,列表框会生成长时间运行的查询。这两个方面碰在一起,就可能导致应用程序提高运行时间过程的查询。从而对其他用户的查询,如系统管理员需要维护用户信息,而造成阻塞。

      所以,在应用程序设计时,子查询最好少用。而子查询与列表框同时使用,更需要禁止。若避免不了的话,则要在应用程序中实现缓存机制。如此的话,应用程序需要销售代表信息的时候,就会从应用程序缓存中取得,而不会每次都去查询数据库。

      同时,可以在这个列表框中设计“重新查询”功能。当用户信息有变更,如系统管理员加入了一个新的销售代表。在没有进行重新查询之前,由于应用程序是从自身的缓存中取得数据,所以没有刚更新的内容。此时,用户就需要运行重新查询功能,让前台应用程序重新从数据库中查询信息。这种设计,就可以提高列表框与子查询的执行时间,有效避免阻塞问题。

      建议五:在取消查询时设置回退事务。

      前台应用程序设计时,应该允许用户临时改变主意,取消查询。如用户查询所有产品信息时,可能会觉得响应时间比较长,难以忍受。此时,他们就会想到取消查询。在这种情况下,

    应用程序设计时就需要设计一个取消查询按钮。用户可以在查询的过程中随时点击这个按钮取消查询。同时,在这个按钮事件中,需要注意加入一个回滚命令。让数据库服务器能够及时对相关记录或者表进行解锁。

      同时最好能够采用锁或者查询超时机制。这主要是因为,有时候大量查询也会耗费用户主机的大量资源,而导致客户机死机。此时,若能够采用查询或者锁超时机制,即在查询超时过后,数据库服务器自动对相关对象进行解锁。这也是数据库管理员需要跟程序开发人员协商的一个问题。

      另外,对数据库连接采取显式控制、在所预计的并发用户全负荷下对应用程序进行承受能力测试、使用邦定连接、对每个查询使用查询超时与锁超时等等,这些手段都可以有效避免锁冲突产生的阻塞。当数据库管理员发现有阻塞的症状时,可以从这些方面出发,寻找解决的措施。

      从以上的分析中可以看出,SQL Server数据库锁是一把双刃剑。其在保障数据库数据一致性的同时,也会给数据库造成一些负面影响。如何把这些负面影响降到最低,就是我们数据库管理员的任务。在应用程序设计时,遵循如上建议,可以有效解决因锁问题产生的阻塞问题,提高数据库的性能。可见,要从根本上解决阻塞问题,需要数据库管理人员与程序开发人员共同努力。

  • JVM JRE JDK到底是什么?[转载]

    2009-07-10 15:52:01

    JVM JRE JDK到底是什么?

      JVM JRE JDK,这些东西到底是什么?

      我们在安装好JDK后就可以想象成我们已经买了一台安装好软件的新的电脑。

      JVM : Java Virtual Machine(Java虚拟机) 。所谓“虚拟机”顾名思义就是模拟出来的东西。就像是我们在用电脑看电视,但是电脑里并没有像电视机里面一样的硬件支持,但是我们仍然可以从电脑里接受电视台的节目。那是因为我们编写了一个可以模拟电视机硬件工作的软件运行在电脑的平台上面的原因。同样JVM就是模拟了电脑的硬件,它同样有着像CPU一样可以执行代码的功能。它的实现具体有:指令集 寄存器组 类文件格式 栈 垃圾收集堆 内存区。可以把它理解成是专门用来执行Java程序的一台机器。也就是说JVM提供了Java执行的硬件平台。JVM上执行的代码都存放在 .CLASS 文件中。JVM只执行字节码文件。

      JRE : Java Runtime Environment(Java运行环境)。就是可以运行Java程序的地方。就像是我们要在电脑上运行一个视频软件的时候必须在Windos或者是Linux操作系统上一样。那我们就可以把它看做是一个操作系统。也就是说JRE提供了Java执行的软件平台。在运行Java的过程中除了需要有JVM执行Java代码这个动作外,还需要Java API(Application Programming Interface,应用编程接口)说简单的就是“类库”。Java程序在运行中没有这些API是不行的,所以JRE包含JVM。

      JDK : Java Development ToolKit(Java开发工具包)。我们有了硬件和软件两个平台后就可以做我们自己想做的事情了。JDK就是我们用来做事情的工具,它包括JRE还有其他工具。我们所说版本的不同,也就是说它里面的工具有差异。就像是你不同的工具箱里放着不同的工具一样。举个例子:最常用的一个就是javac,它是把.java的文件翻译成.class文件的工具。然后让JVM来执行.class文件中的字节码。(就像电脑的CPU只认识0或1的道理)

      如果一台计算机的需求只是运行Java程序,而不是去编写Java程序的时候,它只需要安装JRE就可以了。现在大家知道JVM JRE JDK,这些东西到底是什么了吧。

  • LoadRunner出现error问题及解决方法总结[转载]

    2009-07-10 14:49:48

     

      一、Step download timeout (120 seconds)

      这是一个经常会遇到的问题,解决得办法走以下步骤:

      1、 修改run time setting中的请求超时时间,增加到600s,其中有三项的参数可以一次都修改了,HTTP-request connect timeout,HTTP-request receieve timeout,Step download timeout,分别建议修改为600、600、5000;run time setting设置完了后记住还需要在control组件的option的run time setting中设置相应的参数;

      2、 办法一不能解决的情况下,解决办法如下:

      设置runt time setting中的internet protocol-preferences中的advaced区域有一个winlnet replay instead of sockets选项,选项后再回放就成功了。切记此法只对windows系统起作用,此法来自zee的资料。

     

    ction.c(34): Error -27727: Step download timeout (120 seconds) has expired when downloading resource(s). Set the "Resource Page Timeout is a Warning" Run-Time Setting to Yes/No to have this message as a warning/error, respectively   [MsgId: MERR-27727]
    Action.c(34): web_link("****") highest severity level was "ERROR", 14506915 body bytes, 547 header bytes   [MsgId: MMSG-26388]Ending action Action.

    解决方法:


    一、取消选中run time settings-browser emulation-download non-html resources.解决 。

    二、run-time settings->preferences->advanced->options下设置

    Http-request connect timeout(sec) 把值120改为600,

    Http-request recive timeout(sec) 把值120改为600,

    测试结果分析的时候,在网页细分图中发现,搜索页面下会有一个登陆页面的aspx,初步分析是搜索超时造成返回登陆页面(页面有超时设置,多久没有登陆系统会返回登陆界面),按照上述方法解决。

    另附上一篇看到的日志

    来自:http://kaixin322.blog.sohu.com/114120249.html

    作者:风~自由自在

    这两天测试并发修改采购收货时,录制回放正确,运行脚本,集合点3个并发时,却老是出错

    如下:

    Action.c(30): Error -26612: HTTP Status-Code=500 (Internal Server Error) forhttp://192.168.100.88:88/Purchase/stockin_action.asp?Oper=Edt

    解决过程:按Help提示在浏览器输入原地址,发现提示“请重新登陆系统”。

    被此误导,偶以为是Session ID、或Cookie失效,于是尝试找关联,花了N多时间。可是脚本里确实不存在需要关联的地方呀,系统默认关联了。

    与程序员沟通,证实此过程不会涉及到Session ID 或Cookie。那为什么?

    因为集合点下一站就是修改的提交操作,于是查找web_submit_data-->定位查找Log文档

    注意点:怎么找log文件

    -->Controller-->Results-->Results Settings 查找本次log文件保存目录-->到该目录下查找log文件夹-->打开

    惊喜的发现其中竟然有所有Vuser 的运行log。-->打开Error 查找报错的Vuser-->打开相应的log文件

    查找error,然后偶发现了一段让偶热泪盈眶的话:

    Action.c(30):     <p>Microsoft OLE DB Provider for ODBC Drivers</font> <font face="宋体" size=2>错误 '800040
    Action.c(30):     05'</font>\n
    Action.c(30):     <p>\n
    Action.c(30):     <font face="宋体" size=2>[Microsoft][ODBC SQL Server Driver][SQL Server]事务(进程 ID  53)
    Action.c(30):    与另一个进程已被死锁在  lock 资源上,且该事务已被选作死锁牺牲品。请重新运行该事务。</font>
    Action.c(30):     \n
    Action.c(30):     <p>\n
    Action.c(30):     <font face="宋体" size=2>/Purchase/stockin_action.asp</font><font face="宋体" size=2>,行
    Action.c(30):     205</font>
    Action.c(30): Error -26612: HTTP Status-Code=500 (Internal Server Error) for "http://192.168.100.88:88/Purchase/stockin_action.asp?Oper=Edt"   [MsgId: MERR-26612]
    Action.c(30): t=37758ms: Closing connection to 192.168.100.88 after receiving status code 500   [MsgId: MMSG-26000]
    Action.c(30): t=37758ms: Closed connection to 192.168.100.88:88 after completing 43 requests   [MsgId: MMSG-26000]
    Action.c(30): t=37760ms: Request done "http://192.168.100.88:88/Purchase/stockin_action.asp?Oper=Edt"   [MsgId: MMSG-26000]
    Action.c(30): web_submit_data("stockin_action.asp") highest severity level was "ERROR", 1050 body bytes, 196 header bytes   [MsgId: MMSG-26388]
    Ending action Action. [MsgId: MMSG-15918]
    Ending iteration 1. [MsgId: MMSG-15965]
    Ending Vuser... [MsgId: MMSG-15966]
    Starting action vuser_end. [MsgId: MMSG-15919]

    解决了。。。。。。。

    很寒。由此可以看出,查看日志文件是件多么重要的事情啊!!!!!
    其实并发死锁本来就是本次的重点,之前是写事务,但没有做整个页面的锁定,只是写在SQL里。程序员说这样容易出现页面错误,

    又改成页面锁定,具体怎么锁偶没看懂asp外行。之前事务冲突,偶让他写个标志,定义个数值字段增一,偶就可以直观看出来了。

    这次改成页面就删掉这些标志了,于是出错就无处可寻。

    这次最大的收获就是知道怎么查找Controller的log文件。以后看到Error就不会被牵着鼻子走了~~~~

     

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

    血的教训~~

    再次碰到26612错误,此次偶没认真查看log,又重蹈覆辙。

    找了N久,还是没发现问题所在。后来索性又打印出所有log。真理就显示出来了。。

    so偷懒不得~~

      二、问题描述Connection reset by peer

      这个问题不多遇见,一般是由于下载的速度慢,导致超时,所以,需要调整一下超时时间。

      解决办法:Run-time setting窗口中的‘Internet Protocol’-‘Preferences’设置set advanced options(设置高级选项),重新设置一下“HTTP-request connect timeout(sec),可以稍微设大一些”;

      三、问题描述connection refused

      这个的错误的原因比较复杂,也可能很简单也可能需要查看好几个地方,解决起来不同的操作系统方式也不同;

      1、 首先检查是不是连接weblogic服务过大部分被拒绝,需要监控weblogic的连接等待情况,此时需要增加acceptBacklog,每次增加 25%来提高看是否解决,同时还需要增加连接池和调整执行线程数,(连接池数*Statement Cache Size)的值应该小于等于oracle数据库连接数最大值;

      2、 如果方法一操作后没有变化,此时需要去查看服务器操作系统中是否对连接数做了限制,AIX下可以直接vi文件limits修改其中的连接限制数,还有 tcp连接等待时间间隔大小,wiodows类似,只不过wendows修改注册表,具体修改方法查手册,注册表中有TcpDelayTime项;

      四、问题描述open many files

      问题一般都在压力较大的时候出现,由于服务器或者应用中间件本身对于打开的文件数有最大值限制造成,解决办法:

      1、 修改操作系统的文件数限制,aix下面修改limits下的nofiles限制条件,增大或者设置为没有限制,尽量对涉及到的服务器都作修改;

      2、 方法一解决不了情况下再去查看应用服务器weblogic的commonEnv.sh文件,修改其中的nofiles文件max-nofiles数增大,应该就可以通过了,具体就是查找到nofiles方法,修改其中else条件的执行体,把文件打开数调大;修改前记住备份此文件,防止修改出错;

      五、问题描述has shut down the connection prematurely

      一般是在访问应用服务器时出现,大用户量和小用户量均会出现;

      来自网上的解释:

      1> 应用访问死掉

      小用户时:程序上的问题。程序上存在数据库的问题

      2> 应用服务没有死

      应用服务参数设置问题

      例如:

      在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25%

      Java连接池的大小设置,或JVM的设置等

      3> 数据库的连接

      在应用服务的性能参数可能太小了

      数据库启动的最大连接数(跟硬件的内存有关)

      以上信息有一定的参考价值,实际情况可以参考此类调试。

      如果是以上所说的小用户时:程序上的问题。程序上存在数据库的问题,那就必须采用更加专业的工具来抓取出现问题的程序,主要是程序中执行效率很低的sql语句,weblogic可以采用introscope定位,期间可以注意观察一下jvm的垃圾回收情况看是否正常,我在实践中并发500用户和600用户时曾出现过jvm锯齿型的变化,上升下降都很快,这应该是不太正常的;

      六、问题描述Failed to connect to server

      这个问题一般是客户端链接到服务失败,原因有两个客户端连接限制(也就是压力负载机器),一个网络延迟严重,解决办法:

      1、 修改负载机器的tcpdelaytime注册表键值,改小;

      2、 检查网络延迟情况,看问题出在什么环节;

      建议为了减少这种情况,办法一最好测试前就完成了,保证干净的网络环境,每个负载机器的压力测试用户数不易过大,尽量平均每台负载器的用户数,这样以上问题出现的概率就很小了。

    ErrorFailed to connect to server192.168.2.192[10060]Connection

    Errortimed out ErrorServer192.168.2.192has shut down the connection prematurely

    原因:

    1>     应用访问死掉

    小用户时:程序上的问题。程序上存在数据库的问题

    2>     应用服务没有死

    应用服务参数设置问题

    例如:

    在许多客户端连接Weblogic应用服务器被拒绝,而在服务器端没有错误显示,则有可能是Weblogic中的server元素的AcceptBacklog属性值设得过低。如果连接时收到connection refused消息,说明应提高该值,每次增加25

    Java连接池的大小设置,或JVM的设置等

    3>     数据库的连接

    在应用服务的性能参数可能太小了

    数据库启动的最大连接数(跟硬件的内存有关)

    ErrorPage download timeout120secondshas expired

    分析原因:

    应用服务参数设置太大导致服务器的瓶颈

    页面中图片太多

    在程序处理表的时候检查字段太多

     

    七:LR回放中highest severity level was"ERROR"的解决方

     

    在录制时一切正常,而回放时提示类似如下错误;或者回放时问题,在场景中运行时报错,查看结果日志,如下:

     Action.c(41): web_submit_form. highest severity level was "ERROR",   0 body bytes, 0 header bytes     [MsgId: MMSG-27178]"

     处理方法如下:

    一:打开recording options,在internet protocol下的recording中选择recording level为HTML-based script,点击HTML Advanced,选择script. type为A script. containing explicit.即可。

    二:
    取消选中run time settings-browser emulation-download non-html resources.解决 
    注:方法一解决了我的问题
     
    八:Warning -27077: The "vuser_init" section contains web function(s) when the "Simulate a new user on each iteration" Run-Time Setting is ON.  This may produce unpredictable results with multiple iterations   [MsgId: MWAR-27077]
    通过LR来录制登录过程并生成脚本,设置了自动关联,并回放录制脚本,观察回放日志发现没有报error信息,说明脚本没有问题,将脚本放入Controller中设置100个用户设置运行,发现运行一段时间开始报错,这里先不说报什么错,继续观察脚本,回到Vuser中调试,再次回访观察日志文件,发现标题上的错误信息:

    仔细分析发现这里的警告信息提示"Simulate a new user on each iteration",表示在每次迭代都模拟一个新的用户,对于web登录系统来说,通常都是用session来保存cookie信息,而"Simulate a new user on each iteration"是LR中的一项缺省设置,按照LR手册来讲,这个选项一般带来的副作用并不十分明确。我们再来做另外一个实例,就是一个数据添加页面,通过录制脚本来添加数据,回放过程中也提示该信息,没有提示error信息,将脚本放入Controller中运行,设置100个用户,设置每个用户迭代运行2次,按照计算来讲就是添加200条记录,开始运行,结果发现实际数据库中只新增了100条记录,再回头寻找原因发现脚本回放中的"Simulate a new user on each iteration",会不会跟这个有关系,根据理解,每次迭代模拟一个新用户来运行,而且该设置在LR中缺省,并默认也是情况缓存的,也就是说同时情况了session信息,导致每次都需要重新来建立新的session才能可以添加数据,在分析日志发现在循环迭代中有一个访问页面timeout.jsp,从这里可以发现是session超时引起的,可以猜想在两次迭代中肯定是清除了cookie。在LR中找到"Simulate a new user on each iteration"的设置区域,如下图:

    通过上图发现LR默认就是设置勾选"Simulate a new user on each iteration"该选项,去掉勾选之后再回放脚本,观察回放日志发现,Warning信息已经消失了。

    同样将脚本放置Contoller中继续之前设置,开始循环运行,结果会如期而至的。

    通过两个简单的实例来说明LR中脚本调试的一些关注点,对于日志中警告信息并不是没有原因的,既然是警告信息就总有可能遇到,不然系统也不会给出提示,当然在web测试中可能还是特别的多见,其实在做关联的时候也经常有warning提示。如果大家做过客户端软件的压力测试时,应该就比较熟悉warning了,通常一些客户端软件由于一些特定的协议,LR支持不太好,总会在录制的脚本运行之后发现有丢包现象,但是不会以错误的形式来提示,而是在回放日志以warning来提示。

     
  • 工薪阶层如何理财

    2009-07-08 15:23:49

    买一些人身保险,存一些钱应急。其余量入为出买基金定投。基金是专家帮你理财。

     准备过程

    投资人购买基金前,需要认真阅读有关基金的招募说明书、基金契约及开户程序、交易规则等文件,各基金销售网点应备有上述文件,以备投资人随时查阅。

    开户的方式有3种:

    1 通过股票账户买基金
    2 在银行柜台买基金
    3 在银行开通网上银行,然后直接登陆基金公司网站直接选择买


    到基金公司和银行网点及证券公司网点办理基金开户或者购买的流程基本一致:

    1、到网点柜台填写《开放式基金账户申请表》→填妥的表格和有效证件提交柜台业务人员→客户自行设置交易密码和查询密码→柜台人员回复《开户受理回执》→客户于T+2日可通过电话、网上、或者前往代销网点查询申请确认结果。

    2、
    个人投资者要携带代理行借记卡,有效身份证件(身份证、军人证或武警证 

    携带好准备资料,客户在银行的柜台网点填写基金业务申请表格,填写完毕后领取业务回执,个人投资者还要领取基金交易卡,在办理基金业务当日两天以后可以到柜台领取业务确认书。在领取了业务确认书后,单位或者个人就可以从事基金的购买和赎回。

    ◆如何购买

    在完成开户准备之后,你就可以自行选择时机购买基金。个人投资者可以带上代理行的借记卡和基金交易卡,到代销的网点柜台填写基金交易申请表格(机构投资者则要加盖预留印鉴),必须在购买当天的15:00以前提交申请,由柜台受理,并领取基金业务回执。在办理基金业务两天之后,投资者可以到柜台打印业务确认书。

    ◆如何选基金

    首先要确定自己承受风险的能力,根据风险选好自己基金的类型:

    从投资风险角度看,几种基金给投资人带来的风险是不同的。其中股票基金风险最高,货币市场基金风险最小,债券基金的风险居中。相同品种的投资基金由于投资风格和策略不同,风险也会有所区别。

    选好类型确定投资金额:


    如果你资金比较少,可以定期定额投资(最低就每个月100起) ,定投有个优点可以靠长期性分摊你目前高净值的风险,随它涨跌呢不要因为一时是涨碟后要赎回,只是要设定停损点-20%, 相信专业长期投资定期定额会有让你不错的收益.

    最后是最重要的,涉及你的收益,选基具体的基金:

    决定基金业绩的因素主要取决于:基金资产配置、市场大势表现、基金经理能力、交易成本控制及道德风险防范.

    弄清基金表现走势赢过大盘的意义。“基金与大盘走势比较图”的意义,在于让投资人检视该基金的长期绩效是否打败大盘。所以,此图应该是以成立日为基准的完整图表。另外,您还可以比较该基金走势的波动幅度。如果该基金的高低点都比大盘波动来得剧烈,则表示该基金的波动比大盘大,风险也相对较大。另一方面,其实有的基金并不适合与大盘做比较,这里面有一个选择合适的比较业绩基准的问题。比方说,有很多基金都会投资一部分债券,这样的话,在选择业绩基准时,完全用大盘指数就不合适,比较出来就会有一定的误导。


    看懂风险系数。风险系数是评估基金风险的指标,通常是以“标准差”、“贝塔系数”与“夏普指数”三项来表示。新手只要大约掌握以下原则就行了:“标准差”愈小、波动风险愈小;“贝塔系数”小于1、风险愈小;“夏普指数”愈高愈好,该指数越高,表示基金在考虑风险因素后的回报情况愈高,对投资人愈有利

    谁是基金经理人。基金经理的操盘资历、选股哲学、稳定性都会影响基金的绩效。建议先到各基金公司网站上去查询该基金经理人的基本数据与资历,多了解一下基金经理的风格和过往业绩。

    简单的说,选好的基金经理,然后看这个基金的历史走逝(风险系数参考)特别它在熊市中的表现.(所以推荐买有好表现的老基金或次新基金)


    债券型基金本人的推荐是:长盛债券
    长盛中信全债基金是一只债券增强型指数基金,跟踪中信全债指数。但事实上投资特性类似于偏债混合基金,其股票投资比例不超过15%。该基金持股风格随市场行情转变较为及时,06、07年重仓持有大盘股而积累了一定的收益,08年持有中盘股适时规避大盘股调整带来的风险。作为债券类基金中唯一一只跟踪全债指数的基金,我们看好长盛债券的后期表现。

  • 面试

    2009-07-07 16:35:02

1275/7<1234567>
Open Toolbar