开源自动化测试框架 Tellurium
<p class="p0"><span style="font-size:18pt;"><strong>Tellurium<span style="font-family:宋体;">是什么?</span></strong></span></p> <p class="p0"><span style="font-size:16px;">Tellurium<span style="font-family:宋体;">是一种自动化的</span><span style="font-family:Times New Roman;">web</span><span style="font-family:宋体;">测试框架。虽然它是在</span><span style="font-family:Times New Roman;">selemium</span><span style="font-family:宋体;">的阶段上建立起来的,但两者之间有许多概念上的差异,</span><span style="font-family:Times New Roman;">Tellurium</span><span style="font-family:宋体;">的主要特点如下:</span></span></p> <p class="p0"> </p> <p><img title="开源自动化测试框架 Tellurium " border="0" alt="开源自动化测试框架 Tellurium " src="https://simg.open-open.com/show/bb4fed8e48b432d926f9b642b31eb8e6.png" width="381" height="315" /></p> <p class="p0"> </p> <ul> <li class="p0"><span style="font-size:16px;">l 不是单一的“记录和播放”风格。</span></li> <li class="p0"><span style="font-size:16px;">l 基于<span style="font-family:Times New Roman;">UI</span><span style="font-family:宋体;">模块,也就是说,它侧重于</span><span style="font-family:Times New Roman;">UI</span><span style="font-family:宋体;">元素</span></span></li> <li class="p0"><span style="font-size:16px;">l 让你有结构化的代码执行用户界面和测试代码之间的解耦</span></li> <li class="p0"><span style="font-size:16px;">l 鲁棒性的变化,Tellurium达到使用复合定位建立在运行时和组的定位器定位,删除里面的UI模块和外部UI元素的UI元素之间的依赖</span></li> <li class="p0"><span style="font-size:16px;">l 表达所使用Groovy动态语言特性和DSL</span></li> <li class="p0"><span style="font-size:16px;">l 可重复使用,用户界面模块可重复使用相同的应用程序和Tellurium部件,可用于不同的应用</span></li> <li class="p0"><span style="font-size:16px;">l 地址在网络上的动态因素。UI模板使用数据网格和Tellurium UI对象的回应属性可以处理JavaScript事件</span></li> <li class="p0"><span style="font-size:16px;">l 核心框架是在Groovy实现和测试,可以在Groovy中的JUnit,TestNG的,或纯DSL脚本书面</span></li> <li class="p0"><span style="font-size:16px;">l 支持数据驱动测试</span></li> <li class="p0"><span style="font-size:16px;">l 提供Maven原型</span></li> </ul> <p class="p0"> </p> <p class="p0"><span style="font-size:18pt;">如何使用Tellurium?</span></p> <p><img style="width:697px;height:469px;" title="开源自动化测试框架 Tellurium " border="0" alt="开源自动化测试框架 Tellurium " src="https://simg.open-open.com/show/10c123e4894c118ab3f64c62d57d5f33.png" /></p> <p> </p> <p> </p> <p class="p0"><span style="font-size:18pt;"><strong>使用<span style="font-family:Times New Roman;">Maven</span><span style="font-family:宋体;">创建一个新的</span><span style="font-family:Times New Roman;">Tellurium </span><span style="font-family:宋体;">测试项目</span></strong></span></p> <p class="p0"><span style="font-size:16px;"> 首先,你需要安装<span style="font-family:Times New Roman;">maven </span><span style="font-family:宋体;">,确保本机有</span><span style="font-family:Times New Roman;">maven</span><span style="font-family:宋体;">环境。关于</span><span style="font-family:Times New Roman;">maven</span><span style="font-family:宋体;">环境的搭建,可以参考的我的博客,关于</span><span style="font-family:Times New Roman;">maven</span><span style="font-family:宋体;">的文章:</span></span></p> <p class="p0"><span style="font-size:16px;"><a href="/misc/goto?guid=4959500806481435272">http://www.cnblogs.com/fnng/category/345480.html</a></span></p> <p class="p0"><span style="font-size:16px;">找到<span style="font-family:Times New Roman;">maven</span><span style="font-family:宋体;">目录下的</span>settings.xml 文件,我本机的路径在:<span style="font-family:Times New Roman;">F:\maven\apache-maven-3.0.3\conf</span>\<span style="font-family:宋体;">目录下。</span></span></p> <p class="p0"><span style="font-size:16px;">打开文件,并在<span style="font-family:Times New Roman;color:#ff0000;"><profiles>....</profiles></span><span style="font-family:宋体;">之间添加如下信息:</span></span></p> <p class="p0"> </p> <div class="cnblogs_code"> <pre><span style="color:#ff0000;"><parofiles></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">profile</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">activation</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">activeByDefault</span><span style="color:#0000ff;">></span>true<span style="color:#0000ff;"></</span><span style="color:#800000;">activeByDefault</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">activation</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">repositories</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">repository</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">id</span><span style="color:#0000ff;">></span>kungfuters-public-snapshots-repo<span style="color:#0000ff;"></</span><span style="color:#800000;">id</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">name</span><span style="color:#0000ff;">></span>Kungfuters.org Public Snapshot Repository<span style="color:#0000ff;"></</span><span style="color:#800000;">name</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">releases</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">enabled</span><span style="color:#0000ff;">></span>false<span style="color:#0000ff;"></</span><span style="color:#800000;">enabled</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">releases</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">snapshots</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">enabled</span><span style="color:#0000ff;">></span>true<span style="color:#0000ff;"></</span><span style="color:#800000;">enabled</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">snapshots</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">url</span><span style="color:#0000ff;">></span>http://maven.kungfuters.org/content/repositories/snapshots<span style="color:#0000ff;"></</span><span style="color:#800000;">url</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">repository</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">repository</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">id</span><span style="color:#0000ff;">></span>kungfuters-public-releases-repo<span style="color:#0000ff;"></</span><span style="color:#800000;">id</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">name</span><span style="color:#0000ff;">></span>Kungfuters.org Public Releases Repository<span style="color:#0000ff;"></</span><span style="color:#800000;">name</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">releases</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">enabled</span><span style="color:#0000ff;">></span>true<span style="color:#0000ff;"></</span><span style="color:#800000;">enabled</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">releases</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">snapshots</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">enabled</span><span style="color:#0000ff;">></span>false<span style="color:#0000ff;"></</span><span style="color:#800000;">enabled</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">snapshots</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"><</span><span style="color:#800000;">url</span><span style="color:#0000ff;">></span>http://maven.kungfuters.org/content/repositories/releases<span style="color:#0000ff;"></</span><span style="color:#800000;">url</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">repository</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">repositories</span><span style="color:#0000ff;">></span> <span style="color:#0000ff;"></</span><span style="color:#800000;">profile</span><span style="color:#0000ff;">></span> <span style="color:#ff0000;"><parofiles></span></pre> </div> <p class="p0"> </p> <p> </p> <p class="p0"><span style="font-size:16px;">打开的你的命令提示符,切换到你的工作空间的目录下,运行下列<span style="font-family:Times New Roman;">Maven</span><span style="font-family:宋体;">命令来创建一个新的</span>Tellurium测试方案(<span style="font-family:宋体;">项目</span><span style="font-family:Times New Roman;">)"demo"</span></span></p> <p class="p0"><strong><span style="color:#008080;font-size:16px;">mvn archetype:generate -DgroupId=example -DartifactId=demo -DarchetypeArtifactId=tellurium-junit-archetype -DarchetypeGroupId=tellurium -DarchetypeVersion=0.6.0</span></strong></p> <p class="p0"><span style="font-size:16px;">然后切换到该项目的目录下执行:<strong>mvn eclipse:eclipse</strong> 构建成我们的<span style="font-family:Times New Roman;">eclipse</span><span style="font-family:宋体;">所能识别的项目结构。</span></span></p> <p class="p0"><span style="font-size:16px;"> </span></p> <p class="p0"><span style="font-size:16px;">打开<span style="font-family:Times New Roman;">Eclipse</span><span style="font-family:宋体;">将我们构建完成的项目导入。完成后项目结构如下:</span></span></p> <p class="p0"> </p> <p><img title="开源自动化测试框架 Tellurium " border="0" alt="开源自动化测试框架 Tellurium " src="https://simg.open-open.com/show/a7ec27daee661fb6612bb09eea1ad7c2.png" width="278" height="319" /></p> <p class="p0"><span style="font-size:16px;">在<span style="font-family:Times New Roman;">Telluriumconfig.groovy</span><span style="font-family:宋体;">文件中包含</span><span style="font-family:Times New Roman;">Tellurium</span><span style="font-family:宋体;">项目设置,你能根据你的需求对它进行自定义设置</span></span></p> <p class="p0"> </p> <div class="cnblogs_code"> <pre>tellurium{ <span style="color:#008000;">//</span><span style="color:#008000;">embedded selenium server configuration </span><span style="color:#008000;"> </span> embeddedserver { <span style="color:#008000;">//</span><span style="color:#008000;">port number </span><span style="color:#008000;"> </span> port = "4444" <span style="color:#008000;">//</span><span style="color:#008000;">whether to use multiple windows </span><span style="color:#008000;"> </span> useMultiWindows = <span style="color:#0000ff;">false</span> <span style="color:#008000;">//</span><span style="color:#008000;">whether to run the embedded selenium server. If false, you need to manually set up a selenium server </span><span style="color:#008000;"> </span> runInternally = <span style="color:#0000ff;">true</span> <span style="color:#008000;">//</span><span style="color:#008000;">profile location </span><span style="color:#008000;"> </span> profile = "" <span style="color:#008000;">//</span><span style="color:#008000;">user-extension.js file, for example, "target/test-classes/extension/user-extensions.js" </span><span style="color:#008000;"> </span> userExtension = "" } <span style="color:#008000;">//</span><span style="color:#008000;">event handler </span><span style="color:#008000;"> </span> eventhandler{ <span style="color:#008000;">//</span><span style="color:#008000;">whether we should check if the UI element is presented </span><span style="color:#008000;"> </span> checkElement = <span style="color:#0000ff;">false</span> <span style="color:#008000;">//</span><span style="color:#008000;">wether we add additional events like "mouse over" </span><span style="color:#008000;"> </span> extraEvent = <span style="color:#0000ff;">true</span> } <span style="color:#008000;">//</span><span style="color:#008000;">data accessor </span><span style="color:#008000;"> </span> accessor{ <span style="color:#008000;">//</span><span style="color:#008000;">whether we should check if the UI element is presented</span><span style="color:#008000;"> </span> checkElement = <span style="color:#0000ff;">true</span> } connector{ <span style="color:#008000;">//</span><span style="color:#008000;">selenium server host </span><span style="color:#008000;">//</span><span style="color:#008000;">please change the host if you run the Selenium server remotely </span><span style="color:#008000;"> </span> serverHost = "localhost" <span style="color:#008000;">//</span><span style="color:#008000;">server port number the client needs to connect </span><span style="color:#008000;"> </span> port = "4444" <span style="color:#008000;">//</span><span style="color:#008000;">base URL </span><span style="color:#008000;"> </span> baseUrl = "http://localhost:8080" <span style="color:#008000;">//</span><span style="color:#008000;">Browser setting, valid options are </span><span style="color:#008000;">//</span><span style="color:#008000;"> *firefox [absolute path] </span><span style="color:#008000;">//</span><span style="color:#008000;"> *iexplore [absolute path] </span><span style="color:#008000;">//</span><span style="color:#008000;"> *chrome </span><span style="color:#008000;">//</span><span style="color:#008000;"> *iehta </span><span style="color:#008000;"> </span> browser = "*chrome" <span style="color:#008000;">//</span><span style="color:#008000;">user's class to hold custom selenium methods associated with user-extensions.js </span><span style="color:#008000;">//</span><span style="color:#008000;">should in full class name, for instance, "com.mycom.CustomSelenium" </span><span style="color:#008000;"> </span> customClass = "" } datadriven{ dataprovider{ <span style="color:#008000;">//</span><span style="color:#008000;">specify which data reader you like the data provider to use </span><span style="color:#008000;">//</span><span style="color:#008000;">the valid options include "PipeFileReader", "CVSFileReader" at this point </span><span style="color:#008000;"> </span> reader = "PipeFileReader" } } test{ <span style="color:#008000;">//</span><span style="color:#008000;">at current stage, the result report is only for tellurium data driven testing </span><span style="color:#008000;">//</span><span style="color:#008000;">we may add the result report for regular tellurium test case </span><span style="color:#008000;"> </span> result{ <span style="color:#008000;">//</span><span style="color:#008000;">specify what result reporter used for the test result </span><span style="color:#008000;">//</span><span style="color:#008000;">valid options include "SimpleResultReporter", "XMLResultReporter", and "StreamXMLResultReporter" </span><span style="color:#008000;"> </span> reporter = "XMLResultReporter" <span style="color:#008000;">//</span><span style="color:#008000;">the output of the result </span><span style="color:#008000;">//</span><span style="color:#008000;">valid options include "Console", "File" at this point </span><span style="color:#008000;">//</span><span style="color:#008000;">if the option is "File", you need to specify the file name, other wise it will use the default </span><span style="color:#008000;">//</span><span style="color:#008000;">file name "TestResults.output" </span><span style="color:#008000;"> </span> output = "Console" <span style="color:#008000;">//</span><span style="color:#008000;">test result output file name </span><span style="color:#008000;"> </span> filename = "TestResult.output" } exception{ <span style="color:#008000;">//</span><span style="color:#008000;">whether Tellurium captures the screenshot when exception occurs. </span><span style="color:#008000;">//</span><span style="color:#008000;">Note that the exception is the one thrown by Selenium Server </span><span style="color:#008000;">//</span><span style="color:#008000;">we do not care the test logic errors here </span><span style="color:#008000;"> </span> captureScreenshot = <span style="color:#0000ff;">true</span> <span style="color:#008000;">//</span><span style="color:#008000;">we may have a series of screenshots, specify the file name pattern here </span><span style="color:#008000;">//</span><span style="color:#008000;">Here the ? will be replaced by the timestamp and you might also want to put </span><span style="color:#008000;">//</span><span style="color:#008000;">file path in the file name pattern </span><span style="color:#008000;"> </span> filenamePattern = "Screenshot?.png" } } uiobject{ builder{ <span style="color:#008000;">//</span><span style="color:#008000;">user can specify custom UI objects here by define the builder for each UI object </span><span style="color:#008000;">//</span><span style="color:#008000;">the custom UI object builder must extend UiObjectBuilder class </span><span style="color:#008000;">//</span><span style="color:#008000;">and implement the following method: </span><span style="color:#008000;">//</span><span style="color:#008000;"> </span><span style="color:#008000;">//</span><span style="color:#008000;"> public build(Map map, Closure c) </span><span style="color:#008000;">//</span><span style="color:#008000;"> </span><span style="color:#008000;">//</span><span style="color:#008000;">For container type UI object, the builder is a bit more complicated, please </span><span style="color:#008000;">//</span><span style="color:#008000;">take the TableBuilder or ListBuilder as an example </span><span style="color:#008000;">//</span><span style="color:#008000;">example: </span><span style="color:#008000;">//</span><span style="color:#008000;"> Icon="org.tellurium.builder.IconBuilder" </span><span style="color:#008000;"> </span> } } widget{ module{ <span style="color:#008000;">//</span><span style="color:#008000;">define your widget modules here, for example Dojo or ExtJs </span><span style="color:#008000;">//</span><span style="color:#008000;"> </span> included="dojo, extjs" included="" } } } </pre> </div> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;"> GoogleSearchModule.groovy<span style="font-family:宋体;">是用户界面模块的谷歌搜索,它自化生成</span><span style="font-family:Times New Roman;">Tellurium </span><span style="font-family:宋体;">所需要的火狐浏览器插件</span><span style="font-family:Times New Roman;">TrUMP. </span>doGoogleSearch() 和 doImFeelingLucky() <span style="font-family:宋体;">两个方法是</span>增加定期谷歌搜索和谷歌<span style="font-family:Times New Roman;">“</span><span style="font-family:宋体;">手气不错</span><span style="font-family:Times New Roman;">”</span><span style="font-family:宋体;">搜索。</span></span></p> <p class="p0"> </p> <div class="cnblogs_code"> <pre><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> GoogleSearchModule <span style="color:#0000ff;">extends</span> DslContext { <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> defineUi() { ui.Container(uid: "Google", clocator: [tag: "table"]) { InputBox(uid: "Input", clocator: [tag: "input", title: "Google Search", name: "q"]) SubmitButton(uid: "Search", clocator: [tag: "input", type: "submit", value: "Google Search", name: "btnG"]) SubmitButton(uid: "ImFeelingLucky", clocator: [tag: "input", type: "submit", value: "I'm Feeling Lucky", name: "btnI"]) } } <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> doGoogleSearch(String input) { keyType "Google.Input", input pause 500 click "Google.Search" waitForPageToLoad 30000 } <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> doImFeelingLucky(String input) { type "Google.Input", input pause 500 click "Google.ImFeelingLucky" waitForPageToLoad 30000 } }</pre> </div> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">因为<span style="font-family:Times New Roman;">Tellurium</span><span style="font-family:宋体;">只支持</span><span style="font-family:Times New Roman;">groovy</span><span style="font-family:宋体;">语言,所以无</span><span style="font-family:Times New Roman;">groovy</span><span style="font-family:宋体;">语言无法直接在</span><span style="font-family:Times New Roman;">Eclipse IDE</span><span style="font-family:宋体;">中运行,需要</span><span style="font-family:Times New Roman;">Eclipse</span><span style="font-family:宋体;">安装对</span><span style="font-family:Times New Roman;">groovy</span><span style="font-family:宋体;">语言支持的插件。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">Groovy-Eclipse 2.5.1 插件下载地址:</span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;"><a href="/misc/goto?guid=4959500806578822968">http://www.oschina.net/news/19279/groovy-eclipse-251</a> </span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">当然,你也可以使用<span style="font-family:Times New Roman;">IntelliJ IDEA </span><span style="font-family:宋体;">工具,它同样也运行</span><span style="font-family:Times New Roman;">java</span><span style="font-family:宋体;">语言非常优秀的</span><span style="font-family:Times New Roman;">IDE</span><span style="font-family:宋体;">。 而且</span><span style="font-family:Times New Roman;">IntelliJ IDEA</span><span style="font-family:宋体;">本身是支持</span><span style="font-family:Times New Roman;">groovy</span><span style="font-family:宋体;">语言。</span></span></p> <p class="p0"> </p> <p class="p0"> </p> <p class="p0"> </p> <p class="p0"><span style="font-size:18pt;">Tellurium IDE <span style="font-family:宋体;">插件</span></span></p> <p class="p0"> </p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">这个同样也是基于<span style="font-family:Times New Roman;">firefox</span><span style="font-family:宋体;">浏览器的插件有,功能与</span><span style="font-family:Times New Roman;">selenium IDE</span><span style="font-family:宋体;">类似,如果你熟悉</span><span style="font-family:Times New Roman;">selenium IDE</span><span style="font-family:宋体;">的话,</span><span style="font-family:Times New Roman;">Tellurium IDE</span><span style="font-family:宋体;">就很容易操作。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">Tellurium IDE <span style="font-family:宋体;">插件安装地址: </span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;"><a href="/misc/goto?guid=4959500806667485279">https://addons.mozilla.org/en-US/firefox/addon/tellurium-ide/?src=search</a></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">注意:本插件不支持最新的<span style="font-family:Times New Roman;">firefox 9 </span><span style="font-family:宋体;">,</span><span style="font-family:Times New Roman;">firefox</span><span style="font-family:宋体;">这小子一年换版本比翻书还快,本人使用的是</span><span style="font-family:Times New Roman;">firefox 3.6 </span><span style="font-family:宋体;">版本,用</span><span style="font-family:Times New Roman;">firefox</span><span style="font-family:宋体;">打开上面的链接后点击“</span><span style="font-family:Times New Roman;">add to firefox</span><span style="font-family:宋体;">”根据提示,浏览器开始下载安装重启。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">在菜单栏<span style="font-family:Times New Roman;">---</span><span style="font-family:宋体;">工具</span><span style="font-family:Times New Roman;">----Tellurium IDE</span><span style="font-family:宋体;">打开插件。</span></span></p> <p class="p0"> </p> <p><img title="开源自动化测试框架 Tellurium " border="0" alt="开源自动化测试框架 Tellurium " src="https://simg.open-open.com/show/6bf3b12aadf3f71e3e9a3aad682d5e8b.png" width="700" height="525" /></p> <p class="p0"> </p> <p class="p0"> </p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">我们打开人人网的注册页面,填写个人信息,<span style="font-family:Times New Roman;">Tellurium IDE</span><span style="font-family:宋体;">会自动记录我的操作。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;"><strong>Record </strong><span style="font-family:宋体;">:录制按钮。打开时默认是按下的,再次点击将取消录制状态。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;"><strong>Step </strong><span style="font-family:宋体;">:单步运行。点击一次,运行一步。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;"><strong>Run </strong><span style="font-family:宋体;">: 运行按钮。点击之后将会把脚本从头到尾运行一遍。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;"><strong>Clear </strong><span style="font-family:宋体;">: 清楚脚本。清楚录制的脚本。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;"> </span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">本例子录制了一个人人网的注册页面(不完整,只是填写了注册信息,并被“提交”注册)。</span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">我们切换到<span style="font-family:Times New Roman;">Source View</span><span style="font-family:宋体;">标签,可查看录制的代码。</span></span></p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">点击菜单栏<span style="font-family:Times New Roman;">File </span><span style="font-family:宋体;">可选择将代码以不同的形式导出或保存到剪切版上。 </span></span></p> <p class="p0"> </p> <p><img style="width:754px;height:306px;" title="开源自动化测试框架 Tellurium " border="0" alt="开源自动化测试框架 Tellurium " src="https://simg.open-open.com/show/6045cf624cbc97d4b57b1639c19bff10.png" /></p> <p> </p> <p> </p> <p><span style="font-size:18pt;">在Eclipse中运行测试代码</span></p> <p class="p0"> </p> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">我们在<span style="font-family:Times New Roman;">Eclipse</span><span style="font-family:宋体;">中创建一个</span>NewUiModule.groovy 的文件。并把我<span style="font-family:Times New Roman;">Tellurium IDE</span><span style="font-family:宋体;">中录制的代码插入,内容如下:</span></span></p> <p class="p0"> </p> <div class="cnblogs_code"> <pre><span style="color:#0000ff;">class</span> NewUiModule <span style="color:#0000ff;">extends</span> DslContext { <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> defineUi() { ui.Form(uid: "Regform", clocator: [tag: "form", action: "/s-c-i-reg.do", name: "regform", id: "regform", method: "post"]){ InputBox(uid: "RegEmail", clocator: [tag: "input", type: "text", <span style="color:#0000ff;">class</span>: "inputtext", id: "regEmail", name: "regEmail"]) InputBox(uid: "Pwd", clocator: [tag: "input", type: "password", <span style="color:#0000ff;">class</span>: "inputtext", id: "pwd", name: "pwd"]) InputBox(uid: "Name", clocator: [tag: "input", type: "text", <span style="color:#0000ff;">class</span>: "inputtext", id: "name", name: "name"]) RadioButton(uid: "Female", clocator: [tag: "input", type: "radio", value: "女生", id: "female", name: "gender"]) Selector(uid: "Birth_year", clocator: [tag: "select", name: "birth_year"]) Selector(uid: "Birth_month", clocator: [tag: "select", name: "birth_month"]) Selector(uid: "Birth_day", clocator: [tag: "select", name: "birth_day"]) Selector(uid: "Stage", clocator: [tag: "select", name: "stage", id: "stage"]) InputBox(uid: "Icode", clocator: [tag: "input", type: "text", <span style="color:#0000ff;">class</span>: "inputtext validate-code", id: "icode", name: "icode"]) Container(uid: "D_email", clocator: [tag: "dl", direct: "true", id: "d_email"]){ UrlLink(uid: "Xid_reg_handle", clocator: [tag: "a", text: "帐号", id: "xid_reg_handle"]) UrlLink(uid: "A", clocator: [tag: "a", text: "手机号"]) } Container(uid: "Dl_gender", clocator: [tag: "dl", direct: "true", <span style="color:#0000ff;">class</span>: "dl_gender"]){ RadioButton(uid: "Male", clocator: [tag: "input", type: "radio", value: "男生", id: "male", name: "gender"]) } } connectSeleniumServer() connectUrl "http://reg.renren.com/xn6245.do?ss=10113&rt=27" type "Regform.RegEmail", "dddd" type "Regform.RegEmail", "chongshi" type "Regform.Pwd", "123456" type "Regform.Name", "小三" click "Regform.Female" selectByLabel "Regform.Birth_year", "80后" selectByLabel "Regform.Birth_month", "7" selectByLabel "Regform.Birth_day", "8" selectByLabel "Regform.Birth_day", "7" selectByLabel "Regform.Stage", "已经工作了" type "Regform.Icode", "漂亮宝贝" } <span style="color:#008000;">//</span><span style="color:#008000;">Add your methods here </span><span style="color:#008000;"> </span> <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> searchDownload(String keyword) { keyType "TelluriumDownload.Input", keyword click "TelluriumDownload.Search" waitForPageToLoad 30000 } <span style="color:#0000ff;">public</span> String[] getAllDownloadTypes() { <span style="color:#0000ff;">return</span> getSelectOptions("TelluriumDownload.DownloadType") } <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> selectDownloadType(String type) { selectByLabel "TelluriumDownload.DownloadType", type } }</pre> </div> <p class="p0"> </p> <p class="p0"><span style="font-size:16px;">编写一个测试类对上面的方法时行测试:</span></p> <div class="cnblogs_code"> <pre><span style="color:#0000ff;">public</span> <span style="color:#0000ff;">class</span> NewTestCase <span style="color:#0000ff;">extends</span> TelluriumJavaTestCase { <span style="color:#0000ff;">private</span> <span style="color:#0000ff;">static</span> NewUiModule app; @BeforeClass <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">static</span> <span style="color:#0000ff;">void</span> initUi() { app = <span style="color:#0000ff;">new</span> NewUiModule(); app.defineUi(); } @Before <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> setUpForTest() { connectUrl("http://code.google.com/p/aost/downloads/list"); } @Test <span style="color:#0000ff;">public</span> <span style="color:#0000ff;">void</span> testTelluriumProjectPage() { String[] allTypes = app.getAllDownloadTypes(); assertNotNull(allTypes); assertTrue(allTypes[1].contains("All Downloads")); app.selectDownloadType(allTypes[1]); app.searchDownload("TrUMP"); } }</pre> </div> <p class="p0"> </p> <div id="trans-result-content"> <p><span style="font-size:16px;">编译项目并运行新的测试用例.</span></p> <p> </p> <p><span style="font-size:14pt;">TestNG创建项目</span></p> </div> <p class="p0"><span style="font-size:16px;">如果我们想创建一个testNG的项目,可以使用maven通过下面的命令进行创建。</span></p> <p class="p0"> </p> <div id="trans-result-content"> <span style="color:#008080;"><strong><span class="pln">mvn archetype</span><span class="pun">:generate</span><span class="pun">-</span><span class="typ">DgroupId</span><span class="pun">=</span><span class="pln">example </span><span class="pun">-</span><span class="typ">DartifactId</span><span class="pun">=</span><span class="pln">demo </span><span class="pun">-</span><span class="typ">DarchetypeArtifactId</span><span class="pun">=</span><span class="pln">tellurium</span><span class="pun">-</span><span class="pln">testng</span><span class="pun">-</span><span class="pln">archetype </span><span class="pun">-</span><span class="typ">DarchetypeGroupId</span><span class="pun">=</span><span class="pln">tellurium </span><span class="pun">-</span><span class="typ">DarchetypeVersion</span><span class="pun">=</span><span class="lit">0.6</span><span class="pun">.</span><span class="lit">0</span></strong></span> </div> <p> </p> <p><span style="font-size:16px;">相关资料阅读:</span></p> <p><span style="font-size:16px;">网站:</span></p> <p><span style="font-size:16px;"><a href="/misc/goto?guid=4959500806755158365">http://code.google.com/p/aost/</a></span></p> <p> </p> <p><a href="/misc/goto?guid=4959500806838403036" rel="nofollow"><span style="color:#000000;">一个简易</span></a>的文档:</p> <p>http://aost.googlecode.com/files/Ten.Minutes.To.Tellurium.pdf</p> <p> </p> <p>一段教你如何使用的视频</p> <p> </p> <p><a href="/misc/goto?guid=4959500806929761525" rel="nofollow">http://aost.googlecode.com/files/TenMinutesToTellurium.ogg</a></p> <p><br /> 来自:<a href="/misc/goto?guid=4959500807012284526" target="_blank">http://www.cnblogs.com/fnng/archive/2012/01/14/2322355.html</a></p>
本文由用户 jopen 自行上传分享,仅供网友学习交流。所有权归原作者,若您的权利被侵害,请联系管理员。
转载本站原创文章,请注明出处,并保留原始链接、图片水印。
本站是一个以用户分享为主的开源技术平台,欢迎各类分享!