`

QTP自动化测试框架:第五章 主要方法介绍(框架核心)

阅读更多

 

1.测试入口,传递keywords文件及数据文件,所有的用例将以这里为入口

Function StartRun()

	   If Environment("RunWay")=UTFRunMethod Then 
	   	  Environment("DefinedActionIteration")=Environment("DefinedActionIteration")+1
	   	  Call ActionEntry (TestFileName,TestSheetName,TestDataFileName,TestDataRangeName)
	   'Environment("DefinedTestIteration")=Environment("DefinedTestIteration")+1 
          call WriteIniFile("InitialParameter","Environment('DefinedActionIteration')",Environment("DefinedActionIteration"),InitialFilePath)

	   End If
	
	 Call ActionEntry (TestFileName,TestSheetName,TestDataFileName,TestDataRangeName)
    

End Function

   解释:首先根据读取的配置config.xml文件中运行方式,如果是UTFRunMethod,则默认的循环次数为默认值加1,这里为什么要加1,是因为在读取运行初始参数时循环次数是0,现在开始进入测试,进入第一轮循环,所以要加1。

  在call writeinifile()部分即可看到这时候需要更新initialize.ini文件,以记录当前运行至第几轮循环,便于运行出现异常时,可以重新从上次运行失败脚本的下一个轮循环开始。

 

 

    2.下面正式进入utilityframework部分,首先会对传递过来的参数进行基本的校验,脚本文件及参数是否都存在。然后读取测试数据文件,测试数据文件决定了当前脚本循环的次数,所以注意一点, 这里的循环次数是由测试数据部分控制,而非QTP本身运行设置中的循环次数。

    

'FunctionName: ActionEntry 
'Descriptions:All Action file entry and data file entry, action file name or data file name 
'format like testdata.xls or /Module/submodule/testdata.xls,this function will convert it to 
'XXX/AutomationFramework/Test_Data/XX.XLS ()
'FunctionType: Framework Utility Common Functions

Function ActionEntry(TestFileName,TestSheetName,TestDataFileName,TestDataRangeName)
	     strTestFileName=FileNameCheck(TestFileName)
	     strTestTableName=FileNameCheck(TestSheetName)
	     strTestDataFileName=FileNameCheck(TestDataFileName)
	     strTestDataTableName=FileNamecheck(TestDataRangeName)
	     'TestId=Environment("DefinedTestName")
	     If strTestFileName="Fail" or strTestTableName="Fail" or strTestDataFileName="Fail" or strTestDataTableName="Fail" Then
	     	Reporter.ReportEvent micFail,"Function ActionEntry","Please check you input value,Filename check result:"&chr(10)&"strActionFileName="&strTestFileName&";"&chr(10)&"strActionSheetName="&strTestTableName&";"&chr(10)&"strTestDataFileName="&strTestDataFileName&";"&chr(10)&"TestDataRangeName="&strTestDataTableName&";"
	     	Exit Function
	     	Else
	     	strFullTestFilePath=FrameworkPath+"Test_Script\"+TestFileName
	     	strFullTestDataFileName=FrameworkPath+"Test_Data\"+TestDataFileName
	     	End if 
	     	
	     	TestDataQueryString="Select * from "&TestDataRangeName&" where Ucase(Execute)='YES'"
	     	set TestInterationsQuery=ExecuteQuery(strFullTestDataFileName,TestDataQueryString)
	     	TestInterationsCount=TestInterationsQuery.RecordCount
	     	Set TestInterationsQuery=nothing
	     	if Environment("DefinedTestIteration") =<  TestInterationsCount then
	     	For Interation = Environment("DefinedTestIteration") To TestInterationsCount
	     	    Environment("DefinedTestIteration")=Interation
	     	    Call EnterNode((Environment("DefinedTestName")+"_TestInteration_"+cstr(Environment("DefinedTestIteration"))),"TestInteration begin time :"+cstr(now))
	     	    Call AddTestDataToDictionary(strFullTestDataFileName,strTestDataTableName,Interation)
	     		Call BeginBusinessProcess(strFullTestFilePath,strTestTableName)
	     		Reporter.ReportEvent micDone,Environment("DefinedTestName")+"_TestInteration_"&Interation,"TestInteration end time : "+cstr(now)
	     		Call ExitNode
	     	Next
	     	End if
	     	'Call EndTest
	     	
End Function



'FunctionName:AddTestDataToDictionary
'Description:query test data file and add test data to dictionary
'FunctionType: Function Utilityes,referenced by BeginBusinessProcess
	
	
Function AddTestDataToDictionary(TestDataPath,TestDataQueryString,TestDataBookMark)
         TestDataDictionary.RemoveAll
	    Set TestDataRecordSet=ExecuteQuery(TestDataPath,TestDataQueryString)
	     AddTestDataToDictionary=TestDataRecordSet.RecordCount
	     If TestDataRecordSet.RecordCount>1 Then
         TestDataFieldsCount=TestDataRecordSet.Fields.Count
         TestDataRecordSet.MoveFirst
         TestDataRecordSet.Move TestDataBookMark-1
         For Index =1  To TestDataFieldsCount
             If Ucase(TestDataRecordSet.Fields(TestDataFieldsCount-1).Name)="EXECUTE" and Ucase(TestDataRecordSet.Fields(TestDataFieldsCount-1).Value)="NO" Then
             	TestDataRecordSet.Move 1
             End If
         	 TestDataDictionary.Add TestDataRecordSet.Fields(Index-1).Name,TestDataRecordSet.Fields(Index-1).Value
         Next    	
	     End If 
         Set TestDataRecordSet=Nothing
End Function


'FunctionName:FileNameCheck
'Descriptions:File name check to check if the input file name is empty and convert to full path
'FunctionType: Framework Utility functions,referenced by ActionEntry function

Function FileNameCheck(InputFileName)
	FileNameCheck="Fail"
	MyArry=split(InputFileName,"\")
	If InputFileName=""  Then
		Exit function
	elseif  Ubound(MyArry)>0 then
	   FileNameCheck=MyArry(Ubound(MyArry))
	else
	   FileNameCheck=InputFileName
	End if

End Function

 
  解释:首先判断传递过来的脚本文件及数据文件是否都存在,如果这里验证不过,则记录失败日志,直接停止运行

            第二步是读取测试数据文件,根据数据文件中的标记,读取本次要用到的测试数据

            第三步是控制测试循环次数for 循环,同时更新循环次数

            第四步是非常重要的需要创建节点,这里的报告分为两种形势, 一种是QTP自带的,一种是纯EXCEL,的这部分需要对QTP自带的报告进行改写,因为之前QTP每个脚本从action进入后会自动创建节点,            现在我们相当于所以有的节点都从ACTION进入运行,所以想要生成按不同的循环次数及步骤生成报告就需要在每一个循环开始的时候进入节点,循环结束后exit node。这样每一个步骤才能在循环中,记录的报告才清晰。否则会很混乱。。。切记切记

         最后一个方法是被上面调用 的,即把测试数据加入数据字典,然后执行的时候即可根据变量名称及循环次数定位要输入 的测试数据,这里测试数据可以 随便加减速,完全不会因为循环次数变化或者脚本调整即可自动添加。唯一 需要注意的是测试数据在EXCEL中的表格是需要命名range或者工作表名称与测试脚本对应的。

          

 

 

    3.下面的我就略过,大家可以看英文注释为即明白,因为不是此次框架的重点部分。主要功能是根据测试脚本 中的关键字及对象名称来拼接成测试脚本。 

     如在原来的QTP中   window("ww").textbox("ww").set     这个地方需要把这一部分拆成不同方法组成 的内容字符串,再通过eval方法来执行字符串。而这里也是重点中的重点。其中涉及到脚本 文件的转换,对象库的转换。

       

'FunctionName:BeginBusinessProcess
'Descriptions:This function handle the base check for the business process table
'FunctionType: Framework Utility functions,referenced by ActionEntry function
Function BeginBusinessProcess(BusinessProcessFileFilePath,BusinessProcessTableName)

		    Datatable.ImportSheet BusinessProcessFileFilePath,BusinessProcessTableName,ActionName
	     	BusinessProcessRowsCount=Datatable.GetSheet(ActionName).GetRowCount()
	     	If BusinessProcessRowsCount=0 Then
	     		Exit function
	     	End If
    	    
	     	For BusinessProcessBaseIndicator = 1 To BusinessProcessRowsCount
	     	    Datatable.GetSheet(ActionName).SetCurrentRow(BusinessProcessBaseIndicator)
	     	    strAutoID=Trim(Datatable.RawValue("AUTO_ID",ActionName))
	     		strKeyWords=Trim(Datatable.RawValue("FUNCTION_NAME",ActionName))
	     		strObjectName=Trim(Datatable.RawValue("TEST_OBJECT_NAME",ActionName))
	     		strParameter=Trim(Datatable.RawValue("PARAMETER","Entry"))
	     		strRepositoriesName=Trim(Datatable.RawValue("REPOSITORIES_NAME",ActionName))
	     		strExecute=Ucase(Trim(Datatable.RawValue("EXECUTE",ActionName)))
	     		
	     		If StrExecute="NO" or strExecute="" Then
	     			'Exit for
	     			BusinessProcessBaseIndicator=BusinessProcessBaseIndicator+1
	     		   else
               If strAutoID <> "" Then
               	  Environment("DefinedTestName")=strAutoID
               End If
               
               If strKeyWords="" Then
	     			Reporter.ReportEvent micFail,"Function ActionEntry","Business_Function is null"
	     			Exit function
'	     			ElseIf strKeyWords="End_Test" or strKeyWords="End_Function" Then
'	     			Reporter.ReportEvent micDone,"Function ActionEntry",strKeyWords&"executed successfully"
'	     			Exit function                  
	     		End If
               End if 
                
                 If left(strKeyWords,3)="fn_" Then
                 Call ExecuteBusinessActions(strKeyWords)
                 else                 
                 Call ExecuteActionStpes(strKeyWords,strObjectName,strParameter,strRepositoriesName)
                 End if 
                 
                 ' Datatable.GetSheet(ActionName).SetNextRow
	     	Next
	     	Datatable.GetSheet(ActionName).SetCurrentRow(1)
End Function


 

 4.执行脚本,这里分两种情况,一种是fn_前缀,代表要运行的是function。即由一系列步骤组成 的方法,比如我们在测试某一个功能点的时候,是需要登录,而登录需要输入 用户密码,再点登录,这个时候可以 把登录单独作为 一个测试方法,并命名。在其它地方放在步骤前面,当执行到指定行时会进行判断,根据fn_方法名去查对应的business_configuration文件。

参见下图

 

 

 

'FunctionName: ExecuteBusinessActions
'Description: Execute actions from businessprocess file
'FunctionType:Framework core partion, referenced by Utility Function library,ActionEntry function

Function ExecuteBusinessActions(strKeyWords)
	        
	        QueryObjectFilePath=BusinessConfigurationFilePath
	        QueryBusinessProcessString="Select * from [BusinessFunctionReference$] where FUNCTION_NAME="&strKeyWords
	        ActionFileRecord=ExecuteQuery(QueryObjectFilePath,QueryBusinessProcessString)
	        ActionsFilePath=ActionFileRecord("FUNCTION_PATH")
	        ActionsSheetName=ActionFileRecord("fUNCTION_SHEET_NAME")
	        ActionTestDataFileName=ActionFileRecord("TEST_DATA_FILE_NAME")   'Reserved decided by action run mode, current set to business run mode(Action interation not compatabile with test interation)
	        ActionTestDataTableName=ActionFileRecord("TEST_DATA_TABLE_NAME")   'Reserved filed, current script action data name same as action name
	        strFullActionTestDataPath=FrameworkPath+"Test_Data"+ActionTestDataFileName
	        
	        Set ActionFileRecord=Nothing
	        QueryFullActionsFilePath=FrameworkPath+"Test_Script\"+ActionsFilePath
	        QueryActionsFileString="Select * from ["&ActionsSheetName&"$]"
	        Set ActonsFileRecordSet=ExecuteQuery(QueryFullActionsFilePath,QueryActionsFileString)
	            ActionsFileRecordSet.MoveFirst
	            ActionsFileRecordSet.Filter="FUNCTION_NAME='"&strKeyWords&"'"
	            BusinessProcessBaseIndicator=ActionsFileRecordSet.Bookmark
	            ActionsFileRecordSet.Filter=""
	            BusinessFileRowsCount=ActionFileRecordSet.count
	        Set ActonsFileRecordSet=Nothing             
               Datatable.ImportSheet QueryFullActionsFilePath,ActionsSheetName,strKeyWords
               Datatable.GetSheet(strKeyWords).SetCurrentRow(BusinessProcessBaseIndicator)
               
	     	ActionDataQueryString="Select * from "&Environment("DefinedActionName")&" where Ucase(Execute)='YES'"
	     	ActionInterationsCount=AddTestDataToDictionary(strFullActionTestDataPath,ActionDataQueryString,1)
	     If ActionInterationsCount>0 and Environment("DefinedActionIteration") < ActionInterationsCount Then
	     		
	     	For ActionInteration = Environment("DefinedActionIteration") To ActionInterationsCount
	     	    Environment("DefinedActionIteration")=ActionInteration
	     	    Call EnterNode("ActionInteration_"+Cstr(Environment("DefinedActionIteration")),"ActionInteration_"+Cstr(Environment("DefinedActionIteration"))+" begin time : "+cstr(now))
	     		Call AddTestDataToDictionary(strFullTestDataFileName,ActionDataQueryString,ActionInteration)
	     		Call BeginBusinessProcess(strFullTestFilePath,strTestTableName)
	     		Reporter.ReportEvent micDone,"ActionInteration : "&ActionInteration,"ActionInteration end time : "+cstr(now)
	     		Call EnterNode
	     	   For StartRow=BusinessProcessBaseIndicator To BusinessFileRowsCount 
               strKeyWords=Trim(Datatable.RawValue("FUNCTION_NAME",strKeyWords))
               strObject=Trim(Datatable.RawValue("OBJECT_NAME",strKeyWords))
               strParameter=Trim(Datatable.RawValue("PARAMETER",strKeyWords))
               strRepositoriesName=Trim(Datatable.RawValue("REPOSITORIES_NAME",strKeyWords))
               strExecute=Ucase(Trim(Datatable.RawValue("EXECUTE",strKeyWords))) 
               If strExecute="YES" and strKeyWords<>"END_FUNCTION" and strKeyWords<>"END_TEST" Then
               
               	call ExecuteActionStpes(strKeyWords,strObject,strParameter,strRepositoriesName)
               	else
               	Reporter.ReportEvent micDone,ExecuteBusinessActions,"This step skipped as the keywords is END_FUNCTION or END_TEST" 
               	
               	Exit for
               End If 
               
               Next   		
	     	Next
     	
	     	Else
	     	
	     	For StartRow=BusinessProcessBaseIndicator To BusinessFileRowsCount 
               strKeyWords=Trim(Datatable.RawValue("FUNCTION_NAME",strKeyWords))
               strObject=Trim(Datatable.RawValue("OBJECT_NAME",strKeyWords))
               strParameter=Trim(Datatable.RawValue("PARAMETER",strKeyWords))
               strRepositoriesName=Trim(Datatable.RawValue("REPOSITORIES_NAME",strKeyWords))
               strExecute=Ucase(Trim(Datatable.RawValue("EXECUTE",strKeyWords))) 
               If strExecute="YES" and strKeyWords<>"END_FUNCTION" and strKeyWords<>"END_TEST" Then    
               	call ExecuteActionStpes(strKeyWords,strObject,strParameter,strRepositoriesName)
               	else
               	Reporter.ReportEvent micDone,ExecuteBusinessActions,"This step skipped as the keywords is END_FUNCTION or END_TEST" 
               	Exit for
               End If 
	     	 Next 
           End If   
             
              
End Function

'FunctionName: ExecuteActionSteps
'Description: Execute all actions from this function
'FunctionType:Framework core partion, referenced by Utility Function library,ActionEntry function

Function ExecuteActionStpes(strKeyWords,strObjectName,strParameter,strRepositoriesName)
               If strKeyWords="" Then
	     			Reporter.ReportEvent micFail,"Function ActionEntry","Business_Function is null"
	     			Exit function
	     		End If
	     		Environment("DefinedActionName")=strKeyWords
	           If strRepositoriesName <> "" Then
               	  LoadRepositories RepositoriesName
               End If
               


               If strObjectName <>"" Then
                  If ucase(left(strObjectName,4))="DSC_" Then
                  strObject=DespritionObject(strObjectName)
                  else
               	  strObject=BuildObject(strObjectName)
               	  
                  End if
               
                  If strObject="" OR strObject="Not Found" Then
               	  Reporter.ReportEvent micFail,"ObjectString:"+strObjectName,"Build object failed,please check your entry or object is described correctly"
               	  Exit function
               	  End If
               	  
               	  
               	  If strParameter = ""  Then
               	     Eval(Trim(strKeyWords)+"("+strObject+")")       	  	 
               	  	 else
               	  	 TestParameter=ReOrganizeParameter(strParameter)
               	  	 Eval(Trim(strKeyWords)+"("+strObject+","+TestParameter+")")
               	  End If
               	  
                             
              Else
              
              If strObjectName="" and strParameter="" Then
              	 Eval(Trim(strKeyWords))
              else If strObjectName="" Then 
                 TestParameter=ReOrganizeParameter(strParameter)
              	 Eval(Trim(strKeyWords)+"("+TestParameter+")") 
              End If          
             End If

             End If 
              
End Function

 5.以下部分是执行查询部分,通过ado方式操作EXCEL文件,注意这里读取EXCEL数据共用了两种方式。作为公共的方法,可在多个地方被调用。

     a.直接导入QTP的table

     b.ado读取

    写入方法也分两种

  a.借助以下方法直接insert。

  b.需要打开EXCEL进行写,完全依赖于excel对象。

'FunctionName:ExecuteQuery
'Description: execute sql query from this action.
'FunctionType:Commmon functions referenced by multiple functions.
	
	
Function ExecuteQuery(QueryObjectFilePath,QueryString)
    Const AdUseClient=3
    Set ObjectConnection=CreateObject("ADODB.Connection")
	Set ObjectRecordSet=CreateObject("ADODB.RecordSet")
	ObjectConnection.ConnectionString="Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"&"DBQ="&QueryObjectFilePath&";ReadOnly=False"
	ObjectConnection.Open  
	ObjectRecordSet.CursorLocation = adUseClient
	ObjectRecordSet.Open QueryString,ObjectConnection,3,3
	
	Set ExecuteQuery=ObjectRecordSet      
	Set ObjectConnection=Nothing
	Set ObjectRecordSet=Nothing
End Function

 

    6.生成测试报告 文件,EXCEL格式

  

'FunctionName:GenerateReport 
'Description: insert action execute status to an excel file to generate a lite report
'FunctionName: Referenced by all action functions, core function
Function GenerateReport(ActionName,Status,ReportDetails,ImageFilePath) 
        ReportFilePath=Environment("DefinedReportFilePath")
        ReportSheetName=cstr(Environment("DefinedTestName"))+"_"+cstr(Environment("DefinedTestIteration"))
        SelectString="select * from "+" ["+ReportSheetName+"$]"
	    Set ReportedRow=ExecuteQuery(ReportFilePath,SelectString)
	    ReportedRowNum=ReportedRow.Recordcount
	    Set ReportedRow=Nothing
	    
	InsertString="Insert into "+"["+ReportSheetName+"$](TestName,ActionName,ExecuteStatus,ExecuteDetails,ImageFilePath,ExecuteTime) Values('"+Environment("DefinedTestName")+"','"+Environment("DefinedActionName")+"','"+Status+"','"+ReportDetails+"','"+ImageFilePath+"','"+cstr(now)+"')"
	'InsertString="Insert into "+"["+cstr(Environment("DefinedActionIteration"))+"$]"+"(TestName,ActionName) "+ "Values("+Environment("DefinedTestName")+","+Environment("DefinedActionName")+")"
    
    Const AdUseClient=3
    Set ObjectConnection=CreateObject("ADODB.Connection")
	Set ObjectRecordSet=CreateObject("ADODB.RecordSet")
	ObjectConnection.ConnectionString="Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};"&"DBQ="&ReportFilePath&";ReadOnly=False"
	ObjectConnection.Open  
	ObjectRecordSet.CursorLocation = adUseClient
	ObjectRecordSet.Open SelectString,ObjectConnection,3,3
	If Not ObjectRecordSet.EOF Then
	   ObjectRecordSet.MoveLast
	End If
	
'    ObjectRecordSet.execute InsertString
    ObjectRecordSet.Close
	ObjectRecordSet.Open InsertString,ObjectConnection,3,3
'	ObjectRecordSet.Update
	

	Set ObjectConnection=Nothing
	Set ObjectRecordSet=Nothing   
	      

	   
End Function

'FunctionName:ReOrganizeParameter
'Description: organizeparameter "mercury"|Test|ENV_TEST as "Mercury",Test,Env_vironment and connect with function name to run corresponding functions
'FunctionType:Commmon functions referenced by ExecuteActionStpes,core functions



'FunctionName:GenerateReportFile
'Description:Framewrok core functions ,mainly to generate a excel report file 
'ParameterInput:None
'FunctionType:Framewrok Utility Functions and referenced by start_test
'


Sub GenerateReportFile()
         CurrentDate=year(Date)&month(date)&day(date)
         CurrentTime=year(Date)&month(date)&day(date)&hour(now)&minute(now)&second(now)
	     ReportName=cstr(Environment("DefinedTestName"))+"_Report.xlsx"
	     TestReportPath=Environment("FrameworkPath")+"Test_Report"
	     ReportPath=Environment("FrameworkPath")+"Test_Report\"+CurrentDate+"\"+Environment("DefinedTestName")
         ReportFilePath=ReportPath+"\"+ReportName
         Environment("DefinedReportFilePath")=ReportFilePath

         
         set  ExcelObject=CreateObject("Excel.Application")
         
               If Environment("RunMode")="DebugRunMode" and DirectoryOperation.Exists(ReportPath)="True"  Then
                  DirectoryOperation.Delete ReportPath,True   'debug run mode delete all files in subfolder
               	  DirectoryOperation.CreateDirectory(ReportPath)
               End If

         
       
         If FileOperation.Exists(ReportFilePath)="False" Then
            If DirectoryOperation.Exists(ReportPath)="False" Then
               DirectoryOperation.CreateDirectory(ReportPath)
            End If        	  
               	   ExcelObject.Workbooks.Add
                   ExcelObject.ActiveSheet.Name=cstr(Environment("DefinedTestName"))+"_"+cstr(Environment("DefinedTestIteration"))
                   With ExcelObject.Sheets(cstr(Environment("DefinedTestName"))+"_"+cstr(Environment("DefinedTestIteration")))      
                   .Range("A1")="TestName"
                   .Range("B1")="ActionName"
                   .Range("C1")="ExecuteStatus"
                   .Range("D1")="ExecuteDetails"
                   .Range("E1")="ImageFilePath"
                   .Range("F1")="ExecuteTime"  
                  End With                   
	               ExcelObject.ActiveWorkbook.SaveAs ReportFilePath
            End If

	      ExcelObject.Workbooks.Open(ReportFilePath)
	     

	      
     For i = 1 To ExcelObject.Worksheets.Count 
     	 If ExcelObject.Worksheets(i).name=cstr(Environment("DefinedTestName"))+"_"+cstr(Environment("DefinedTestIteration")) Then
     	 	SheetFound=True
     	 	Exit for
     	 Else
     	    SheetFound=False
     	 End If
     Next
     
        If SheetFound=False Then
          ExcelObject.Sheets.Add.Name = cstr(Environment("DefinedTestName"))+"_"+cstr(Environment("DefinedTestIteration"))
          With ExcelObject.Sheets(cstr(Environment("DefinedTestName"))+"_"+cstr(Environment("DefinedTestIteration")))
          .Range("A1")="TestName"
          .Range("B1")="ActionName"
          .Range("C1")="ExecuteStatus"
          .Range("D1")="ExecuteDetails"
          .Range("E1")="ImageFilePath"
          .Range("F1")="ExecuteTime"
          End With
          ExcelObject.ActiveWorkbook.Save
        End If
        
        ExcelObject.Workbooks.Close
        ExcelObject.Application.Quit
        ExcelObject.Quit
        Set ExcelObject=Nothing 
	
End Sub

 7.读写INI文件,至于 为什么 把这一部分放核心功能,而不是一开始action部分,一个原因是可能会在其它地方调用 ,另外 一个是因为QTP中不同文件中传递参数时除了方法外,环境变量外,其它的并不能直接以变量形式调用 ,所以需要放在框架核心部分。具体引用dll部分,需要参照第四章内容,至此,基本的就到这里,对于工作量最大的一部分,主要 是如何做到支持任何平台,包括 BS.CS或其它语言的。将会在下一章节介绍。

Function ReadIniFile(SectionName,KeyName,InitialFilePath)
       
	     ReadIniFile=Extern.GetPrivateProfileInt(SectionName,KeyName,1000,InitialFilePath)
         '10000 just use to distinguish an exception when required key or section not found.
         
	     If CLng(ReadIniFile)=1000 Then  
	     	Reporter.ReportEvent micFail,"ReadIniFile","KeyName : "+KeyName + "in Section "+SectionName+"in fILE: "+InitialFilePath+"Not Found"
	     	Msgbox "Section or KeyName not found"
	     	ExitAction()
	     End If
End Function

Function WriteIniFile(SectionName,KeyName,KeyVlaue,InitialPath)
	     Extern.WritePrivateProfileString SectionName,KeyName,KeyVlaue,InitialPath
End Function

 

     

  • 大小: 11.4 KB
0
0
分享到:
评论

相关推荐

    搜集多份QTP 自动化测试框架(源码、说明)

    压缩包中的"project"和"自动化框架开发"可能包含了具体的项目实践和框架实现,而"RelevantCodes"可能是一些相关代码示例,可以帮助学习者深入理解QTP自动化测试的实现细节。"SAFFRON框架"则可能是一个具体的框架实例...

    QTP自动化轻量级测试框架

    QTP自动化轻量级测试框架则是基于QTP构建的一种简化版测试架构,旨在提高测试效率,降低维护成本,同时保持测试的灵活性和可扩展性。 1. **测试数据与测试脚本分离**: 测试数据与测试脚本分离是该框架的核心特点...

    QTP资料(QTP自动化测试实践.pdf+QTP自动化测试进阶.pdf)

    本压缩包包含了两份珍贵的资源:《QTP自动化测试实践.pdf》和《QTP自动化测试进阶.pdf》,它们分别针对QTP的基础运用和高级技巧进行了深入讲解,对于理解和掌握QTP自动化测试具有极大的帮助。 《QTP自动化测试实践....

    精通QTP:自动化测试技术领航(余杰 赵旭斌) [高清扫描版]

    《精通QTP:自动化测试技术领航》(余杰 赵旭斌) [高清扫描版] 《精通QTP:自动化测试技术...第5章和第6章讲解了设计模式和自动化测试框架的内容,这两章内容是QTP测试技术精华的浓缩,如QTP设计模式和自动化测试框架。

    第30讲-QTP自动化测试总结

    在本讲中,我们将对QTP(QuickTest Professional)自动化测试进行深入的总结,这是...视频资源"第30讲-QTP自动化测试视频总结【QTP自动化测试视频.flv】"应包含对这些概念的详细解释和实例演示,建议观看以加深理解。

    精通qtp自动化测试技术领航

    第5章和第6章讲解了设计模式和自动化测试框架的内容,这两章内容是QTP测试技术精华的浓缩,如QTP设计模式和自动化测试框架。 另外,《精通QTP:自动化测试技术领航》在第1章至第4章精心设置了习题,帮助读者巩固已...

    自动化测试框架基础指南.pdf

    线性自动化框架是自动化测试的第一种类型,使用一种顺序执行测试用例的方式进行测试。线性自动化框架简单易用,但不能满足复杂的测试需求。 八、自动化框架在测试中的应用 自动化框架在测试中扮演着非常重要的角色...

    1自动化测试的实践-应用QTP测试框架.ppt

    自动化测试是现代软件开发过程中...综上所述,QTP测试框架的实践涉及自动化测试的规划、设计、实现和管理等多个方面,需要深入理解业务逻辑,熟练掌握测试工具,以及妥善解决技术难点,以实现高效、可靠的自动化测试。

    QTP自动化框架脚本示例

    在“QTP自动化框架脚本示例”中,我们可以通过一系列的VBS(Visual Basic Scripting Edition)脚本来理解并学习如何构建一个有效的自动化测试框架。 1. **Control.vbs** 和 **ObjectControl.vbs**: 这两个文件...

    自动化测试培训

    - **利用VisualStudio开发QTP自动化测试脚本**:介绍如何使用VisualStudio开发平台编写高质量的QTP测试脚本。 - **QTPWebExtensibility插件扩展开发**:简要介绍QTPWebExtensibility插件的功能及其在Web应用自动化...

    QTP.rar_QTP 安装_QTP支持的系统_QTP的测试_qtp

    **QTP(QuickTest Professional)**,现在被称为UFT(Unified Functional Testing),是HP公司推出的一款功能强大的自动化测试工具,尤其适用于企业级的软件功能测试。QTP以其易用性、自动化能力以及对多种应用程序...

    自动化测试工具QTP10.0

    ### 自动化测试工具QTP10.0 #### 一、概述 自动化测试是现代软件开发流程中不可或缺的一部分,它能显著提高测试效率并减少人为错误。在众多自动化测试工具中,QTP(Quick Test Professional)是一款备受青睐的选择...

    QTP学习历程--从工具使用到框架思想.doc

    本文主要针对那些希望学习或正在学习自动化测试的朋友,通过QTP自带的flight示例,逐步解析从工具操作到自动化框架构建的全过程。 首先,了解自动化测试的基础概念至关重要。自动化测试是指利用专门的软件工具,对...

    QTP汉化工具包

    - 自动化框架构建:QTP支持自定义函数库和测试框架,便于团队协作和维护。 总之,QTP汉化工具包是为了提升中文用户的使用体验,使其能够更高效地进行自动化测试。了解QTP的基本概念、工作原理以及如何正确使用汉化...

    模块自动化测试详细设计

    - **《自动化测试解决方案》**:概述了自动化测试的整体框架和技术路线。 - **《采购通自动化测试总体设计》**:提供了更为具体的自动化测试策略和技术实现细节。 - **《采购通功能设计说明书》**:详细描述了被测...

    QTP_QTP_EMOS

    它与QTP的结合,可以构建出一个强大的自动化测试框架,提供全面的测试生命周期管理,包括测试计划、用例设计、执行、结果分析等。 【QTP EMOS框架】的核心特性: 1. **集成化**:EMOS与QTP的集成使得测试脚本的...

    QTP脚本设计与框架有关的问题解答.pdf

    1. 学习QTP自动化测试的起点: 学习QTP或其他自动化测试工具时,首先需要理解自动化测试的本质,即录制功能并不足够,需要深入理解自动化测试的基础知识。这包括: - 阅读工具的官方文档以获取基础信息。 - 熟悉...

    自动化软件测试.pdf

    9. **软件自动化测试工具**:Quick Test Professional(QTP)是功能强大的UI自动化测试工具,NUnit是.NET环境下的单元测试框架,而LoadRunner则用于性能测试和负载测试。 **第三篇 项目案例篇** 10. **自动化测试...

Global site tag (gtag.js) - Google Analytics