发布新日志

  • SeleniumRC--- BrowserLauncherFactory.java

    2009-10-08 21:58:55

    2334
     
    2350
     
    2350
     
    BrowserLauncherFactory.java
    _>4545     private static final Map<String, Class<? extends BrowserLauncher>> supportedBrowsers = new HashMap<String, Class<? extends BrowserLauncher>>();
     4646 
     4747     static {
    <>48 -        supportedBrowsers.put("firefox", FirefoxCustomProfileLauncher.class);
      48+        supportedBrowsers.put("firefoxproxy", FirefoxCustomProfileLauncher.class);
      49+        supportedBrowsers.put("firefox", FirefoxChromeLauncher.class);

    4950         supportedBrowsers.put("chrome", FirefoxChromeLauncher.class);
     5051         supportedBrowsers.put("firefox2", Firefox2Launcher.class);
     5152         supportedBrowsers.put("firefox3", Firefox3Launcher.class);
    <>52 -        supportedBrowsers.put("iexplore", InternetExplorerCustomProxyLauncher.class);
      53+        supportedBrowsers.put("iexploreproxy", InternetExplorerCustomProxyLauncher.class);

    5354         supportedBrowsers.put("safari", SafariFileBasedLauncher.class);
    <> 55+        supportedBrowsers.put("safariproxy", SafariCustomProfileLauncher.class);

    5456         supportedBrowsers.put("iehta", HTABrowserLauncher.class);
    <> 57+        supportedBrowsers.put("iexplore", HTABrowserLauncher.class);
    <_5558         supportedBrowsers.put("opera", OperaCustomProfileLauncher.class);
     5659         supportedBrowsers.put("piiexplore", ProxyInjectionInternetExplorerCustomProxyLauncher.class);
     5760         supportedBrowsers.put("pifirefox", ProxyInjectionFirefoxCustomProfileLauncher.class);
  • 第三次查看selenium reference

    2009-07-06 16:37:53

    之前一两次 只看得懂一些常用命令,之前还担忧 以前写的用例教程没带出来。这次也许是因为环境的变化,第三次看selenium reference, 感觉明白很多,连之前一头雾水的RC,现在也渐渐有眉目,接下来搭环境了。好记忆不如烂笔头,把 reference 发布出来,便于以后查看或供他人翻阅

    一、  Commands (命令)

    • Action
      对当前状态进行操作
      失败时,停止测试
    • Assertion
      校验是否有产生正确的值
    • Element Locators
      指定HTML中的某元素
    • Patterns
      用于模式匹配

    1. Element Locators (元素定位器)

    • id=id
      id locator 指定HTML中的唯一id的元素 
    •  name=name
      name locator指定 HTML中相同name的元素中的第一个元素
    •  identifier=id
      identifier locator 首先查找HTML是否存在该id的元素, 若不存在,查找第一个该name的元素 
    • dom=javascriptExpression
      dom locator用JavaScript表达式来定位HTML中的元素,注意必须要以"document"开头
      例如:
      dom=document.forms['myForm'].myDropdown
      dom=document.images[56]
    •  xpath=xpathExpression
      xpath locator用 XPath 表达式来定位HTML中的元素,必须注意要以"//"开头
      例如:
      xpath=//img[@alt='The image alt text']
      xpath=//table[@id='table1']//tr[4]/td[2]
    •  link=textPattern
      link locator 用link来选择HTML中的连接或锚元素
      例如:
      link=The link text
    • 在没有locator前序的情况下 Without a locator prefix, Selenium uses:
      如果以"document."开头,则默认是使用 dom locator,如果是以"//"开头,则默认使用xpath locator,其余情况均认作identifier locator

    2. String Matching Patterns (字符串匹配模式)

    • glob:patthern
      glob模式,用通配符"*"代表任意长度字符,"?"代表一个字符
    • regexp:regexp
      正则表达式模式,用JavaScript正则表达式的形式匹配字符串
    • exact:string
      精确匹配模式,精确匹配整个字符串,不能用通配符
    • 在没有指定字符串匹配前序的时候,selenium 默认使用golb 匹配模式

    3. Select Option Specifiers (Select选项指定器)

    • label=labelPattern
      通过匹配选项中的文本指定选项
      例如:label=regexp:^[Oo]ther
    • value=valuePattern
      通过匹配选项中的值指定选项
      例如:value=other
    • id=id
      通过匹配选项的id指定选项
      例如: id=option1
    • index=index
      通过匹配选项的序号指定选项,序号从0开始
      例如:index=2
    • 在没有选项选择前序的情况下,默认是匹配选项的文本

    二、 Actions
    描述了用户所会作出的操作。
    Action 有两种形式: action和actionAndWait, action会立即执行,而actionAndWait会假设需要较长时间才能得到该action的相响,而作出等待,open则是会自动处理等待时间。

    • click
      click(elementLocator)
      - 点击连接,按钮,复选和单选框
      - 如果点击后需要等待响应,则用"clickAndWait"
      - 如果是需要经过JavaScript的alert或confirm对话框后才能继续操作,则需要调用verify或assert来告诉Selenium你期望对对话框进行什么操作。
      click aCheckbox  
      clickAndWait submitButton  
      clickAndWait anyLink  
    • open
      open(url)
      - 在浏览器中打开URL,可以接受相对和绝对路径两种形式
      - 注意:该URL必须在与浏览器相同的安全限定范围之内
      open /mypage  
      open http://localhost/  
    • type
       type(inputLocator, value)
      - 模拟人手的输入过程,往指定的input中输入值
      - 也适合给复选和单选框赋值
      - 在这个例子中,则只是给钩选了的复选框赋值,注意,而不是改写其文本
      type nameField John Smith
      typeAndWait textBoxThatSubmitsOnChange newValue
    • select
      select(dropDownLocator, optionSpecifier)
      - 根据optionSpecifier选项选择器来选择一个下拉菜单选项
      - 如果有多于一个选择器的时候,如在用通配符模式,如"f*b*",或者超过一个选项有相同的文本或值,则会选择第一个匹配到的值
      select  dropDown Australian Dollars
      select  dropDown index=0
      selectAndWait currencySelector value=AUD
      selectAndWait currencySelector label=Auslian D*rs
    •  goBack,close
      goBack()
      模拟点击浏览器的后退按钮
      close()
      模拟点击浏览器关闭按钮
    • selectWindow
      select(windowId)
      - 选择一个弹出窗口
      - 当选中那个窗口的时候,所有的命令将会转移到那窗口中执行
      selectWindow myPopupWindow  
      selectWindow null  
    • pause
      pause(millisenconds)
      - 根据指定时间暂停Selenium脚本执行
      - 常用在调试脚本或等待服务器段响应时
      pause 5000  
      pause 2000  
    • fireEvent
       fireEvent(elementLocatore,evenName)
      模拟页面元素事件被激活的处理动作
      fireEvent textField focus
      fireEvent dropDown blur
    • waitForCondition
      waitForCondition(JavaScriptSnippet,time)
      - 在限定时间内,等待一段JavaScript代码返回true值,超时则停止等待
      waitForCondition var value=selenium.getText("foo"); value.match(/bar/); 3000
    • waitForValue
      waitForValue(inputLocator, value)
      - 等待某input(如hidden input)被赋予某值,
      - 会轮流检测该值,所以要注意如果该值长时间一直不赋予该input该值的话,可能会导致阻塞
      waitForValue finishIndication isfinished
           
    • store,stroreValue
      store(valueToStore, variablename)
      保存一个值到变量里。
      该值可以由自其他变量组合而成或通过JavaScript表达式赋值给变量
      store Mr John Smith fullname
      store $.{title} $.{firstname} $.{suname} fullname
      store javascript.{Math.round(Math.PI*100)/100} PI
      storeValue inputLocator variableName

      把指定的input中的值保存到变量中

      storeValue userName userID
      type userName $.{userID}
    • storeText, storeAttribute
      storeText(elementLocator, variablename)
      把指定元素的文本值赋予给变量
      storeText currentDate expectedStartDate
      verifyValue startDate $.{expectedStartDate}

      storeAttribute(.{}elementLocator@attributeName,variableName.{)
      把指定元素的属性的值赋予给变量

      storeAttribute input1@class  classOfInput1
      verifyAttribute input2@class $.{classOfInput1}
    • chooseCancel.., answer..
      chooseCancelOnNextConfirmation()
      - 当下次JavaScript弹出confirm对话框的时候,让selenium选择Cancel
      - 如果没有该命令时,遇到confirm对话框Selenium默认返回true,如手动选择OK按钮一样
      chooseCancelOnNextConfirmation     

      - 如果已经运行过该命令,当下一次又有confirm对话框出现时,也会同样地再次选择Cancel
      answerOnNextPrompt(answerString)
      - 在下次JavaScript弹出prompt提示框时,赋予其anweerString的值,并选择确定

      answerOnNextPrompt Kangaroo  

    三、 Assertions
    允许用户去检查当前状态。两种模式: Assert 和 Verify, 当Assert失败,则退出测试;当Verify失败,测试会继续运行。

    • assertLocation, assertTitle
      assertLocation(relativeLocation)
      判断当前是在正确的页面
      verifyLocation /mypage  
      assertLocation /mypage  
    • assertTitle(titlePattern)
      检查当前页面的title是否正确
      verifyTitle My Page  
      assertTitle My Page  
    • assertValue
      assertValue(inputLocator, valuePattern)
      - 检查input的值
      - 对于 checkbox或radio,如果已选择,则值为"on",反之为"off"
      verifyValue nameField John Smith
      assertValue document.forms[2].nameField John Smith
    • assertSelected, assertSelectedOptions
      assertSelected(selectLocator, optionSpecifier)
      检查select的下拉菜单中选中的选型是否和optionSpecifer(Select选择选项器)的选项相同
      verifySelected dropdown2 John Smith
      verifySelected dorpdown2 value=js*123
      assertSelected document.forms[2].dropDown label=J*Smith
      assertSelected document.forms[2].dropDown index=0
    • assertSelectOptions(selectLocator, optionLabelList)
      - 检查下拉菜单中的选项的文本是否和optionLabelList相同
      - optionLabelList是以逗号分割的一个字符串
      verifySelectOptions dropdown2 John Smith,Dave Bird
      assertSelectOptions document.forms[2].dropdown Smith,J,Bird,D
    • assertText
      assertText(elementLocator,textPattern)
      - 检查指定元素的文本
      - 只对有包含文本的元素生效
      - 对于Mozilla类型的浏览器,用textContent取元素的文本,对于IE类型的浏览器,用innerText取元素文本
      verifyText statusMessage Successful
      assertText //div[@id='foo']//h1 Successful
    • assertTextPresent, assertAttribute
      assertTextPresent(text)
      检查在当前给用户显示的页面上是否有出现指定的文本
      verifyTextPresent You are now logged in  
      assertTextPresent You are now logged in  
    • assertAttribute(.{}elementLocator@attributeName.{, ValuePattern)
      检查当前指定元素的属性的值
      verifyAttribute txt1@class bigAndBlod
      assertAttribute document.images[0]@alt alt-text
      verifyAttribute //img[@id='foo']/alt alt-text
    • assertTextPresent, etc.
      assertTextPresent(text)
      assertTextNotPresent(text)
      assertElementPresent(elementLocator)
       verifyElementPresent   submitButton   
       assertElementPresent   //img[@alt='foo']    assertElementNotPresent(elementLocator)
    • assertTable
      assertTable(cellAddress, valuePattern)
      - 检查table里的某个cell中的值
      - cellAddress的语法是tableName.row.column, 注意行列序号都是从0开始
      verifyTable myTable.1.6 Submitted
      assertTable results0.2 13
    • assertVisible, nonVisible
      assertVisible(elementLocator)
      - 检查指定的元素是否可视的
      - 隐藏一个元素可以用设置css的'visibility'属性为'hidden',也可以设置'display'属性为'none'
      verfyVisible postcode  
      assertVisible postcode  
    • assertNotVisible(elementLocator)
       verfyNotVisible   postcode   
       assertNotVisible   postcode   
    • Editable, non-editable
      assertEditable(inputLocator)
      检查指定的input是否可以编辑
      verifyEditable shape  
      assertEditable colour  
    • assertNotEditable(inputLocator)
      检查指定的input是否不可以编辑
    • assertAlert
      assertAlert(messagePattern)
      - 检查JavaScript是否有产生带指定message的alert对话框
      - alert产生的顺序必须与检查的顺序一致
      - 检查alert时会产生与手动点击'OK'按钮一样的效果。如果一个alert产生了,而你却没有去检查它,selenium会在下个action中报错。
      - 注意:Selenium 不支持 JavaScript. 在onload()事件时 调用alert();在这种情况下,Selenium需要你自己手动来点击OK.
    • assertConfirmation
      assertConfirmation(messagePattern)
      - 检查JavaScript是否有产生带指定message的confirmation对话框和alert情况一样,confirmation对话框也必须在它们产生的时候进行检查
      - 默认情况下,Selenium会让confirm() 返回true, 相当于手动点击Ok按钮的效果。你能够通过chooseCancelOnNextConfirmation命令让confirm()返回false.同样 地,如果一个cofirmation对话框出现了,但你却没有检查的话,Selenium将会在下个action中报错
      - 注意:在Selenium的环境下,confirmation对话框框将不会再出现弹出显式对话框
      - 注意:Selenium不支持在onload()事件时调用confirmation对话框,在这种情况下,会出现显示confirmatioin对话框,并需要你自己手动点击。
    •  assertPrompt
      assertPrompt(messagePattern)
      - 检查JavaScript是否有产生带指定message的Prompt对话框
      - 你检查的prompt的顺序Prompt对话框产生的顺序必须相同
      - 必须在verifyPrompt之前调用answerOnNextPrompt命令
      - 如果prompt对话框出现了但你却没有检查,则Selenium会在下个action中报错
      answerOnNextPrompt Joe  
      click id=delegate  
      verifyPrompt Delegate to who?  

    四、 Parameters and Variables
    参数和变量的声明范围由简单的赋值到JavaScript表达式赋值。
    Store,storeValue 和storeText 为下次访问保存值。
    在Selenium内部是用一个叫storeVars的map来保存变量名。

    • Variable Substitution 变量替换
      提供了一个简单的方法去访问变量,语法 $.{xxx}
      store Mr title
      storeValue nameField surname
      store $.{title} $.{suname} fullname
      type textElement Full name is: $.{fullname}
    •  JavaScript. Evaluation JavaScript赋值
      你能用JavaScript来构建任何你所需要的值。
      这个参数是以javascript开头,语法是 javascript.{'with a trailing'}。
      可以通过JavaScript表达式给某元素赋值。
      store javascript.{'merchant'+(new Date()).getTime()} merchantId
      type textElement javascript.{storedVars['merchantId'].toUpperCase()}
    • Generating Unique values 产生唯一值.  
      问题:你需要唯一的用户名
      解决办法: 基于时间来产生用户名,如'fred'+(new Date().getTime())
  • ID-card表达结构

    2009-05-22 11:54:09

    当今的身份证号码有15位和18位之分。1985年我国实行居民身份证制度,当时签发的身份证号码是15位的,
    1999年签发的身份证由于年份的扩展(由两位变为四位)和末尾加了效验码,就成了18位。这两种身份证号码将在相当长的一段时期内共存。
    两种身份证号码的含义如下:
    18位的身份证号码 如:130429####%%%%0078

    旧身份证号码(15位数)的格式(位数从左到右排列):一二位是省属的行政号,三四位是省级市属的行政号,
    五六位是省级市的区属行政号,七八位是持证人的出生年份的后两位数,九十位是持证人出生月份,十一十二位是持证人出生日,
    最后三位是编码号(给出生年月日相同的人排序用,按男单女双编排,
    但099是特殊编号,仅供百岁老人用)

    三、号码的结构和表示形式
    1、号码的结构
    公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
    2、地址码
    表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
    3、出生日期码
    表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
    4、顺序码
    表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。


    15位的身份证号码:

    (1)1~6位为地区代码

    (2)7~8位为出生年份(2位),9~10位为出生月份,11~12位为出生日期

    (3)第13~15位为顺序号,并能够判断性别,奇数为男,偶数为女。
    设身份证17位如下:
    34052419800101001

    i       18 17 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1

    ai       3  4  0  5  2  4  1  9  8  0  0  1  0  1  0  0  1 a1

    Wi       7  9 10  5  8  4  2  1  6  3  7  9 10  5  8  4  2  1

    ∑(ai×Wi) =(21+36+0+25+16+16+2+9+48++0+0+9+0+5+0+0+2) = 189
    189 ÷ 11 = 17 + 2/11
    ∑(ai×Wi)(mod 11) = 2
       然后根据计算的结果,从下面的表中查出相应的校验码,其中X表示计算结果为10:
    ∑(ai×WI)(mod 11)   0 1 2 3 4 5 6 7 8 9 10
    校验码字符值ai     1 0 X 9 8 7 6 5 4 3  2
     根据上表,查出计算结果为2的校验码为X,所以该人员的公民身份号码应该为 34052419800101001X,是正确的。 
  • 谈JDBC SQL SERVER 不能连接的问题

    2009-04-27 00:06:55

    小技巧:查看端口。可在cmd里输入netstat -an 命令!
    今天,用MyEclipse连接SQL Server2000就是配置出错!错误为Error establishing socket错误!
      首先,需要下载SQL_Serve20000的sp3补丁,下载安装后会发现1433端口已经打开了,再执行程序。但我没有下载SQL_Serve20000的sp3补丁,而是下载了SQL_Serve20000的sp4补丁,顺便再下载了SQL Server 2000 Driver for JDBC Service Pack 3 http://download.microsoft.com/download/4/1/d/41d3e9c0-64d1-451e-947b-7a4cba273b2d/setup.exe ,在下载先安装SQL Server 2000 Driver for JDBC Service Pack 3,再安装SQL_Serve20000的sp4补丁!就OK啦!
    原因是与socket建立连接错误
    可能是没启动SQL Server2000服务器
    你要连接的数据库的服务器没有启动

    或者是需要SQL Server2000升级包,可以肯定出现这个错误很大概率是没有安装SQL Server升级包

    由于微软公司关于一个安全性问题的考虑,让个人版的sql server 不监听1433端口.故在通过驱动连接数据库的时候会出现该Error establishing socket错误,所以如果通过jdbc连接sql server 就必须给数据库打补丁,补丁包下下来是exe文件,执行它,随便选个文件夹运行,然后再打开该文件夹,执行里面的setup.bat,这样你的数据库就打上了补丁了,并且1433端口就监听了,然后你在执行你的连接文件,就可以了(第一次的exe是解压,解压完再执行setup.bat才是安装)
    有的时候还会出现一个问题说是什么sa用户没有建立可信任的连接,好象是这么个意思我记得不是很清楚了,这是因为你安装数据库的时候选用的是windows验证,应该选用混合模式,你打开企业管理器,选操作,点属性,在安全性中选择sql server 和windows这个选项,点确定,然后重启sqlserver和你的web服务器,在运行你的连接文件应该就可以了,
       就解决啦!
    错误提示如标题所示。看来很可能是驱动程序出错了导致连接不上数据库,因此我检查是否启动数据库服务器,服务器已经启动,看来是我用的jdbc的驱动出错了。驱动程序出错总是一件很麻烦的事情。为了保险起见我还是编写了一个用jdbcodbc驱动的小程序来链接数据库,结果是运行正常的。看来是jdbc for sql server2000出错了。这时我想起实验室的一位仁兄用我的机器在另外一个帐号下面又安装了一个sql server2000的实例很可能那就是原因的所在,新装的实例使我以前对sql server2000进行sp4的升级失效导致驱动程序也不能用(jdbc的驱动程序要求sql server2000版本要sp3以上)。于是我重新对sql server升级到sp4问题解决了。
    下面是我在网上找到的一些相同现象的解决方法:问题现象虽然相同但是原因可能不同方法也各异。
    MS SQL2000 (Error establishing socket)错误的解决办法-SQL请选用混和安装模式
    作者:YuLimin
    * Error: get DB connection error. Ex. msg: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
    server java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket.
                at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
                at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
                at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    ---------------------------------------------------------------
    无法建立数据库连接,
    确定网络没有问题
    SQL有开着,
    SQL打到SP3的补丁
       SQL Server2000 SP4要注意,解压之后看到setup.bat这个文件,打开这个文件就开始安装SP4补丁。记得安装后,SQL 服务器是停止了,需要重新启动!安装之后,启动SQL服务器,打开查询分析器,输入select @@version,按F5执行,如果出现Microsoft SQL Server 2000 - 8.00.2039 (Intel X86)   May 3 2005 23:18:38   Copyright (c) 1988-2003 Microsoft Corporation Personal Edition on Windows NT 5.1 (Build 2600: Service Pack 2)则说明SQL Server2000的补丁SP4安装成功
    驱动也要对应SP3的. 
    ---------------------------------------------------------------
    1、下载Microsoft SQL Server 2000 Service Pack 3a并安装,SQL请选用混和安装模式!!!
    http://www.microsoft.com/downloads/details.aspx?FamilyId=90DCD52C-0488-4E46-AFBF-ACACE5369FA3&displaylang=zh-cn  
    2、下载SQL Server 2000 Driver for JDBC Service Pack 3
    http://www.microsoft.com/downloads/details.aspx?FamilyId=07287B11-0502-461A-B138-2AA54BFDC03A&displaylang=en 
    3、运行时关闭防火墙
    我的操作系统是XP,前几天升级到sp2,发现jdbc连接不了sqlserver,报错不能连接,后来我下载了sqlserver sp3,安装的时候总是提示sa密码不正确,后来我登陆微软网站,找到关于sqlserver sp3的帮助文档,发现原来我电脑中的用户环境变量没有设置TEMP和TMP,设置后,update sqlserver sp3成功,然后jdbc连接也正常。
        希望这文章对一些同道中人有所帮助。
    JDBC SQLSERVER"Error establishing socket"
    jdbc配置语句为: jdbc:microsoft:sqlserver://server_name:1433
    如运行程序时出现 "Error establishing socket" 错误,则应进行如下调试:

    1 检查SQL SERVER 是否允许远程访问.具体步骤:
    1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
    2)在相应"数据库"上单击右键,选择"属性"
    3)选择"连接"选项卡,检查"远程服务器连接"下,RPC服务是否选择.
    2 使用telnet IP地址 1433,系统是否提示连接出错,如系统提示出错
    检查是否防火墙屏蔽了SQL SERVER 或 java IDE 的网络访问端口
    如果是,关闭防火墙,重新启动SQL SERVER和java IDE,进行测试,
    如果系统仍提示上述错误,尝试下列步骤
    3 检查SQL SERVER 端口号及是否启用了TCP/IP协议,具体步骤:
    1)打开"企业管理器",打开控制台根目录>SQL Server 组>数据库
    2)在相应"数据库"上单击右键,选择"属性"
    3)选择"常规"选项卡,点击"网络配置",如启用的协议中无"TCP/IP协议"将其加入
    4)选择"TCP/IP协议",点击"属性",检查其端口号是否为1433
    5)如端口号为1433将其修改为其它端口号,修改jdbc连接语句,将端口号同样改为新启用的端口号,如jdbc:microsoft:sqlserver://server_name:1400(假设新端口号为 1400)

    以下的方法你每种的去试试:
    #检查一下sql server的connection有没有full.
    #如果是认证的问题.
    可到sql enterprice manager->指定server->内容->安全性.
    把验证改为 SQL server 及 windows.
    #点选属性检查一下port是否正确.
    #执行%MSSQL_HOME%80ToolsBinnSVRNETCN.exe
    把TCP/IP启用.
    #关掉防火墙.
  • Tomcat详解

    2009-04-23 22:35:10

    1.Tomcat简介

       Jakarta Tomcat服务器是一种Servlet/JSP容器,经历了3.x到4.0.x到4.1.x的变迁,现在最新的版本为5.0.x,支持Servlet2.4和JSP2.0规范.安装Tomcat之前必须安装JDK,并在环境变量中设置JAVA_HOME变量。这样Tomcat就可以启动了。

    2.文件构成

    安装后的Tomcat文件构成如下图所示:

     

    2.1首先介绍Java类库的存放位置,有三个:分别是/server/lib、/shared/lib和/common/lib。

    三个位置的区别:/server/lib下的Jar文件只能被Tomcat服务器自身访问;/shared/lib下的jar文件及类只能被部署在Tomcat中的所有Web应用访问,不能被Tomcat服务器本身访问;/common/lib下的Jar文件及类既能被部署在Tomcat中的所有Web应用访问,也能被Tomcat服务器本身访问。

    此外某个Web应用下的Web-inf/lib下的Jar文件只能被该Web应用访问。

    2.2类的加载顺序

    (1).最先是$JAVA_HOME/jre/lib/ext/下的jar文件。

    (2).环境变量CLASSPATH中的jar和class文件。

    (3).$CATALINA_HOME/common/classes下的class文件。

    (4).$CATALINA_HOME/commons/endorsed下的jar文件。

    (5).$CATALINA_HOME/commons/i18n下的jar文件。

    (6).$CATALINA_HOME/common/lib 下的jar文件。
    (JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。)
    (7).$CATALINA_HOME/server/classes下的class文件。

    (8).$CATALINA_HOME/server/lib/下的jar文件。

    (9).$CATALINA_BASE/shared/classes 下的class文件。

    (10).$CATALINA_BASE/shared/lib下的jar文件。

    (11).各自具体的webapp /WEB-INF/classes下的class文件。

    (12).各自具体的webapp /WEB-INF/lib下的jar文件。

    2.3 admin应用和manager应用

    这是Tomcat中自带的两个Web应用,位于<%CATALINA_HOME%>/server/webapps/admin(manager),访问地址是http://localhsot:8080/admin(manager)。要访问这两个Web应用,需要在
    <%CATALINA_HOME%>/conf/tomcat-users.xml中添加如下内容:
    <user username="admin" password="1234" role="admin"/>           //对应admin Web应用
    <user username="manager" password="1234" role="manager"/>   //对应manager Web应用

    admin应用-把所有可配置的信息分为三类:Tomcat Server、Resources、User Definition。
    Tomcat Server-相当于server.xml中的<Server>元素及其子元素,<Service>、<Host>、<Context>、<Resources>、<Date Source>。
    Resources-相当于server.xml中的<GlobalNamingResources>,共有四种资源:Date Source(JNDI数据源)、Mail Sessioin(JNDI Mail Session资源)、Environment Entry(环境变量)、User Database(安全域中的用户数据库)。
    User Definition-与tomcat-users.xml相对应。

    manager应用-列出来所有Web应用和状态,并提供了Start、Stop、Reload、 Undeploy命令,还可以发布
    <%CATALINA_HOME%>/webapps目录下的Web应用或系统文件任意位置的WAR文件。

    3. 相关配置

    Tomcat里面常修改的配置文件有两个Server.xml和Web.xml。

    3.1 Server.xml--文件位置是<%CATALINA_HOME%>/conf/server.xml。该文件配置整个Tomcat服务器,其包含的各个域说明如下所示:

    <Server>元素每个Service元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求.由org.apahce.catalina.Engine接口定义.

    <Engine name="Catalina" defaultHost="localhost" debug="0">

    1>className指定实现Engine接口的类,默认值为StandardEngine
    2>defaultHost指定处理客户的默认主机名,在<Engine>中的<Host>子元素中必须定义这一主机
    3>name定义Engine的名字

    在<Engine>可以包含如下元素<Logger>, <Realm>, <Value>, <Host>

     <Host>元素由Host接口定义.一个Engine元素可以包含多个<Host>元素.每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用.

      <Host name="localhost" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">

    1>className指定实现Host接口的类.默认值为StandardHost
    2>appBase指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于<CATALINA_HOME>的相对目录.如果没有此项,默认为<CATALINA_HOME>/webapps
    3>autoDeploy如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新有web应用加入进来,会自运发布这个WEB应用
    4>unpackWARs如果此项设置为true,表示把WEB应用的WAR文件先展开为开放目录结构后再运行.如果设为false将直接运行为WAR文件
    5>alias指定主机别名,可以指定多个别名
    6>deployOnStartup如果此项设为true,表示Tomcat服务器启动时会自动发布appBase目录下所有的Web应用.如果Web应用中的server.xml没有相应的<Context>元素,将采用Tomcat默认的Context
    7>name定义虚拟主机的名字

    在<Host>元素中可以包含如下子元素<Logger>, <Realm>, <Value>, <Context>

    <Context>元素由Context接口定义.是使用最频繁的元素.每个<Context元素代表了运行在虚拟主机上的单个Web应用.一个<Host>可以包含多个<Context>元素.每个web应用有唯一的一个相对应的Context代表web应用自身.servlet容器为第一个web应用创建一个ServletContext对象.

    <Context path="/sample" docBase="sample" debug="0" reloadbale="true">

    1>className指定实现Context的类,默认为StandardContext类
    2>path指定访问Web应用的URL入口,注意/myweb,而不是myweb了事
    3>reloadable如果这个属性设为true, Tomcat服务器在运行状态下会监视在WEB-INF/classes和Web-INF/lib目录CLASS文件的改运.如果监视到有class文件被更新,服务器自重新加载Web应用
    3>cookies指定是否通过Cookies来支持Session,默认值为true
    4>useNaming指定是否支持JNDI,默认值为了true


    在<Context>元素中可以包含如下元素<Logger>, <Realm>, <Resource>, <ResourceParams>

    Connector元素由Connector接口定义.<Connector>元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客户返回响应结果.

    <Connector port="8080" maxThread="50" minSpareThreads="25" maxSpareThread="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" />

    <Connection port="8009" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" />

    第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.

    Connector元素共用属性
    1>className指定实现Connector接口的类
    2>enableLookups如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用request.getRemoteHost方法返回客户机主机名.默认值为true
    3>redirectPort指定转发端口.如果当前端口只支持non-SSL请求,在需要安全通信的场命,将把客户请求转发至SSL的redirectPort端口
    HttpConnector元素的属性
    1>className实现Connector的类
    2>port设定Tcp/IP端口,默认值为8080,如果把8080改成80,则只要输入http://localhost即可
    因为TCP/IP的默认端口是80
    3>address如果服务器有二个以上ip地址,此属性可以设定端口监听的ip地址.默认情况下,端口会监听服务器上所有的ip地址
    4>bufferSize设定由端口创建的输入流的缓存大小.默认值为2048byte
    5>protocol设定Http协议,默认值为HTTP/1.1
    6>maxThreads设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200
    7>acceptCount设定在监听端口队列的最大客户请求数量,默认值为10.如果队列已满,客户必须等待.
    8>connectionTimeout定义建立客户连接超时的时间.如果为-1,表示不限制建立客户连接的时间
    JkConnector的属性
    1>className实现Connector的类
    2>port设定AJP端口号
    3>protocol必须设定为AJP/1.3

    3.2 Web.xml--文件位置是webapps/Web应用/WEB-INF/Web.xml。该文件是Web应用部署描述文件,用于配置其发布信息,主要配置以下内容:

    (1)Servlet的定义

    (2)Servlet的初始化参数

    (3)servlet及jsp的映射

    (4)welcome文件清单

    (5)资源引用(如数据源引用)

    (6)环境变量的定义

    3.3 Tomcat中JNDI数据源的配置

    (1).  在<%CATALINA_HOME%>/conf/server.xml中加入注意DBTest为你的webapp目录:

    <Context path="/DBTest" docBase="/DBTest" debug="0" reloadable="true" crossContext="true">  
            <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"/>
         <ResourceParams name="jdbc/TestDB">
           <parameter>
             <name>factory</name>
             <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
           </parameter>
           <parameter>
             <name>maxActive</name>
             <value>100</value>
           </parameter>
           <parameter>
             <name>maxIdle</name>
             <value>30</value>
           </parameter>
           <parameter>
             <name>maxWait</name>
             <value>10000</value>
           </parameter>
           <parameter>
            <name>username</name>
            <value>sa</value>
           </parameter>
           <parameter>
            <name>password</name>
            <value>cugb201201</value>
           </parameter>
           <parameter>
              <name>driverClassName</name>
              <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
           </parameter>
           <parameter>
             <name>url</name>
             <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=TestDB1</value>
           </parameter>
         </ResourceParams>
        </Context>

    (2)在webapp\WEB-INF\web.xml中加入<resource-ref>元素:

    <resource-ref>

    <res-ref-name>jdbc/TestDB</res-ref-name>

        <res-type>javax.sql.DataSource</res-type>

        <res-auth>Container</res-auth>

        <res-sharing-scope>Shareable</res-sharing-scope>

      </resource-ref>

    (3)本代码以sqlServer为例说明,需要将其相关的jdbc驱动程序拷贝到<CATALINA_HOME>/common/lib目录下.

    (4)在程序中通过连接池取得数据库连接:

    try{

            Context ctx = new InitialContext();

                   if(ctx == null)

                          throw new Exception("no Context!");

                   ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");

    }

    catch(Exception e){

            System.out.println(e.getMessage());

    }

  • jdk与tomcat配置

    2009-04-23 16:04:19

    昨晚配置了一个晚上的jdk与tomcat, 后来不知道什么原因,jdk好不容易可以编译,执行,装上tomcat后,jdk变成不能编译,折腾了大半个晚上,今天在公司找到这两个网址,希望有用.

    http://java.chinaitlab.com/Tomcat/32238.html

    http://blog.sina.com.cn/s/blog_5673f78b0100c9pu.html


    MyEclipse帮助                                                             http://myeclipseide.com/ContentExpress-display-ceid-16.html
    用MyEclipse开发Hibernate          http://myeclipseide.com/images/tutorials/Hibernate/Hibernate.html
    用MyEclipse开发Struts                              http://myeclipseide.com/images/tutorials/Hibernate/Hibernate.html
  • QTP - 脚本相关收集

    2009-04-21 18:14:18

    转载:http://blog.csdn.net/garyyes/archive/2008/12/04/3445714.aspx
    1)生产随机数列
        第一种方法
        randomize'更新反回的数据
        funcation rand(k,n)
        n="int((k-1)*rnd+1) rand=n
        end funcation
        
        第二种方法
        n="randomnumber.value(1,255)
        
    2)wintreeview一些操作
        选择一个条目:wintreeview.select(item)'根是0
        根的名称:wintreeview.getitem(0)

    3)QTP中用代码连接数据库
        Set Conn = CreateObject("ADODB.Connection" )
        str="DRIVER=Oracle in OraHome92;SERVER=192.168.0.1;DBQ=testdb;user id=test; password=test"
        Conn.open str
        Set Rs = CreateObject ("ADODB.Recordset" )
        sql = "select * from user_table t where table_name = 'XXX' "
        Rs.open sql,conn',1,3

    4)QTP如何测试鼠标右键菜单
        以QTP附带的订票网站sample为例,edit控件username鼠标右键,点击paste(第4个菜单项)

        cur_replay_type = Setting.WebPackage("ReplayType")
        'Run mouse operations using the mouse, if 1 using browser events
        Setting.WebPackage("ReplayType") = 2    
        Browser("Browser").Page("Welcome: Mercury Tours").WebEdit("userName").Click micRightBtn
        Setting.WebPackage("ReplayType") = cur_replay_type
        
        index=4
        Set WshShell = CreateObject("Wscrīpt.Shell")
        For i = 1 To index
            WshShell.sendKeys "{DOWN}"
        Next
        WshShell.sendKeys "{ENTER}"
        Set WshShell = nothing

    5)QTP测试页面字体颜色的办法
        set ōbj = Browser().Page().WebElement().Object
        ' Get the  object
        set iStyle= obj.currentstyle
        ' Get the attribute
        sColor = iStyle.color

    6)从QC自动启动qtp如何自动加载插件
        '此函数用于加载指定Test所有的插件,若要运行Test可自己加个qtApp.Test.Run
        Function Load_Addins(testPath)
                Dim qtApp 'As QuickTest.Application
                Dim blnNeedChangeAddins
                Dim arrTestAddins
                Set qtApp = CreateObject("QuickTest.Application")
                arrTestAddins = qtApp.GetAssociatedAddinsForTest(testPath)
                blnNeedChangeAddins = False
                For Each testAddin In arrTestAddins
                        If qtApp.Addins(testAddin).Status <> "Active" Then
                            blnNeedChangeAddins = True
                            Exit For
                        End If
                Next
          If qtApp.Launched And blnNeedChangeAddins Then
                  qtApp.Quit
          End If
          If blnNeedChangeAddins Then
              Dim blnActivateOK
              blnActivateOK = qtApp.SetActiveAddins(arrTestAddins, errorDescrīption)
              If Not blnActivateOK Then
                                Call ErrorLog(errorDescrīption)  '这里是调用自己的日志函数,可替换为自己的或注释掉
                                Wscrīpt.Quit
              End If
          End If
          If Not qtApp.Launched Then
              qtApp.Launch
          End If
          qtApp.Visible = True
          qtApp.Open testPath
                '可在此加入qtApp.Test.Run来运行Test
                Set qtApp = Nothing
    End Function

    7)换行符
        vbcr----chr(13)回车符
        vblf----chr(10)换行符
        vbcrlf----chr(13)+chr(10)结合
        type(chr(13)就相当于按了一上键盘上的enter
        
    8)防程序中断方法
        On error resume next
        On error goto 0

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

    10)WScript.Shell的一些应用
        set WshShell = CreateObject("WScript.Shell")
        WshShell.SendKeys "{ENTER}"     '模拟键盘进行操作
        WshShell.AppActivate "Calculator"    '启动应用程序
        
        ' 利用粘贴板,实现中文输入    
        strCopy = "软件测试."
        Set bjIE = CreateObject("InternetExplorer.Application")
        objIE.Navigate("about:blank")
        objIE.document.parentwindow.clipboardData.SetData "text", strCopy
        objIE.Quit    
        wait 1
        Setting.WebPackage("ReplayType")=2
        Set bj=createobject("wscrīpt.shell")
        obj.sendkeys "{TAB}"
        wait 2
        obj.sendkeys "^v"
        wait 1
        Setting.WebPackage( "ReplayType")=1

    11)childobjects的应用
        childobject可以返回界面上满足条件的对象集合,而且与对象库里是否有这些对象无关,这就可以简化对象库;
        返回的对象集合的count方法可以返回对象个数,这就可以通过下标对单个对象进行操作;在出现index标识对象时
        可以进行运用.如:
        ' Find All WebEdit Objects on a Web Page and Set a Value for a Specific One
        Sub ChildObjects_Example()
            Dim EditToSearch, ValueToSet, NumberOfEdits
            EditToSearch = "credit_card_number"
            ValueToSet = "3558986773230578"
            
            Set Desc = Description.Create()
                oDesc("micclass").Value = "WebEdit"
                oDesc("name").Value = "credit_card_number"
            
            Set EditCollection = Browser("Book a Flight: Mercury").Page("Book a Flight: Mercury").ChildObjects(oDesc)
            NumberOfEdits = EditCollection.Count
            
            For i = 0 To NumberOfEdits - 1
                If EditCollection(i).GetROProperty("name") = EditToSearch Then
                   EditCollection(i).Set ValueToSet
                End If
            Next
        
        End Sub

    12)关闭所有IE
    SystemUtil.CloseProcessByName("iexplore.exe")

    13)启动IE的语句:SystemUtil.Run "iexplore.exe", "http://www.***.com"
       关闭IE或其他程序的语句:
       SystemUtil.CloseProcessByName "app.exe"
       SystemUtil.CloseProcessByWndTitle "Some Title"

    14)引用自定义环境变量
        Environment.LoadFromFile "D:\询价\case\环境\huiyuan.xml"
        
    15) 环境变量有2种,一种是QTP的内置变量,一种是用户自定义的变量。内置变量是可以直接就可以用,自定义环境变量需要在菜单中选择“文件”——>“ 设置”——>“环境”,在变量类型中选择“用户自定义”,然后进行添加,可以对添加的变量全部导出,导出的文件为.xml格式的文档。既然可以导 出,那么必然可以导入.xml文件,你可以在该对话框中的选中“从外部文件导入”,然后添加其文件路径即可。(当然这些操作都可以直接使用脚本来实现, 如:Environment.LoadFromFile(“FileName”))
        xml文件格式如下:
        <Environment>
                <Variable>                        // 变量定义起始标识
                        <Name>aa</Name>               // 变量名称
                        <Value>11</Value>             // 变量值
                        </Variable>                   // 变量定义结束标识
                <Variable>
                        <Name>bb</Name>
                        <Value>22</Value>
                </Variable>
        </Environment>
        使用的脚本
        Dim aParam3
        aParam3=Environment.Value(“aa”)          // 调用环境变量
        msgbox aParam3

    16)弹出输入窗口
        Dim Input
        Input = InputBox("Enter your name")
        MsgBox ("You entered: " & Input)

    17)不同数据库检查点手动SQL写法
        QTP插入数据库检查点,手动指定SQL语句的写法。
        
        一、SQL Server格式(本地无需安装SQL Server)
        connectionstring(连接字符串):
        1.本地没有创建数据源的方式
        DRIVER=SQL Server;SERVER=数据库IP地址;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=本地主机名;DATABASE=数据库名
        实例:
        DRIVER=SQL Server;SERVER=10.160.11.10;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJHLJUN;DATABASE=dcwork

        2.本地已创建数据源的方式
        DSN=数据源名称;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=数据库的主机名;DATABASE=数据库名
        实例:
        DSN=LocalServer;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJDCWORKTEST;DATABASE=dcwork

        3.SQL语句实例(从数据库表HR_LANGUAGE_TYPE中,查询字段语言名称LANGUAGE_NAME,条件语言名称=中文,按语言名称升序排序结果)
        SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME FROM dcwork.dbo.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文') ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME

        二、DB2格式:(本地至少安装DB2 Run-Time Client Lite)
        connectionstring(连接字符串):
        1.本地没有创建数据源的方式
        DRIVER={IBM DB2 ODBC DRIVER};UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=数据库名;
        实例:
        DRIVER={IBM DB2 ODBC DRIVER};UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;
        
        2.本地已创建数据源的方式
        DSN=数据源名称;UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=DCWORK;
        实例:
        DSN=DWCORKDB2;UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;
        
        3.SQL语句实例
        SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME FROM DB2ADMIN.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文') ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME

        三、Oracle格式:(本地需要安装Oracle ODBC DRIVER)
        connectionstring(连接字符串):
        1.本地没有创建数据源的方式
        DRIVER={Oracle in OraHome92};SERVER=数据库服务名;UID=用户名;PWD=密码;DBQ=数据库名;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=F;PFC=10;TLO=O;
        实例:
        DRIVER={Oracle in OraHome92};SERVER=DCWORK;UID=DCWORK;PWD=DCWORK;DBQ=DCWORK;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=F;PFC=10;TLO=O;
        
        2.本地已创建数据源的方式
        DSN= 数据源名称;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10; FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;
        实例:
        DSN=dcworkoracle;UID=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;
        
        3.SQL语句实例
        SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME FROM DCWORK.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文') ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME

        四, mysql
        Set Conn = CreateObject("ADODB.Connection" )
        str="DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.168.1.100;DATABASE=wp_blog;user id=zzz ; password=123456"
        Conn.open str
        Set Rs = CreateObject ("ADODB.Recordset" )
        sql = "select * from `wp_blog`.`blg_webcategory` limit 0, 5000;"
        Rs.open sql,conn,1,3
        If (not Rs.eof) then
        Rs.MoveFirst
        MsgBox Rs(0)
        MsgBox Rs(1)
        MsgBox Rs(2)
        MsgBox Rs(3)
        end if
        
        Rs.close
        Set Rs = Nothing
        Conn.close
        Set Conn = Nothing
        
        五. access
        
        Set Conn = CreateObject("ADODB.Connection" )
        str="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/db1.mdb"
        Conn.open str
        Set Rs = CreateObject("ADODB.Recordset")
  • Web网站测试技术要领集合

    2009-04-21 16:32:13


    转载:
    基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。

      本文从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于Web的系统测试方法。

      随着Internet和Intranet/Extranet的快速增长,Web已经对商业、工业、银行、财政、教育、政府和娱乐及我们的工作生活产生了深远的影响。许多传统的信息和数据库系统正在被移植到互联网上,电子商务迅速增长,早已超过了国界。范围广泛的、复杂的分布式应用正在Web环境中出现。Web的流行和无所不在,是因为它能提供支持所有类型内容连接的信息发布,容易为最终用户存取。

      Yogesh Deshpande和Steve Hansen在1998年就提出了Web工程的概念。Web工程作为一门新兴的学科,提倡使用一个过程和系统的方法来开发高质量的基于Web的系统。它" 使用合理的、科学的工程和管理原则,用严密的和系统的方法来开发、发布和维护基于Web的系统"。目前,对于web工程的研究主要是在国外开展的,国内还 刚刚起步。

      在基于Web的系统开发中,如果缺乏严格的过程,我们在开发、发布、实施和维护Web的过程中,可能就  会碰到一些严重的问题,失败的可能性 很大。而且,随着基于Web的系统变得越来越复杂,一个项目的失败将可能导致很多问题。当这种情况发生时,我们对Web和Internet的信心可能会无 法挽救地动摇,从而引起Web危机。并且,Web危机可能会比软件开发人员所面对的软件危机更加严重、更加广泛。

      在Web工程过程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。基于Web的系统测试与传统的软件测试不 同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可 用性测试。然而,Internet和Web媒体的不可预见性使测试基于Web的系统变得困难。因此,我们必须为测试和评估复杂的基于Web的系统研究新的 方法和技术

      一般软件的发布周期以月或以年计算,而Web应用的发布周期以天计算甚至以小时计算。Web测试人员必须处理更短的发布周期,测试人员和测试管理人员面临着从测试传统的C/S结构和框架环境到测试快速改变的Web应用系统的转变。

      网站测试流程、要求及测试报告

      一个网站基本完工后,需要通过下面三步测试才可以交活。

      一、 制作者测试,包括美工测试页面、程序员测试功能。在做完后第一时间内有制作者本人进行测试。

      a) 页面 包括首页、二级页面、三级页面的页面在各种常用分辨率下有无错位;图片上有没有错别字;各连接是否是死连接;各栏目图片与内容是否对应等

      b) 功能 达到客户要求;数据库连接正确;各个动态生成连接正确;传递参数格式、内容正确;试填测试内容没有报错;页面显示正确

      二、 全面测试 根据交工标准和客户要求,由专人进行全面测试

      也是包括页面和程序两方面,而且要结合起来测,保证填充足够的内容后不会导致页面变形。另外要检查是否有错别字,文字内容是否有常识错误。

      三、 发布测试 网站发布到主服务器之后的测试,主要是防止环境不同导致的错误。

    软件缺陷的原则

      软件缺陷区别于软件bug,它是在测试过程中出现的对系统有影响的,但是在设计中没有的或者对修改后的bug测试和开发人员有不同意见等;
      软件未达到产品说明书标明的功能;
      软件出现了产品说明书指明不会出现的错误;
      软件功能超出产品说明书指明范围;
      软件未达到产品说明书虽未指出但应达到的目标;
      <a href="http://www.51testing.com/" target="_blank">软件测试</a>员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。

      测试的主要方面:

      一、功能测试

      对于网站的测试而言,每一个独立的功能模块需要单独的测试用例的设计导出,主要依据为《需求规格说明书》及《详细设计说明书》,对于应用程序模块需要设计者提供基本路径测试法的测试用例。

      1、链接测试

      链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面:

      1)测试所有链接是否按指示的那样确实链接到了该链接的页面;

      2)测试所链接的页面是否存在;

      3)保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。

      链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web应用系统的所有页面开发完成之后进行链接测试。

      Xenu------主要测试链接的正确性的工具

      可惜的是对于动态生成的页面的测试会出现一些错误。

      2、表单测试

      当用户给Web应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整 性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认 值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。

      要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解释和使用这些信息。

      B/S结构实现的功能可能主要的就在这里,提交数据,处理数据等如果有固定的操作流程可以考虑自动化测试工具的录制功能,编写可重复使用的脚本代码,可以在测试、回归测试时运行以便减轻测试人员工作量。

      我们对UM子系统中各个功能模块中的各项功能进行逐一的测试,主要测试方法为:边界值测试、等价类测试,以及异常类测试。测试中要保证每种类型都有2个以上的典型数值的输入,以确保测试输入的全面性。

      3、Cookies测试

      Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。

      如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作而且对这些信息已经加密。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响等。

      4、设计语言测试

      Web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML等。当在分布式环境中开发时,开发人员都不在一起, 这个问题就显得尤为重要。除了HTML的版本问题外,不同的脚本语言,例如Java、Javascrīpt、 ActiveX、VBscrīpt或Perl等也要进行验证。

      5、数据库测试

      在Web应用技术中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。

      在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。

    二、性能测试

      网站的性能测试对于网站的运行而言异常重要,但是目前对于网站的性能测试做的不够,我们在进行系统设计时也没有一个很好的基准可以参考,因而建立网站的性能测试的一整套的测试方案将是至关重要的。

      网站的性能测试主要从三个方面进行:连接速度测试、负荷测试(Load)和压力测试(Stress),

      连接速度测试指的是打开网页的响应速度测试。负荷测试指的是进行一些边界数据的测试,压力测试更像是恶意测试,压力测试倾向应该是致使整个系统崩溃。

      1、连接速度测试

      用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。

      另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。

     2、负载测试

      负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的 用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大 量用户对同一个页面的请求?

      3、压力测试

      负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。

      进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。

      压力测试的区域包括表单、登陆和其他信息传输页面等。

      采用的测试工具:

      性能测试可以采用相应的工具进行自动化测试,我们目前采用如下工具

      ab -----Apache 的测试工具

      OpenSTA—开发系统测试架构

    三、接口测试

      在很多情况下,web 站点不是孤立。Web 站点可能会与外部服务器通讯,请求数据、

      验证数据或提交订单。

      1、 服务器接口

      第一个需要测试的接口是浏览器与服务器的接口。测试人员提交事务,然后查看服务器

      记录,并验证在浏览器上看到的正好是服务器上发生的。测试人员还可以查询数据库,确认事务数据已正确保存。

      2、 外部接口

      有些 web 系统有外部接口。例如,网上商店可能要实时验证信用卡数据以减少欺诈行

      为的发生。测试的时候,要使用 web 接口发送一些事务数据,分别对有效信用卡、无效信用卡和被盗信用卡进行验证。如果商店只使用 Visa 卡和 Mastercard 卡, 可以尝试使用 Discover 卡的数据。(简单的客户端脚本能够在提交事务之前对代码进行识别,例如 3 表示 American Express,4 表示 Visa,5 表示 Mastercard,6 代表Discover。)通常,测试人员需要确认软件能够处理外部服务器返回的所有可能的消息。

      3、错误处理

      最容易被测试人员忽略的地方是接口错误处理。通常我们试图确认系统能够处理所有错

      误,但却无法预期系统所有可能的错误。尝试在处理过程中中断事务,看看会发生什么情况?

      订单是否完成?尝试中断用户到服务器的网络连接。尝试中断 web 服务器到信用卡验证服

      务器的连接。在这些情况下,系统能否正确处理这些错误?是否已对信用卡进行收费?如果

      用户自己中断事务处理,在订单已保存而用户没有返回网站确认的时候,需要由客户代表致

      电用户进行订单确认。

    四、可用性测试

      可用性/易用性方面目前我们只能采用手工测试的方法进行评判,而且缺乏一个很好的评判基准进行,此一方面需要大家共同讨论。

      1、导航测试

      导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问 题,可以决定一个Web应用系统是否易于导航:导航是否直观?Web系统的主要部分是否可通过主页存取?Web系统是否需要站点地图、搜索引擎或其他的导 航帮助?

      在一个页面上放太多的信息往往起到与预期相反的效果。Web应用系统的用户趋向于目的驱动,很快地扫描一个Web应用系统,看是否有满足自己需 要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉Web应用系统的结构,因此,Web应用系统导航帮助要尽可能地准确。

      导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容,内容在什么地方。

      Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。

      2、图形测试

      在Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:

      (1)要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。

      (2)验证所有页面字体的风格是否一致。

      (3)背景颜色应该与字体颜色和前景颜色相搭配。

      (4)图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩。

      3、内容测试

      内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。

      信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法 或拼写错误。这种测试通常使用一些文字处理软件来进行,例如使用Microsoft Word的"拼音与语法检查"功能;信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口,也就是一般Web站点中的所谓"相关文 章列表"。

      4、整体界面测试

      整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致?

      对整体界面的测试过程,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。

      对所有的可用性测试来说,都需要有外部人员(与Web应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。

    五、兼容性测试

      需要验证应用程序可以在用户使用的机器上运行。如果您用户是全球范围的,需要测试各种操作系统、浏览器、视频设置和 modem 速度。最后,还要尝试各种设置的组合。

      1、平台测试

      市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用 哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失 败。

      因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。

      2、浏览器测试

      浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、Javascrīpt、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,Javascrīpt是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有 不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。

    测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。

      采用测试工具:

      通过白盒测试或者黑盒测试导出的测试用例,采用相应的工具进行测试,可以采用OpenSTA进行测试,此测试工具可以采用不同的浏览器进行测试。

      3.视频测试

      页面版式在 640x400、600x800 或 1024x768 的分辨率模式下是否显示正常? 字体是否太小以至于无法浏览? 或者是太大? 文本和图片是否对齐?

      4.Modem/连接速率测试

      是否有这种情况,用户使用 28.8 modem下载一个页面需要 10 分钟,但测试人员在测

      试的时候使用的是 T1 专线? 用户在下载文章或演示的时候,可能会等待比较长的时间,

      但却不会耐心等待首页的出现。最后,需要确认图片不会太大。

      5、打印机测试

      用户可能会将网页打印下来。因此网页在设计的时候要考虑到打印问题,注意节约纸张和油墨。有不少用户喜欢阅读而不是盯着屏幕,因此需要验证网页 打印是否正常。有时在屏幕上显示的图片和文本的对齐方式可能与打印出来的东西不一样。测试人员至少需要验证订单确认页面打印是正常的。

      6、组合测试

      最后需要进行组合测试。600x800 的分辨率在 MAC 机上可能不错,但是在 IBM 兼容

      机上却很难看。在 IBM 机器上使用 Netscape 能正常显示,但却无法使用 Lynx 来浏览。

      如果是内部使用的 web 站点,测试可能会轻松一些。如果公司指定使用某个类型的浏览器,

      那么只需在该浏览器上进行测试。如果所有的人都使用 T1 专线,可能不需要测试下载施加。

      (但需要注意的是,可能会有员工从家里拨号进入系统) 有些内部应用程序,开发部门可能

      在系统需求中声明不支持某些系统而只支持一些那些已设置的系统。但是,理想的情况是,

      系统能在所有机器上运行,这样就不会限制将来的发展和变动。

    六、安全测试

      Web应用系统的安全性测试区域主要有:

      1、 目录设置

      Web 安全的第一步就是正确设置目录。每个目录下应该有 index.html 或 main.html 页

      面,这样就不会显示该目录下的所有内容。如果没有执行这条规则。那么选中一幅图片,单击鼠标右键,找到该图片所在的路 径"…com/objects/images"。然后在浏览器地址栏中手工输入该路径,发现该站点所有图片的列表。这可能没什么关系。但是进入下一级目录 "…com/objects" ,点击 jackpot。在该目录下有很多资料,其中有些都是已过期页面。如果该公司每个月都要更改产品价格信息,并且保存过期页面。那么只要翻看了一下这些记 录,就可以估计他们的边际利润以及他们为了争取一个合同还有多大的降价空间。如果某个客户在谈判之前查看了这些信息,他们在谈判桌上肯定处于上风。

      2.登录

      现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。

      3.Session

      Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。

      4.日志文件

      为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。

      5.加密

      当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。

      6.安全漏洞

      服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。

      目前网络安全问题日益重要,特别对于有交互信息的网站及进行电子商务活动的网站尤其重要。目前我们的测试没有涵盖网站的安全性的测试,我们拟定采用工具来测定,

      工具如下

      SAINT------- Security Administrator’s Integrated Network Tool

      此工具能够测出网站系统的相应的安全问题,并且能够给出安全漏洞的解决方案,不过是一些较为常见的漏洞解决方案。

    七、代码合法性测试

      代码合法性测试主要包括2个部分:程序代码合法性检查与显示代码合法性检查。

      1、程序代码合法性检查

      程序代码合法性检查主要标准为《intergrp小组编程规范》,目前采用由SCM管理员进行规范的检查,未来期望能够有相应的工具进行测试。

      2、显示代码合法性检查

      显示代码的合法性检查,主要分为Html、Javascrīpt、Css代码检查,目前采用

      HTML代码检查------采用CSE HTML Validator进行测试

      Javascrīpt、Css也可以在网上下载相应的测试工具。

      八、 文档测试

      l、产品说明书属性检查清单

      1)完整.是否有遗漏和丢失,完全吗? 单独使用是否包含全部内容

      2)准确.既定解决方案正确吗? 目标明确吗? 有没有错误?

      3)精确、不含糊、清晰.描述是否一清二楚? 还是自说自话?容易看懂和理解吗?

    4)一致.产品功能能描述是否自相矛盾,与其他功能有没有冲突

      5)贴切.描述功能的陈述是否必要?有没有多余信息? 功能是否原来的客户要求?

      6)合理.在特定的预算和进度下,以现有人力,物力和资源能否实现?

      7)代码无关.是否坚持定义产品,而不是定义其所信赖的软件设计,架构和代码

      8)可测试性.特性能否测试? 测试员建立验证操作的测试程序是否提供足够的信息?

      2、 产品说明书用语检查清单

      1)说明。 对问题的描述通常表现为粉饰没有仔细考虑的功能----可归结于前文所述的属性.从产品说明书上找出这样的用语,仔细审视它们在文中是怎样使用的.产品说明书可能会为其掩饰和开脱,也可能含糊其词----无论是哪一种情况都可视为软件缺陷.

      2)总是,每一种,所有,没有,从不.如果看到此类绝对或肯定的,切实认定的叙述,软件测试员就可以着手设计针锋相对的案例.

      3)当然,因此,明显,显然,必然.这些话意图诱使接受假定情况.不要中了圈套.

      4)某些,有时,常常,通常,惯常,经常,大多,几乎.这些话太过模糊."有时"发生作用的功能无法测试.

      5)等等,诸如此类,依此类推.以这样的词结束的功能清单无法测试.功能清单要绝对或者解释明确,以免让人迷惑,不知如何推论.

      6)良好,迅速,廉价,高效,小,稳定.这些是不确定的说法,不可测试.如果在产品说明书中出现,就必须进一步指明含义.

      7)已处理,已拒绝,已忽略,已消除.这些廉洁可能会隐藏大量需要说明的功能.

      8)如果...那么...(没有否则).找出有"如果...那么..."而缺少配套的"否则"结构的陈述.想一想"如果"没有发生会怎样.

      相关的测试工具

      OpenSTA

      主要做性能测试的负荷及压力测试,使用比较方便,可以编写测试脚本,也可以先行自动生成测试脚本,而后对于应用测试脚本进行测试。

      SAINT

      网站安全性测试,能够对于指定网站进行安全性测试,并可以提供安全问题的解决方案。

      CSE HTML Validator

      一个有用的对于HTML代码进行合法性检查的工具

      Ab(Apache Bench)

      Apache自带的对于性能测试方面的工具,功能不是很多,但是非常实用。

      Crash-me

      Mysql自带的测试数据库性能的工具,能够测试多种数据库的性能。

  • 面试时最难的25个问题

    2009-02-13 16:21:31

    U9d&kTv*omV8j4o134114

    u J&`o?4i)S13411转转载:http://www.51testing.com/?206870/action_viewspace_itemid_107000.html
    :G_B:w4z g4E134114简介:工作面试时最难的25个问题,很好的准备是成功的一半。如果你是一个对目前的职位不满意,正着手去在新的一年里找到一个新的职位,这篇文章就是你的一个帮手。工作面试是你去面对未来的老板的征途中最重要的一个过程。你必须像进行一个击剑锦标赛或着一个国际象棋比赛那样的坚韧和敏捷来对待面试。 51Testing软件测试网 i7i4j:R;Iq3M
    51Testing软件测试网(A$veOu V N't{
    准备是成功的一半如果你是一个对目前的职位不满意,正着手去在新的一年里找到一个新的职位,这篇文章就是你的一个帮手。工作面试是你去面对未来的老板的征途中最重要的一个过程。你必须像进行一个击剑锦标赛或着一个国际象棋比赛那样的坚韧和敏捷来对待面试。51Testing软件测试网aO/J)AO}(eE

    .G6F;t:?P9C!hge134114
    5xB\)R2mtk134114
    4c]!x3|0WY134114本文是从 William J. Morin和James C. Cabrera 的“在失业的时候如何生存并成功的找到另一个工作”一文中摘选出来的。版权所有:Drake Beam Morin, inc;出版:Harcourt Brace Jovanovich。51Testing软件测试网E2TC(zfM;Q
    51Testing软件测试网\H2k |#{6_,I
    Morin是纽约的Drake Beam Morin公司的董事长,Cabrera是该公司的主席。该公司是国家主要的新职介绍公司,办公所在地在费城。
    +a x1k/ct NG134114
    GSO yh Z5b4R*}134114
    Ndv*H.uO Bj134114
    w*@4D9h:g6Jy1341141.介绍你自己51Testing软件测试网(Lp0g jkoH){
    51Testing软件测试网v6ZM7t)HN)xD
    这个问题通常是一个面试的开始的第一个问题,要额外的小心不要滔滔不绝。尽可能的让你的回答在一分钟,最多2分钟的时间内结束。你的回答应该包含以下4个主题:早期生活,教育背景,工作背景以及最近的工作经验。要着重强调最后的那个主题。要牢记这个问题通常是一个热身的问题,不要把你的最重要的观点浪费在这个问题上。
    @_9R GR'k13411451Testing软件测试网v7rj [ y$q-~3`s
    2.你对我们公司有什么样的了解
    1|f8S|b3t%eVu134114
    gMj:]t X7W;b134114你 必须能够谈论关于这个公司的产品,服务,收入,业界声望,形象,目标,存在的问题,管理风格,职工,历史和企业文化等问题。但是不要表现出你对这个公司的 一切都了如指掌。让你的回答能够体现出你对该公司做了一些研究,但是不要让面试官被你打败(overwhelm),并表现出你希望能够了解关于公司更多的 情况。51Testing软件测试网B3ny$y}0r

    Tq ~'b8z"{)][134114你可以用这样的态度来开始回答问题:“在我的寻找工作的过程中,我调查研究了很多公司,出于如下的理由,贵公司是我感兴趣的公司之一:”。51Testing软件测试网 ?1Ug.}(R8h

    %vf4kR%p/Kk134114用一个积极的态度来回答这个问题,不要这样说:“每个人都告诉我这个公司处于困境中,有各种样的麻烦,这就是我来这儿的原因”,即是那的确是你在这儿的理由。
    k&H/W$v;UaKo7`134114
    C$Xzy&c8a1341143.为什么你希望来我们公司工作?51Testing软件测试网K0tA5~'Cy/m;H

    b~Ie&O+HWp134114最糟糕的答案就是“因为我喜欢人”。要是你喜欢的是动物,那你去哪工作呢?在 这个问题的回答上,并且贯穿整个面试的过程中,一个优秀的答案总是来自于你所作的调查研究,这样的话你可以从公司的需要那个方面来回答。你可能说你的研究 表明这个公司所做的工作正是你说希望参与的,并且他们做这个工作的方式极大的吸引了你。例如,如果这个公司由于强大的管理而著称,纳闷你的答案可以提到这 个事实,并表示你希望成为这个小组的一员。如果这个公司着重强调研发,那么就强调你希望创造你的事物,而你知道这个公司非常鼓励这样的行为。如果这个公司 强调经济控制,你的答案就应该包含对数字的热爱。51Testing软件测试网k gQ;E-X$e-t*aF
    51Testing软件测试网*[&` |uq1\l0^
    如果你觉得你必须捏造一个答案,例如如果这个公司强调研发,但是你觉得你必须提到这一点而实际上你对这根本不感兴趣,那么你可能根本不应该参加这个面试,因为你可能根本不会考虑在这个公司工作。51Testing软件测试网 Kn8Khw$d Q&ZS

    e;Jzn6{1F FF&~134114你的之前的准备必须包括对这个公司做详尽的了解,来避免到一个你无法发挥才干或者根本不想去的公司面试。大多数人都不擅长说谎,所以在面试中欺瞒面试官是一件很困难的事情。即使你成功的做到了这一点,你所获得的也只是一个你不想参加的工作51Testing软件测试网%w@WP+[
    51Testing软件测试网$P+V.D@+Yi\T
    4.你可以为我们完成哪些其他人做不到的事情?51Testing软件测试网qe(lT m0| ` K

    ,I4L0AQ0EX*]a\134114这 个问题上,你有权利或者是义务来自吹自擂。谈论一些你完成工作的记录,提到你简历中的独特之处,或者列出你职业生涯中的成就。告诉别人,你的技能和兴趣在 获取这些结果的过程中发挥了很大的作用,并使得你很有价值。提到你能够合理的安排工作优先顺序,找出问题,并利用你的经验和精力来解决问题51Testing软件测试网{8NCV \!K
    51Testing软件测试网3r S&Yx.DAI7}
    51Testing软件测试网"|m4]q5Mm*?&o6Yb!w
    51Testing软件测试网'pE"Ot-EOH
    5.你觉得这个职位最吸引你的地方是什么?最不吸引你的地方又是什么?
    TfUks/h r/md13411451Testing软件测试网&fAX I'V
    列出3到4个这个工作吸引人的方面,然后提出一个简单的不重要的不吸引人的问题。
    2F2MQWdBF$E134114
    R-Flo(l`0veJa5\1341146.为什么我们应该雇佣你?
    ~#n"R|%r"Q)e13411451Testing软件测试网O0A K"}j3P h
    参见问题4, 考虑你的能力,你的工作经历和你的干劲。51Testing软件测试网 _s`MHYV6|L-{t
    51Testing软件测试网}W.A4[F2Q0o

    W4QgN1a{dn13411451Testing软件测试网6i8W*B'r7f
    7.你希望在工作中能够获得什么?
    r c|6Ob F13411451Testing软件测试网b+l3EE@zJ
    让你的答案来源与这个公式提供的机会。谈论你希望能够大展身手并获取认可的要求。让你的答案基于工作机会而不是个人的要求51Testing软件测试网A'\z;c-`I])Xq's
    51Testing软件测试网-t!x'G.rs2k;{
    51Testing软件测试网L$C!O7DKhJ&^6oyp
    51Testing软件测试网|%l NO a`
    8.谈论一下你对你应聘的这个职位的定义51Testing软件测试网 X,RW6ts8mD7Oc;g

    u-OxN'\7j a'u134114你的答案应该简短并且是基于工作要求的。考虑这个工作的责任和义务。在你回答问题之前确定你真正的了解这个职位所涉及的方方面面。如果你不确定,就去问面试官,他可能会帮你回答这个问题。
    0[r._?W(@zY13411451Testing软件测试网 ?1N)X!vK1k&\k
    9.你需要多久能够对公司做出显著的贡献?
    nX P\+w"S7p1F8@134114
    Di\]7oD*W f1f134114答案要实际一点。可以这样回答,尽管你希望从第一天开始就能够满足公司紧迫的要求,并开始发挥作用,但是你可能需要6个月到1年的时间来足够了解这个公司及其需要来做出很大的贡献。51Testing软件测试网vn^8T6{V^Y
    51Testing软件测试网 qFgb+W4~Y
    51Testing软件测试网dUGl7ctjRCF

    p.vg M;Kz.B4RS V13411410.你会在公司工作多久?
    n?F,A'SJj13411451Testing软件测试网['y @p+|
    可以这样回答,你对在这个公司的职业生涯很感兴趣,可是也得承认你必须能够不断感觉到有挑战才能够继续在任何公司呆着。可以考虑这样的语句“只要我们双方都感觉有收获”。
    @"Inb4J*K-gyAb13411451Testing软件测试网 cik7]P7U9Bc;p@
    11.你的简历显示你的能力超出了这个工作的要求,你是如何认为的?51Testing软件测试网br#ojzZ b"G

    )Xm7s/~/uJ.h \^134114强 调你对在这个公司开始一个长期的合作的兴趣,你可以说你认为如果你在这个职位上表现的很好,公司还会为你提供新的机会。也要提到一个好公司需要好的职员。 有检验的职员总会有很好的奖励;既然你是如此的很是这个职位,雇主将会很快从他的投资中获得回报。一个发展中的,充满活力的工资永远不会嫌天才多的。
    Z;H0p1w1N/l [134114
    @ V;g.R m13411412.你的管理方式是什么样的?
    &vWG f5Zf134114
    [:B9DEl3yU/`134114你 必须对这个公司的风格有足够的了解,这样才能让你的管理风格对其进行补充。可能的风格包括:基于任务的(我喜爱问题-研究那些是错误的,选择一个解决方案 并完成),基于结构的(我做出的任何一个管理的决定是基于它是如何影响问题的底线的),或者是家长式作风的(我致力与管理好我的每一个下属,并给他们指引 正确的方向)。
    2d0Zh Y\}pr W"i134114
    *zp$k L u t7W.P2S134114民主参与式的风格是目前比较流行的一种:一个开放的管理方式,通过激励手下并根据所负责的事情分派任务来完成每一件事情。
    #K6u"u3l(IW8C0?o134114
    2[8oY*x M^2j@134114当你考虑这个问题的时候,要思考你的风格是否会让你在这个公司里高兴并有效率的工作。
    T4v5P.p\0q*k134114
    :j5a)A ?_3a13411451Testing软件测试网p [,^w,[T

    '?:sRL7eyj13411413.你是一个合格的经理吗?你可以举一些例子吗?你是否觉得你有顶级管理人员的潜力?51Testing软件测试网q7?6U;J-Z"y?

    +k5Hq#z1K134114保证你的答案是基于成果和任务的。通过你职业生涯中的一些例子来加固你的论点。强调你的经验和精力51Testing软件测试网 XG:tI i[;Y

    $`:Q+]9~4D9h Q13411451Testing软件测试网RM5Q%o3I~8k

    *M PU)DZ&~13411414.当你招聘人手的时候你需要什么类型的?51Testing软件测试网t/Q-?:Z3|!k.]1uoU

    ~ro"^Xc({134114考虑一些技能方面的问题。主动性,以及能够舒服和有效的与其他人一起工作的适应性。提到你希望雇佣一些看起来能够在公司中获得提升的人。51Testing软件测试网]Zv`.P:jg7Y:rR

    rM;kJ3eQ2`K13411451Testing软件测试网'h}QY J
    51Testing软件测试网)o#^rjv&Cd$ILA
    15.你是否曾经不得不解雇一些员工?是什么理由?你是如何解决这个情况的?51Testing软件测试网E7?2Kn;h i uan!NQ
    51Testing软件测试网+C}3_W0ZW(r
    要承认这个情况不是容易解决的,但是你还是很好的解决了,不管是从公司角度还是从个人角度。让他们知道,和其他人一样,你不喜欢这种让人不乐意的工作,但是你可以有效的富有人情味的解决问题,尤其是在要解雇某个人的时候。
    CfOS.J c G*A!]`b134114
    ~;N0d]B:j#d Sj1G?$L134114
    8PWc/I Q13411451Testing软件测试网.\6N!pi xB ["Z!F
    16.你认为作为一个经理或者高级行政人员最困难的事情是什么?51Testing软件测试网 i,[:F2ku0}
    51Testing软件测试网;L;Ra[VC1[D3\g
    要提到指定计划,指定和成本控制。最困难的任务是要去激发并管理雇员来完成一些计划中的事情,并且按时的在预算范围内完成任务。51Testing软件测试网Y&GAk |c#j8I

    9g5de [X*V13411417.在我们这个行业中你觉得什么是最重要的趋势?51Testing软件测试网e:hZ1\wc

    3z PCW |1xhL0x.s134114一样要准备两到三个趋势来阐明你对所在行业的是多么的了解。你可以需要考虑技术上的挑战或者机会,金融环境甚至管理的需求作为你所应该考虑收集的关于你的行业说面对的状况。51Testing软件测试网CXI8J5p%M@,e
    51Testing软件测试网;w1FqXSR)m3E
    51Testing软件测试网%t"hc"?du3Au

    e0G8@qJ-ZD13411418.你为什么离开你现在的工作(上一个工作)?
    B$l{? q7f'M13411451Testing软件测试网^R,g&a+LZyh6SI
    在不伤害你自己的情况下要简明扼要并诚实的回答这个问题。回溯到你寻找工作的计划阶段,那时你正在把这个话题当作你的工作经历。如果你是在一次公司裁员中被裁掉的,直接说出来好了;否则的话,要指明这次离职是你自己的决定,你自己行动的结构,不要特到任何关于性格冲突等。
    $_[:N+i(wZF(@i j13411451Testing软件测试网$x^7o C#G&p @
    19.你觉得放弃原来所有的福利待遇等来寻找一个新的工作是什么感觉?
    2fd;t Y0A134114
    ;nd*|A)e134114要提到你很自然的担心这一点,但是并不很恐慌。你愿意为寻找到合适的工作而冒一点风险。不要说,你对安全感比成功的完成工作更感兴趣。
    -t?zV!S U VS"Q134114
    } REg1a |13411451Testing软件测试网 B7Gj[z$M6`"~

    3w#A yk}4xWZ$|13411420.在你上一份工作中,你最喜欢那个方面的特点?最不喜欢哪个?
    rM1Y5e6?p13411451Testing软件测试网FF4h'e;bO hED}
    要小心而计息的回答这个问题。要多说你喜欢的特性,而少说你不喜欢的。不要引用个人的问题。如果你使得你的上一份工作听起来很糟糕,面试官会疑问你为什么还能在上一份职位上一直待到现在。51Testing软件测试网ys*d+C(O!Bo

    9v5fE;|A8l` t R-f`134114
    {3` DG5_4s134114
    T5Os KH cD@+rS2w13411421.你如何看待你的老板?51Testing软件测试网g&o:rT'n-@n

    M,g"R!K"{134114要尽可能积极的回答这个问题。你潜在的未来的老板很希望能够了解你未来在相似的场合会如何谈论他
    !mJ/t \3jeY134114
    Q.v'q;J |-Jb'}@134114
    #y(Z9X |7P*Hbb134114
    E ?%X"\nS(PJ6Q13411422.你在现在的年龄中为什么不能赚到更多?51Testing软件测试网.A-n2C| k&n
    51Testing软件测试网S,Y hN2f!Lc\
    要告诉他这是你寻找新的工作的理由之一,不要处于守势。
    Rlq5L[2].F13411451Testing软件测试网4Cm%Zx-pdF.DN
    51Testing软件测试网 _{7gk*d6{

    N W@ C{_J2C@|KZ'yp13411423.你希望这个职位的薪水是多少?51Testing软件测试网 C2dgx,@#N}M0Z
    51Testing软件测试网.nN(FNY v(z
    讨论薪水是一个很微妙的问题。我们建议你在条件允许的情况下尽可能的拖延用一个精确的数据来回答这个问题。你可以说,“我知道这个工作的薪水的大概范围是¥---到¥---。这个对于我来说是合适的价位。”你也可以用一个问题来回答这个问题:
    4z8s{+l t134114
    &|]n2YQm/L134114“你可能在这个问题上可以帮助我。你能否告诉我在公司中对相似职位的工作的大概薪水是多少?”。
    x h iL9T?[;]13411451Testing软件测试网(} M0J/S$i0Sst
    如 果你是在一个最初的面试中遇到这个问题,你可以说你觉得你需要更多的了解这个职位的职能才能够对这个问题有个有意思的回答。在这个问题上通过询问面试官或 者人事高级主管或者自己去寻找结果,你可以尝试去获得这份工作是由有一个工资等级。如果有,并且你能够接受,那么直接回答你满意这个薪水范围好了。51Testing软件测试网,U%Q1GDL V1] eVw:mv

    (aD(Q/l;u;y;kw134114如果面试官继续纠缠这个问题的话,你可以说“我现在的薪水是¥--。和其他人一样,我希望能够提升这个数字,但是我主要的兴趣还是在工作本身。”要记住,获取一个新的工作这件事本身不会使得你能够赚到更多的钱。51Testing软件测试网"KC7C.P A,ni {C&{D
    51Testing软件测试网|5p C,|s6Q3h
    如果一个猎头公司也参与了此事的话,你的联系人可能可以帮助你解决这个薪水的问题。他甚至可以帮你介入此事。例如,如果他告诉你这个职位的待遇,然后你告诉他你现在已经赚那么多的,并且希望待遇能够适当的提升,他可能会去雇主那然后提议给你增加10%的待遇。51Testing软件测试网"FS0n;W`gD W OCI
    51Testing软件测试网*UEZpm4pd,\
    如 果没有获得关于这个职位的合适的信息,而面试官还继续这个话题的话,你可以用一个具体的数字来回答这个问题。你不能给别人留下待遇完全没有影响你将会接受 任何待遇的印象。如果你年薪8W的话,你不可能没有变现出放弃自己的时候,说3.5W一年也是可以接受的。(如果你是在做工作的一个彻底的变化的话,这种 情况可能也是有道理,可以理解的)。51Testing软件测试网:cs8TCcHs#d_P

    7A(`3u'v3? ]B134114不要很快就把你自己卖掉:),但是要继续的强调这个工作本身才是你最看重的东西。面试官可能会去判断你希望从这个工作的待遇是多少哦。不要给面试官留下金钱对你来说是唯一重要的事情的感觉。把薪水的问题和工作本身挂钩。51Testing软件测试网/a/GVxFC1L#R(a&~ k
    51Testing软件测试网7u`'JFG;@
    但是无论合适可能的话,在你到面试过程的最后一个阶段之前,少谈论薪水的问题。到那个阶段的时候,你就应该知道,这个公司对你有很大的兴趣,这个时候在谈论薪水待遇的话就会有很大的余地了。
    9c jB'S$a nZw#}13411451Testing软件测试网Fp#M8D]!wUr
    51Testing软件测试网N)xO+~'OY+f] fU
    51Testing软件测试网V"^3@k"O N
    24.你长期的目标是什么?51Testing软件测试网'J)f@,i,j)r9]7j
    51Testing软件测试网1@!T0W4~4@
    回到你寻找工作的计划阶段。不要这样回答“我希望能够得到你广告中的工作”。把你的目标与你面试的公司关系起来,“在你们这样一个公司,我希望能够...”51Testing软件测试网vj)t*a,?-Y Z
    51Testing软件测试网7]o5F!O/A0J;mMt

    L/v g#kU.P)D8v l?134114
    +e(A;P["e6J D{4~ fx13411425.你目前位置在工作中是多么的成功?51Testing软件测试网)}[-e'ti-N0O VW0r

    2DC-Get134114你要回答,总的来说你对你目前为止的职业生涯是很高兴很满意的。列举一些生活中普通的琐事,你觉得你完成的很好,没有怨言。
    V |i9d3tI:G l`8U13411451Testing软件测试网G8G}5@1ht CR

    X0h&W@"dyDw DC_9C13411451Testing软件测试网Wmb6uE&J}+S
    要想别人展现一个积极和自信的面貌,但是不要夸大其词。例如这样的回答“所有的事情都特别的好!我不能想象一个更好的事情了!我非常的开心。”,会使得面试官觉得你是不是在愚弄他或者你自己。最具有说服力的答案通常都是相当自信的。

  • 25大软件编程错误不可赦

    2009-01-14 14:06:40

    25大软件编程错误不可赦

    转载:

      大多数IT安全事件(如补丁程序或网络攻击等)都与软件编程错误有关,在过去的三年中,非赢利调研机构MITRE和美国系统网络安全协会 (SANSInstitute)发现了700多处常见的软件编程错误,经过安全专家的筛选,最终于周一公布了以下25大软件编程错误:

      1. 错误的输入验证

      2. 不正确的编码或转义输出

      3. 维持SQL查询结构(SQL注入)错误

      4. 维持网页结构(跨站点脚本)错误

      5. 维持操作系统命令结果(操作系统命令注入)错误

      6. 明文传送敏感信息

      7. 跨站点请求伪造

      8. 资源竞争(Race condition)

      9. 错误信息泄露

      10. 限定缓冲区内操作失败

      11. 外部控制重要状态数据

      12. 外部控制文件名或路径

      14. 不可信搜索路径

      15. 控制代码生成错误(代码注入)

      15. 下载未经完整性检查的代码

      16. 错误的资源关闭或发布

      17. 不正确的初始化

      18. 错误计算

      19. 可渗透防护

      20. 使用被破解的加密算法

      21. 硬编码密码

      22. 对核心资源的错误权限分配

      23. 随机值的错误利用

      24. 滥用特权操作

      25. 客户端执行服务器端安全

  • 在controller中设置scheduling setting的duration与vugen中设置iterations关系

    2009-01-08 10:05:24

    转载:http://bbs.51testing.com/viewthread.php?tid=553&page=1#pid357158

    关于设置场景


    脚本设置情况如下:
    单纯的打开一个页面就停止了录制(此处没有录制关闭该页面的过程)。Run_Time设置为3。

    场景设置情况如下:
    设置100个虚拟用户,要求每隔1分钟加载20个用户,设置当加载完所有用户后场景继续运行的时间为10分钟。

    问题:
    1。第1分钟成功加载20个用户,在第2分钟,这20个用户是继续不断执行上述打开页面的脚本还是仅仅只是保持在线状态?

    2。第5分钟结束,成功加载了100个用户,然后场景继续运行10分钟,在这10分钟中这100个用户是保持在线状态还是不断的执行上述录制的打开页面的脚本?

    3。安装版主在“在loadrunner中录制脚本时碰到的问题"这个帖子中的解释“如果在controller中设置scheduling setting的duration设置1小时,即使你vugen中设置iterations为3,她也会运行到指定时间。次数也许不只3次,会更多。”那 是否表示当用户成功加载后仍然在继续不断的执行上述录制的打开页面的脚本?如果这样的话,对我打算测试的web服务器而言肯定已经不止是100个用户了, 那我们还设置虚拟用户为100又有什么意义呢?

    没有回答问题之前,我把上次的脚本进行如下修改!做几个试验:
    VuGen建立的第一个脚本 TestFirst的action脚本如下
    char *filename = "c:\\test.txt";
    Action() {

         long file;
         int id;
         char *groupname;

         /* Create a new file */
         if ((file = fopen(filename, "a" )) == NULL) {
              lr_output_message("Unable to create %s", filename);
              return -1;
         }
         
         /* Write the Vuser id and group to the log file */
         id = 1;
             groupname = "one";

         fprintf(file, "logfile of virtual user id: %d group: %s\n", id, groupname);
         fclose(file);

         return 0;
    }
    vu_End脚本如下
    char *filepath = "c:\\test.txt";
    vuser_end()
    {
             long file;
         int id;
         /* Create a new file */
         if ((file = fopen(filepath, "a" )) == NULL) {
              lr_output_message("Unable to create %s", filename);
              return -1;
         }
         
         id = 1;

         fprintf(file, "%d End  ", id);
         fclose(file);
             return 0;
    }

    VuGen建立的第二个脚本TestSecond的Action脚本如下

    char *filename = "c:\\test.txt";
    Action() {

         long file;
         int id;
         char *groupname;

         /* Create a new file */
         if ((file = fopen(filename, "a" )) == NULL) {
              lr_output_message("Unable to create %s", filename);
              return -1;
         }
         
         /* Write the Vuser id and group to the log file */
         id = 2;
             groupname = "two";

         fprintf(file, "logfile of virtual user id: %d group: %s\n", id, groupname);
         fclose(file);

         return 0;
    }
    vu_End脚本如下:
    #include "as_web.h"
    char *filepath = "c:\\test.txt";
    vuser_end()
    {
             long file;
         int id;
         /* Create a new file */
         if ((file = fopen(filepath, "a" )) == NULL) {
              lr_output_message("Unable to create %s", filename);
              return -1;
         }
         
         id = 2;
         fprintf(file, "%d End  ", id);
         fclose(file);
             return 0;
    }

    上边的脚本其实很相类似只不过每个脚本中用one,two来标示每个用户(为了看到测试效果),我们这样做只是为了检测Controller如何调用脚本。
    还有一点我在vu_end()加入代码,这是因为我们知道vuGen设置iteration的数值,实质是设置action的运行次数,也就是说只有运行action的iteration后才会运行vu_end。

    一.设置iteration为1,在Controller中添加运行testfirst,testSecond脚本用户各一,运行结果如下:
    logfile of virtual user id: 1 group: one
    1 End  
    logfile of virtual user id: 2 group: two
    2 End
    二.设置iteration为2,在Controller中添加运行testfirst,testSecond脚本用户各一,运行结果如下:
    logfile of virtual user id: 2 group: two
    logfile of virtual user id: 2 group: two
    2 End  
    logfile of virtual user id: 1 group: one
    logfile of virtual user id: 1 group: one
    1 End  

    三.设置iteration为2,在Controller中添加运行testfirst,testSecond脚本用户各一,每隔1分钟加载1个用户,运行结果如下:
    logfile of virtual user id: 1 group: one
    logfile of virtual user id: 1 group: one
    1 End  
    logfile of virtual user id: 2 group: two
    logfile of virtual user id: 2 group: two
    2 End  

    四.设置iteration为2,在Controller中添加运行testfirst,testSecond脚本用户各2,每隔1分
    钟加载1个用户,运行结果如下:
    logfile of virtual user id: 1 group: one
    logfile of virtual user id: 1 group: one
    1 End  
    logfile of virtual user id: 2 group: two
    logfile of virtual user id: 2 group: two
    2 End
    logfile of virtual user id: 1 group: one
    logfile of virtual user id: 1 group: one
    1 End
    logfile of virtual user id: 2 group: two
    logfile of virtual user id: 2 group: two
    2 End  
    五.设置iteration为2,在Controller中添加运行testfirst,testSecond脚本用户各2,设置每隔10秒加载1个用户并设置duration为40秒,运行结果如下:
    logfile of virtual user id: 1 group: one
    logfile of virtual user id: 1 group: one
    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx’省略
    logfile of virtual user id: 1 group: one
    2 End  
    logfile of virtual user id: 2 group: two
    logfile of virtual user id: 1 group: one
    1 End  
    logfile of virtual user id: 2 group: two
    2 End  
    logfile of virtual user id: 1 group: one
    1 End  


    以上对loadrunner的研究说明用户对应脚本,而不管他当前运行到什么状态。在第四中设置中很容易清晰的看出运行次序,可以说是从头运行到尾。(这么做只是为了研究,实际操作中情况千变万化,我只是为了测试结果清晰化)
    你的三个问题从上边的试验可以得出结论,脚本影响实际程序的状态通过action脚本中运行的状态(如果你没有录制关闭页面脚本那么当前状态仍然是打开状态)。其实你设置的情况比较复杂了,我把几种不同的设置,所得出的运行结果都列举出来了。你可以自行研究。

    你第一个问题 状态仍然是打开状态
    你第二个问题 你的设置情况与我第五种试验设置一致,结论是仍然打开页面
    你第三个问题 虚拟用户是针对loadrunner来说的,虚拟用户试和运行的机器有关系,你设置虚拟用户是为了把虚拟用户分布到不同的机器上,模拟现实世界,实际登陆 用户是对你的测试软件来说的, 这是有区别的,要弄清楚概念。工具只是实现你测试目的的辅助手段,你所开发的脚本都是根据你的测试用例,在这个案例中你这么做有没有意义取决你选择的压力 测试策略。如果现实中有这么做的,你就可以模拟!

    我想这些测试试验可以帮助你了解iteration和虚拟用户设置对脚本调用的作用!

  • loadrunner 测试ajax框架

    2009-01-06 23:51:16

    早上找到合适的协议,下午运行成功,结果没改动数据,各种调试,网络查询,最后获得数据,放在那边跑,猜想也应该没结果,低落心情的一天
  • LoadRunner监视的性能计数器

    2008-12-16 15:48:21



    今天,我先把我整理的一些计数器及其阈值要求等贴出来,这些计数器是针对我对windows操作系统,C/S结构的sqlserver数据库及WEB平台.net产品测试时的一些计数器;大家可以继续补充,作过unix平台上oracle数据库测试及J2EE架构及WEBLOGIC方面测试的朋友,也希望把自己使用的计数器贴出来,让大家分享。
    好了,先说这些了,希望通过这个专题,最终能让大家对自己的测试结果进行分析。

    Memory:内存使用情况可能是系统性能中最重要的因素。如果系统“页交换”频繁,说明内存不足。“页交换”是使用称为“页面”的单位,将固定大小的代码和数据块从 RAM 移动到磁盘的过程,其目的是为了释放内存空间。尽管某些页交换使 Windows 2000 能够使用比实际更多的内存,也是可以接受的,但频繁的页交换将降低系统性能。减少页交换将显著提高系统响应速度。要监视内存不足的状况,请从以下的对象计数器开始:
    Available Mbytes:可用物理内存数. 如果Available Mbytes的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。


    page/sec:表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。一般如果pages/sec持续高于几百,那么您应该进一步研究页交换活动。有可能需要增加内存,以减少换页的需求(你可以把这个数字乘以4k就得到由此引起的硬盘数据流量)。Pages/sec 的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。


    page read/sec:页的硬故障,page/sec的子集,为了解析对内存的引用,必须读取页文件的次数。阈值为>5. 越低越好。大数值表示磁盘读而不是缓存读。
    由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足与导致页交换的磁盘瓶径混淆。因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器:
    Physical Disk\ % Disk Time
    Physical Disk\ Avg.Disk Queue Length
    例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。
    要确定过多的页交换对磁盘活动的影响,请将 Physical Disk\ Avg.Disk sec/Transfer 和 Memory\ Pages/sec 计数器的值增大数倍。如果这些计数器的计数结果超过了 0.1,那么页交换将花费百分之十以上的磁盘访问时间。如果长时间发生这种情况,那么您可能需要更多的内存。


    Page Faults/sec:每秒软性页面失效的数目(包括有些可以直接在内存中满足而有些需要从硬盘读取)较page/sec只表明数据不能在内存的指定工作集中立即使用。
    Cache Bytes:文件系统缓存(File System Cache),默认情况下为50%的可用物理内存。如IIS5.0 运行内存不够时,它会自动整理缓存。需要关注该计数器的趋势变化
    如果您怀疑有内存泄露,请监视 Memory\ Available Bytes 和 Memory\ Committed Bytes,以观察内存行为,并监视您认为可能在泄露内存的进程的 Process\Private Bytes、Process\Working Set 和Process\Handle Count。如果您怀疑是内核模式进程导致了泄露,则还应该监视 Memory\Pool Nonpaged Bytes、Memory\ Pool Nonpaged Allocs 和 Process(process_name)\ Pool Nonpaged Bytes。


    Pages per second :每秒钟检索的页数。该数字应少于每秒一页。

    Process:
    %Processor Time: 被处理器消耗的处理器时间数量。如果服务器专用于sql server,可接受的最大上限是80-85%
    Page Faults/sec:将进程产生的页故障与系统产生的相比较,以判断这个进程对系统页故障产生的影响。
    Work set: 处理线程最近使用的内存页,反映了每一个进程使用的内存页的数量。如果服务器有足够的空闲内存,页就会被留在工作集中,当自由内存少于一个特定的阈值时,页就会被清除出工作集。
    Inetinfo:Private Bytes:此进程所分配的无法与其它进程共享的当前字节数量。如果系统性能随着时间而降低,则此计数器可以是内存泄漏的最佳指示器。

    Processor:监视“处理器”和“系统”对象计数器可以提供关于处理器使用的有价值的信息,帮助您决定是否存在瓶颈。
    %Processor Time:如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。
    %User Time:表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。
    %Privileged Time:(CPU内核时间)是在特权模式下处理线程执行代码所花时间的百分比。如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。另外设置Tempdb in RAM,减低"max async IO","max lazy writer IO"等措施都会降低该值。
    此外,跟踪计算机的服务器工作队列当前长度的 Server Work Queues\ Queue Length 计数器会显示出处理器瓶颈。队列长度持续大于 4 则表示可能出现处理器拥塞。此计数器是特定时间的值,而不是一段时间的平均值。
    % DPC Time:越低越好。在多处理器系统中,如果这个值大于50%并且Processor:% Processor Time非常高,加入一个网卡可能会提高性能,提供的网络已经不饱和。

    Thread
    ContextSwitches/sec: (实例化inetinfo 和dllhost 进程) 如果你决定要增加线程字节池的大小,你应该监视这三个计数器(包括上面的一个)。增加线程数可能会增加上下文切换次数,这样性能不会上升反而会下降。如果十个实例的上下文切换值非常高,就应该减小线程字节池的大小。

  • lr UNIX Resources. Cannot initialize the monitoring -47190

    2008-12-15 17:44:25

    转载
    简述:LoadRunner监控Linux资源时弹出如下错误:

    Monitor name :UNIX Resources. Cannot initialize the monitoring on 192.168.52.189. 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.

    上述问题的实质是Linux系统中未安装rpc.rstatd,服务未开启的原因造成。

    于是接下来就验证我们的推测:

    首先查看rpc.rstatd是否安装

    [root@localhost bin]# whereis rpc.rstatd

    发现系统未安装rpc.rstatd

    备注:rstatd Rstat协议允许网络上的用户获得同一网络上各机器的性能参数。


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

    2. 执行安装包:

       tar -xzvf  rpc.rstatd-4.0.1.tar.gz   //解压rcp.rstatd

    cd  rpc.rstatd-4.0.1            //进入到rpc.rstatd目录中

    ./configure                  //配置rc.rstatd的安装,以下我的是按照默认方式的            

    make                      //编译rc.rstatd  

    make install               // 安装

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

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

        cd /etc/xinetd.d   //进入到etc/xinetd.conf目录中 

    Vi    rlogin //编辑disable=no,保存

    Vi    rsh    // 编辑disable=no,保存

    Vi    rexec //编辑disable=no,保存

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

       rpc.rstatd                //启动rpc.rstatd进程

    rpcinfo –p              // 执行此命令检查rpc服务的状态

    [root@localhost xinetd.d]# 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,成功后结果如下图所示:

      

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

  • 如何通过LoadRunner监控Linux和Unix操作系统的资源状况

    2008-12-15 17:42:16



    (转载)


        我们在使用LR进行性能测试的时候,经常有需要监控OS的资源使用情况的需求。对于Windows系统,这个工作进行起来很方便,直接在LR的资源监控窗 口中添加需要被监控的机器名或IP即可,但对于Linux/Unix系统,则要稍微复杂一些,我在这里简单介绍一下如何在LR中监控Linux/Unix系统的资源使用情况:

      Linux

        对于Linux系统,要想通过LR监控Linux/Unix系统的资源使用情况,需要运行rstatd服务。如果OS没有安装rstatd(可以查找一下系统中是否存在rpc.rstatd这个文件,如果没有,则说明系统没有安装rstatd),则需要进行安装。rstatd安装步骤如下:

        获得rstatd的安装介质(rstatd.tar.gz)。rstatd可以从redhat的安装CD中获得,或者从网站上下载(给出一个下载地址,sourceforge的:http://heanet.dl.sourceforge.net/sourceforge/rstatd)。

        将rstatd.tar.gz拷贝到Linux系统中,解压,赋予可执行权限,进入rpc.rstatd目录,依次执行如下命令:
          #./configure
          #make
          #make install 
        结束后,运行./rpc.rstatd命令,启动服务。这个时候,你就可以在LR中监控Linux资源了。

        Unix

        对于Unix系统,比如Solaris,AIX或者HP UX等,它们的配置过程比较简单——在inetd.conf(在/etc目录下)文件中去掉rstatd前面的注释,然后启动rstatd服务即可。

    原始链接 :http://www.cnitblog.com/qiuyangzh/archive/2006/11/27/19626.html

  • 一个成功测试人的解读测试这路

    2008-12-10 00:30:18

    (转载)

    我也来谈一谈吧,尽量详细一些。
    因为以前是搞开发的,所以一起都谈谈,毕竟是有因果关系的。
    毕业第一年,半年试用期工资1100。半年转正工资1700。
    毕业一年跳槽到国内一家大型公司,工资增幅比较大,达到了年薪10万。
    说明一下,这次机会还是很靠能力。当时跟我一起进去的只有我一个本科生,基本都是北大,中科院的研究生,博士,面试了很多轮。
    工作半年之后,感觉发展已经到头了,应该提升一些自己了。辞职开始学习,准备申请研究生。
    研究生3年毕业,又开始工作。
    以前都是开发,这次本来的工作也是开发,年薪××万,跟3年前一样。可是鬼使神差让我做了测试的工作。
    试用期3个月中,老板说准备让我做team lead.转正后开始做team lead.半年后,派到美国带项目回来,开始负责一个单独项目的测试。工资涨到了×××××月薪。
    工作一年后涨到××万年薪。工作一年半,涨到××××万年薪。
    工作20个月后,找到国外的一份工作,年薪45万,不过不是team lead,只是普通测试员。在那里工作1.5个月,跳槽到一家世界很大规模的公司,也是在国外,工资8万多美金。
    基本上,做测试不到两年的时间,从年薪10万人民币到8万多美金。
    当时很不情愿做测试,后来有人跟我说,“做什么想做好都不容易”,改变了自己的开发。自己实现了一套自动化测试系统,为以后的找工作,受到国外大公司的注意,打下了很好的基础。

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

    引用:
    原帖由 sunxy5291 于 2007-2-26 10:30 发表
    是呀 楼主把工资摆出来吓唬人吗?有意思吗
    你怎么不谈谈自己是怎么从开发到测试 在从测试入门到高手的,这一系列是怎么过来的?
    碰到了那些困难,是怎样克服的,又学习了哪些知识???等等等等
    那我说一下各阶段掌握的知识吧:
    大学主要是C,C++,VC。
    工作第一年就是VC编程,TCP/IP编程。
    后来的半年主要是C编程。
    研究生搞了很多,不过都不算精通,Java,Linux,并行计算,分布式计算。
    做测试以后搞了.net, C#, 开发自动化测试系统。
    另外,英文水平可以和外国人直接沟通。
    ---------------------------------------------
    引用:
    原帖由 sunxy5291 于 2007-2-27 16:20 发表
    怪不得呢
    楼主好棒!
    那楼主给我建议一下:
    我的情况:我05年毕业 本科,计算机专业
    毕业就去上海一下一般大的软件公司做.net开发,待遇一般,感觉自己也没多大进步。
    06年8月回到家乡西安在一家软件公司做 ...
    那我说一下我的看法吧。因为大家都是搞测试的,这里我也只谈测试。
    首先,我们可以有两条路发展,技术和管理。管理就是做team lead, manager, director这么走。因为我没有走这条路,所以,我这里也只谈技术。而且,即使走管理,也是应该

    具备很强的技术能力才行,所以技术是我们的发展之本。我个人不喜欢技术不精通的领导,也不喜欢被这种人管理。

    技术的发展是分阶段的,基本上你要是能发展到最后的阶段,工作,钱,房子,车子,老婆都不用发愁了。当然要一步一步走,不可能一步升天,而且一路走过来也不是很容易,

    应该说大部分人可能都达不到。不过只要你肯努力,坚持不懈,就一定能达到。

    第一阶段:就是基本功的问题。这个阶段从大学入学就开始了,我接触不少人工作几年都没有达到要求。这个要求是一定要达到的,不然以后没法往高发展。大学的一些课程一定

    要学好,主要是数据结构,算法,数据库操作系统,计算机网络。争取精通两门。数据结构,算法对软件开发非常的重要,很多大公司面试就考这些。你不过关,根本通过不了

    面试,一两道算法题一下就把你难住了。另外,我可以告诉你,顶尖公司的面试80%都是考算法,你有没有经验不要紧,做没做过项目不要紧。关键是考察你的基本功,基本功打好

    了,其他工作就都容易很多了,基本功打不好,什么都白说。操作系统,争取要精通windows或者linux内核,看你走哪条路了,我是搞windows的,不过他们之间很多地方也是相通

    的。计算机网络,争取精通TCP/IP协议。数据库我不怎么懂,我的理解是要精通oracle, sqlserver, 还有sql编程。
    另外就是编程技术了. C,C++,面向对象一定要搞懂,搞熟。大公司面试的算法就是要你用C/C++实现的。这些搞熟了,学习其他语言就是几个小时的事情。(我指的是上手,不是精

    通)。这些东西搞不透,不管你其他语言用多少年,回来学他们还是难。
    再有就是英语水平了,听说读写,各个方面都要达到要求。技术到了一定程度,英语对你的发展就起到了非常决定性的作用了。你英语好,就可以去外企,就可以外派出国,甚至

    在国外发展。
    以上这些都是在大学应该掌握好的。当然了,能在大学掌握好这些的毕竟是少数。这些少数人就是去了微软,google的那些,一毕业就拿到月薪上万工资的。大部分人都是达不到

    要求的,这没关系,毕业后一定要找时间把这些基本功补上。不然的话,在下个阶段的发展就很受限制了。

    第二阶段:计算机知识的扩展,行业知识的精通。这个阶段从你大学毕业走向第一个工作岗位开始。工作之后,发现计算机的世界比大学的知识要博大精深很多。一开始工作,就

    要拼命吸收以前没有接触过的,新的知识。这个就不多说了,大家都会有很多感受的,会觉得很多东西都不会,不会就学。以后你跳槽去面试,人家就会看你工作几年,这几年干

    什么了。工作1,2年之后,很重要的一件事情就是要选择一个行业了。也许是你现在正在从事的行业,也许是一个新的行业。总之,你自己要为自己规划,选择一个适合自己,而

    且又热门,以后有发展的行业。无论是现在的行业,还是跳槽到一个新的行业,都需要你开始积累在这个行业的经验了,要精通这个行业。有这个基础之后,就要去这个行业里top

    的公司了,国企,外企都可以,一定要有名气,大公司。比如,通信的华为,搜索的百度,等等。如果你精通了这个行业,去这些公司不是很难。
    另外有一点很重要,如果你本科不是一所名校毕业的话,争取能上一个名校的研究生,全职,兼职都可以。这样可以为下一阶段做好充分的准备,否则的话会有比较大的困难。总

    之了,是自己的短处都要想办法去弥补,不然发展总会受限制。

    第三阶段:国际著名大公司。有了前两个阶段的积累,加上自己的英文水平,就要找机会进入国际的大公司了。相信这个时候就会有很多猎头来联系你了。选择你这个行业的世界

    前3,最好是第一或者第二。进去之后要学习两个方面,一是英文,中国人可以学一辈子英文的。另外一个就是大公司的管理。可以这样说,国际大公司的管理有很多类似的地方,

    因此他们的招聘非常愿意招其他国际大公司的职员。这就是为什么,你一旦踏上一家公司,一辈子都不用愁工作了,可以在这些大公司跳来跳去,工资节节高。到了这个阶段,你

    基本上可以有个比较不错的生活了,房子,车子都不会是太大的问题。

    第四阶段:向国际化发展。如果你还不满足,觉得自己还有能力更进一步,那我就建议你向国际化发展了。中国的工资毕竟有限,到了第三阶段也不过就是20万左右,你可能还不

    满足。那么你就可以联系国外的公司了,有了你的英文,你的经验,你的背景,到时候就是水到渠成了。我相信国际的猎头也会盯上你的。

    最后说一下,如果你现在已经具备了我所说的各个阶段的能力,那么你的简历是任何公司都很难拒绝的了。因为目前的情况,具有这些素质的测试人员在世界都紧缺。很多公司都

    招不到人,即使连google,MS也不列外。他们都在到处寻找这种人。

    最后说一下测试。我一直没有讨论测试的问题,因为我一直没有把测试当作一个难得东西来看待。我认为测试是表面上的,我前边提到的东西要比它重要的多。欢迎大家一起来讨

    论。我也是进入测试才2年多的时候,其中大多数的时间也像大家一样的迷惘,很多时候也很悲观。不过通过自己的努力,最后终于得到了一个满意的结果。我发现自己对测试这个

    行业的理解和很多人都不同,希望我的理解能给大家一点帮助。
    ----------------------------------------------
    引用:
    原帖由 smz_198181 于 2007-3-6 15:52 发表
    楼主很牛,佩服,顺便问一下,楼主说的第四阶段是指要到国外去工作么?
    我觉得是,除非情况发生变化。
    目前,国内的方方面面还是不能跟国外相比。而且,当你达到一定水平,想去国外发展也是一件非常自然的事情了。
    我就接到过新加坡,爱尔兰,加拿大,美国这些地方猎头或者公司的联系。感觉到他们都是很缺人。比如新加坡的猎头还让我跟他们保持联系,给他们推荐人才。

    还有就是国内搞测试,从技术发展来讲,到了微软,google就基本发展到头了。微软,google的中国员工基本上下一个发展目标都是想调去美国的总部发展。
    ----------------------------------------------
    引用:
    原帖由 smz_198181 于 2007-3-6 16:22 发表
    另外想问楼主,如何学习TCP/IP呢, 我网络这块很薄弱,想好好补一下,但是直接看tcp/ip三卷套,我看不懂,应该如何学习,有什么好的入门书可以给我介绍一下么! 谢谢了!
    我的看法是这样的,
    1。把大学的课程《计算机网络》学好,主要是OSI七层协议,TCP/IP四层协议搞清楚,搞明白。知道每层协议是干什么的,包括什么东西,工作基本原理怎么回事。当时去华为面试,专门考了这些知识,有研究生工作多年了,没有回答好,就被淘汰了。
    2。重点学习一下TCP/IP,主要是网络层和链路层,把里边的相关知识学会。我不知道什么书适合,如果大学教材就包括了最好,否则找本TCP/IP入门的书,不要想搞得太精通,那3卷可能太深入了。我也没看过。另外学习一下应用层的几个流行的协议,http, ftp 等等。
    3。学习一下TCP/IP编程,无论用什么语言,知道怎么进行TCP/UDP通信。随便编个什么应用,编个server, 编个client. 两边通信一下,比如聊天什么的。
    4。学习一个socket编程,用C/C++。socket有一套API,学习怎么用socket来实现第三步的功能。

    有了这些,我觉得对测试就基本够用了。你甚至可以去尝试攻击一些网站了。
    ------------------------------------------------
    引用:
    原帖由 wwwyhx 于 2007-3-7 10:04 发表
    至于你说的去国外工作,我想请问一下cleverman,我姐姐现在是在落山基的一家IT公司工作(职位是DBA),他们公司缺人,介绍一个给5000$de现在我还在国内读研,我能用上这层关系吗.该如何做??
    这当然是一个很好的机会了。在国外找工作80%,甚至90%都是通过推荐的获得的。
    当然现在国内也越来越多的通过被推荐来获得工作,或者公司通过推荐来获得雇员了。

    实际上你姐姐更应该能够告诉你应该怎样去做,毕竟是她的公司吗。

    不过我认为,首先你要知道他们缺的职位是什么,有什么要求。相应的你准备好你的英文简历,要符合美国人的习惯。这些,你姐姐都可以指导你。
    然后,你姐姐要把简历送到hiring manager的手上。不知道他们是否是很熟的朋友,如果一般的关系话。你的简历要能够打动那个manager,并且你还要运气好,没有美国本地人能够适合这个工作,而你能够适合。当然还有一种情况就是他们公司想省钱,从中国招一个低工资的员工。(低是相对美国员工来说的,跟中国工资比起来还是高很多)。
    如果manager觉得你不错,可能会安排电话面试,初步考察你的英文和技术能力。面试一定要搞好,给他留下深刻的印象。
    然后可能会安排你去美国面试,到了这一步成功率就比较大了,毕竟他们要负责你的机票,吃住,是花了钱的。因此,你要通过你姐姐搞清楚面试的过程和内容。
    通过了onsite interview, 公司就会给你offer, 办工作签证什么的了。拿到签证就可以飞去工作了。

    这个是一般的过程。里边有一些困难。
    第一就是,你一定要很适合这个职位,而且,其他美国人不行。
    第二就是工作签证每年是有名额的,全球一共58,000,公司要及时申请给你抓到一个名额。

    总之,中国人申请要比美国人难很多,实力和运气是成功的保证。
    -----------------------------------------------
    引用:
    原帖由 newdam 于 2007-3-8 14:49 发表
    问下LZ 在第二阶段 为什么要 上名校的研究生?对后面的发展会有哪些影响?
    是这样的。因为中国的人才太多了,所以名企在选择候选人的时候往往会通过学历,毕业学校的名气,以前或者现在工作单位的名气来选择。
    一个具有名校高学历,并且具有著名外企工作经验的人,找好工作基本上是没有任何问题的,也许他的能力很一般,甚至不如一些非名校的人。
    可是他的背景在那里,找工作就要容易的多。比如google的招聘,不是名校的基本就不要。在中国我不是很清楚,在美国不是那几所顶尖名校的,都很难进入。往往面试顺利最后因为学校的牌子而与google无缘。
    第二点,你能考上名校和考上普通院校,能力上还有有差距的。因为你考名校所花费的时间,精力要比普通院校都要大,遇到的困难也要大。你成功了会极大的提高你的自信心,对以后的发展也是非常有帮助的。其实说一个人的能力高低,就是能解决多大的困难。优秀的人才总是能解决别人解决不了的困难。这里面能力是一方面,自信心也非常的重要。
    第三点,你上了名校,你就能有一张更好的关系网。你的教授,你的同学,你的校友都跟普通院校不是一个层次了。这张网对你的事业帮助非常的大。比如你的很多同学都在微软,你想进微软是不是会容易很多?比如说你的一个师哥在google做了经理,你想进google是不是也会比其他人更有渠道?比如说你的同学在美国开了一家公司,把你邀请过去工作是不是也顺理成章?
    第四点,就是中国的歧视问题。中国的品牌歧视还是比较厉害的。我就因为本科不是名校在找工作方面受到了不少的歧视。看看那些大外企的校园招聘都是去什么大学吧?他们根本没兴趣去那些普通院校做宣传。

    个人认为,如果你真的技术很牛的话,学历,学校对你并不重要。对于一般人来说,搞个名校的学历,会对个人的发展提高一大步。
    最后,本科,硕士,博士,上的学校应该是牌子越来越响才对。这是国际通行的惯例,至少要牌子相当,否则还不如不上。
    另外,据我现在的了解,上个名校硕士并不算难。尤其是中科院的研究生,感觉很多普通学校的本科都能进入,并且还可以边工作边学习。还有一些人是通过公司和学校有项目合作,一边完成工作一边就完成毕业论文了。路子好像挺多的,大家都可以考虑一下。
    ----------------------------------------------
    引用:
    原帖由 consentto 于 2007-3-9 10:25 发表
    我一连几天都在跟这个贴,大受鼓舞,希望楼主多留言啊。
    谢谢。那我再多说几句。有一个比较重要的发展方向我还没有谈过,就是出国留学的问题。
    其实中国人出国发展,最主要的路还是出国留学。直接出国工作的人还是少数。
    以我的经验,我还是鼓励大家在北京,上海发展。可能你会说消费高,买不起房子。可是,整个大环境对你的影响,对你的未来发展非常的有帮助。
    小地方,生活安稳,消费低,可是也很难有太大的发展了。北京,上海卧虎藏龙,让你看不到边际。
    如果你在北京工作,你可能会经常听到,看到,有些甚至是你的同事,朋友,拿到奖学金出国了。这些东西都会或多或少的触动你的神经。可能有些人平时根本就不显眼,也就是说根本不是牛人,也去美国了。
    我知道,除了那几所名校,其他学校出国的人凤毛麟角,因此很多人也根本不了解这里边的东西。我认为出国留学不是一件特别难得事情,当然也肯定不容易。但是,以我的观察,一般的人凭借努力都可能达到这一步。对于有些人来讲,甚至要比考研究生容易很多。为什么这么说呢?考研要考什么?英语,数学,政治,专业课。可是你出国只需要英语,就一门。有些人特别不喜欢政治,考研就很吃亏。
    不知道大家的英文水平如何,如果你大学已经考过六级,就拥有了基本的英文能力,是可以考虑出国留学这条路的。

    另外一条路就是移民,加拿大,澳大利亚都是移民国家。因为加拿大的地理位置的优势,和美国关系的优势,成为了中国人移民的热门国家。加拿大成就了很多中国人的出国梦想,因为只要你具有专科学历就有机会拿到加拿大绿卡,从而在北美发展自己的事业。当然里面最重要的一点还是英文了,不过比去美国留学的要求要低。

    总而言之,如果你具有六级水平,或者你有信心能够学好英文。都是有希望,都是可以考虑出国发展的。为什么我要鼓励大家出国发展呢?因为搞技术的在中国实在是没有地位。搞销售,搞市场的才叫厉害。可是如果到了国外,只有技术人才才能找到工作,搞市场的可就不行了。因此,我还是建议搞技术的最好能出去发展。 当然了,如果想在管理方向发展的,还是应该选择国内。中国人在国外很难进入管理层。

    希望能对大家有点启发作用。至少,我刚毕业的时候觉得出国好遥远,根本不敢去想。可是后来发现,并不是像想象中的那么难。

    最后给大家讲个真实的故事:
    以前一个同事,他有一个同学学习特别的烂,因此工作也很不如意。
    有一年的聚会,他说他要考研究生,大家都很surpriesd, 暗地里觉得很好笑。
    第二年的聚会,大家问他考得怎么样?他说没考上,不过还要继续考。大家觉得更好笑。
    第三年的聚会,大家问他,他又没考上,可是还要继续考,大家觉得他可能有点神经了。
    到了第四年的聚会,大家都没有问他,他确告诉大家他考上了,而且考上的是一所北京的名校。

    我的同事非常受震撼,因为他自己就是一个智力,天赋非常一般的人。工作能力也是出奇的差。记得我刚工作的时候,他已经工作一年了,竟然还不会装操作系统。
    可是他感受到了一种“坚持就是胜利的”力量。
    听说之后他每天只睡4,5个小时,工作时间之外就是学英文,GRE考了5次。不过,最后真的去了美国了,还带走了我们单位的一位美女。这也是我身边出国的第一人。
    ----------------------------------------------
    引用:
    原帖由 wwwyhx 于 2007-3-9 14:22 发表
    我想请问一下,出国读研是不是学费很贵
    费用问题比较复杂。我解释一下。
    出国有两种,一种是有奖学金的,一种是自费。
    有奖学金的国家主要是美国,加拿大,新加坡,香港。
    自费的国家主要是英国,澳大利亚,德国,日本,等等。

    如果你拿了奖学金的话,费用自己不是问题,是学校给你出。
    如果没有奖学金的话,还是有可能过去以后申请奖学金。当然最后就是全自费了。
    全自费的话,美国基本上就不要考虑了。费用不是最根本的问题,最根本的问题是签证,自费留学基本上那不到签证。
    加拿大的话,每年至少10万人民币,15万比较正常。不过你可以打工,生活费可以挣出来。
    澳大利亚现在好像学费涨了不少,估计比加拿大会多点。打工机会好像不多。估计主要得靠自己的钱。
    英国比较贵,可是硕士只需要一年的时间。要照着20万人民币。可以打工,不知道能挣回多少。不过英国学历现在挺不值钱的。
    德国学费比较便宜,有些专业还免学费。很多经济有困难的都去了德国。
    日本打工机会很多,我知道很多中国人上完学还存了不少钱。不过会很辛苦。
    ---------------------------------------------
    引用:
    原帖由 consentto 于 2007-3-9 14:42 发表
    我现在工作1年半,是否应该准备考研呢??
    我认为可以准备,当然主要是要看你自己的想法,也不是一定。
    只要在30岁以前把该拥有的东西拥有就可以了。
    如果你觉得现在的工作能学很多东西,能提高你的能力,工作所得的经验也许更重要。
    上边有个朋友说的很对,当你感觉到瓶颈的时候就去考研。

    我的理解是,工作以后上研比大学毕业直接上研要好。有了工作经验你就会知道研究生应该学什么,会很好的在你的工作经验之上更上一层楼。
    如果你还没感到瓶颈也可以再多工作一段时间。
    ---------------------------------------
    引用:
    原帖由 consentto 于 2007-3-10 09:08 发表
    你在上面说到,应该在30岁前把应该拥有的都拥有,可以说具体一点吗?
    基本上就是一个好的背景,让你的简历,你这个人能够与众不同。
    我觉得包括这几个方面,
    1。学历:最好就是硕士,博士并没有优势,除非想在学校工作。
    2。学校名气:名牌大学,或者重点大学。
    3。英文:能够流利地听说读写。
    4。工作经验:大公司的工作背景。
    5。技术水平:在某一领域达到比较深的程度。
    6。能力:能够解决生活,工作上遇到的各式各样的困难,快速的学习新知识,新技术。
    7。出国:拥有国外学历,身份。

    以上的几点可能不一定能够全部获得,那么起码要获得4,5条。30岁之前不要太在乎金钱,爱情。不要被金钱和爱情拖累了自己。
    我的观点是,我跟很多人也这样说,“年轻的时候就要争取一些得到了就不会失去的东西”。
    什么是得到了就不会失去?不是金钱,不是爱情,是上边列出的那7条。
    很多人为了涨一点点工资就频繁跳槽,这样对事业长期的发展是非常不利的。也有很多人为了男女朋友的事情,浪费了几年的青春,以后都没机会弥补了。
    我觉得20多岁的时候要往30多岁看,不要管现在怎么样,只要是有利于自己的成长就行,不要被外在的东西迷失了自己。要知道笑到最后才笑得最好。
    -------------------------------------------
    引用:
    原帖由 hongjumq 于 2007-3-9 14:56 发表
    我刚找了一份工作,做手机测试的,月薪2500,感觉很少,也不提供住宿,而且是偏硬件测试,感觉学不到什么东西,不知道要不要签,个位前辈给点建议,可以吗?
    你的具体情况我不是很了解,比如是跳槽呢?还是刚毕业呢?还有其他的offer吗?自己的兴趣爱好是什么?

    如果你觉得钱少,又不喜欢硬件,如果还有其他更好的选择,那当然可以放弃这个机会了。

    如果只是从技术上来说,我觉得手机测试应该还算热吧?这个行业我不是很熟悉,可是现在看到Apple推出了iphone, 传说google也要推出手机产品。微软更是把手机作为一个很重要的领地。还有就是摩托罗拉,诺基亚,爱立信这些大公司。感觉应该还算有前途吧。现在手机OS,应用还不是很成熟,因此发展也很迅猛,微软刚推出了mobile6.0。应该还是能学到些东西吧。个人认为手机还是个很不错的行业。这个论坛应该不少人士测试手机的,不知道他们什么感受?
    ----------------------------------------------
    引用:
    原帖由 smz_198181 于 2007-3-9 16:10 发表
    对于大多数朋友来说,工作以后考研是一个两难的决定!毕竟生活压力与考试的风险都摆在那里!楼主觉得读在职研究生是不是一个不错的选择,工作单位以及国外的认可度如何!
    另对于本科生来说,想出国工作比研究生 ...
    我觉得在职研究生是best choice,工作学习两不误。我不清楚国内的在职和全日制的毕业证书有区别吗?
    没区别就无所谓。有区别我个人认为也没什么。
    首先,国外的全日和在职的证书是一个样子,学校,社会对两种证书的对待没有任何区别。因此,他们对待国内的在职也没有任何的不同。在国内的话我认为也没什么缺陷。首先,你是有工作的,没有毕业找工作的问题。全日的毕业还要到处找工作。其次,你写简历只是写那个学校毕业的,没有必要写是否在职。跟全日的也没有区别。真正面试的时候,是看你面试的效果,在职和全日不会影响公司对你聘用的觉定。
    所以,我认为是没有什么问题的。我就不觉得我以前的公司对待这两种学历有任何不同。

    对于出国工作,本科生对比研究生完全是一样的。出国工作主要靠的是英文和技术。
    国外是很不看重学历的。他们本科毕业能找到好工作,根本不去读研究生。并且,他们挑选员工也基本上不考虑学历,除非是特殊的职位。
    而且,美国的工作签证要求就是本科就可以了。

    不过如果想要移民的话,研究生就有了一定优势,可以多加好几分。
    -----------------------------------------
    引用:
    原帖由 windflowere 于 2007-3-10 15:06 发表
    lz好强啊,看你的帖子真是看的热血沸腾

    我是快毕业的研究生,上学期间在一家还不错的外企实习了大半年,找工作时也拿了几个offer,权衡之下,签了百度,做测试。其实百度的这个offer拿的真的很容易,都没怎么 ...
    我觉得你有一个很好的起点,研究生学历,大外企的实习经验,又在百度工作.以后怎样发展都会很容易.
    像你这么好的条件,我认为你可以向你的兴趣方面发展.想想看,你可以从现在开始制定一条适合自己的发展方向.可能有这么几种,
    1.出国:个人比较推荐你走这条路,原因很简单,我已经说过了,国内搞研发的地位比较低.大家总是比较开发和测试那个好,很多开发的还看不起测试.其实根本没有必要比较,地位都不高,还是市场,销售的厉害.你的收入怎么也比不过他们.我觉得你这么好的条件,想出国不会太困难.
    2.管理:确实也有不少人并不想出国,那么我建议往管理的方向发展.国内管理的工资还是会高很多,而且年纪大了也不会轻易被淘汰.
    3.技术:我所谓的技术并不是测试技术,而是搜索引擎的技术.现在搜索引擎的竞争非常激烈,国内google,百度打得火热,国外google,yahoo,微软也打得不可开交。这是一个非常热门,非常有前景,也非常激动人心的领域。你如果把这个领域的知识学好,并且有自己的理解,甚至自己的创新,前途一片光明。

    当然以上3条路并不是互相独立的,而是相辅相成的。我觉得你可以两条,甚至三条一起来发展。比如,技术+出国,技术+管理,技术+管理+出国。当然了,管理+出国的可能性就非常小了,在国外主要还得靠技术。
    一般来讲,你可以按照你自己的兴趣为自己规划技术+出国,或者技术+管理。3条都发展还是挺难的,我是不行。

    无论你怎样选择,两点非常重要。因为你已经有了其他相关的背景了,因此技术和英文就是你要进行改善和补充的了。技术上一定要紧跟世界最先进的潮流,因为你在百度,本身就是搞得最先进的。要即时了解google,yahoo和微软的技术创新。学习新潮的web 技术。自己也一定要具备这方面的开发能力。英文吗?说来惭愧,我的英文也是属于比较烂的水平。只是刚刚能够应付工作而已。不过我以前英文更差,常常考试不及格。后来还是硬给弥补过来了,没有在我的发展上拖后腿。你既然过了六级,可能主要就是要改善口语水平了。如果在百度没有很好的语言环境,你只能自己去创造说英语的机会了。比如可以去人大的口语角。还有非常重要的一个方法就是背课文,课文背多了,语感自然就有了。有了语感就容易脱口而出了。跟熟读唐诗三百首,不会吟诗也会吟是一个道理。

    总之,你的起点比以前我好多了。好好规划以后前途不可限量。我比较喜欢你的发展轨迹是“百度-〉google北京-〉google总部moutain view".
    希望你能够成功。

    对了,google北京的面试对口语要求不高。onsite都是找的总部的中国工程师,都是国语面试。不过总部的电话面试是英文的。
    ---------------------------------------------
    引用:
    原帖由 testxml 于 2007-3-11 12:38 发表
    搂主太强了,我刚毕业,在上海一家公司试用了六个月,刚刚转正,先前作开发。后就被安排到了测试部门,心里很不是滋味,主要做黑盒测试,感到没有什么前途,白盒测试和自动化测试根本没有机会去实践。。。对测试 ...
    不知道你测试做了多久了?我想刚开始转到测试最重要的一件事情就是找感觉。我很理解你现在的心理,我以前也是这个样子的。
    我是完完全全经历了你这个阶段,在你这个阶段我主要做的事情就是,
    1。上51testing看一些测试高手的文章和测试知识,技术的相关文章。
    2。跟有测试经验的人进行技术交流和探讨。
    3。在工作中不断总结经验。
    4。学习一些自动化的测试工具

    我从进入测试行业,到找到测试的感觉大概用了一年的时间。所谓找到测试的感觉就是“觉得测试就是那么回事”。
    下一个阶段我就是找灵感了。因为大部分的公司实际上都是黑盒测试,并且很多产品是很难进行自动化的。因此,如果你想从黑盒转到自动化测试需要非常大的challenge, 比一般的软件开发工作要难多了。因为里边有个灵感的问题,有个设计的问题。
    我觉得灵感的到来还是要有一些东西作基础的,专业知识,开发能力,经验,测试的理解,测试工具的熟悉运用,对所测试产品的理解,等等。

    我最终开始自行设计自动化是因为看到了美国同事用了半年时间所开发出来的测试系统,我觉得很烂。以前没有进行这项工作是因为我把它想的太完美了,想做出一个非常完美的东西,所以迟迟没有动手。后来,我的思想改变了,“虽然我的自动化不是完美,可是比他们美国的系统还是要好很多很多了”。因为,他们考虑到的东西我全部都考虑到了,我考虑到的很多东西他们却完全没有考虑。一个月后,我的系统开发成功,并且成功的打败美国人半年开发出来的系统。这个系统为我后来的找工作奠定了一个非常好的基础。

    我大概是这样走过来的,希望能给你一些借鉴作用。我觉得要努力学习,工作,思考,一定要一步一步提高,最终在测试领域作出自己的贡献。不要被困难吓倒,大家都觉得不可能的东西,你做出来了,才真正的成熟了。我从进入测试行业到开发出自己的自动化系统用了15个月的时间,我想你也不用特别的着急,很多东西还是需要时间去积累的。

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

    引用:
    原帖由 lq810425 于 2007-3-13 17:55 发表
    真的很震撼耶!!!
      我04年毕业,做了一年的web编程,两年的测试。
      现在已经对c、c++都忘得差不多了(在学校里这两门语言学的还是挺不错的)。对数据库(只限于sql server)还是比较清楚特别是sql编程。参 ...
    既然做了一年的Web编程,就不要放下。像你现在这样的背景是既可以做编程也可以做测试。
    不知道你个人是如何来考虑的。如果想在测试的方向更上一层楼的话,我觉得就是要从自动化测试入手了。
    虽然你现在的项目很少,但毕竟是有项目可做的。项目有没有实现自动化测试?自动化程度有多少?
    在这方面多思考一下,多尝试一下。如果真的没什么东西可做的话,是不是可以考虑换个公司了?
    还有就是如果工作不多的话,是不是可以考虑进修,考虑学英语,考虑自己搞点自己喜欢的技术?
    ----------------------------------------------
    引用:
    原帖由 gantangyu 于 2007-3-16 09:23 发表
    看了楼主blog里的关于自动化测试的部分,虽然都是用TestComplete作为测试工具,但是发现我实现的自动化真简单,很想看看你实现的自动化系统具体什么样子,希望能得到你的指导!
    我这个系统是在以前的公司做的。实际的样子可能没有机会看到了。而且,我的代码也全部留在了以前的公司里,属于以前公司的知识产权吧。
    具体的样子就是3台机器,大量的虚拟机。
    一台机器是web server, 一台机器是web service的host,一台机器是测试机。测试机上装有vmware,可以打开不同的虚拟机。
    用起来的话是这样的,
    通过IE登陆web server, 在网页上设计测试用例,保存到一个xml文件里。然后可以点击按钮执行测试用例,xml下放到web service上,web service 要求测试机打开相应的虚拟机。然后给虚拟机发布命令,等待测试结果。最后把所有测试结果整合,传回到web server上。

    现在的公司有非常成熟的测试系统,因此也不需要我再继续进行我以前的系统。
    不过区别在于,以前是通过brower来访问,现在的系统是需要一个client software,没有我以前的方便。
    现在是server直接把任务下发到测试机,没有service这一层,因为多台机器的协作测试就很困难了。
    当然,现在的系统是专门的team 开发的,功能性,稳定性等等都比我的系统要好。不过我的系统确实有一些特点,是现在系统所不具备的。
    如果你感兴趣的话,也可以尝试开发一下类似的系统,我可以在技术上帮你你一下。
    ------------------------------------------------
    引用:
    原帖由 gantangyu 于 2007-3-16 09:57 发表
    相比你的系统来讲,我的是很简单,没有用到虚拟机等,只是把测试程序生成了安装程序,用户只需要安装后,在对话框输入版本信息和此次所要执行的testcase,然后执行测试,测试结果及log格式是预先xml定义好的,不 ...
    我觉得你已经看到了问题了,“测试范围小”,“稳定性不好”。
    因此,你可以在这两个方面进行改进。
    稳定性的改善首先可以改善你自己的程序,代码稳定,另外就是进行exception control and error handling. 也就是在你执行test case的进行中,如果出现错误,出现异常你要进行怎样的处理。
    我的系统开发用了一个月的时间,在稳定性方面的改善也是用了一个月的时间。所以,这里面的工作量是很大的。
    另外就是你的系统结构也决定了能够处理错误的程度。看上去你就是一台计算机来测试,没有用到虚拟机,没有用到多机的协作,因此你就有着因为系统结构而不得不存在的不稳定的可能。
    比如,如果你的计算机crash了,你怎么办?你的测试就不能进行下去了。
    在我的系统结构里,我是用虚拟机进行测试的,如果虚拟机工作不正常了,我可以重新启动虚拟机,或者重新load snapshot,从一个干净的环境重新测试。如果那台装有vmware的测试机发生了故障,我可以通过service layer去转换到一台备份机上继续测试下去。总之,要保证任何情况下都尽可能的能测试完成。这个很重要,比如你明天就要release了,必须要知道测试结果,如果你的系统出了故障,怎么办?在我的结构里,因为service layer不亲自进行测试任务的执行,所以它出现异常的可能性就会很低,基本上不用考虑,除非自己的代码太烂了。
    另外一点就是测试范围,如果想测试的范围大,那么就要把系统设计的open and extensible。所谓open就是你很容易的能给他集成其他的系统或者工具,extensible就是很容易能够扩展。比如现在需要两台机器协作来测试。你能怎么办?比如测试的case太多,需要10台计算机一起来完成,你又要怎么办?
    所以,我觉得你还有很大的改善余地,尤其是系统结构的改善。
    ------------------------------------------------
    引用:
    原帖由 skybusy2000 于 2007-3-14 15:15 发表
    你好!看了你的帖子 ,收获不少~~
    有些个人问题想问一下.
      我是06年毕业的,在一家private company 做测试半年了,感觉收获不少,学到了不少测试理论,测试流程方面的知识.
      但是公司目前住要做的全是MIS系统,偏 ...
    我觉得很难说哪个更好。你跳槽也许不一定会像你想得那样正规。
    我想如果你对公司的工作环境还满意的话,可以不必急着跳槽,把测试的基础打牢,并且把相应的知识都好好地掌握好。
    我并不懂任何性能测试工具。不过我可以告诉你,测试到达一定的水平以后,手工或者自动测试已经没什么太大区别了,也没有说谁重要不重要了。关键是看你对所测试项目的理解深度。
    因此你也不一定非要急于要掌握什么测试工具,多了解自己测试的产品,从事的行业应该更重要。
    工具就是个工具,真正需要用的时候,给你几天的时间就够了。可是行业知识,那可真是日积月累呀。
    ------------------------------------------------
    楼主您好:
                   我现在已经做测试一年多了,在一家外企做QA,我很赞同你所说的测试必须要有编程的能力,而且我也是这样做的,我刚毕业也不知道测试是什么就糊里糊涂的做测试了,当然我不是说测试不好。 我在大学里面C和C++还是学得不错得,而且我也开始把这些东西捡起来,我已经在为转开发做准备了,但是我就怕做测试这么久,没机会转了,搂主能不能给我点意见? 我现在应该怎么做呢? 虽然现在工作环境和待遇还行,但我现在决心转开发了或者做测试工具得开发,就像楼主所说对将来得发展有利。(我现在做得是黑盒, 我本科学得也是计算机)sdlkfj7     谢谢楼主了。
     
    既然下定决心了,那么就算是自己一个近期的目标了。按说,以你的情况从测试转到开发的难度并不大。如果真的下定决心,那么就一定要实现这个目标,否则以后怎么能去克服更大的困难,攀登更高的山峰呢?
    转开发的options其实还是不少的,不过首先还是要把C,C++和一些基本的东西捡起来,熟练起来。
    看来你现在的工作情况还是很不错的,那么最好的办法是在公司内部转。这里主要做的工作是跟上边多沟通,这个就不多说了,每个公司的情况不一样。可能你哪天跟老板吃顿饭,喝喝酒,唱唱卡拉OK就OK了呢。对你来说是一件大事情,从上边来看只是小事一桩了。如果不想在人际关系上入手,那么就要在技术上下功夫了。多跟开发人员沟通,有机会的话也多跟开发经理沟通,多学习自己公司所使用的开发工具,有可能的话多看看开发的源代码。等你技术上达到开发的要求,跟上边多谈谈,应该不会太困难。我以前很多同事都是这么转过去的。
    如果转开发实在是很困难,那么就自己在测试工具,自动化方面多下下功夫了。不知道你们公司有没有专门这样的职位,如果有的话,跟上边说过的转开发要做的工作差不多。如果没有的话,自己多想想是不是自己能够push公司进行自动化,还有就是在黑盒测试的过程中发现什么问题,自己编程序来解决一下。
    另外就是跳槽了,不过因为你现在公司还是不错的,因此我觉得应该积累到一定程度再跳槽。
    ------------------------------------------------
    楼主, 我还有个问题请教, 对于你所说的读研究生的问题, 到了瓶经的时候去读?  我对这个还是比较模糊的, 你能说具体些吗? 工作多久,自身发展到哪个阶段去读是最好的呢?  sdlkfj1
     
    我个人认为应该是在你工作2年左右的时间。这么说吧,本科刚出来一般多是干打杂的工作,在这个阶段主要是要把本科的专业知识与实践相结合起来,起码需要一年多的时间。这个阶段过后,可能会达到一个瓶颈。一是因为你学历的问题,提升的机会会小一点,提升的速度会慢一点。另一方面,本科的知识毕竟有限,你可能也会发现需要更深层次的专业知识来指引自己向上的发展。这个时候,你会从这两个方面都产生了读研究生的心态。一是为了知识,二是为了学历。并且,因为你已经有了行业的经验,你心里会比较清楚知道自己喜欢的研究方向,从而报考相应的学校,导师,专业方向。
    很多本科刚毕业就上研究生的是不具备这些想法和认识的,因此他们的学习在某种程度上可能有些盲目。还有很多社会上的去上研究生也只是想混个学历,甚至有些就相当于花钱去买,学不到太多的真正的知识。
    而我建议的是,我们要在几个方面都做好,在拿到学历的同时,真正的提高的自己的知识面,研究能力。使得我们所花费的时间,金钱最大限度的回报我们。
    这也是为什么我说的一定要上名校的研究生,一般学校更多的是混,很难提供你的真正需求。
    总而言之,你在发展的过程中,会自然的产生这个需求。我当时是工作一年半左右,周围都是北大的研究生,因此而产生的。
    ------------------------------------------------
    引用:
    原帖由 skybusy2000 于 2007-4-5 11:02 发表


    工作一年多在回去考研? 学的东西都还给学校了咋办?数学都忘干净了....   而且名校的研究生分数线又高 sdlkfj9      复习一年万一考不上不就...................
    难道楼主上的是在职的?
    是有你说的困难,可是我们身边不是有太多的人是工作以后又考研的吗?
    我不是在职的。我是花了8个月申请到国外的研究生的。
    ------------------------------------------------
    引用:
    原帖由 joe1214 于 2007-4-5 14:03 发表
    国外研究生难道不用考么? 需要啥条件呢?sdlkfj5
    考只是其中的一小部分。

    条件有以下几个:
    1。托福,GRE成绩,这些是你要考的。
    2。大学GPA,这些是你大学得到的。
    3。教授推荐信,如果没有知名教授,就都差不太多了。
    4。个人的研究背景和兴趣方向

    一般中国人是在1和2上下功夫的,也就是说托福,GRE考高分,以及大学的优秀成绩。
    不过有些大外企背景的,或者大学的老师有世界知名教授给出推荐信的,托福,GRE就不用要求太高了。
    一般来讲,托福要620以上,GRE要2200以上,大学成绩平均85以上,得到offer的机会就容易一些。
    托福600,GRE2000,大学成绩80是基础,加上大外企背景,或者名教授推荐机会也很大。

    当然这是说去美国,如果是加拿大的话,没有GRE也可以。其他国家的话,花钱就能去了。不过学出来也烂。
    ------------------------------------------------
    看完了这个帖子所有的文字我就决定注册一个ID来说几句.
    首先我是在一个迷茫的状态下用"计算机专业毕业 有两年工作经验的女生适合怎么转行"这个关键字在百度的第三条找到这个主题帖子的.
    看完以后和大家一样感到一些振奋的力量.这个论坛以前没有逛过,奇怪楼主没有把它发到CSDN,那里或许反映更强烈.
    LZ分析的一切问题和表达的一些想法我大多很赞同,比如30岁之前要...
    我有一个想法就是楼主提到的所有观点对IT行业的的男性非常合适,而且,有追求的行业男性都应该按照这种思路规划自己的职业道路.
    但是做为女性,或许就有一些其他的顾虑.
    来说说自己吧,普通的计算机本科毕业两年多一点,迄今为止一直在一个不能称为外企的国外软件公司(办公地点在国内,针对国外的项目)
    做.NET方面的开发.工作的前期主要做些测试,维护,写些文档,修改些程序,后期参与Window和Web项目的开发.
    目前为止我对此行工作越来越迷茫,个人觉得自己能力的提升空间不大,还有一个外部因素,感觉行业领域对女性的认可程度也不大,总之是看
    不到前进的方向.而且越来越被女性做什么开发,久坐熬夜辛苦,年龄大了就无退路更外部因素所左右.
    于是想转行但不知道要怎么实施比较好.个人的想法是要能完全不同领域的大跨度最好,或者转做测试等同行业不同性质工作.
    目前对测试可以说完全不在行,自己所做项目完全停留在手动找错的阶段,没有系统化可言.
    希望楼主能就思想上和可行性操作上给出点建议,如果楼主还会来这里的话.
    非常感谢,我还是非常愿意朝着优秀的方向努力,尽管工作中消磨掉了很多激情!
     



    你说的很对,的确我的观点主要是适合男性,并不一定很适合女性。
    一般来讲,我们不得不承认,男性比女性更适合IT这个行业。IT中的成功人士可能90%都是男性吧?这也造就了你现在的困惑。我想从两个方面来讲。
    一方面,既然IT不适合女性,可以考虑转行业。这个的确可行,我一个亲戚就是从计算机转到会计,现在月薪2万以上。当然,转行业也需要比较大的代价,需要承受失败的风险,并且在现行业的积累可能也会做废掉,要重新来过。还有就是转行业需要一定的资本,比如要有个学历吧?如果你再去学个东西出来,时间,金钱方面都有消耗。当然了,你也谈到了,可以在同行业不同性质工作中转,这样风险就会小很多。
    另一方面,IT不适合女性并不等于不适合所有的女性。很多女孩子有很好的天赋,在IT业做的也很出色。如果你是这样的人,是没有必要跟随大众的观点的。

    有一句话说得对“行行出状元”。其实在什么行业并不一定是最重要的东西,能做这个行业最top的人才才是最难能可贵的。因此,我认为你想转行的问题应该结合你自身的特点来考虑。首先,你是否适合IT行业?如果不适合的话,适合什么行业?如果转到那个行业,成功的概率大不大,付出的代价值不值得?另外,如果适合IT行业,那么最适合什么工作类型?开发还是测试?

    我看你有两方面的顾虑,一是感觉自己能力的提升空间不大,二是外部因素的影响。我向来是很难受别人思路的影响,更多的是考虑自己的感受,因为只有自己最了解自己。因此我这里只是谈谈你感觉能力提升空间不大的问题。我想你工作了两年的时间,肯定不能说你把行业的知识都学通了吧?因此想知道你所说的提升空间不大到底意味着什么?是公司不能提供你提升能力的机会,还是你觉得你的能力已经开发的差不多了,再做下去也就是这个水平?我想如果是你自己能力的问题,到了其他行业也难说就能优秀。如果是公司做的工作太简单的话,是你的工作简单,还是你觉得整个公司的工作都简单?如果是自己的工作简单,可以要求做难度大些的工作,或者等机会接触更高重要性的工作。如果你对整个公司的工作都不满意的话,应该说你的水平确实到了一定程度了,是不是可以考虑跳槽了?

    个人还是比较看重行业经验的积累,不太赞成大跨度的转行,尤其是从IT这么热门的专业转行,除非你认为真正的不适合这个行业。当然我对其他行业的了解也非常的少,理解可能也有偏差。不过我最想知道的还是你的一些个人的特点,看看你现在到底处于怎样的情况。个人感觉你目前不应该太迷惘。
    ------------------------------------------------
     看了cleverman的很多回贴,感觉楼主实在是个工作社会经历比较丰富的人,而且也很热情,给我们这些新人在测试方面发展提供了很多的帮助。我也说说我的情况吧,希望CLEVERMEN也能帮我指点一二,尽量少走一些弯路吧,在此先谢啦。
    我是04年计算机系毕业的,由于当时就业心切,再加上比较贪玩,计算机基础并不是很扎实,所以就随便在一家金属加工行业的国企工作了两年,现在越来越感觉到非常的迷茫,无意中发现了51testing,也了解了很多测试方面的信息,决定重新开始,向测试这方面努力了,看了CLEVERMEN的这么多经历,给我震撼挺大的。也相信通过努力一定也可以像楼主这么优秀。我现在也开始恶补C语言,数据结构,英语这些基础课了。接下来我该如何规划呢,是上一些系统的培训机构,还是该如何如何,希望CLEVERMEN能给些意见或建议。
    我也留下我的联系方式吧,希望楼主能在百忙中分享一些经验和心得,重谢过!!
     
    不知道你这两年的工作内容是什么,有没有脱离计算机呢?测试还是个不错的发展方向,你如果选择了这行应该没错。我想你现在恶补这些课程都是要进入测试行业的一些必要准备,当然同时也要多了解一些测试的知识。等到基本知识ready的时候,就可以去尝试找测试方面的工作了。(相信你应该是跳槽,现在的单位可能没有相应职位)。我觉得入门是一个关键,也就是找到机会进入测试的行业,找到测试方面的工作。当然有各种途径了,自己投简历,熟人介绍,好像51testing的培训也负责给推荐工作,是吧?培训机构我可以说一点也不了解,以我个人的性格来说是喜欢自学。包括现在很多的培训,我都是报个道就溜了,很多都是从国内专程跑过来的。所以说还是要看适不适合自己。当然运气也很重要,我以前带过的一个工程师,大学刚毕业,我看重了他的发展潜力。工资刚开始2000,现在工作不到两年都涨到9000了。因此,第一步是进入测试行业,第二步是找到完全发挥自己能力的机会,加上自己的努力,成功并不遥远。
    ------------------------------------------------
     
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
    ------------------------------------------------
     
  • HTTP与Status codes

    2008-12-08 15:29:16

    http含义:
    http 200:-文件被正常的访问
    http 302:临时重定向
     HTTP错误列表
    HTTP 400 - 请求无效
    HTTP 401.1 - 未授权:登录失败
    HTTP 401.2 - 未授权:服务器配置问题导致登录失败
    HTTP 401.3 - ACL 禁止访问资源
    HTTP 401.4 - 未授权:授权被筛选器拒绝
    HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败
    HTTP 403 - 禁止访问
    HTTP 403 - 对 Internet 服务管理器 (HTML) 的访问仅限于 Localhost
    HTTP 403.1 禁止访问:禁止可执行访问
    HTTP 403.2 - 禁止访问:禁止读访问
    HTTP 403.3 - 禁止访问:禁止写访问
    HTTP 403.4 - 禁止访问:要求 SSL
    HTTP 403.5 - 禁止访问:要求 SSL 128
    HTTP 403.6 - 禁止访问:IP 地址被拒绝
    HTTP 403.7 - 禁止访问:要求客户证书
    HTTP 403.8 - 禁止访问:禁止站点访问
    HTTP 403.9 - 禁止访问:连接的用户过多
    HTTP 403.10 - 禁止访问:配置无效
    HTTP 403.11 - 禁止访问:密码更改
    HTTP 403.12 - 禁止访问:映射器拒绝访问
    HTTP 403.13 - 禁止访问:客户证书已被吊销
    HTTP 403.15 - 禁止访问:客户访问许可过多
    HTTP 403.16 - 禁止访问:客户证书不可信或者无效
    HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效
    HTTP 404.1 - 无法找到 Web 站点
    HTTP 404 - 无法找到文件
    HTTP 405 - 资源被禁止
    HTTP 406 - 无法接受
    HTTP 407 - 要求代理身份验证
    HTTP 410 - 永远不可用
    HTTP 412 - 先决条件失败
    HTTP 414 - 请求 - URI 太长
    HTTP 500 - 内部服务器错误
    HTTP 500.100 - 内部服务器错误 - ASP 错误
    HTTP 500-11 服务器关闭
    HTTP 500-12 应用程序重新启动
    HTTP 500-13 - 服务器太忙
    HTTP 500-14 - 应用程序无效
    HTTP 500-15 - 不允许请求 global.asa
    Error 501 - 未实现
    HTTP 502 - 网关错误

    错误码与状态码
          近来总有朋友咨询cPanel 的Awstats中“HTTP错误码(HTTP Error codes)”的含义,以及是否需要关注和处理。
          关于Awstats请查看《CP How-To:如何使用cPanel查看站点统计数据(awstats)》
          文章地址:
    http://bbs.netpu.net/viewthread.php?tid=694
          其实这是一个误会,在这里它应该是“HTTP状态码(HTTP Status codes)”。
          OK,既然是状态码,那么就可能有正确和错误两种状态了(至少不全是错误了,大大的松口气吧)。那么这些代码都代表什么含义呢?到底哪些是错误状态,哪些是正确状态呢?不要急,下边我冒充内行为大家做一个简单的介绍。
    HTTP与Status codes
          HTTP 可能大家都熟悉,就是超文本传输协议。浏览器通过HTTP与WEB Server通讯(也有一些其它软件比如IM使用HTTP协议传递数据),把我们的请求(HTTP Request)传递给服务器,服务器响应这个请求,返回应答(HTTP Response)以及我们需要的数据。大致就是这个样子了。
           如果我们请求啥,服务器就返回啥,是乎就不需要HTTP Status codes了。但是事情往往不是那么简单。比如我们请求一个网页页面,可是服务器不存在这个页面,或者这个页面被转移到其它地方,或者服务器禁止我们查看这个页面等等,所以为了便于浏览器处理这些正确与不正确的情况,HTTP用Status codes来表示请求(HTTP Request)在服务器端被处理的情况。Status codes通过应答(HTTP Response)返回给浏览器,浏览器根据这个作相应的处理。
    HTTP Status codes的分类
          既然有正确和错误的状态,HTTP定义两大类状态码是不是就可以了?人家制订协议的可是专家(不象我是冒充的),想得比我们要周全,要长远。HTTP 1.1中定义了5大类Status codes,分别是:
    Informational
            意义:信息
            范围:1XX
    Successful
            意义:成功
            范围:2XX
    Redirection
            意义:重定向
            范围:3XX
    Client Error
            意义:客户端错误
            范围:4XX
    Server Error
            意义:服务器错误
            范围:5XX
          您看看人家想得多周到啊,真专家就是真专家。
    常见HTTP Status codes简介
          下面简单介绍一下我们经常碰到的HTTP Status codes。
          也许是我孤陋寡闻,常遇到的HTTP Status codes就那么几个,见笑啦。
    Successful
            200 - OK:OK
            这个是最常见的啦(也许我们不会直接看到,但是如果您使用一些抓包工具,大多数http应答中都有这个)。意义很简单,就是说服务器收到并理解客户端的请求而且正常处理了。
            206 - Partial Content:部分内容。
            这个也经常发生。很容易让大家发懵。
            通俗点说就是如果客户端请求文档(图像,文本,声音等等)的部分内容,服务器正常处理,那么就返回206。大致意思就是它请求的时候,除了指定请求的内容,还指定了偏移量以及长度。
           部分内容,没搞错吧?呵呵没搞错,现在很多浏览器以及软件支持断点续传就是靠这个的。呵呵,以后看到206不要怕了。
    Redirection
            301 - Moved Permanently:永久移动。
            这个状态码是指客户端要请求的资源已经被永久的转移到一个新的地方了。这个应答(HTTP Response)里边同时包含了资源的新地址。它告诉客户端,如果下次还想要这个资源,那么就用新的地址去取。
            302 Found:临时重定向。
            这个状态码是指客户端要请求的资源临时放到一个新地方了。同样,应答中也包含了资源的新地址。
            307 - Temporary Redirect:临时重定向。(如果不去实现协议或者做相关开发,我们大致理解它很302差不多就可以啦)
            有一篇谈重定向的文章《从Business.com遭封看302重定向》很有意思
            我们转载了一份,地址:
    http://bbs.netpu.net/viewthread.php?tid=810
    Client Error
            400 - Bad Request:错误请求
            就是请求的语法错误,服务器无法理解。
            401 – Unauthorized:未授权
            当服务器返回401 Code,就是告诉说客户端访问指定资源以前,必须通过服务器的授权。
            403 – Forbidden:禁止访问
            就是不允许访问某些资源。
            404 - Not Found:找不到
            找不到客户端请求的内容
    Server Error
            500 - Internal Server Error
            服务器内部错误。
    结束语
            越写越懒,所以就简简单单写这么多啦。没有啥大用处。如果能消除一两位关于这方面朋友的疑虑,就足以令我欣慰了。既然之前都说过是冒充内行,所以有错漏之处在所难免,还望大家不吝赐教。
            需要深入研究这方面内容的朋友,千万不要看这篇文章,以免被此文误导。请学习官方的协议内容。
            官方的资料地址:
            
    http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
     
  • loadruner 9.0破解

    2008-12-08 11:59:19

    (转载)http://bbs.51testing.com/viewthread.php?tid=104249

    loadrunner9.0破解成功,现予以公布

    1、过程和方法:
    打开Loadrunner,发现以下几个dll可能和注册有关,mlr5lprg.dll、licensebundles.dll、lm50.dll、lm70.dll。
    如果熟悉LR的朋友,LR7.8、8.0、8.1中都没有Licensebundles.dll,这是一个新的综合捆绑dll,所以我在之前的一些朋友的帖子里说破解难度大,也是这个原因。
    但是万幸的是,我在LR8.1.4.0中发现了licensebundles.dll,也就是LR8.1打上FP4补丁,并且用我以前的针对LR8.1的办法有效,因此,LR9.0的破解方案也就很快出现:
    a、用LR8.1.4.0中的lm50.dll、licensebundles.dll覆盖LR9.0安装目录下“bin”文件夹中的对应文件;
    b、用LR8.0中的mlr5lprg.dll、lm70.dll覆盖LR9.0安装目录下“bin”文件夹中的对应文件;
    c、然后使用老的注册码就可以使用了;
    d、golba-100: AEAMAUIK-YAFEKEKJJKEEA-BCJGI
          web-10000: AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB

    2、遇到的问题
    在破解的过程中我还遇到了个问题,就是通过上述的方法注册时提示“License security violation……”,无法注册,后通过针对LR注册表删除的工具运行后再注册就通过了,文件见附件。

    现将上述的文件上传,并发几张图,供大家使用和参看。
    有问题的朋友请跟帖,我将尽力解决。

    3、申明
    最后得感谢HP公司的大度,并没有对注册模块做大的修改,这可以让我们取巧使用。最后请大家不要以此用于商业运作,仅供个人学习参考,请大家支持正版软件。
    如果转帖,请注明出处。

    附件

  • LoadRunner性能测试应用(连载七)

    2008-12-08 09:43:04

                       转载:http://www.51testing.com/?action_viewnews_itemid_99168.html

      2.1.5 脚本回放问题解决

      在运行脚本回放过程中,有时会出现错误,这在实际测试中是不可避免的,毕竟自动录制生成的脚本难免会有问题,需要运行脚本进行验证,把问题都解决后才加入到场景中进行负载测试。下面结合常用的协议(如Web、Web Services协议)录制的脚本进行回放时出现的问题介绍一下解决的方法。

      需要注意的是,回放脚本时出现的错误有时是程序自身的原因导致的,因此在解决脚本回放问题前必须保证程序录制出的脚本是正确的。

      1.LoadRunner超时错误:在录制Web协议脚本回放时超时情况经常出现,产生错误的原因也有很多,解决的方法也不同。

      错误现象1:Action.c(16): Error -27728: Step download timeout (120 seconds) has expired when downloading non-resource(s)。

      错误分析:对于HTTP协议,默认的超时时间是120秒(可以在LoadRunner中修改),客户端发送一个请求到服务器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。

      解决办法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,再设置多次迭代运行,如果还有超时现象,需要在“Runtime Setting”>“Internet Protocol:Preferences”>“Advanced”区域中设置一个“winlnet replay instead of sockets”选项,再回放是否成功。

      错误现象2:Action.c(81):Continuing after Error -27498: Timed out while processing URL=http://172.18.20.70:7001/workflow/bjtel/leasedline/ querystat/ subOrderQuery.do

      错误分析:这种错误常常是因为并发压力过大,服务器端太繁忙,无法及时响应客户端的请求而造成的,所以这个错误是正常现象,是压力过大造成的。

      如果压力很小就出现这个问题,可能是脚本某个地方有错误,要仔细查看脚本,提示的错误信息会定位某个具体问题发生的位置。

      解决办法:例如上面的错误现象问题定位在某个URL上,需要再次运行一下场景,同时在其他机器上访问此URL。如果不能访问或时间过长,可能是服务器或者此应用不能支撑如此之大的负载。分析一下服务器,最好对其性能进行优化。

      如果再次运行场景后还有超时现象,就要在各种图形中分析一下原因,例如可以查看是否服务器、DNS、网络等方面存在问题。

      最后,增加一下运行时的超时设置,在“Run-Time Settings”>“Internet Protocol:Preferences”中,单击“options”,增加“HTTP-request connect timeout” 或者“HTTP-request receive”的值。

      2.LoadRunner脚本中出现乱码:在录制Web协议脚本时出现中文乱码,在回放脚本时会使回放停止在乱码位置,脚本无法运行。

      错误现象:某个链接或者图片名称为中文乱码,脚本运行无法通过。

      错误分析:脚本录制可能采用的是URL-based scrīpt方式,如果程序定义的字符集合采用的是国际标准,脚本就会出现乱码现象。

      解决办法:重新录制脚本,在录制脚本前,打开录制选项配置对话框进行设置,在“Recording Options”的“Advanced”选项里先将“Surport Charset”选中,然后选中支持“UTF-8”的选项。

      3.LoadRunner HTTP服务器状态代码:在录制Web协议脚本回放脚本的过程中,会出现HTTP服务器状态代码,例如常见的页面-404错误提示、-500错误提示。

      错误现象1:-404 Not Found服务器没有找到与请求URI相符的资源,但还可以继续运行直到结束。

      错误分析:此处与请求URI相符的资源在录制脚本时已经被提交过一次,回放时不可再重复提交同样的资源,而需要更改提交资源的内容,每次回放一次脚本都要改变提交的数据,保证模拟实际环境,造成一定的负载压力。

      解决办法:在出现错误的位置进行脚本关联,在必要时插入相应的函数。

      错误现象2:-500 Internal Server Error服务器内部错误,脚本运行停止。

      错误分析:服务器碰到了意外情况,使其无法继续回应请求。

      解决办法:出现此错误是致命的,说明问题很严重,需要从问题的出现位置进行检查,此时需要此程序的开发人员配合来解决,而且产生的原因根据实际情况来定,测试人员无法单独解决问题,而且应该尽快解决,以便于后面的测试。

      4.LoadRunner请求无法找到:在录制Web协议脚本回放脚本的过程中,会出现请求无法找到的现象,而导致脚本运行停止。

      错误现象:Action.c(41): Error -27979: Requested form not found [MsgId: MERR-27979]

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

      这时在tree view中看不到此组件的相关URL。

      错误分析:所选择的录制脚本模式不正确,通常情况下,基于浏览器的Web应用会使用“HTML-based scrīpt”模式来录制脚本;而没有基于浏览器的Web应用、Web应用中包含了与服务器进行交互的Java Applet、基于浏览器的应用中包含了向服务器进行通信的Javascrīpt/VBscrīpt代码、基于浏览器的应用中使用HTTPS安全协议,这 时则使用“URL-based scrīpt”模式进行录制。

      解决办法:打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HTML-based scrīpt”,单击“HTML Advanced”,选择“scrīpt Type”为“A scrīpt containing explicit”。然后再选择使用“URL-based scrīpt”模式来录制脚本。

      5.LoadRunner不执行检查方法:在录制Web协议脚本中添加了检查方法Web_find,但是在脚本回放的过程中并没有执行。

      错误现象:在脚本中插入函数Web_find,在脚本中设置文本以及图像的检查点,但是在回放过程中并没有对设置的检查点进行检查,即Web_find失效。

      错误分析:由于检查功能会消耗一定的资源,因此LoadRunner默认关闭了对文本以及图像的检查,所以在设置检查点后,需要开启检查功能。

      解决办法:打开运行环境设置对话框进行设置,在“Run-time Settings”的“Internet Protocol”选项里的“Perference”中勾选“Check”下的“Enable Image and text check”选项。

      6.LoadRunner回放Web Services协议脚本错误:LoadRunner 8.0版本在录制Web Services协议的脚本时正常,但在回放时会出现错误,提示停止脚本运行。

      错误现象:利用LoadRunner 8.0版本来录制Web Services协议的脚本没有任何错误提示,回放脚本时会出现如下错误提示“Error:server returned an incorrectly formatted SOAP response”。

      错误分析:出现此错误的原因是LoadRunner8.0在录制Web Services协议的脚本时存在一个缺陷:如果服务器的操作系统是中文的,VuGen会自动将WSDL文件的头改为<?xml version="1.0"encoding="zh_cn" ?>,所以才会有此错误提示。

      解决办法:下载两个补丁,分别为“LR80WebServicesFPI_setup.exe”和“lrunner_web_ services_patch_1.exe”安装上即可。

  • [转载]基于实际测试的功能测试点总结

    2008-08-26 10:42:58

        1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotProFile-AIDCSHTML Link ValidaterXenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以Html或者htm结尾的网页链接;Xenu无需安装,支持aspdojsp等结尾的网页,xenu测试链接包括内部链接和外部链接,在使用的时候应该注意,同时能够生成html格式的测试报告。如果系统用QTP进行自动化测试,也可以使用QTP的页面检查点检查链接。

    2. 相关性检查:

    Ø         功能相关性:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确,常见的情况是,增加某个数据记录以后,如果该数据记录某个字段内容较长,可能会在查询的时候让数据列表变形。

    Ø         数据相关性:下来列表默认值检查,下来列表值检查,如果某个列表的数据项依赖于其他模块中的数据,同样需要检查,比如,某个数据如果被禁用了,可能在引用该数据项的列表中不可见。

      3. 检查按钮的功能是否正确:如新建、编辑、删除、关闭、返回、保存、导入,上一页,下一页,页面跳转,重置等功能是否正确。常见的错误会出现在重置按钮上,表现为功能失效。

      4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度。还要检查需求规定的字符串长度是否是正确的,有时候会出现,需求规定的字符串长度太短而无法输入业务数据。

      5. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型。

      6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键。看系统处理是否正确。常见的错误是系统对空格的处理,可能添加的时候,将空格当作一个字符,而在查询的时候空格被屏蔽,导致无法查询到添加的内容。

      7.特殊字符检查:输入特殊符号,如@#$%!等,看系统处理是否正确。常见的错误是出现在% ‘ \ 这几个特殊字符

      8. 中文字符处理: 在可以输入中、英文的系统输入中文,看会否出现乱码或出错。

      9. 检查信息的完整性: 在查看信息和更新信息时,查看所填写的信息是不是全部更新,更新信息和添加信息是否一致。要注意检查的时候每个字段都应该检查,有时候,会出现部分字段更新了而个别字段没有更新的情况。

      10. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理。

      11. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理。如果有多页,翻页选,看系统是否都正确删除,并且要注意,删除的时候是否有提示,让用户能够更正错误,不误删除。

      12. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.

      13. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.

      14. 重复提交表单:一条已经成功提交的纪录,返回后再提交,看看系统是否做了处理。对于Web系统来说,可以通过浏览器返回键或者系统提供的返回功能。

      15. 检查多次使用返回键的情况: 在有返回键的地方,返回到原来页面,重复多次,看会否出错。

      16. 搜索检查: 有搜索功能的地方输入系统存在和不存在的内容,看搜索结果是否正确.如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看系统处理是否正确,搜索的时候同样要注意特殊字符,某些系统会在输入特殊字符的时候,将系统中所有的信息都搜索到。

      17. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方。

      18. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。下载文件能否打开或者保存,下载的文件是否有格式要求,如需要特殊工具才可以打开等。上传文件测试同时应该测试,如果将不能上传的文件后缀名修改为可以上传文件的后缀名,看是否能够上传成功,并且,上传文件后,重新修改,看上传的文件是否存在。

      19. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加“*”;对必填项提示返回后,焦点是否会自动定位到必填项。

      20. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。

      21. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错。这个地方很有可能会出现错误。

      22.刷新键检查:在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错。

      23.回退键检查:在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。

      24.直接URL链接检查:在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要。如果系统安全性设计的不好,直接输入各功能页面的URL地址,很有可能会正常打开页面。

      25.空格检查:在输入信息项中,输入一个或连串空格,查看系统如何处理。如对于要求输入整型、符点型变量的项中,输入空格,既不是空值,又不是标准输入。

      26.输入法半角全角检查:在输入信息项中,输入半角或全角的信息,查看系统如何处理。如对于要求输入符点型数据的项中,输入全角的小数点(“。”或“.”,如4.5);输入全角的空格等。

      27.密码检查:一些系统的加密方法采用对字符Ascii码移位的方式,处理密码加密相对较为简单,且安全性较高,对于局域网系统来说,此种方式完全可以起到加密的作用,但同时,会造成一些问题,即大于128Ascii对应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为密码,同时,密码尽可能的长,如17位密码等,造成加密后的密码出现无法解析的字符。

      28.用户检查:任何一个系统,都有各类不同的用户,同样具有一个或多个管理员用户,检查各个管理员之间是否可以相互管理,编辑、删除管理员用户。同时,对于一般用户,尝试删除,并重建同名的用户,检查该用户其它信息是否重现。同样,提供注销功能的系统,此用户再次注册时,是否作为一个新的用户。而且还要检查该用户的有效日期,过了有效日期的用户是不能登录系统的。容易出现错误的情况是,可能有用户管理权限的非超级管理员,能够修改超级管理员的权限。

      29.系统数据检查:这是功能测试最重要的,如果系统数据计算不正确,那么功能测试肯定是通不过的。数据检查根据不同的系统,方法不同。对于业务管理平台,数据随业务过程、状态的变化保持正确,不能因为某个过程出现垃圾数据,也不能因为某个过程而丢失数据。

    30.系统可恢复性检查:以各种方式把系统搞瘫,测试系统是否可正常迅速恢复。

    31.确认提示检查:系统中的更新、删除操作,是否提示用户确认更新或删除,操作是否可以回退(即是否可以选择取消操作),提示信息是否准确。事前或事后提示,对于UpdateDelete操作,要求进行事前提示。

      32.数据注入检查:数据注入主要是对数据库的注入,通过输入一些特殊的字符,如“”,“/”,“-”等或字符组合,完成对SQL语句的破坏,造成系统查询、插入、删除操作的SQL因为这些字符而改变原来的意图。如select * from table where id = ‘ ’ and  name = ‘  ,通过在id输入框中输入“12’-”,会造成查询语句把name条件注释掉,而只查询id=12的记录。同样,对于updatedelete的操作,可能会造成误删除数据。当然还有其它一些SQL注入方法,具体可以参考《SQL应用高级SQL注入.doc,很多程序都是基于页面对输入字符进行控制的,可以尝试跳过界面直接向数据库中插入数据,比如用Jmeter,来完成数据注入检查。

      33.刷新检查:web系统中的WebForm控件实时刷新功能,在系统应用中有利有弊,给系统的性能带来较大的影响。测试过程中检测刷新功能对系统或应用造成的影响(白屏),检查控件是否回归默认初始值,检查是否对系统的性能产生较大影响(如每次刷新都连接数据库查询等)。

      34.事务检查:对于事务性操作,断开网络或关闭程序来中断操作,事务是否回滚。

      35.时间日期检查:时间、日期验证是每个系统都必须的,如2006-2-292006-6-31等错误日期,同时,对于管理、财务类系统,每年的1月与前一年的12月(同理,每年的第1季度与前一年的第4季度)。另外,对于日期、时间格式的验证,如20062282006-2-2820060228等。日期检查还要检查日期范围是否符合实际的业务,对于不符合时间业务的日期,系统是否会有提示或者有限制

      36.多浏览器验证:越来越多的各类浏览器的出现,用户访问Web程序不再单单依赖于Microsoft Internet Explorer,而是有了更多的选择:MaxthonFirefoxTencent Traveler等,考虑使用多种浏览器访问系统,验证效果。

      37.安装测试:对于C/S架构的系统,安装程序的测试是一个重要方面,安装程序自动化程度、安装选项和设置(验证各种方案是否都能正常安装)、安装过程中断测试、安装顺序测试(分布式系统)、修复安装及卸载测试。

      38.文档测试:主要是对用户使用手册、产品手册进行测试,校验是否描述正确、完整,是否与当前系统版本对照,是否易理解,是否二义性等。

      39.测试数据检查:事实告诉我们,测试数据比代码更有可能是错的,因此,当测试结果显示有错误发生的时候,怀疑代码错误前要先对测试数据检查一遍。

      40.请让我的机器来运行:在某些项目中,出现一个病态的问题:系统没有问题呀,它在我的机器上是能够通过的。这就说明了其中存在着和环境相关的BUG。“是否所有的一切都受到了版本控制工具的管理?”、“本机的开发环境和服务器的环境是否一样?”、“这里是否存在一个真正的BUG,只不过是在其他的机器里偶然出现?”。所有的测试必须在所有系统要求的机器上运行通过,否则的话,代码就可能存在问题。

      41Ajax技术的应用:Ajax有很多优点,但也有很多缺点,如果利用优点、避免缺点,是我们对新的Web2.0应用的一个挑战。而Ajax的应用最直接的问题就是用户体验,用户体验的效果直接关系到是否使用Ajax技术。“会做,并不意味着应该做、必须做”,这就是对Ajax技术的很重要的注解。

      42Ajax技术的应用:Ajax采用异步调用的机制实现页面的部分刷新功能,异步调用存在异常中断的可能,尝试各种方法异常中断异步的数据调用,查看是否出现问题。在这里遇到的一个问题就是对日期控件的操作,已经如果页面数据较多的时候的刷新。

      43.脚本错误:随着AjaxIFrame等异步调用技术的发展,Javascrīpt技术也越来越受到开发人员的重视,但Javascrīpt存在调试困难、各浏览器存在可能不兼容等问题,因此在Web系统中,可能会出现脚本错误。同时,脚本错误造成的后果可大、可小,不能忽视。

331/212>
Open Toolbar