草庐IT

使用QTP软件对飞机票订票系统进行测试

牙吃多了 2023-04-18 原文
  • 实验步骤

1.QTP测试技术简介

       QTPQuick Test Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的自动化测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试哪些功能、操作步骤、输入数据和期望的输出数据等。

1.1基本功能

      HP QuickTest Professional 提供符合所有主要应用软件环境的功能测试回归测试的自动化。采用关键字驱动的理念以简化测试用例的创建和维护。它让用户可以直接录制屏幕上的操作流程,自动生成功能测试或者回归测试用例。专业的测试者也可以通过提供的内置脚本和调试环境来取得对测试和对象属性的完全控制。如图(1-1

 

图(1-1

2.功能测试

2.1.1登录功能

 

    用户需要输入用户名应大于或者等于四个字符,输入密码为“mercury”即可登录该飞机订票系统。

针对登录模块的输入条件:用户名和密码,有以下几种情况:

1. 当用户什么也没输入,直接点OK按钮,是否提示请输入用户名;

2. 当用户输入正确的用户名,没输入密码,直接点击OK按钮,是否提示请输入密码;

3. 对密码进行验证看是否设置输入密码的长度;

4. 当输入正确的用户名和密码时,点击OK按钮是否进入操作界面;

        根据上面的分析,设计了如下表(2-1-2)的测试用例:

    因此根据以上的分析,设计下列测试用例测试系统功能。

  ID

      输入条件

预期输出

    实际输出

  用户名

   密码

001

提示:输入用户名

提示:输入用户名

002

Zhang

提示:输入用户名

提示:输入用户名

003

mercury

提示:输入用户名

提示:输入用户名

004

zha

提示:用户名长度少于4位

提示:用户名长度少于4位

005

zha

Baihao

提示:用户名长度少于4位

提示:用户名长度少于4位

006

zha

Mercury

提示:用户名长度少于4位

提示:用户名长度少于4位

007

Mercury

提示:输入密码

提示:输入密码

008

Mercury

Zhang

提示:密码错误

提示:密码错误

009

Mercury

Mercury

登录成功

登录成功

010

zhang

Mercury

登录成功

登录成功

1.2.2录制与测试过程

    第一步:用QTP自动打开Flight Reservation系统的登陆界面,输入用户名和密码,确定当前的操作,将订票系统打开,登陆界面如图(2-1-1);

 

 

图(2-1-1)

    第二步:在QTP主界面中单击“Record”,在登陆界面的文本框中,输入正确的用户名和密码,单击“OK”按钮,进入飞机订票系统界面。在QTP主界面,单击“Stop”按钮,结束当前的录制,如图(2-1-2)

(2-1-2)

 

       

录制的脚本为:

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

Dialog("Login").WinEdit("Password:").Set "636b53c7a146a382b12b9daa065cd86181"

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

Window("Flight Reservation").Activate

Window("Flight Reservation").Close

第三步:在Expert View中更改Keyword View中,将密码更改为明文,同时在用户名字位置文本中添加检查点,脚本如下:

1: Dialoa(Loain").WinEdit("Agent Name:".Check CheckPoint("Agent Name:")

2: Dialog("Login").WinEdit("Agent Nam Set'zhang"

3: Dialog("Login") WinEdit("Password.SetSecure "636b5cb878f8a2a38c53d9f5389f0b0374254ac

4: Dialoa("Loain").WinButton("OK").Click

5: Window("Flight Reservation").Close

图(2-1-3)

 

2.2 订票测试

2.2.1 订票功能

订票实例的前提是登录订票系统的成功,该实例是在订票系统中进行订票操作:输入航班日期、选择起飞地、选择目的地、选择航班、输入顾客姓名、输入票的张数、选择航班级别、单击订票按钮,完成订票功能。

2.2.2 测试用例设计

测试编号

输入

预期结果

实际结果

001

选择Fly From中的地点,弹出警告

 

002

13/01/22

月份不合法,弹出警告信息

003

10/36/22

Day不合法,弹出警告信息

 

004

10/12/20

时间没有在当天的后面,弹出警告

 

005

11/07/22

正确

006

Fly From 为空

Fly To不可选,弹出警告

Fly From和Fly To 有一个为空,或都为空

航班按钮不可选择

008

Fly From选择Paris

正确

009

Fly To 选择London

Flights按钮可用

成功

010

单机选择10583航班

在窗口显示航班信息

出发点为Paris,目的地为London,选择10583航班

011

在Fly From中改选  LosAngeles

清空航班信息,Flights按钮不可用

Flights按钮不可用

012

输入名字、票数和等级:yilian,1,Business

Price:$346.94

Total:$346.94

成功

 

2.2.3录制与测试过程

第一步:录制脚本,选择“Record”如图(2-2-1);

 

(2-2-1)

第二步:在Agent Nnamesh输入名字,Password中都输入Mercury点击“OK”按钮,如图(2-2-2);

 

图(2-2-2)

第三步:输入飞机的时间、出发地、目的地,然后选择“Flights”选择航班,如图(2-2-3);

 

图(2-2-3)

第四步:选择要乘坐飞机的航班,然后点击确定,如图(2-2-4);

 

图(2-2-4)

第五步:输入顾客的姓名、票数、票的类型、点击“insert”,如图(2-2-5);

图(2-2-5)

 

第六步:点击“Stop”结束录制过程,脚本录制成功,如图(2-2-6);

图(2-2-6)

 

第七步:在容易出错的点上右击鼠标,选择“Insert Standard Checkpoint”,如图(2-2-7);

 

图(2-2-7)

第八步:点击“确定”,如图(2-2-8);

 

图(2-2-8)

脚本(截图),图(2-2-9);

 

图(2-2-9)

2.3传真订单

2.3.1传真订单实例

传真订单实例是传真订票成功的订单,在传真订单中,需要输入传真号、确定是否输入签名等。选择打开存在的订单,传真订单是设置前面是汉字“田”,预览传真,开始传真。

2.3.2录制与测试过程

打开飞机订票系统,在系统的File中打开Open Order,会出现Open Order对话框,有顾客姓名、日期、航班等选项,如下图(2-3-1);

 

图(2-3-1)

输入顾客的姓名,即可查询到顾客订购的机票信息,如下图(2-3-2);

 

图(2-3-2)

打开File下的Fax Order,可以生成传真,填写Fax Number,输入086-010-1234,同时设置签名为“田”字。此时,录制签名之前,需要改变录制模式,录制模式修改为“Analog Recording”,修改后再录制签名,签名录制完后,再切换到“Recording”模式,发送传真,完成录制,如下图(2-3-3);

 

图(2-3-3)

   在传单的录制过程中,还要添加对象,添加Flight Reservation对象,飞机航班的Flights Table对象,如下图(2-3-4);

 

图(2-3-4)

添加对象完成后,选择“All Object Types”,如下图(2-3-5);

 

图(2-3-5)

在“All Object Respositories“的对话框里,可以看到添加进去的所有对象,如下图(2-3-6);

 

图(2-3-6)

2.4删除订单

2.4.1删除订单实例

飞机订票成功后,也可以对订单进行删除。在Flight Reservation中提前订购好的订单挑出来,用QTP录制删除订单的过程,且欲删除订单必须确认订单有效,根据用户名查询订单,删除订单。

2.4.2录制与测试过程

首先打开飞机订票系统,同时打开QTP进行录制,在File中打开Open Order,若输入顾客的姓名正确,此时会跳出顾客飞机航班的订票情况,并添加到对象库中,如下图(2-4-1);

 

图(2-4-1)

在File中打开Open Order,在Customer Name中输入一个错误的顾客姓名,此时会弹出一个顾客姓名错误的提示框,在QTP中添加此对象,如下图(2-4-2);

 

图(2-4-2)

最后添加确认删除的对话框,如下图(2-4-4);

 

图(2-4-4)

在所有的对象都添加到对象库中,在All Object Repositories会显示所有的对象,如图(2-4-5);

 

图(2-4-5)

  • 实验结果及其分析

1订单测试结果

通过运用QTP对飞机订票系统的测试,将已设计好的测试用例添加到QTP中,通过脚本的参数化设置,对测试用例进行自动化循环测试,如下图(1-1);

 

 

图(1-1)

QTP对测试用例的自动化测试后,分别将可以登陆成功和不能登陆成功的测试用例进行测试,运行结果如图(1-2);

 

图(1-2)

可以登录飞机订票系统的测试用例,QTP在测试后会显示登陆成功,如下图(1-3);

 

图(1-3)

不可以登录飞机订票系统的测试用例,QTP在测试后会显示登录失败,并且会说明错误的信息,如下图(1-4);

 

1.1 测试脚本

 

2 订单测试结果

执行QTP生成的脚本,结果如图(2-1);

 

图(2-1

2.2测试脚本

SystemUtil Run"C \Proaram Files(x86)\samples\flight\app\light4a.exe"

Dialog("Login").WinEdit("Agent Name:")Set"zhang”

Dialog("Login").WinEdit("Password:").SetSecure"636ba7e21e486292e9a8291ab222bf69281a2a08"Dialog("Login”).WinButton("OK").Click

Window("Flight Reservation").WinObject("Date of Flight).Type "112022"

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

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

Window("Flight Reservation").WinButton("FLIG TMClick

Window("Flight Reservation").Dialog("Flights Table").WinList("From").Select"13130FRA 01:24 PM LON 02Window("Flight Reservation").Dialog("Flights Table”).WinButton("OK").Click

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

Window("Flight Reservation").WinRadioButton("Business").Set

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

Window("Flight Reservation").Close

3 传真测试结果

在添加完所有的对象后,录制的脚本才可以运行,同时也能在回放中看到缩写的签名,运行结果如图(2-3-7);

 

3.1测试脚本

SystemUtil.Run"C:\Program Files(x86)\samples\flight\app\flight4a.exe"

Dialog("Login").WinEdit("Agent Name:".Set'zhang"

Dialog("Login) WinEdit('Password:").SetSecure "636cd70a06fbcbaa6465117d25b41f4b8fec4dce"Dialog("Login").WinButton("OK").Click

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

Window("Fliaht Reservation).Dialog("Open Order").WinCheckBox("Customer Name").Set "ON”Window("Flight Reservation").Dialog("Open Order")WinEdit("Edit").Set"zhang"

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

Window"Fliaht Reservation") Dialog(Open Order) Dialog("Search Results").WinButton("OK").Click Window("Flight Reservation").WinMenu("Menu").Select"File:Fax Order.."

Window("Flight Reservation").Dialog("Fax Order No.11”).WinObject("Fax Number").Type"12345678911Desktop.RunAnalog"Track1"

Window("Flight Reservation").Dialog("Fax Order No. 11”).Activate

Window("Flight Reservation").Dialog('Fax Order No.11").WinButton("Send').Click

Window("Flight Reservation").Activate

Window("Flight Reservation").Close

4 删除订单测试结果

完成对象添加的操作,就可以开始修改脚本了,添加了判断订单查询对话框是否存在,如果存在则循环管操作订单存在的列表,随机选择一个订单,确定删除该订单,运行结果如下图(4-1);

 

图(4-1

4.2测试脚本

Dim IntNumber_SearchResults,Str_SearchResults

Dim Delete_OrderNo

Window("Flight Reservation").Activate

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

Window("FlightReservation").Dialog("Open Order").WinCheckBox("Customer Name").Set "ON"

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

Window("FlightReservation").Dialog("Open Order").WinButton("OK").Click

While Window("Flight Reservation").Dialog("Open Order").Dialog("Search Results").Exist(5)

Intnumber_SearchResults = Window("Flight Reservation").Dialog("Open Order").Dialog("Search Results").WinList("Flight No.").GetItemsCount

Str_SearchResults = Window("Flight Reservation").Dialog("Open Order").Dialog("SearchResults").WinList("Flight No.").GetItem(RandomNumber(0,IntNumber_SearchResults-1))

Window("Flight Reservation").Dialog("Open Order").Dialog("Search Results").WinList("Flight No.").Select Str_SearchResults

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

Window("Flight Reservation").Activate

Delete_Order = Window("Flight Reservation").WinEdit("Order No:").GetROProperty("text")

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

Window("FlightReservation").Dialog("Flight Reservations").WinButton("(Y)").Click

Window("Flight Reservation").Activate

Reporter.ReportEvent micPass,"删除的订单号是:"&Delete_OrderNo,"删除的订单是:"&Str_SearchResults

Window("Flight Reservation").Activate

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

Window("FlightReservation").Dialog("Open Order").WinCheckBox("Customer Name").Set"ON"

Window("FlightReservation").Dialog("Open Order").WinEdit("Edit").Set"tianyanqin"

Window("FlightReservation").Dialog("Open Order").WinButton("OK").Click

Wend

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

Window("FlightReservation").Dialog("Open Order").WinButton("Cancel").Click

Reporter.ReportEvent micPass,"订单删除成功","

  • 参考文献
  1. 田艳琴著,《QTP从实践到精通》,电子工业出版社,2010版
  2. 陈能计著,《QTP自动糊测试进阶》,电子工业出版社,2010版
  3. 张斌著,《精通QTP与自动化测试框架设计实践》,人民邮电出版社,2010版
  4. 黄文高著,《QTP自动化测试与框架模型设计》,机械工业出版社,2011版

有关使用QTP软件对飞机票订票系统进行测试的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 按天对 Mongoid 对象进行分组 - 2

    在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev

  9. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  10. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

随机推荐