川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

自动化测试实例二: 脚本开发(上)

作者:川石学院 日期:2021-12-08 13:45:33 点击数:

  一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“自动化测试实例(二): 脚本开发(上)

自动化测试实例二: 脚本开发(上)(图1)

  【脚本开发】

  完成测试用例后就可以开发测试脚本,一般包括自动化测试框架的开发和功能脚本的开发。在本节中不介绍如何开发自动化测试框架,有兴趣的读者可以参考《QTP 自动化测试与框架模型设计》一书中第 19 章和第 20 章的自动化测试框架的内容。本章介绍该实例中需要调用到的函数。

  (1)公用函数封装。

  在本实例中需要封装的函数主要包括:读取测试用例、输入每个测试用例的测试结果。

  通过获取单元格中数据的行数,可以确定测试用例文档中有多少条测试用例,代码如下:

  '*************************************************************'

  '函数/过程名称:GetExcelSheetRowsCount

  '函数/过程的目的:获取 Sheet 表中记录行数

  '假设:无

  '影响:无

  '输入:无

  '返回值:记录行数

  '创建者:黄文高

  '创建时间:2010/08/11

  '修改者:

  '修改原因:

  '修改时间:

  '*************************************************************'

  Function GetExcleSheetRowsCount(ExcelPath,SheetName)

  Set ExcelBook = CreateObject("Excel.Application")

  Set ExcelSheet = CreateObject("Excel.Sheet")

  Set myExcelBook = ExcelBook.WorkBooks.Open(ExcelPath)

  Set myExcelSheet = myExcelBook.WorkSheets(SheetName)

  GetExcleSheetRowsCount = myExcelSheet.UsedRange.Rows.Count

  ExcelBook.Quit

  Set ExcelSheet = Nothing

  Set ExcelBook = Nothing

  End Function

  读取单元格中的数据,即获得测试用例值,代码如下:

  '*************************************************************'

  '函数/过程名称:GetExcelCells

  '函数/过程的目的:读取 Excel 表中单元格的值

  '假设:无

  '影响:无

  '输入:无

  '返回值:Excel 表中单元格的值

  '创建者:黄文高

  '创建时间:2010/08/11

  '修改者:

  '修改原因:

  '修改时间:

  '*************************************************************'

  Function GetExcelCells(ExcelPath,SheetName,SheetColumn,SheetRow)

  Set ExcelBook = CreateObject("Excel.Application")

  Set ExcelSheet = CreateObject("Excel.Sheet")

  Set myExcelBook = ExcelBook.WorkBooks.Open(ExcelPath)

  Set myExcelSheet = myExcelBook.WorkSheets(SheetName)

  SheetValue = myExcelSheet.cells(SheetColumn,SheetRow).Value

  GetExcelCells = SheetValue

  ExcelBook.Quit

  Set ExcelSheet = Nothing

  Set ExcelBook = Nothing

  End Function

  在该实例中还需要记录每个测试用例执行的结果,封装的代码如下:

  '*************************************************************'

  '函数/过程名称:CreateHtmlLog

  '函数/过程的目的:创建 HTML 格式的日志文件,并写 Header

  '假设:无

  '影响:无

  '输入:无

  '返回值:无

  '创建者:黄文高

  '创建时间:2010/08/09

  '修改者:

  '修改原因:

  '修改时间:

  '*************************************************************'

  Public Sub CreateHtmlLog()

  Const ForReading = 1, ForWriting = 2, ForAppending = 8

  Dim fileSystemObj, fileSpec

  Dim currentTime

  currentDate = Date

  currentTime = Time

  testName = environment.Value("TestName")

  Set fileSystemObj = CreateObject("Scripting.FileSystemObject")

  fileSpec =TestPath&"测试记录\"&testName& ".html"

  Set logFile = fileSystemObj.OpenTextFile(fileSpec, ForAppending, False, True)

  logfile.writeline("")

  logfile.writeline("")

  logfile.writeline("")

  logfile.writeline("")

  logfile.writeline("")

  logfile.writeline("

  Test LogFile

  ")

  logfile.writeline("")

  logfile.writeline("")

  logfile.writeline("size='2'>TestCaseName")

  logfile.writeline("size='2'>TestCaseID")

  logfile.writeline("size='2'>TestResult")

  logfile.writeline("size='2'>TestTime")

  logfile.writeline("size='2'>ActualValue")

  logfile.writeline("size='2'>ExpectValue")

  logfile.writeline("

  ")

  logFile.Close

  Set logFile = Nothing

  End Sub

  '*************************************************************'

  '函数/过程名称:WriteHtml

  '函数/过程的目的:写 HTML 日志文件

  '假设:无

  '影响:无

  '输入:无

  '返回值:无

  '创建者:黄文高

  '创建时间:2010/08/09

  '修改者:

  '修改原因:

  '修改时间:

  '*************************************************************'

  Function WriteHtml(BusinessName,TestCaseID,TestResult,TestTime,ActualValue,ExpectValue)

  Const ForReading = 1, ForWriting = 2, ForAppending = 8

  Dim fileSystemObj, fileSpec

  Dim currentTime

  currentDate = Date

  currentTime = Time

  testName = environment.Value("TestName")

  Set fileSystemObj = CreateObject("Scripting.FileSystemObject")

  fileSpec =TestPath&"测试记录\"&testName& ".html"

  Set logFile = fileSystemObj.OpenTextFile(fileSpec, ForAppending, False, True)

  logfile.writeline("")

  logfile.writeline("")

  logfile.writeline("size='2'>"& BusinessName &"")

  logfile.writeline("size='2'>"& TestCaseID &"")

  if ucase(TestResult) = "Pass" then

  logfile.writeline("'#006000' face='Tahoma' size='2'>"& ucase(TestResult) &"")

  else

  logfile.writeline("'#CE0000' face='Tahoma' size='2'>"& ucase(TestResult) &"")

  end if

  logfile.writeline("size='2'>"& TestTime &"")

  logfile.writeline("size='2'>"& ActualValue &"")

  logfile.writeline("size='2'>"& ExpectValue &"")

  logfile.writeline("

  ")

  logfile.writeline("")

  logfile.writeline("")

  logFile.Close

  Set logFile = Nothing

  end function

  由于在本实例中需要连接数据库,检查数据库中的数据是否正确,所以将连接数据库的代码进行封装,代码如下:

  '*************************************************************'

  '函数/过程名称:ConnectDatabase

  '函数/过程的目的:连接数据库

  '假设:无

  '影响:无

  '输入:无

  '返回值:无

  '创建者:黄文高

  '创建时间:2010/09/09

  '修改者:

  '修改原因:

  '修改时间:

  '*************************************************************'

  Sub ConnectDatabase()

  StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\Program Files\HP\QuickTest

  Professional\samples\flight\app\flight32.mdb;Persist Security Info=False"

  Set Conn = CreateObject("Adodb.Connection")

  Set Rst = CreateObject("Adodb.RecordSet")

  Conn.Open StrConn

  End Sub

  (2)单一模式脚本开发。

  自动化测试脚本开发完成后,开始录制脚本,这个阶段主要是将自动化测试的需求转换为一个简单的脚本。

  1)录制登录过程的脚本如下:

  Dialog("Login").WinEdit("Agent Name:").Set "test"

  Dialog("Login").WinEdit("Password:").SetSecure "4f746e8c4a42371e29270aa8077835adfd4e3e6f"

  Dialog("Login").WinButton("OK").Click

  wait(5)

  Window("Flight Reservation").Close

  2)录制订票流程的脚本如下:

  Dialog("Login").WinEdit("Agent Name:").Set "test"

  Dialog("Login").WinEdit("Password:").SetSecure "4f7470899cb23413741ea878e508c7c39c26d007"

  Dialog("Login").WinButton("OK").Click

  wait(5)

  Window("Flight Reservation").ActiveX("MaskEdBox").Type "040412"

  Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"

  Window("Flight Reservation").WinComboBox("Fly To:").Select "Los Angeles"

  Window("Flight Reservation").WinButton("FLIGHT").Click

  Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select "20332 FRA 10:12 AM LAX

  05:23 PM AA $112.20"

  Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click

  Window("Flight Reservation").WinEdit("Name:").Set "arivn"

  Window("Flight Reservation").WinButton("Insert Order").Click

  Window("Flight Reservation").Close

  3)录制航班信息的脚本如下:

  Dialog("Login").WinEdit("Agent Name:").Set "test"

  Dialog("Login").WinEdit("Password:").SetSecure "4f7470899cb23413741ea878e508c7c39c26d007"

  Dialog("Login").WinButton("OK").Click

  wait(5)

  Window("Flight Reservation").ActiveX("MaskEdBox").Type "040412"

  Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"

  Window("Flight Reservation").WinComboBox("Fly To:").Select "Los Angeles"

  Window("Flight Reservation").WinButton("FLIGHT").Click

  Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select "20332 FRA 10:12 AM LAX

  05:23 PM AA $112.20"

  Window("Flight Reservation").Close

  4)录制查询订票信息的脚本如下:

  Dialog("Login").WinEdit("Agent Name:").Set "test"

  Dialog("Login").WinEdit("Password:").SetSecure "4f7474b213b5bb9f7e950286e72b5f0d7487449b"

  Dialog("Login").WinButton("OK").Click

  wait(5)

  Window("Flight Reservation").WinMenu("Menu").Select "File;Open Order..."

  Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Order No.").Set "ON"

  Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set "42"

  Window("Flight Reservation").Dialog("Open Order").WinButton("OK").Click

  Window("Flight Reservation").Close

  (3)脚本增强。

  录制好的单一模式脚本的功能很弱,只完成了一个简单的功能,不具备可扩展性,无法兼容不同的测试数据,所以需要对上面的脚本进行增强。在录制单一模式的脚本时,其实有一个功能是通用的,就是登录功能,每个操作的功能都需要先登录系统,所以可将一个正确登录的脚本封装成一个过程,这样可以节约脚本量,也便于维护脚本。在封装登录过程时,需要使用到描述性编程,封装的代码如下:

  Sub Login()

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

  Dialog("text:=Login").WinEdit("attached text:=Password:").SetSecure

  "4f746e8c4a42371e29270aa8077835adfd4e3e6f"

  Dialog("text:=Login").WinButton("text:=OK").Click

  wait(5)

  End Sub

  接着对登录的脚本进行增强操作,增强的原因是脚本需要能正确处理当输入用户名或密码出错的情况。主要需要处理的情况有:输入的用户名为空、输入的用户名少于 4 个字符、输入的密码为空、输入的密码少于 4 个字符。登录功能增强后的脚本如下:

  Dim errInfo '返回提示的错误信息

  Dialog("Login").WinEdit("Agent Name:").Set "test"

  Dialog("Login").WinEdit("Password:").SetSecure "4f772505bb7ff00c6ec281f9808222c2e89cf0ec"

  Dialog("Login").WinButton("OK").Click

  If Dialog("Login").Dialog("Flight Reservations").Exist Then

  errInfo = Dialog("text:=Login").Dialog("text:=Flight Reservations").Static("window id:=65535"). GetROProperty("text")

  Dialog("Login").Dialog("Flight Reservations").WinButton("确定").Click

  Dialog("Login").Close

  else

  wait(5)

  Window("Flight Reservation").Close

  End If

  订票流程脚本的增强主要需要处理订票日期未输入和输入错误的情况,订票流程功能增强后的脚本如下:

  Dim errinfo '返回提示的错误信息

  Dialog("Login").WinEdit("Agent Name:").Set "test"

  Dialog("Login").WinEdit("Password:").SetSecure "4f7729c18243dcb0a80aed533ae02ea81b074338"

  Dialog("Login").WinButton("OK").Click

  wait(5)

  Window("Flight Reservation").ActiveX("MaskEdBox").Type "121212"

  Window("Flight Reservation").WinComboBox("Fly From:").Select "San Francisco"

  If Window("Flight Reservation").Dialog("Flight Reservations").Exist Then

  errinfo = Window("regexpwndtitle:=Flight Reservation").Dialog("text:=Flight Reservations").

  Static("window id:=65535").GetROProperty("text")

  Window("Flight Reservation").Dialog("Flight Reservations").WinButton("确定").Click

  else

  Window("Flight Reservation").WinComboBox("Fly To:").Select "London"

  Window("Flight Reservation").WinButton("Flight").Click

  Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select "13800 SFO

  10:24 AM LON 12:54 PM AF $127.47"

  Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click

  Window("Flight Reservation").WinEdit("Name:").Set "arivn"

  Window("Flight Reservation").WinButton("Insert Order").Click

  End If

  Window("Flight Reservation").Close

  航班信息查询脚本的增强主要是需要检查当选择出发城市和到达城市后,显示出来的航班信息是否正确,脚本增强时需要获取所有航班信息。增强后的脚本如下:

  Dim flightinfo '显示所有航班信息

  Dialog("Login").WinEdit("Agent Name:").Set "test"

  Dialog("Login").WinEdit("Password:").SetSecure "4f7862cc49d3bfca65cfd26a9797bdbfab09733a"

  Dialog("Login").WinButton("OK").Click

  wait(5)

  Window("Flight Reservation").ActiveX("MaskEdBox").Type "121212"

  Window("Flight Reservation").WinComboBox("Fly From:").Select "Frankfurt"

  Window("Flight Reservation").WinComboBox("Fly To:").Select "London"

  Window("Flight Reservation").WinButton("Flight").Click

  flightInfo = Window("Flight Reservation").Dialog("Flights Table").WinList("From").GetROProperty("all items")

  Window("Flight Reservation").Dialog("Flights Table").WinButton("OK").Click

  Window("Flight Reservation").Close

  查询订票信息脚本增强主要是需要检查该航班号是否存在,如果航班号不存在,会弹出相应的对应信息;如果查询的订单号存在,就会显示出该订单的相关信息。增强后的脚本如下:

  Dialog("Login").WinEdit("Agent Name:").Set "test"

  Dialog("Login").WinEdit("Password:").SetSecure "4f78720180a456bfe5666600e64d62d0553bc374"

  Dialog("Login").WinButton("OK").Click

  wait(5)60

  Window("Flight Reservation").WinMenu("Menu").Select "File;Open Order..."

  Window("Flight Reservation").Dialog("Open Order").WinCheckBox("Order No.").Set "ON"

  Window("Flight Reservation").Dialog("Open Order").WinEdit("Edit").Set "55555"

  Window("Flight Reservation").Dialog("Open Order").WinButton("OK").Click

  If Window("Flight Reservation").Dialog("Open Order").Dialog("Flight Reservations").Exist Then

  errInfo = Window("regexpwndtitle:=Flight Reservation").Dialog("text:=Open Order").Dialog

  ("regexpwndtitle:=Flight Reservations").Static("window id:=65535").GetROProperty("text")

  Window("Flight Reservation").Dialog("Open Order").Dialog("Flight Reservations").WinButton("确定").Click

  Window("Flight Reservation").Dialog("Open Order").Dialog("Flight Reservations").Close

  End If

  Window("Flight Reservation").Close

今天关于“自动化测试实例二: 脚本开发(上)”就学习到这里了,每个工作日小编都会更新一个小知识,希望大家多多关注我们,一起来学习喔!


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2021-12-08 13:45:33
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2021-12-08 13:45:33
  • 国外的月亮也不一定比国内测试猿的年薪美~2021-12-08 13:45:33
  • 建筑工程专业朱同学成功转行为软件测试人!2021-12-08 13:45:33
  • 财务管理专业转行软件测试月薪甩会计几条街!2021-12-08 13:45:33
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2021-12-08 13:45:33
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2021-12-08 13:45:33
  • 文科生转行软件测试照样拿下高薪15K!2021-12-08 13:45:33
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2021-12-08 13:45:33
  • 毕业1年,迷茫的他最终选择转行软件测试2021-12-08 13:45:33