发布新日志

  • 关于描述性编程(转帖)

    2007-12-06 10:54:39

      最近有几位朋友问到描述性编程的问题,那么我们今天就来探讨一下QTP中的描述性编程吧.当我们并不想QTP依靠对象库来识别对象时,我们就可以借用描述性编程的方式.把对象的属性及属性值直接搬到代码中去,让QTP直接通过脚本中的这些属性及属性值就能识别到这个对象,而不必再去匹配对象库.总的来说,如果您希望在未存储在对象库中的对象上执行操作,则这种编程描述将是非常有用的。或者还可以使用编程描述在具有某些相同属性的多个对象上执行相同的操作,或者在其属性与运行会话期间动态确定的描述相匹配的对象上执行操作。比如:在我的<QTP参数化实例>文章中,已经运用过描述性编程了.由于参数化的时候受到了对象库的制约,所以也采用了描述性编程的形式,让要参数化的对象不再受到对象库的制约.

         接下来.通过一个具体的例子,再来看看描述性编程的形式.打开QTP录制Fight的登录框.代码如下:


    j:TO m/IIE'e39682Dialog("Login").WinEdit("Agent Name:").Set "mercury"51Testing软件测试网2Q-L1Sx z
    Dialog("Login").WinEdit("Password:").SetSecure "45a1e193f9dac3bf91f3ba7c1dd250a48a33eabf"
    "Cnm Y y6f8|39682Dialog("Login").WinButton("OK").Click
    zi^\)Aj39682Window("Flight Reservation").Close

    对应的对象库,如图:

    然后我们把对象库中,这些对象的属性及属性值从对象库搬到脚本中,代码修改成为:


    !Xei+Mpu39682Dialog("text:=Login").WinEdit("attached text:=Agent Name:").Set "mercury"
    `%b B@4`39682Dialog("text:=Login").WinEdit("attached text:=Password:").SetSecure "4414d23c42046da1ea3a895f1518b9c476b2b225"51Testing软件测试网%e.\w!v-K.`}Ydl)E
    Dialog("text:=Login").WinButton("text:=OK").Click
    e6H^*N(P%F#w39682Window("regexpwndtitle:=Flight Reservation").close

    把对象库中对象删除掉,如下图:

    再来执行脚本,QTP执行成功.这就是描述性编程.当然值得注意的是,如果父对象用描述性编程表示了,那么后面的对象都要用描述性编程表示了.如:

    Dialog("text:=Login").WinEdit("attached text:=Agent Name:").Set "mercury"

    这边Dialog("text:=Login")用描述性编程表示了,那么WinEdit("attached text:=Agent Name:")就必须要描述性编程表示了.因为在对象库中,子对象是依靠父对象存在的.所以如果Dialog("text:=Login")这个父对象从对象库中删除了,那么后面的子对象也同时被删除了.反过来子对象删除就不影响父对象.所以子对象可以单独用描述性编程表示,而不需牵连其他对象.

  • QTP的数据驱动方式初级探讨系列之四——数据库和环境变量(转)

    2007-11-21 16:57:19

    QTP的数据驱动方式初级探讨系列之四——数据库和环境变量

     

    利用数据库DB

    在当今IT界没有数据库的话,大家想象一下,会是什么样子?

    Mercury公司为QTP也提供了对数据库的数据进行操作的方法,同时也有数据库检查点的设置,我在测试过程中,就是使用SQL Server2000进行数据管理的。目前我还没有学习Oracle^_^,很惭愧)。

    利用数据库来进行测试数据的管理有几个优点:1. 数据便于统一管理2. 方便修改、查询3. 便于进行对已经修改的数据进行数据库检查点设置来检查数据是否修改成功4. 脚本的可重用性提高 5. 脚本与数据分离,脚本的维护工作量减少

    QTP的脚本调用数据库中的数据有2种方法:1. 利用用户DSN数据源 2. 直接连接数据库

    1.       本地没有创建数据源的方式
    DRIVER=SQLServer;SERVER=
    数据库IP地址;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=本地主机名;DATABASE=数据库名

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

    注:虚线框中的是引用别人的

           你可以建立一个DBFunction.vbs文件,将你编制的数据库调用的函数(如:连接、查询、修改。。。)全部放在这个文件中(建议:DBFunctions与你的公共函数不要放在一起),然后通过QTP引用资源文件,在菜单中选择“文件”——>“设置”——>“资源”,然后将你的函数库文件添加到这个关联函数库文件下。这样你的脚本就可以使用这些函数了。

           当然,有人不愿意这样做。还有一个方法,就是在每个脚本的开头使用下面的脚本代码引用你自定义的函数库文件:

           ExecuteFile “FileName”  //例如:ExecuteFile “D:\Functions\DBFunction.vbs”

           当数据库中的数据需要修改时,调用完修改数据库数据的函数后,在此函数后的一行脚本脚本可以添加数据库检查点来检查你刚才修改的数据是否成功,数据库检查点的方法见:QTP的帮助文档。

    OK,这样就设置完成了数据库的数据驱动方式

    利用环境变量

    我觉得Mercury公司考虑事情很周到,连环境变量的功能也添加进去了(不知道我高兴是不是有道理,目前的知识面不是很广,大家不要见怪啊)

    环境变量的的适用范围就是本测试,本测试中的所有操作都可以调用。

    环境变量有2种,一种是QTP的内置变量,一种是用户自定义的变量。内置变量是可以直接就可以用,自定义环境变量需要在菜单中选择“文件”——>“设置”——>“环境”,在变量类型中选择“用户自定义”,然后进行添加,可以对添加的变量全部导出,导出的文件为.xml格式的文档。既然可以导出,那么必然可以导入.xml文件,你可以在该对话框中的选中“从外部文件导入”,然后添加其文件路径即可。(当然这些操作都可以直接使用脚本来实现,如:Environment.LoadFromFile(“FileName”))

    例如:在桌面建立一个Var.xml,如下

    -<Environment>    //以这个开始的内部都是定义环境变量,直到以</Environment>结束

    - <Variable>                           // 变量定义起始标识

                     <Name>aa</Name>               // 变量名称

                     <Value>11</Value>               // 变量值

            </Variable>                            // 变量定义结束标识

    - <Variable>

                     <Name>bb</Name>

                     <Value>22</Value>

            </Variable>

    - <Variable>

                     <Name>cc</Name>

                     <Value>33</Value>

                  </Variable>

      </Environment>

    然后导入本测试的环境变量文件中,在专家视图里编写下面的脚本代码:

    Dim aParam3

    aParam3=Environment.Value(“aa”)          // 调用环境变量

    msgbox aParam3

    运行测试,会输出11”

           OK,完成环境变量的初级知识的学习。

  • TP的数据驱动方式初级探讨系列之四——利用Excel文件(转)

    2007-11-21 16:54:07

    利用Excel文件

    由于QTP内嵌了类似Excel表格的DataTable数据表,那么使用Excel文件为QTP脚本传递测试数据也就变得顺理成章的事情了。

    Excel中的各个Sheet的数据导入到QTP数据表中,就需要用到QTP提供的导入函数:DataTable.ImportSheet(FileName, SheetSource, SheetDest),第一个参数为导入的文件名称及路径,SheetSource即导入Excel文件中的那个Sheet名称,SheetDest即为QTP的数据表中的某一个SheetName,这个Sheet可以为某个操作的ADTSheet名称,也可以为NewSheet名称。

    提示:导入的数据在测试运行的过程中是可以看见的,但是当测试运行完成后,导入的数据也会消失。这个属于Run-Time DataTable

    具体的脚本实现如下:

    导入到本操作数据表中

    Call DataTable.ImportSheet("C:\Data.xls","Global","Action1")  / *  导入Data.xls文件中的Global数据表的数据于本地数据表“Action1 * /

    导入增加的Sheet

    DataTable.AddSheet(“NewSheetName”)

    Call DataTable.ImportSheet("C:\Data.xls","Global"," NewSheetName ")  / *  导入Data.xls文件中的GlobalSheet表的数据于新建数据表“NewSheetName”中, * /

    如果你的全部数据都保存在Excel文件中,可以使用一下语句:

    DataTable.ImportSheet(FileName)  // 直接导入 到本测试的数据表中,GDTSheet对应于文件中的GlobalSheet的数据,其他的都依次存放。

    那么数据的导出就和导入差不多了,只是参数少了一个而已

    DataTable.Export(FileName)  // 把测试数据表的数据全部导出到文件中

    DataTable.ExportSheet(FileName, DTSheet) // 把测试数据表中 名称为 DTSheet 的数据表Sheet 的数据导入到文件中

  • 软件测试不只是提BUG

    2007-11-19 11:23:10

    QA的工作分为测试、流程制定和流程监督三部分。质量不是靠守门守出来的,而是靠贯穿整个软件生命周期的管理管出来的。敏捷项目为什么容易获得更好的质量?因为它把质量管理落实到每个小时的每件具体事情上,而不是写在纸上。
  • TD与QTP连接

    2007-11-15 22:53:45

    TD与QTP连接_文章精选_51Testing软件测试网 - Powered By SupeSite
    http://www.51testing.com/?action_viewnews_itemid_8262.html

    1 、安装 TD,检验 TD 是否安装成功,启动 TD Server 服务器后,在与 Server 相连的其他计算机上,打开 IE 浏览器,在地址栏输入 http://TD Server ip 地址 /TDbin/start_a.htm 如果能够浏览到 TD 界面 说明安装成功。

    2
    、安装 QTP,验证 QTP 安装成功,进入 windows 操作系统,点击,开始 -> 程序 ->Quick Test Professional-> Quick Test Professional ,打开 QTP 使用界面,进行简单的录制,保证脚本录制成功,并且可以回放,与你的预操作达到的结果一致,证明 QTP 安装成功。

    3
    、安装插件,进入 TD 首页,点击见面上的 TD Add In,进入 TD Add In 界面点击 More TestDirector Add Ins 进入 More TestDirector Add Ins 界面,下载名为 TDplugInsSetup 的插件,大约 35 兆并且在 Server QTP 客户机上安装这个插件,安装成功后,会要求你重启电脑,重启后会看到,开始-程序中有个新安装的程序 “Quick Test Professinal add in for Quality Center” ,登入 TD 进入 test plan 检测是否可以在 test plan 中添加 QTP 类型的测试用例,点击后
    出现QUICKTEST.TEST 并且可以建立 QTP 的测试用例。

    4
    、检查没有问题之后
    还需要在安装 QTP 的机子上做一些相应的设定,进入 QTP 主界面 点击文件栏的 Tools-Options 进入 Options 对话框 在 Run Tab 中选择 Allow other Mercury products to run test and components 以及 Submit a defect to Qualiyt Center for each failed step 选中后 点击 ok 保存这个设置,在 QTP 主界面中点击 Tool Quality Center Connection,在 Server 中输入 http:// TDServer ip 地址 /TDbin( 本例中使用 htt......) 点击 connect 按钮 QTP 连接到服务器上 如果服务器连接有问题 则会提示连接失败。

    5
    、在 project connection 中包含一下几项:
       Domain
    TD 服务器站点管理中建立项目的域
       Project
    :域中你所建立的项目
       User
    :登陆项目所用的用户名
       Password
    :相应用户名使用的密码
       Reconnect on startup
    在下次启动 QTP 时自动登陆到你的项目中
       Save password for reconnection on startup
    为下次登陆保存密码
    完成了上述操作就 TD QTP 就连接起来
    可以从 TD 调用 QTP 脚本了。

  • TD中有不会的请查看此文章

    2007-11-15 10:56:09

    TestDirector用户手册(续1)_文章精选_51Testing软件测试网 - Powered By SupeSite
    http://www.51testing.com/?action_viewnews_itemid_8709.html
  • 今天又读了一篇好文章

    2007-11-15 10:35:17

    整体性能测试剖析_文章精选_51Testing软件测试网 - Powered By SupeSite
    http://www.51testing.com/?action_viewnews_itemid_8713.html

    切记:性能测试不只是测试人员的事情,只有通过不同阶段不同参与人的通力合作才能把性能测试做好。

  • SQL查询语句精华使用简要(转)

    2007-11-13 10:20:33

     

    2007-11-13 00:27:09 / 个人分类:数据库

    一、 简单查询
    9H+W MC3kX"ohyX153092  简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。
    T%fr8\Q"w153092  例如,下面的语句查询testtable表中姓名为"张三"的nickname字段和email字段。

       SELECT nickname,email
    J'm8@x H_.m153092  FROM testtable51Testing软件测试网$A.sIDxyT/AA
      WHERE name='张三'

      (一) 选择列表

      选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。

      1、选择所有列

      例如,下面语句显示testtable表中所有列的数据:

       SELECT *51Testing软件测试网/d/tcb*~3j
      FROM testtable

      2、选择部分列并指定它们的显示次序

      查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。
    ,OU/p4I)O(Ud153092  例如:

       SELECT nickname,email51Testing软件测试网QP"`:fq
      FROM testtable

      3、更改列标题

      在选择列表中,可重新指定列标题。定义格式为:51Testing软件测试网f'p$b#|"a#Xk
      列标题=列名51Testing软件测试网*?.vS;Oi*W @'e'c
      列名 列标题
    -]O@x2D@` z%?|s153092  如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:

       SELECT 昵称=nickname,电子邮件=email51Testing软件测试网Y1g'x/Z1[
      FROM testtable

      4、删除重复行

      SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。

      5、限制返回的行数

      使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。
    @)iy|EZeVr153092  例如:

       SELECT TOP 2 *
    g&v#t/?z`HPY3I(x%C153092  FROM testtable51Testing软件测试网9RrM-w&LC
      SELECT TOP 20 PERCENT *
    -L V] r Q u,[4[153092  FROM testtable

      (二)FROM子句

      FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
    7W }9y+?_153092  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

        SELECT username,citytable.cityid
    7M4Ueh/kzH5y:?153092  FROM usertable,citytable
    -Lq&v(g1]m)zi153092  WHERE usertable.cityid=citytable.cityid

      在FROM子句中可用以下两种格式为表或视图指定别名:51Testing软件测试网5V5_skq+iZ q
      表名 as 别名
    2UFm8F(_ z153092  表名 别名

      (二) FROM子句

      FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图,它们之间用逗号分隔。
    -o;H E0zrG153092  在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应使用下面语句格式加以限定:

       SELECT username,citytable.cityid51Testing软件测试网 ~-`G?G#j K N
      FROM usertable,citytable
    n$a'wD/R G9~K,I%].B153092  WHERE usertable.cityid=citytable.cityid

      在FROM子句中可用以下两种格式为表或视图指定别名:
    A\t\t9jrEM;D153092  表名 as 别名
    Tds2HYb7g+]153092  表名 别名51Testing软件测试网#| ^(`)B cV9n!q-}
      例如上面语句可用表的别名格式表示为:

       SELECT username,b.cityid
    9tn:bNv!W-i153092  FROM usertable a,citytable b
    BEC0B!ODU153092  WHERE a.cityid=b.cityid

      SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。

      例如:

        SELECT a.au_fname+a.au_lname51Testing软件测试网M9I(Xp@u/u8Ln
      FROM authors a,titleauthor ta51Testing软件测试网KM7nch;@c
      (SELECT title_id,title
    |$t*vq@p3z153092  FROM titles
    5ft&kBU2M153092  WHERE ytd_sales>10000
    DKH%R J?4y|6F153092  ) AS t51Testing软件测试网 z!j5G!@M_.r
      WHERE a.au_id=ta.au_id
    2MwVjL[6p[#~8X153092  AND ta.title_id=t.title_id

      此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。

    (三) 使用WHERE子句设置查询条件

      WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据:

       SELECT *51Testing软件测试网V$m!ho a/DxA
      FROM usertable51Testing软件测试网#a)z+P@4@"A"w
      WHERE age>20

      WHERE子句可包括各种条件运算符:
    0{.sH9I f+H~153092  比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!<
    )~QS_ [153092  范围运算符(表达式值是否在指定的范围):BETWEEN...AND...
    D.VNeHr1Y6a153092  NOT BETWEEN...AND...51Testing软件测试网9OW6z/|8T
      列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2......)
    4h?*g.i)u,r#kr0H153092  NOT IN (项1,项2......)51Testing软件测试网PI.Z|,V7Y1B/?
      模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE
    +Mque W9P&VL&x+g|o153092  空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL
    tw%@6xJf_H#?%F153092  逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR

      1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30
    DZYO\,g3}153092  2、列表运算符例:country IN ('Germany','China')51Testing软件测试网c"kqb;i{"dk%d
      3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、varchar、text、ntext、datetime和smalldatetime等类型查询。51Testing软件测试网#H(u j'U C
      可使用以下通配字符:51Testing软件测试网w$_t8X j`G;pH
      百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。
    :k*\$u1E]IG7?.X&rKF153092  下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。
    lL,a;T#w0_ }153092  方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。[^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
    t/P:oA'@G*gBi153092  例如:51Testing软件测试网#vt,K4Lcd[X+x
      限制以Publishing结尾,使用LIKE '%Publishing'
    "m'H#r#D&OTU C9{j153092  限制以A开头:LIKE '[A]%'51Testing软件测试网uXC7}k.n WC+_
      限制以A开头外:LIKE '[^A]%'

      4、空值判断符例WHERE age IS NULL

      5、逻辑运算符:优先级为NOT、AND、OR

      (四)查询结果排序

      使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为:
    4Yt P$c` y$`C3Fe153092  ORDER BY {column_name [ASC|DESC]} [,...n]
    zJ$r`+t_G:H}3M153092  其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排51Testing软件测试网G;JhfE:{~#j
      序。51Testing软件测试网8z ~G6`is_4qe
      例如:

        SELECT *
    s}aA,N153092  FROM usertable51Testing软件测试网'{u#P8{7v,a W
      ORDER BY age desc,userid ASC

      另外,可以根据表达式进行排序。

      二、 联合查询

      UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:

        select_statement51Testing软件测试网D#H)A!D*Unl;pv
      UNION [ALL] selectstatement
    *V]n2@1Ji153092  [UNION [ALL] selectstatement][...n]

      其中selectstatement为待联合的SELECT查询语句。

      ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

      联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

      在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

      在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

      查询1 UNION (查询2 UNION 查询3)

      三、连接查询

      通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。

      在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行查询。

      连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。

      SQL-92标准所定义的FROM子句的连接语法格式为:

       FROM join_table join_type join_table51Testing软件测试网)hinb^
      [ON (join_condition)]

      其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一个表操作的连接又称做自连接。

      join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。

      交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

      连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑运算符等构成。

      无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接连接。例如:

       SELECT p1.pub_id,p2.pub_id,p1.pr_info
    -r.k!R9^ \,s ix~153092  FROM pub_info AS p1 INNER JOIN pub_info AS p251Testing软件测试网4oD7g3SYa6u8R#K2m@
      ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)

      (一)内连接
    /XjK Q5lR2Ui1@153092  内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:51Testing软件测试网 zO \n1N%~0g(K
      1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。51Testing软件测试网7xCSKI,f$R h
      2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。51Testing软件测试网4n?-KW [N3O
      3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。51Testing软件测试网%ZwBf5V#y!]
      例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社:

       SELECT *51Testing软件测试网 p#C&k f|{;a?
      FROM authors AS a INNER JOIN publishers AS p
    9U4pGjUiH4jY153092  ON a.city=p.city51Testing软件测试网9sD:vd\s p
      又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state):
    ~5l)~M.G"D.} O$^4y153092  SELECT a.*,p.pub_id,p.pub_name,p.country
    a/w?:X!}Q_uL)Z153092  FROM authors AS a INNER JOIN publishers AS p51Testing软件测试网$R| Xa _R7LD;w-A&c
      ON a.city=p.city

      (二)外连接51Testing软件测试网3Kd_k z/P
      内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。如下面使用左外连接将论坛内容和作者信息连接起来:

       SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b
    Z gLNU2PZ153092  ON a.username=b.username

      下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市:

        SELECT a.*,b.*51Testing软件测试网!]^w CjGa
      FROM city as a FULL OUTER JOIN user as b51Testing软件测试网,w [j:BE/?M h
      ON a.username=b.username

      (三)交叉连接51Testing软件测试网v5hl y7n}0@
      交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等于6*8=48行。
    -A.w:_ d1\2C KKU5v153092   SELECT type,pub_name51Testing软件测试网2aN D5[ ~%yq'W0kd
      FROM titles CROSS JOIN publishers51Testing软件测试网,VM7|%E \p
      ORDER BY type

  • 读到别人的的精典之作

    2006-12-11 17:13:00

    性能测试注意事项:

    1.服务器端和客户端一定要同一个局域网内,否则网络因素会成为性能测试的瓶颈。

    2.在性能测试脚本中要注意检查点的设置,否则都不清楚脚本是否真的成功执行操作。

    3.设置参数化和关联是性能测试脚本调通的关键。

    4.录制脚本时通常会包括一些think time,因此在回放脚本时,注意在runtime setting中设置忽略think time,否则会影响测试数据的准确性,如:响应时间的准确性。

    5.尽量每个页面设置一个transcation,否则不知哪个页面最慢。

    6.运行性能测试时在runtime setting中关闭日志功能,调试脚本时可以打开日志功能。

    7.性能测试前的数据准备很重要:比如:系统数据库存在60000个用户和系统数据库存在60个用户,分别在两种情况下执行登陆性能测试,性能测试的结果也不会一样的。

    8.在性能测试时用户登陆的用户名和密码,每个用户尽可能不要一样!

  • 终于在这里有了自已的空间,很高兴!

    2006-12-11 17:01:39

    以后就可以把工作中的测试心得,与大家分享了
Open Toolbar