测试,很好很强大

发布新日志

  • IIS配置ASP.net应用程序常见错误总结(1)

    2009-11-16 22:40:03

    出现错误信息:

    Configuration Error

    Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

    Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level.  This error can be caused by a virtual directory not being configured as an application in IIS.

    解决方法:
    情况1:When you create an new web application using visual studio.net, it automatically creates the virtual directory and configures it as an application.
    However, if you manually create the virtual directory and it is not configured as an application, then you will not be able to browse the application and
    may get the above error. The debug information you get as mentioned above, is applicable to this scenario.

    To resolve it, Right Click on the virtual directory - select properties and then click on "Create" next to the "Application" Label and the textbox. It will
    automatically create the "application" using the virtual directory's name. Now the application can be accessed.

    当使用.net创建一个新的web程序时,通常会自动的创建虚拟目录并设置为网站程序。
    但是如果你手工创建虚拟目录而没有设置为网站程序,你就不能浏览网站的网页并出现上述的错误。

    右键单击“默认网站”->新建->虚拟目录,将虚拟目录指向程序所在处,设置网站程序,就可以访问了。

    情况2:
    When you have sub-directories in your application, you can have web.config file for the sub-directory. However, there are certain properties which cannot
    be set in the web.config of the sub-directory such as authentication, session state (you may see that the error message shows the line number where the
    authentication or sessionstate is declared in the web.config of the sub-directory). The reason is, these settings cannot be overridden at the sub-directory level
    unless the sub-directory is also configured as an application (as mentioned in the above point).

    Mostly we have the practice of adding web.config in the sub-directory if we want to protect access to the sub-directory files (say, the directory is admin and we
    wish to protect the admin pages from unathorized users).

    But actually, this can be achieved in the web.config at the application's root level itself, by specifing the location path tags and authorization, as follows:-

    <location path="Admin">
    <system.web>
    <authorization>
    <allow roles="administrators" />
    <deny users="*" />
    </authorization>
    </system.web>
    </location>

    However, if you wish to have a web.config at the sub-directory level and protect the sub-directory, you can just specify the Authorization mode as follows:-

    <configuration>
    <system.web>
    <authorization>
    <allow roles="administrators" />
    <deny users="*" />
    </authorization>
    </system.web>
    </configuration>

    Thus you can protect the sub-directory from unauthorized access.


    当你把web.config放在网站程序中的子文件夹时,有一些属性不能设置,如authentication, session state
    (错误信息显示子文件夹中web.config声明的authentication, session state 所在的行号)。
    原因是这些设置不能被子文件夹的权限覆盖(override),除非子文件夹本身被设置成网站程序。
    通常情况下我们希望把web.config放在子文件夹中来保护对子文件夹中文件的访问
    (假设目录是admin,我们希望保护admin里面的文件不被未授权的用户访问)

    实际上,当web.config在网站程序根目录时,也能做到,如下:
    <location path="Admin">
    <system.web>
    <authorization>
    <allow roles="administrators" />
    <deny users="*" />
    </authorization>
    </system.web>
    </location>

    如果你想把web.config放在子目录,可以这样设置:
    <configuration>
    <system.web>
    <authorization>
    <allow roles="administrators" />
    <deny users="*" />
    </authorization>
    </system.web>
    </configuration>

    这样可以做到保护子文件夹不被未授权的用户访问。

    <---本文来自于网络>
  • 使用QTP时的需要注意的细节(个人总结)

    2009-11-02 22:17:23


    学习任何一个东西都应该认真仔细,这样会减少很多不必要的麻烦,以下是在本人学习QTP的过程遇到的一些小问题,现分享给大家:
    1.在使用同步检查点的时候,一定要把所检查的属性的值写正确,否则你的脚本也许会执行通过但是会得到一个警告:
    例如:

    你检查一个对象的text属性,本来对象的属性为"test..",而你写成了'''test...',那么可能会产生警告

    2.在使用正则表达式的时候一定要注意空格所带来的影响

    3.利用QTP验证一个网页是否是你所想要的,那么可以选取比较简单明显的对象进行检查,不要搞得太复杂

    4.在利用描述性编程的时候一定不要将对象的属性名拼写错误了,如果拼写错误将会产生General Run Error

    5.在需要使用对象的类别属性描述的时候,要使用micclass,而不是class name,例如:

    oDesc("micclass").Value = "WbfCalendar"


  • 利用QTP测试Siebel应用程序的几点建议

    2009-11-02 21:51:40

    1.在利用QTP测试Siebel应用程序的时候,推荐只加载Siebel add-in,因为Siebel add-in已经包括了Web和ActiveX。
    2,也许你会发现在录制SiebMenu的菜单选择操作时,你选择了一个"Save Record",可能会得到以下语句:
    Browser("XXX").WinMenu("ContextMenu").Select "Undo Record [Ctrl+U]"
    SiebApplication("XXX").SiebScreen("XXX").SiebView("XXX").SiebApplet("SiebApplet").SiebMenu("Menu").Select "WriteRecord"
    然后运行脚本的时候会出错。解决方法是去掉
    Browser("XXX").WinMenu("ContextMenu").Select "Undo Record [Ctrl+U]"
    语句,或者如果系统提供了快捷键的话,你也可以录制快捷键操作。
    3.当录制Siebel7.7以上版本的时候,一定要在URL后面加上?SWECmd=AutoOn,否则QTP将无法识别Siebel对象。例如:http://siebeldemo?SWECmd=AutoOn
  • 正则表达式基础知识

    2009-08-18 17:11:51


    注:本文来自网络

    一个正则表达式就是由普通字符(例如字符 a z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。如:

    JScript

    VBScript

    匹配

    /^\[ \t]*$/

    "^\[ \t]*$"

    匹配一个空白行。

    /\d{2}-\d{5}/

    "\d{2}-\d{5}"

    验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。

    /<(.*)>.*<\/\1>/

    "<(.*)>.*<\/\1>"

    匹配一个 HTML 标记。


    下表是元字符及其在正则表达式上下文中的行为的一个完整列表:

    字符

    描述

    \

    将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,'n' 匹配字符 "n"'\n' 匹配一个换行符。序列 '\\' 匹配 "\" "\(" 则匹配 "("

    ^

    匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 '\n' '\r' 之后的位置。

    $

    匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 '\n' '\r' 之前的位置。

    *

    匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"* 等价于{0,}

    +

    匹配前面的子表达式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"+ 等价于 {1,}

    ?

    匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配 "do" "does" 中的"do" ? 等价于 {0,1}

    {n}

    n 是一个非负整数。匹配确定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o

    {n,}

    n 是一个非负整数。至少匹配n 次。例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o'o{1,}' 等价于 'o+''o{0,}' 则等价于 'o*'

    {n,m}

    m n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

    ?

    当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo"'o+?' 将匹配单个 "o",而 'o+' 将匹配所有 'o'

    .

    匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。

    (pattern)

    匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript. 中使用 SubMatches 集合,在JScript. 中则使用 $0$9 属性。要匹配圆括号字符,请使用 '\(' '\)'

    (?:pattern)

    匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 "" 字符 (|) 来组合一个模式的各个部分是很有用。例如, 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。

    (?=pattern)

    正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ,但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

    (?!pattern)

    负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows",但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始

    x|y

    匹配 x y。例如,'z|food' 能匹配 "z" "food"'(z|f)ood' 则匹配 "zood" "food"

    [xyz]

    字符集合。匹配所包含的任意一个字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'

    [^xyz]

    负值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'

    [a-z]

    字符范围。匹配指定范围内的任意字符。例如,'[a-z]' 可以匹配 'a' 'z' 范围内的任意小写字母字符。

    [^a-z]

    负值字符范围。匹配任何不在指定范围内的任意字符。例如,'[^a-z]' 可以匹配任何不在 'a' 'z' 范围内的任意字符。

    \b

    匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'

    \B

    匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'

    \cx

    匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z a-z 之一。否则,将 c 视为一个原义的 'c' 字符。

    \d

    匹配一个数字字符。等价于 [0-9]

    \D

    匹配一个非数字字符。等价于 [^0-9]

    \f

    匹配一个换页符。等价于 \x0c \cL

    \n

    匹配一个换行符。等价于 \x0a \cJ

    \r

    匹配一个回车符。等价于 \x0d \cM

    \s

    匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]

    \S

    匹配任何非空白字符。等价于 [^ \f\n\r\t\v]

    \t

    匹配一个制表符。等价于 \x09 \cI

    \v

    匹配一个垂直制表符。等价于 \x0b \cK

    \w

    匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'

    \W

    匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'

    \xn

    匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,'\x41' 匹配 "A"'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.

    \num

    匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,'(.)\1' 匹配两个连续的相同字符。

    \n

    标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。

    \nm

    标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm

    \nml

    如果 n 为八进制数字 (0-3),且 m l 均为八进制数字 (0-7),则匹配八进制转义值 nml

    \un

    匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (©)


    下面看几个例子:
    "^The":表示所有以"The"开始的字符串("There""The cat"等);
    "of despair$":表示所以以"of despair"结尾的字符串;
    "^abc$":表示开始和结尾都是"abc"的字符串——呵呵,只有"abc"自己了;
    "notice":表示任何包含"notice"的字符串。

    '*''+''?'这三个符号,表示一个或一序列字符重复出现的次数。它们分别表示没有或
    更多一次或更多还有没有或一次。下面是几个例子:

    "ab*":表示一个字符串有一个a后面跟着零个或若干个b。("a", "ab", "abbb",……);
    "ab+":表示一个字符串有一个a后面跟着至少一个b或者更多;
    "ab?":表示一个字符串有一个a后面跟着零个或者一个b
    "a?b+$":表示在字符串的末尾有零个或一个a跟着一个或几个b

    也可以使用范围,用大括号括起,用以表示重复次数的范围。

    "ab{2}":表示一个字符串有一个a跟着2b"abb");
    "ab{2,}":表示一个字符串有一个a跟着至少2b
    "ab{3,5}":表示一个字符串有一个a跟着35b

    请注意,你必须指定范围的下限(如:"{0,2}"而不是"{,2}")。还有,你可能注意到了,'*''+'
    '?'相当于"{0,}""{1,}""{0,1}"
    还有一个'¦',表示操作:

    "hi¦hello":表示一个字符串里有"hi"或者"hello"
    "(b¦cd)ef":表示"bef""cdef"
    "(a¦b)*c":表示一串"a""b"混合的字符串后面跟一个"c"

    '.'可以替代任何字符:

    "a.[0-9]":表示一个字符串有一个"a"后面跟着一个任意字符和一个数字;
    "^.{3}$":表示有任意三个字符的字符串(长度为3个字符);

    方括号表示某些字符允许在一个字符串中的某一特定位置出现:

    "[ab]":表示一个字符串有一个"a""b"(相当于"a¦b");
    "[a-d]":表示一个字符串包含小写的'a''d'中的一个(相当于"a¦b¦c¦d"或者"[abcd]");
    "^[a-zA-Z]":表示一个以字母开头的字符串;
    "[0-9]%":表示一个百分号前有一位的数字;
    ",[a-zA-Z0-9]$":表示一个字符串以一个逗号后面跟着一个字母或数字结束。

    你也可以在方括号里用'^'表示不希望出现的字符,'^'应在方括号里的第一位。(如:"%[^a-zA-Z]%"
    示两个百分号中不应该出现字母)。

    为了逐字表达,必须在"^.$()¦*+?{\"这些字符前加上转移字符'\'

    请注意在方括号中,不需要转义字符。

     

  • QTP 测试流程

    2009-08-17 17:52:59

    1.建立测试计划
    在用QTP进行自动化测试之前,需要准备一份详细的测试计划文档。这份文档中包括需要执行的测试步骤,输入的数据和所有需要被测试验证的信息。这些验证信息包括数据验证,应用程序中的对象存在验证,对象状态验证等等。
    2.录制脚本
    利用QTP的录制功能,在应用程序上面录制脚本。
    3.增强测试
    使用检查点,参数化,还可以手工修改脚本使得测试更加合理和有效。
    4.调试脚本
    如果你对脚本做了修改,必需进行调试,使得脚本能够正常运行。
    5.执行脚本
    6.分析结果
    通过查看QTP的运行结果,分析应用程序中可能出现的问题。当然,你也可以使用手工添加脚本的方式产生自定义的测试报告。
    6.报告缺陷
    如果你通过分析结果,发现了应用程序中出现的缺陷,可以通过缺陷报告工具(比如QC)报告缺陷。

    这里,我们只简单讨论了一下使用QTP进行自动化测试的流程,在实际应用中可能会比较复杂。欢迎大家一起探讨。
  • 开始我的软件测试之旅

    2008-05-05 22:01:39

    以前从未接触过这个行业,只是在书本上学到了简单的几页 ,现在真的把它当做一种职业,觉得自己确实欠缺太多,只有加倍的努力,开始我的软件测试之旅。



Open Toolbar