如何单击使用的autoit 自动化或windows ui自动化的应用程序按钮

暂时没有公告
Watir -- Web自动化UI测试的框架
&&&&& super( @o )
  TextField的初始化方法还有supported_types,size,maxLength,assert_not_readonly,verify_contains,dragContentsTo,append,set,clear等方法。
  这里有getObject方法在WATIR中使用普遍。主要是对该PAGE中的各种TAG进行精确定位。然后使用该Object的属性进行特殊事件处理,下面是text_field的set方法主要是事件定位,发送键盘信息等处理。
def set( setThis )&& assert_exists&& assert_enabled&& assert_not_readonly&&&&&&&&&&& highLight(:set)&& @o.scrollIntoView&& @o.focus&& @o.select()&& @o.fireEvent("onSelect")&& @o.value = ""&& @o.fireEvent("onKeyPress")&& doKeyPress( setThis )&& highLight(:clear)&& @o.fireEvent("onChange")&& @o.fireEvent("onBlur")end
  在源码中也用到了AutoIT与IE.document(在.NET自动化中非常常用,用来对HTML PAGE的document化转化,方便对object的操作)。AutoIT主要是对窗口属性的设置和操作,比如发送键盘信息:
def send_keys (key_string)&& autoit = WIN32OLE.new 'AutoItX3.Control'&& autoit.WinActivate title&& autoit.Send key_stringend
  设置窗口状态:
def set_window_state (state)&& autoit = WIN32OLE.new('AutoItX3.Control')&& autoit.WinSetState title, '', autoit.send(state)end
  开源的对于web ui自动化是一个很好的福音,对于几个自动化工具的横向对比,都大体思路大同小异 ,都是对HTML Page的解析,使用object或者文档化后进行正则表达式对对象的准确定位,再使用IEController进行操作,或者使用AutoIT对 windows窗口进行操作。
论坛精华帖
文章来源于
软件测试技术文章排行榜
软件测试技术分类最新内容
版权所有(C)
TestAge()|| All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室
技术支持和业务联系:.cn 电话:010-
 |  |  |  |  |  |  | 温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
网易杭州 QA Team
务实 专注 分享 做有态度的QA
LOFTER精选
网易考拉推荐
Java下Windows客户端UI自动化实践&&
16:30:45|&&分类:
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
1、框架介绍:twin支持Java代码进行windows客户端自动化,在被测电脑启动一个接口java指令的程序,通过他实现java的客户端UI自动化 2、下载地址:& 3、环境准备:Java环境、.NET framework3.5以上版本、下载控件辅助工具UI Spy二、开始测试 1、我们以变速齿轮打开应用程序这个操作为例,讲解twin是如何工作的。
打开sharpclaws.xml,设置本地或远程电脑的端口,设置被测程序的name和程序路径,如图 2、双击打开sharpclaws.exe,如图
3、UI Spy的使用
通过UI Spy,可以查看被测程序的窗体结构,这个工具类似selenium中xpath工具的作用。如图,红色框中表示被测程序的窗体结构。
点击最上层窗格,可以看到一些属性,其中我们主要关注ClassName、Control Type、AutomationId和Name,如图&& 4、打开eclipse,编写测试代码
3.1 打开被测程序
Application&app = new Application(new URL("http://127.0.0.1:4444")); &//ip地址可为远程机器ip
app.open("GearNT", null);
//app名字必须再sharpclaws中定义&
3.2 获取程序最上层控件,一般为window或pane
Window window = app.getWindow(); 3.3 获取目标控件,主要方法有getChildren()和getDescendants()
getChildren():获取当前控件下一层的所有控件,返回类型为List,若要获取单个控件可用getChild()方法
getDescendants():获取当前控件下所有的子控件,包括下一层、下下一层,返回类型为List,若要获取单个控件可
用getDescendant()方法
//获取window下一层的控件pane,通过className获取,className可在UI Spy中找到
Pane pane = window.getChild(Criteria.type(Pane.class).and(
Criteria.className("TPanel")));
//获取TSeSkinButton值的pane,这里存在多个且无法单一区别,我们用list存放
List&Pane& buttons = pane.getDescendants(Criteria.type(Pane.class)
.and(Criteria.className("TSeSkinButton")));&
3.4 获取控件并点击。从上面代码可以看到,我们获取的是pane,定义参数名的时候却用了buttons,因为Windows下的控件很多都是不标准的,有明明是按钮他的类型却不是Button,导致我们获取到的控件是不可以点击。那么这个时候直接采用click()方法是无效的,我们需要做如下操作。
buttons.get(1).click();//这是错误的方法
buttons.get(1).click(MouseButton.Left);//这是正确的& & & && 3.5 获取控件输入文字。以上的操作,我们相当于点击了浏览按钮,此时会跳出对话框,如图。
我们需要输入要变速的文件路径再点击按钮打开。代码如下:
List&Window& windows = app.getWindows();//由于是新出现的窗口,我们需要重新获取一遍
ComboBox cb = windows.get(0).getDescendant(Criteria.type(ComboBox.class).and(
Criteria.name("文件名(N):")));//获取文本框
cb.getChild(Criteria.type(Edit.class).and(Criteria.name("文件名(N):"))).type("path");&&
Button btn = windows.get(0).getChild(
Criteria.type(Button.class).and(Criteria.name("打开(O)")));&
btn.click();
3.6 最后我们需要点击加速的倍数
Pane trackBar = pane.getDescendant(Criteria.type(Pane.class)
.and(Criteria.className("TSeSkinTrackBar")));//trakerBar居然是pane类型的,那么只能用坐标点击操作了 int x = trackBar.getLocation().x; int y = trackBar.getLocation().y; Desktop desktop = app.getDesktop();//由于获取的坐标是相对于整个屏幕的坐标,我们需要获取desktop 来点击 desktop.click(x + 150, y + 18, MouseButton.Left);//控件的高度和宽度可以从UI Spy中获取,这我们点击的点就确定了 这样我们就大功告成了。这就是整个UI自动化的流程。 在实际应用中,可以和testng、结合使用,若有服务端web页面的操作可以用selenium,最后把他们都部署到CI平台上,每日构建。 附录完整代码 public void openSpeeder(String path) {
Application app =
app = new Application(new URL("http://127.0.0.1:4444"));
app.open("GearNT", null);
Thread.sleep(4000);
Window window = app.getWindow();
Pane pane = window.getChild(Criteria.type(Pane.class).and(
Criteria.className("TPanel")));
List&Pane& buttons = pane.getDescendants(Criteria.type(Pane.class)
.and(Criteria.className("TSeSkinButton")));
buttons.get(1).click(MouseButton.Left);
Thread.sleep(2000);
List&Window& windows = app.getWindows();
ComboBox cb = windows.get(0)
.getDescendant(
Criteria.type(ComboBox.class).and(
Criteria.name("文件名(N):")));
cb.getChild(Criteria.type(Edit.class).and(Criteria.name("文件名(N):")))
.type(path);
Button btn = windows.get(0).getChild(
Criteria.type(Button.class).and(Criteria.name("打开(O)")));
btn.click();
Thread.sleep(2000);
Pane trackBar = pane.getDescendant(Criteria.type(Pane.class).and(
Criteria.className("TSeSkinTrackBar")));
int x = trackBar.getLocation().x;
int y = trackBar.getLocation().y;
Desktop desktop = app.getDesktop();
desktop.click(x + 150, y + 18, MouseButton.Left);
("加速器打开xx并加速成功!");
Thread.sleep(4000);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
阅读(1883)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Java下Windows客户端UI自动化实践',
blogAbstract:'一、前期工作\t1、框架介绍:twin支持Java代码进行windows客户端自动化,在被测电脑启动一个接口java指令的程序,通过他实现java的客户端UI自动化\t2、下载地址:
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}developerWorks 社区
与传统的手动测试相比,自动化测试可以更好地节省测试人员的时间,提高测试团队的工作效率。因此,一个合适的自动化测试方案能够使测试团队的工作事半功倍。本文主要介绍如何基于 STAF/STAX+AutoIt 实现自动化测试。包括自动化测试框架的理论与设计以及 STAF/STAX+AutoIt 自动化测试框架的具体实现。
, 软件工程师,
张晋,2009 年加入 IBM,软件工程师,负责 IBM SPSS CADS 的测试工作。在软件测试管理,自动化测试方面具有多年的经验。
, 软件工程师,
梁二强,软件工程师,现工作在 IBM 中国开发中心西安实验室,从事 IBM SPSS C&DS 产品的测试工作。
, 软件工程师, IBM
李鹏,软件工程师,现工作在 IBM 中国开发中心西安实验室,从事 IBM Cognos 产品的测试工作。在自动化测试方面具有多年的经验。
手动测试和自动化测试顾名思义,传统的手工测试需要测试人员手动地执行测试用例、输入数据、填写测试结果和提交测试,并发现其中的缺陷。基于测试中发现的问题,有时需要多次执行同一个测试用例,这需要测试人员花费大量的时间来完成。而自动化测试则可以很好地帮助测试人员在回归测试时完成大量重复的操作、缩短测试的时间,并且可以准确地对测试结果进行记录和分析,这就使得测试人员能够将更多的精力投放到测试设计、需求理解以及仅适合手动测试的部分。将手动测试和自动化测试结合起来,既可以提高手动测试的效率,也可以提高回归测试的效率。工具的选择 - 为什么选择 STAF/STAX+AutoIt当我们选择自动化工具时,有两点需要我们重点考虑。第一,工具是否便于安装且易学易用,这关系到我们需要花多久去熟悉和使用工具。第二,工具是免费版的还是商业版的,这关系到我们需要投入多少资金。STAF/STAX+AutoIt 的组合不仅是免费的,而且易学易用。使用 STAF/STAX,我们可以方便地进行自动化脚本的分布式执行;使用 AutoIt,我们则可以快速方便地编写基于 Windows 的应用程序的自动化脚本。STAF/STAX, AutoIt 概述Software Test Automation Framework ( STAF ) 是开源、跨平台、支持多语言、基于可重用组件的自动化测试框架。这些组件被称作服务,如过程调用、资源管理、日志等。STAF 减轻了我们在自动化基础开发上的负担,使得我们能够关注自动化解决方案的设计并加快自动化测试的过程。STAF eXecution Engine ( STAX ) 是 STAF 的一个外部服务,是一个基于 XML 的执行引擎。STAX 可以使我们更加轻松地实施自动化测试,包括测试用例的分发、执行以及结果分析。STAX 构建于三种技术:STAF、XML 和 Python。STAX 还提供了 GUI 模式去执行和监控测试的过程,包括执行的方式(顺序或者同步执行)、查看测试执行的进度、查看测试的结果等。总之,利用 STAX,我们可以更加方便地用 STAF 来进行自动化的测试。AutoIt 是一款免费的软件,它使用类似 BASIC 的脚本语言来实现对 Windows GUI 的自动化操作,如键盘的模拟敲击、鼠标的移动以及窗口和控件的操作。不仅语法简单易学,且 AutoIt 拥有庞大的自定义函数库可以帮助测试人员更快地完成测试脚本的编写。自动化测试框架设计理论测试框架是自动化测试中非常重要的一个基础架构。我们知道,一个好的框架,往往可以使自动化测试事半功倍。在设计自动化测试框架时,一般主要考虑一下这几点:
代码结构要清晰,便于维护。
自动化用例的复用性要好。
框架要易于扩展。如今,自动化测试框架主要分为两种,即数据驱动和关键字驱动。下面来简单介绍一下两种框架各自的特点:数据驱动,是指将测试过程和测试数据进行分离,以便达到提高自动化测试效率的一种架构。在数据驱动测试框架中,测试过程会被封装成函数,测试数据会以参数的形式传入测试过程。这样不同的数据组合就可以产生不同的测试用例。从中,我们可以看到数据驱动的优点,即数据与过程分离也易于维护,复用性好。但需要注意的是,数据驱动要求自动化测试人员有一定的编程与设计的能力。关键字驱动,也称为表驱动。测试用例和测试数据都在一个关键字驱动表中。自动化测试人员只需要在表中选择相应的关键字和填写数据就可以完成测试用例。关键字驱动的优点是对于自动化测试人员来说,无需掌握编程知识,框架和用例脚本可以同步进行;缺点主要表现在无法实现复杂的业务逻辑,并且需要专门的人员花费大量的时间来开发和维护框架中的关键字解析程序。总之,在具体实现的过程中,针对不同的项目,测试团队需要选择一个适合自身项目的框架并且要进行一定的扩展来满足项目的需要。解决方案:基于 STAF/STAX+AutoIt 的自动化测试框架软件自动化测试的工具和架构是多样化的,我们需要根据产品的需求、测试计划和测试成本来选择合适的自动化测试工具以及自动化测试框架来完成自动化测试任务。下面我们将介绍基于 STAF/STAX+AutoIt 的自动化测试解决方案。主要包括:自动化测试框架的设计、三层架构的实现、数据驱动、公共函数库、日志系统、自动化部署以及执行。STAF/STAX+AutoIt 自动化框架的设计概述STAF/STAX+AutoIt 框架设计图如图 1 所示:图 1. 自动化框架设计图在此框架中,STAF/STAX 负责调度执行由 AuoIt 编写的 Test Suite (测试套件)、Test Case (测试用例)、Task (测试任务) 脚本以及 AutoDeploy (自动部署程序)。Test Data (测试数据) 负责提供数据。Test Suite、Test Case、Task 的相互组织调用由 Test Engine (测试引擎) 负责。Test Engine 同时会负责调用相应的 Lib (库文件)、Resources (资源文件) 和 Utilites&Commons (公共函数库),并且将执行过程写到 Logs (日志) 中。下面我们会具体介绍框架中的三层架构、数据驱动、公共函数库、日志系统、自动化部署以及自动化执行。整个框架的目录结构如图 2 所示:图 2. 自动化框架目录结构经典的三层架构分层的结构是自动化测试框架中核心的组成部分。为了使读者能够切身的体会到三层架构的组成,我们选择 IBM 的 Symphony 产品作为测试对象来进行具体描述。三层架构由任务层 ( Task )、测试用例层 ( Test Case ) 和测试套件层 ( Test Suite ) 组成。任务层 ( Task ):负责软件产品基本业务功能的自动化实现。不同的软件产品会有不同的业务功能,但是每一个软件产品都是由一些基本的业务功能组成的。下面以 Symphony 产品的菜单为例。Symphony 的菜单有很多的功能模块,如文件模块、编辑模块、查看模块、布局模块和帮助模块等,如图 3 所示:图 3. IBM Lotus Symphony每一模块又是由基本的功能组成,如文件模块由新建、打开、保存、另存、打印和退出等基本功能组成。任务层就是要实现这些基本功能的自动化过程,每一个基本功能将由 AutoIt 脚本实现。Symphony 文件模块的基本业务功能将包含在 SymphonyFileTasks.au3 内。具体的功能以函数的形式实现,如文档的创建 ( SymphonyCreateNewDoc )、文档的保存 ( SymphonySaveNewDoc ) 和文档的另存 ( SymphonySaveAsNewDoc ) 等。本文将以文档创建和保存的代码实现为例展示 task 的完成过程,如清单 1 所示:清单 1. Symphony 文档创建的 Task#include "..\SymphonyConstants.au3"
#include "..\SymphonyMessageResource.au3"
Func SymphonyCreateNewDoc()
;启动 symphony 应用程序
Run( $s_SymphonyApplicationName )
;等待 Symphony 应用程序启动
$i_Val = WinWaitActive( $s_SymphonyHomeWinodwTitle, "", $i_MaxTimeout)
If $i_Val && 0 Then
logInfo( "Start the Symphony successfully." )
logError( "Failed to start the Symphony." )
Return $i_Val
;新建一个文档
logInfo("Click the Symphony menu " & $s_SymphonyMenuFile & "-&" & _
$s_SymphonyMenuItemNew & "-&" & $s_SymphonyMenuItemNewDoc);
$i_Val = WinMenuSelectItem($s_SymphonyHomeWinodwTitle,"", _
$s_SymphonyMenuFile, _
$s_SymphonyMenuItemNew, _
$s_SymphonyMenuItemNewDoc)
If $i_Val && 1 Then
logError( "Failed to find&Click "& $s_SymphonyMenuFile & "-&" & _
$s_SymphonyMenuFile & "-&" & $s_SymphonyMenuItemNewDoc)
Return $i_Val
Return $i_Val
EndFunc清单 1 中的 #include 用来导入函数 SymphonyCreateNewDoc 所需要的变量以及 Symphony 界面上的字符串,如变量 $i_MaxTimeout 和字符串 $s_SymphonyMenuFile。清单 2. Symphony 文档创建验证函数 Func VerifyCreateNewDoc()
;检查新建的文档是否打开
$i_Val = WinWaitActive( $s_SymphonyNewWindowTitle, "", $i_MaxTimeout )
If $i_Val && 0 Then
logInfo( "Open the new document successfully.")
$i_Val = 1
logError( "Failed to open the new document." )
Return $i_Val
Return $i_Val
EndFunc清单 2 中,VerifyCreateNewDoc 函数会验证文档是否创建成功,在测试用例层 ( Test Case ) 将会调用此函数。测试用例层 ( Test Case ):负责执行业务功能自动化测试用例得出测试结果。在任务层我们已经实现了所有基本业务功能的自动化脚本,通过代码示例不难看出每一个基本的业务功能在三层架构中是通过一个函数实现的。Test Case 层负责组织和调用这些函数来执行测试并且验证测试结果的正确性。Test Case 包含在 SymphonyFileTests.au3 内,具体代码如清单 3 所示:清单 3. Symphony 文档创建 Test Case#include "..\tasks\SymphonyFileTasks.au3"
Global $s_TestCase
; 调用 task 层的函数创建测试用例
Func testCreateNewDoc()
$s_TestCase = "testCreateNewDoc"
$i_Val = SymphonyCreateNewDoc()
If $i_Val && 1 Then
logTestResult($s_TestCase,$i_Val)
Return VerifyCreateNewDoc()
EndFunc在清单 3 中,函数 testCreateNewDoc 会调用 SymphonyFileTasks.au3 中的 SymphonyCreateNewDoc 和 VerifyCreateNewDoc 来完成创建文档。并且通过函数返回值来判断业务功能实现的正确性,同时用例的执行结果也会被记录在日志中。测试套件层 ( Test Suite ):即测试用例的集合。在三层架构中的 Test Suite 层,我们会根据相应的业务功能将 Test Case 层中一系列相关的用例组装成为 Test Suite。还是以 Symphony 为例。在 Test Case 层中,我们已经有了创建文档 ( testCreateNewDoc )、输入文本 ( testInputText ) 和保存文档 ( testSaveNewDoc ) 的用例。现在我们要将以上测试用例组成一个 Test Suite:
使用 Symphony 创建一个新文档。
输入文本:This is a Symphony Automation Test.
将文本另存为一个叫做 AutomationTest.odt 的文件。测试套件层包含在 SymphonyFileSuites.au3 中,具体实现代码如清单 4 所示:清单 4. Test Suite 组织调用 Test Case#include "..\utilities\Logger.au3"
#include "..\testcases\SymphonyFileTests.au3"
; 启动日志
startLogging()
; 调用函数执行测试
$i_Val = testCreateNewDoc()
; 记录测试结果
logTestResult($s_TestCase,$i_Val)
; 调用函数执行测试
$i_Val = testInputText("This is a Symphony Automation Test")
; 记录测试结果
logTestResult($s_TestCase,$i_Val)
; 调用函数执行测试
$i_Val = testSaveNewDoc("AutomationTest.odt","C:\autoit3\")
; 记录测试结果
logTestResult($s_TestCase,$i_Val)
; 关闭日志
endLogging()从清单 4 中我们可以看到,需要输入的数据和保存文件的路径和文件名都是通过参数传入到 Test Case 中。这样不同的测试数据就可以产生不同的测试结果,达到我们测试覆盖的要求。输入的数据也从文件中读取,这部分会在下面的数据驱动部分详细介绍。数据驱动在三层架构的介绍中,我们看到数据被赋值给变量并且通过参数的形式传递到具体实现业务的函数中。这样设计目的是用尽可能少的自动化脚本产生不同的测试用例,如边界值、特殊字符等测试用例。在清单 4 中,我们将数据直接传递给了 Test Case,更多的时候我们会把数据存储在文件中(如 ini、 properties、 Excel 等)。在清单 5 中,我们展示从 excel 中读取数据。清单 5. 读取数据#include &Excel.au3&
Local $h_Excel
; 打开 Excel 文档
Func openExcel($s_FilePath)
$h_Excel = _ExcelBookOpen($s_FilePath,0)
Func readExcelData($i_row,$i_col)
$s_CellValue = _ExcelReadCell($h_Excel, $i_row, $i_col)
Return $s_CellValue
; 关闭 Excel 文档
Func closeExcel($h_Excel)
_ExcelBookClose($h_Excel)
EndFunc现在我们来看如何在 Test Suite 中读取数据并将数据传入 Test Case。如图 4 所示测试数据被存储在 Excel 中。图 4. Excel 数据在清单 6 中,Excel 中的数据被循环地读出并传递给相应的 Test Case。清单 6. Test Suite 数据驱动实现openExcel($s_FilePath)
; 循环调用,实现数据驱动
For $i = 2 to 4
; 初始化数据
$s_Content = readExcelData($i,1)
$s_FileDirectory = readExcelData($i,2)
$s_FileName = readExcelData($i,3)
; 调用函数执行测试
$i_Val = testCreateNewDoc()
logTestResult($s_TestCase, $i_Val)
; 调用函数执行测试
$i_Val = testInputText($s_Content)
logTestResult($s_TestCase, $i_Val)
; 调用函数执行测试
$i_Val = testSaveNewDoc($s_FileName, $s_FileDirectory)
logTestResult($s_TestCase, $i_Val)
closeExcel($h_Excel)公共函数库的实现公共函数是指独立于测试用例并且服务于自动化测试框架的函数实现,比如上文我们用到的日志函数和文件读取的函数。一个好的测试框架会包含丰富的公共函数库以便于自动化用例编写人员能够方便地调用各种函数来快速简洁地开发出测试脚本。下面我们将重点介绍日志函数的实现。日志系统任何一个好的自动化测试框架都应该有自己的日志系统。尤其是对于自动化测试,日志的重要性不言而喻。测试环境是什么样的?测试对象是哪些?哪些测试用例是通过的?哪些是失败的?失败在哪一步?这些都应该被详细地记录在日志中。好的日志系统同时也会使代码调试工作事半功倍。基于 AutoIt 的日志系统主要包含三部分。第一个部分用来记录测试环境,如清单 7 所示:清单 7. 记录测试环境 Func testEnv()
; 打开日志文件
$h_File = FileOpen($s_LogFileName, 1)
; 记录系统版本
FileWriteLine($h_File, "System_Version = "& @OSVersion)
; 记录机器 CPU
FileWriteLine($h_File, "Machine_CPU = "& @CPUArch)
; 记录系统语言
FileWriteLine($h_File, "System_Language = "& _Language())
; 记录机器 IP
FileWriteLine($h_File, "Machine_IP = "& @IPAddress1)
; 记录测试执行人员
FileWriteLine($h_File, "Test_Executor = "& @UserName & @CRLF & @CRLF)
EndFunc第二部分用来记录测试过程的执行,如清单 8 所示:清单 8. 记录测试执行过程; 将日志信息写入文件
Func logInfo($s_Content)
logToFile("INFO " & $s_Content)
; 将错误日志写入文件
Func logError($s_Content)
logToFile("ERROR " & $s_Content)
; 将日志写入文件
Func logToFile($s_Content)
FileWriteLine($h_File, "[" & @YEAR & "-" & @MON & "-" & @MDAY & _
" " & @HOUR & ":" & @MIN & ":" &@SEC & "] " & $s_Content)
FileFlush($h_File)
EndFunc第三部分用来统计测试用例的执行结果,如清单 9 所示:清单 9. 记录测试结果; 将测试结果写入文件
Func logTestResult($s_TestCase,$i_Val)
If $i_Val = 1 Then
logInfo("Test Case [" & $s_TestCase &"] Execution Result: " & _
$s_TestResult & @CRLF & @CRLF)
$i_TestPassCounter = $i_TestPassCounter + 1
$s_TestResult = "Failed"
logError("Test Case [" & $s_TestCase &"] Execution Result: " & _
$s_TestResult & @CRLF & @CRLF)
$i_TestFailureCounter = $i_TestFailureCounter + 1
EndFunc当测试执行完成后,关闭日志并且将最终的测试统计结果写到日志中。完整的日志结果如图 5 所示:图 5. 测试日志自动化部署在测试执行的过程中,程序的部署是必不可少的。尤其在敏捷开发过程中,产品每天都会被编译成一个新的版本 ( Build ),手动地去安装部署会花费大量时间。自动化部署则可以很好地解决这个问题。自动化部署一般分为两个部分,即 GUI 的部署和 CLI 的部署。使用 AutoIt 可以很好地实现自动化部署。下面以 Symphony GUI 部署为例进行介绍,具体的代码如清单 10 所示:清单 10. 自动部署 Symphony#include "..\utilities\Logger.au3"
$s_SymphonyInstallWindowTitle = "Installation Wizard for IBM Lotus Symphony"
; 安装 Symphony
installSymphony()
Func installSymphony()
; 启动 Symphony
startLogging()
logInfo("Start to install the Symphony");
Run( "C:\IBM_Lotus_Symphony301_w32.exe" )
WinWaitActive( $s_SymphonyInstallWindowTitle, "Welcome to", 600 )
logInfo("Click the Next button on Wecome to page.");
; 点击 Next 按钮进入下一步
ControlClick($s_SymphonyInstallWindowTitle, "Welcome to", "&Next &")
WinWaitActive( $s_SymphonyInstallWindowTitle, _
"Software License Agreement", 600 )
logInfo("Click the Next button on License Agreement page.");
; 接受 License
ControlClick($s_SymphonyInstallWindowTitle, _
"Software License Agreement", _
"I &accept the terms in the license agreement")
ControlClick($s_SymphonyInstallWindowTitle, _
"Software License Agreement", "&Next &")
; Continue on to other wizard
EndFuc从清单 10 中,我们可以看到 AutoIt 实现自动化部署的具体步骤:启动 Symphony 的安装包→等待欢迎界面 (Welcome to) →在欢迎界面出现后点击 Next 进入 License Agreement 界面→选择接受 License→点击 Next 进入后面的安装界面直至完成安装。自动化测试执行 - 利用 STAF/STAX 调度执行 AutoIt 脚本当自动化测试用例脚本和自动化安装部署程序就绪后,我们必须要考虑如何执行的问题。现实的环境要求测试人员要在多台不同的服务器进行自动化脚本的执行。利用 STAF/STAX 就可以使得测试人员方便地远程部署执行基于 AutoIt 的自动化脚本。首先需要安装 STAF, 之后配置 STAX (具体的安装配置过程请参照官方文档)。我们选择两种方式来执行 AutoIt 的脚本。第一种:使用命令行模式。编写一个 bat 文件,通过执行 STAF 命令调用 AutoIt 脚本,如图 6 所示:图 6. STAF 命令行 bat 文件第二种方式,使用 GUI 的模式来运行和监控 AutoIt 的脚本。要使用 STAX,首先要编辑 STAX 的 XML 配置文件,如清单 11 所示:清单 11. STAX 配置文件&?xml version="1.0" encoding="UTF-8" standalone="no"?&
&!DOCTYPE stax SYSTEM "stax.dtd"&
&defaultcall function="main"/&
&function name="main"&
&sequence&
&message&'Execute the SymphonyFileSuites.au3'&/message&
&process name="'SymphonyFileSuites.au3'"&
&location&'192.168.1.102'&/location&
&!-- 执行 AuoIt 测试脚本 --&
&command&'C:\\autoit3\\AutoIt3.exe
C:\\autoit3\\automation\\testsuites\\SymphonyFileSuites.au3'
&/command&
&/process&
&if expr="RC != 0"&
'Error: RC=%s, STAXResult=%s' % (RC, STAXResult)
&/message&
'Process RC was 0. STAXResult=%s' % STAXResult
&/message&
&/sequence&
&/function&
&/stax&启动 STAX Job Monitor,提交一个新的 Job,选择清单 11 中的 XML 文件,如图 7 所示:图 7. 在 STAX Job Monitor 中加载 XML 文件加载文件之后,点击 Submit New Job。如图 8 所示,可以在 STAX Job Monitor 中查看 Job 的运行状态及结果。图 8. 在 STAX Job Monitor 中查看 Job 的运行状态自动化测试报告当自动化测试部署和执行完成后,我们要统计测试结果,然后生成自动化测试执行的报告发给相关的项目人员。在自动化测试报告中,最重要的信息是测试环境以及测试用例执行情况。在测试执行的过程中,详细的执行情况都被记录在日志系统里。我们可以写一个分析日志的程序,根据日志的内容生产测试报告。测试报告可以是网页版的,也可以是文件的形式,如 XML、Excel 等。下面是一个典型的 Excel 测试报告,如图 9 所示:图 9. 测试执行报告总结本文通过理论和实践完整地介绍了基于 STAF/STAX+AutoIt 的自动化测试解决方案。文中提到的一些实践经验可以完全用于其他任何自动化框架中,如数据驱动的设计、分层的设计、日志系统的设计以及远程调用执行等。
参考资料 访问
官方网站,了解更多关于 STAF 的技术信息。访问
官方网站,了解更多关于 AutoIt 的技术信息。下载 ,这是一个开源、跨平台、支持多语言、基于可重用组件的自动化测试框架。下载 ,这是一款免费的软件,它使用类似 BASIC 的脚本语言来实现对 Windows GUI 的自动化操作。:查找丰富的操作信息、工具和项目更新,帮助您掌握开源技术并将其用于 IBM 产品。
加入 ,查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
developerWorks: 登录
标有星(*)号的字段是必填字段。
保持登录。
单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件。
在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。
所有提交的信息确保安全。
选择您的昵称
当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。
您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。
标有星(*)号的字段是必填字段。
(昵称长度在 3 至 31 个字符之间)
单击提交则表示您同意developerWorks 的条款和条件。 .
所有提交的信息确保安全。
文章、教程、演示,帮助您构建、部署和管理云应用。
立即加入来自 IBM 的专业 IT 社交网络。
免费下载、试用软件产品,构建应用并提升技能。
static.content.url=/developerworks/js/artrating/SITE_ID=10Zone=Open sourceArticleID=997777ArticleTitle=基于 STAF/STAX+AutoIt 的自动化测试解决方案publish-date=}

我要回帖

更多关于 autoit 点击按钮 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信