ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 做一个开发人员认可的测试人员(系列3)-也谈自动化测试框架[缓慢更新中]

做一个开发人员认可的测试人员(系列3)-也谈自动化测试框架[缓慢更新中]

原创 Linux操作系统 作者:crazypeter2005 时间:2013-08-28 20:45:21 0 删除 编辑
[i=s] 本帖最后由 crazypeter2005 于 2013-7-22 17:46 编辑

这是第一个系列的文章中弄掉了的一篇。我答应大家有空补充起来的,这个会慢慢的更新下去,希望对大家有些帮助:

我做过自动化测试好多年,也用过不少的测试工具,对自动化的测试理论也了解不少,研究生的论文就是写的自动化测试。现在看来那个论文真是的很稚嫩。
为了更好的提高重用性,需要引入自动化测试框架,让测试能更节省人力,让测试更加可靠。

先介绍我接触的第一个自动化测试框架,是一个测试界面的框架:
被测产品是一个C/S结构的程序,采用Rational Robot来做产品的自动化。
由于Robot对某些窗口支持不好,测试框架还采用了SAS的自动化前辈[url=mailto:Carl.Nagle@sas.com]Carl Nagle[/url]的部分代码
整个ProductA有76个窗口,有800个Case。
整个架构是这样子的:


Test Framework.jpg


我来简单介绍一下子:ProductA是被测试的产品,ProductB是有时候和ProductA做集成的产品。
第一层是底层:包括Common Function以及产品给到的Property文件或者XML文件,这里面只有Product Specific List View Utilities和Product Related Properties File是和被测产品相关的,是为产品而定制的或者是被测产品开发的人提供的文件。

第二层是中间层:按照窗口来划分,每个Checkbook,每个EditBox,每个RadioButton都是一个独立的Item,每个Item都封装一个方法,我们叫Task。不同窗口的OK Button的点击被封装到不同的窗体的文件中,作为各自独立的Task。Task有时间需要调用Common Function里面读取Property文件的方法,总的来说,Task和被测产品关系不算大。
      中间层还有一个叫做Wizard,就是调用一系列的Task,每个Wizard都是和被测产品的业务相关系的。
      如何区分Task和Wizard我举个例子:
      QQ登陆界面:
      点击UserNmae,输入UserName,清空UserName,点击密码,输入密码,清空密码,点击登陆 这就是7个Task。
      而一个Wizard就是
      1 输入用户名,2 输入密码, 3 点击登陆,这就是一个Wizard。Wizard不做验证,只是调用各个小的Task。Wizard调用后验证的结果在TaskCase里面调用。

第三层是TestCase,调用Wizard,然后用Common Function的Verify系列方法去验证,Pass Or  Not。

分为三层架构后,有有点也有缺点:
      优点是:1 对产品进行了隔离,一般Case写好后就不需要修改,只是去调整底层的Task和Wizard。
                     想想Case有800个,而Task和Wizard写在一起才76个文件,每个窗体一个。
                  2 Task和Wizard起名有规范,直接读Case能够读懂,写Case的工作交给只会手工的人也能写,调试交给专职自动化的人来。
                  3 产品小规模调整的时候,只需要调整Task,甚至不动Wizard和Task。
                  4 便于做本地化,只修改properties文件就行。

      缺点也是蛮明显的:1 产品不能大改动,界面如果是可配置的,我们就必须固定某种配置或者并行集中不同界面的配置,增加了复杂度。
                                 2 先期写Common Function和Wizard比较耗时。
                                 3 不熟悉Common Function的人调试得花费较长时间。

举简单的代码的例子吧。
1 Properties的例子

CODE:

STRINGTABLE DISCARDABLE
BEGIN
    IDS_DIALOGS_TITLE_MessageDlg      "Message"
    IDS_DIALOGS_TITLE_WarningDlg      "Warning"
    IDS_DIALOGS_TITLE_ErrorDlg        "Error"
    IDS_DIALOGS_TITLE_DirPickerDlg    "Select a Folder:"
    IDS_DIALOGS_TITLE_SelectDocuments "Select Documents"
END2 Task 的例子

CODE:

' Tasks:

' [All]
Declare Sub APSrch_SelectView                  basiclib "A_PowerSearch" (ViewName as String)
Declare Sub APSrch_ClickClearALL               basiclib "A_PowerSearch" ()
Declare Sub APSrch_ClickSave                   basiclib "A_PowerSearch" ()
Declare Sub APSrch_ClickLoad                   basiclib "A_PowerSearch" ()
Declare Sub APSrch_ClickSearch                 basiclib "A_PowerSearch" ()
Declare Sub APSrch_ClickDone                   basiclib "A_PowerSearch" ()

CODE:

'############################################################################
'#  Sub APSrch_SelectView((ViewName as String)
'# DESCRIPTION:
'#      [Task] Select view in power search.
'# EXAMPLES:
'#      Call APSrch_SelectView("General")
'# Orig Author: XX
'# Orig   Date: April 6, 2006   
'# History:
'#      April 5, 2006    Original Release      
'############################################################################
Sub APSrch_SelectView(ViewName as String)
    Dim cmbName As String
    cmbName=A_GetKeyRC("IDS_DESKTOP_LABEL_SelectView")
    Call A_CmbSelect(cmbName, ViewName)
End Sub3 Wizard的例子

CODE:

' Wizards:

Declare Sub APSrch_SearchByProperty            basiclib "A_PowerSearch" (Property as String, Filter as String, Value as String)
Declare Sub APSrch_SerachByDocContent          basiclib "A_PowerSearch" (words() as String, condition() as String)
Declare Sub APSrch_SearchByDate                basiclib "A_PowerSearch" (Property as String, Filter as String, DYear as String, Aonth as String, DDay as String)

CODE:

'############################################################################
'#  Sub APSrch_SearchByProperty(Property as String,Filter as String,Value as String)
'# DESCRIPTION:
'#      Search by  a property  in general tab
'# PARAMETERS:
'#      [In]    Property e.g., "DocumentName"
'#      [In]    Filter   e.g., "Contain"
'#      [In]    Value    e.g., "Test"
'# ERRORS:
'#      (none)
'# EXAMPLES:
'#      Call APSrch_SearchByProperty("DocumentName","Contain","Test")
'#      APSrch_SearchByProperty"DocumentName","Contain","Test"
'# Orig Author: XX
'# Orig   Date: May 25, 2005
'# History:
'#      May 25, 2005    Original Release
'#      April 11, 2006 XX Modified "APSrch_General_ClickAdd" instead of "APSrch_ClickAdd" and
'#                            "APSrch_General_InputValue" instead of "APSrch_InputValue"
'############################################################################
Sub APSrch_SearchByProperty(Property as String,Filter as String,Value as String)
    A_Focus A_GetKeyRC("CPN_DESKTOP")
    Call ADesk_ClickTopPowerSearch()
   
    A_Focus A_GetKeyRC("IDD_POWERSEARCH_TEMPLATE.CAPTION")
    APSrch_SelectProperty Property
    APSrch_SelectFilter Filter
    APSrch_General_InputValue Value
   
    Call APSrch_General_ClickAdd()
    APSrch_ClickSearch
   
    Call A_Delay(10000)
End Sub4 Test Case例子

CODE:

'############################################################################
'# Test if we can create a document and later search out
'# DESCRIPTION:
'#
'#

'#
'############################################################################
Sub Test_Search_By_Properties(Property as String,Filter as String,Value as String)

Call User_Login(NormalUser1, Password1)
Call A_CreateDoc(TestPath1, DocName)
Call A_Desktop_Focus()
Call A_Desk_ClickTopPowerSearch()

Call A_PowerSearch_Focus()
Call APSrch_SelectProperty Property
Call APSrch_SelectFilter Filter
Call APSrch_General_InputValue Value

Call APSrch_General_ClickAdd()
Call APSrch_ClickSearch()

Call A_Delay(10000)

Dim Count As Interger
Call Count = CommonUtil_GetListView_Count()
If Count = 1 then
        Test_Log("Test_Search_By_Properties","Pass",CommonUtil_GetCurrenTimeStamp)
Else
        Test_Log("Test_Search_By_Properties","Fail",CommonUtil_GetCurrenTimeStamp)
End If

Call A_DeleteFileAll()

Call A_Logout()
End Sub可以看到整个Case是可读可维护的,维护的成本也是比较小的。有编程基础的人通过写1-2个Case就能熟悉框架,通过Debug几次就能迅速定位错误。
这是接触到的第一个自动化的框架...
(后续缓慢更新中...)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9562545/viewspace-769455/,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-03-31

  • 博文量
    6
  • 访问量
    20420