软件测试中的核心要素是测试用例和测试数据。一般成功的软件项目中会有大量的测试用例和测试数据,如何对测试用例和测试数据进行管理决定着测试的效率。通常软件都具有输出功能,软件的输出一般以文件的形式存在,因此在测试过程中就存在测试文件,也就需要对测试文件进行管理。如何管理大量的测试文件,使其方便的应用于测试项目对测试团队有很大的价值,本文探讨如何通过管理测试文件提供测试效率
对测试文件管理的最直观方法是:使用一台文件服务器对测试文件进行存储,通过对文件目录进行分类,通过对文件夹设置权限,赋予不同的用户不同的权限。使用测试文件时,需要用户根据测试文件存在的目录访问文件服务器,获取测试文件。当测试文件数量比较少,业务模型比较简单的情形下,使用文件服务器对测试文件进行管理,比较有效。但当测试文件达到一定的数量级后,要对上万个测试文件进行管理,不仅需要建立大量的文件目录,还需要建立很深的层次结构,每个文件夹下都会有大量文件,想要定位到一个测试文件,非常困难,因此如果仍使用文件服务器的方式对测试文件进行管理,对使用者和管理者来说都非常不容易。而且使用文件服务器进行管理,只能以一个视角来管理这些文件,无法提供多个试图来看这些文件。
使用文件服务器管理测试文件在测试过程中,测试者需要花费大量的时间去寻找对应测试用例所需的测试文件,测试管理者也无法根据不同的测试阶段和目的,去关注特有的测试文件,因此需要改进测试文件的管理方法,提高测试的效率。如图 1 所示。
图 1. 传统管理测试文件方法
测试文件是针对于测试用例而存在的,测试根据不同的测试目的的角度可分为功能测试,性能测试,多语言测试等,根据不同测试执行方法可以分为手工测试,自动化测试等。因此不同的阶段,不同的人员对测试的需求是不同的,因此对测试文件的关注点也是不同的。单纯的文件服务器管理只能提供单一的目录信息,很难满足不同阶段,不同角色的需求。如何提高管理测试文件的效率,从而提供测试的效率,需要基于管理测试文件和测试用例的工具来判断。因为测试是一个有生命周期的过程,涉及多个方面。要改进测试文件的管理方法需要同时考虑测试用例和测试过程的管理方法。
通常改进测试流程提高测试效率需要基于特定的测试管理工具。如何提高软件测试的效率有很多种方法,一般主要涉及选择使用更先进的测试管理工具,改进测试流程等。更换测试管理工具不仅需要大量的时间和精力去把已有的测试文档和数据迁移到新的工具,还需要时间学习如何使用新的测试工具,同时也存在新的测试管理工具是适用于现在测试项目的风险。如何能在现有测试管理工具的基础上提供测试效率往往更容易被接受,而且风险很小。因此如何改进测试流程,提高测试效率具有现实的意义。因此本文主要介绍如何在使用 Lotus Test Case Database 的基础进行测试文件的管理方法。
Lotus Test Case Database 是基于 Lotus Domino 的测试用例的管理工具,它可以在 Lotus Notes 中方便的对测试用例,测试执行进行管理,本文主要探讨如何在使用 Lotus Test Case Database 作为测试管理工具的基础上进行高效的管理测试,从而提高测试效率。Lotus Domino 有对文件进行管理的能力,而 Lotus Test Case Database 也是基于 Lotus Domino 的测试管理工具,因此本文介绍一种易于和 Lotus Test Case Database 进行整合从而增强 Lotus Test Case Database 的能力,提高测试效率的测试文件管理方法。主要包括(1)测试文件的上传;(2)测试文件管理数据库和 Lotus Test Case Database 的整合,测试文件数据库和 Lotus Test Case Db 相互通信和访问,从测试用例数据可以直接访问到测试文件,测试文件数据库使用测试用例数据库的描述信息等;(3)权限的管理,对不同的级别的用户进行有效的管理;(4)批量上传测试文件(5)批量下载测试文件(6)提供多种视图供用户使用,如自动化测试用户,只关心自动测试需要的测试文件等;(7)管理者视图。
测试文件的上传
Domino 数据库可以方便的管理文档,每个文档标识每个测试据文件,每个测试文件存储多个数据信息。我们用一个 Form 来描述测试文件包括:目录(Category),需求(Requirements),测试阶段(Test Phase),测试文件对应的软件版本(Release ),文件格式(File format),产生测试文件的操作系统(OS ),是否自动化(Automated),作者(Author),描述信息(Description),测试文件(Test file)。详细说明如表一所示:
| Category : | 用于对测试文件进行组织分类 |
|---|---|
| Requirements : | 需求信息,用于描述是在什么需求下产生了这个测试文件 |
| Test Phase: | 用于描述测试文件可以哪个测试阶段,如 FVT,GVT,PVT 等 |
| Release : | 用于描述测试文件是用于哪个产品版本 |
| Source : | 用于描述测试文件的来源,如测试人员,客户,互联网等 |
| File format : | 文件的格式 |
| OS : | 用于描述测试文件测试文件产生的系统 |
| Application : | 用于描述测试文件生成应用程序 |
| Automated : | 用于描述测试文件是否用于自动化测试用例 |
| Author : | 用于描述测试文件的作者 |
| Description : | 其它用于描述测试文件的信息 |
| Test file : | 用于存放测试数据文件 |
这样一个测试文件有多个描述信息,可以根据不同的目的对测试文件进行组织和展示,满足不同用户的需求。在 Lotus Symphony 的测试项目中,我们便使用这种方法来描述每个测试文件。如图 2 所示
图 2. 测试文件
测试文件数据库和 Lotus Test Case Database 的整合
测试文件针对于测试用例而存在,因此测试文件管理工具和测试用例管理需要能够相互访问,集成在一起,就能更大的发挥各自的能力,提高工作效率。测试文件管理数据库需要和 Lotus Test Case Database 共享一些信息。Lotus Test Case Database 中的目录信息和需求信息是用于组织和描述测试用例,同样可以用于描述测试文件,因此我们需要读取 Lotus Test Case Database 中的目录和需求信息。下图是 Lotus Test Case Database 的一个截图,如 Macro-->API 是一个功能的划分目录。
图 3. Lotus Test Case Database
读取 Lotus Test Case Database 目录核心代码片段如下
清单 1. 代码片段
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim uidoc As NotesUIDocument
Dim pickdoc As NotesDocument
Set uidoc = workspace.CurrentDocument
Set db = session.CurrentDatabase
Set collection = workspace.PickListCollection( _
PICKLIST_CUSTOM, _
False, _
"GREATWALL/OPENS", _
"S_Dir\SYMPHONY20-TCDB.nsf", _
"Functions", _
"Select Category", _
"Please select a Category." )
If collection.Count = 0 Then
Else
Set pickdoc = collection.GetFirstDocument
Call uidoc.FieldAppendText("Category", "," + pickdoc.FullTitle(0))
End If
|
测试文件是为测试用例而存在的,因此需要访问测试用例的同时能方便的访问测试文件。因此需要在 Lotus Test Case DB 中访问测试文件数据库。如何把不同的信息系统进行整合从而发挥更大的作用,是当今信息系统的一个难点。而 Lotus Test Case Db 和本文介绍的测试文件管理数据库都是基于 Lotus Domino 的数据库,因此具备了相互通信,整合的基础。我们知道在 Domino 数据库中每个文档可以以 link 的形式存于在其它文档中,在其它文档中可以方便的访问此文档,因此我们只需要把测试用例所需要的测试文件对应的文档 link 保存到测试用例中,在 Lotus Test Case DB 中便可以做到快速定位到需要访问的测试文件,不需要在文件服务中那样层层访问目录,最后在众多的文件中找到所需要的文件。
图 4. 测试文件存在形式
测试文件是测试团队和整个项目的重要资产,因此需要保证测试文件的安全,这就需要有访问权限管理功能。基于 Lotus Domino 我们可以方便的来对用户的访问权限进行管理,我们只需要对每个测试文件存在的文档设置 Reader 和 Editor 两个字段,只要在 Reader 和 Editor 的权限列表里的用户才可以访问相应的文档,当上传文档的时候,设置其 Reader 和 Editor 的值。
图 5. 测试文件权限
其中 Reader 和 Editor 的值如下所示:
list:=@DbLookup("":" NoCache "; "";" Source"; Source; 2); //Source 为存放用户列表的试图
listcon:=@If(@IsError(list); ""; @Unique(list));
其中 Source 用于划分目录所对应的访问者列表,如来自客户的文件只能被极少数的人访问,
测试组创建的文件可以被大部分访问等。我们用一个列表来记录权限列表,达到更低级别的权限访问控制。如 Team 代表了测试 team 创建的测试文件,其下对应的 A Group -1 代表数据库所在服务器的群组,A/Name/China/IBM 代表单个用户。这样基于 Domino 服务器可以对用户权限达到组和个人用户的权限访问控制。
图 6. 权限定义
测试中会有生成和创建大量的测试文件,如果有大量的测试文件,逐个文件上传到测试文件管理数据库会浪费大量的时间,因此需要提供批量处理测试文件的能力此我们提供了批量上传文件到测试文件数据库的方法。主要代码列表如下:
清单 2. 批量上传文件
Dim ws As New NotesUIWorkspace
Dim filenames As Variant
Dim collection As NotesDocumentCollection
Dim pickdoc As NotesDocument
Dim docr As NotesDocument
filenames = ws.OpenFileDialog(True, "Select sample Files to import database",,"c:\")
If Isempty(filenames) Then
Msgbox "Please select files!",48,"Sample Files"
Exit Sub
End If
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim rtitem As NotesRichTextItem
Dim object As NotesEmbeddedObject
Dim authorItem As NotesItem
Dim readerItem As NotesItem
Dim view As NotesView
Dim sourcedoc As NotesDocument
Dim curuser As NotesName
Dim Crprofile As NotesDocument
Set db = session.CurrentDatabase
Set curuser = session.CreateName(session.EffectiveUserName)
Set view = db.GetView("Source")
Set Crprofile = db.GetProfileDocument("dlgPhase",session.UserName)
If ws.DialogBox("dlgPhase",True,True,False,False,False,False,"Select......",
Crprofile,False,False) Then
Forall o In filenames
If FileExist(db,o) = 0 Then
Set doc = db.CreateDocument
doc.form = "FileInfo"
doc.SubmitDate = Now()
doc.Submiter = curuser.Abbreviated
doc.Category = Crprofile.Category(0)
doc.Requirements = Crprofile.Requirements(0)
doc.TestPhase = Crprofile.TestPhase(0)
doc.Release = Crprofile.Release(0)
doc.Source = Crprofile.Source(0)
Set sourcedoc = view.GetDocumentByKey(Crprofile.Source(0))
If Not sourcedoc Is Nothing Then
Set readerItem = New NotesItem(doc, "Readers", "[DB Admin]",READERS)
Set authorItem = New NotesItem(doc, "Editors","[DB Admin]",AUTHORS)
Call readerItem.AppendToTextList(sourcedoc.Owners)
Call authorItem.AppendToTextList(sourcedoc.Owners)
Call readerItem.AppendToTextList(curuser.Canonical)
Call authorItem.AppendToTextList(curuser.Canonical)
End If
doc.FileFormat=Crprofile.FileFormat(0)
doc.OS = Crprofile.OS(0)
doc.Application = Crprofile.Application(0)
doc.Automated = Crprofile.Automated(0)
doc.Description = Crprofile.Description(0)
Set rtitem = New NotesRichTextItem(doc, "Attachment")
Set object = rtitem.EmbedObject(EMBED_ATTACHMENT, "", o)
seccess = doc.ComputeWithForm(False, False)
Call doc.Save(True,True)
Else
Msgbox o+" is already in DB, and it can not be attached."
End If
End Forall
End If
Call Crprofile.Save(False, False)
|
对于不同的测试类型,不同的测试阶段,使用测试文件的方法需要也不会相同。例如对自动化测而言,只需要得到所有自动测试用例所对应的测试文件即可。也就是说自动化测设者对所有自动化测试脚本用的文件感兴趣,他们只需得到所有自动化测试脚本用的测试文件即可,不需要逐一去获取测试文件,在测试用例中去得到测试文件,为了方便下载测试文件,需要提供了批量下载测试文件的功能。部分代码如下:
清单 3. 批量下载
Dim ws As New NotesUIWorkspace
Dim filenames As Variant
filenames = ws.SaveFileDialog(True, "Select sample Files to import database",,"c:\")
If Isempty(filenames) Then
Msgbox "Please select files!", 48, "Sample Files"
Exit Sub
End If
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim rtitem As Variant
Set db = session.CurrentDatabase
Set dc = db.UnprocessedDocuments
If dc.Count = 0 Then
Else
Set doc = dc.GetFirstDocument
While Not doc Is Nothing
Set rtitem=doc.GetFirstItem("Attachment")
If rtitem.type=RICHTEXT Then
Forall o In rtitem.EmbeddedObjects
If o.Type=EMBED_ATTACHMENT Then
Call FolderExists(filenames(0), doc.Category(0))
Call o.ExtractFile(filenames(0) + "\" + doc.Category(0) + "\" + o.Source)
End If
End Forall
End If
Set doc = dc.GetNextDocument(doc)
Wend
End If
|
多种视图
上文中我们提到测试者在不同的阶段和不同的用户角色都有着不同的关注点,因此需要有不同的展现方式。Lotus Domino 数据库中有视图的功能,可以方便的对数据进行不同的展示,在本文介绍的测试文件管理数据库中同样使用了多个视图来展现测试文件。如一般一个测试人员负责一块产品功能,可能测试过程中一般只用到本人所创建的测试文件,这样通过 By Author,便可以按照用户创建者进行分类,从而方便的定位自己关注的测试文件。
图 7. 视图
管理者视图
数控的管理者可以对描述测试文件的信息进行定制,从而可以更好的应用于自己的项目。即对上文中介绍的如 Test Phase,OS,Application 等所对应的值进行定制。
在 Lotus Symphony 测试项目中,项目初期我们采用了 Lotus Test Case Database 作为和文件服务器来管理测试文件,之后测试文件数量达到了 2 万个以上,在测试执行过程中需要大量的时间去定位到测试用例所需要的测试文件,同时自动化测试者需要自己来收集和保存哪些文件是用于自动化测试的,需要耗费大量的时间和精力。因此我们开发了测试文件管理数据库来管理测试文件,同时和 Lotus Test Case DB 进行了集成,极大的提高了测试效率,方便了测试管理和执行。
本文结合 Lotus Symphony 测试项目中遇到的问题,介绍了一种基于 Lotus Domino 的测试文件管理方法,这种方法能和 Lotus Test Case Database 进行无缝整合,大大提高了测试的效率,节省对测试进行管理和执行的时间。
学习
讨论
- 加入 developerWorks 中文社区,developerWorks 社区是一个面向全球 IT 专业人员,可以提供博客、书签、wiki、群组、联系、共享和协作等社区功能的专业社交网络社区。
- 加入 IBM 软件下载与技术交流群组,参与在线交流。