Gate使用说明
Gate提供可视化的功能测试自动化建模工具和用例组织组和运行环境。测试自动化建模的数学理论基础是有向图,关于有向图理论能够参考 https://mathworld.wolfram.com/DirectedGraph.html Gate使用有向图模型表达测试执行逻辑,经过变量和模型引用支持测试逻辑分层。 咱们将介绍Gate的测试建模和测试框架的的功能和使用方法,详细内容能够参考《Gate教程》、《Gate使用参考》。javascript
测试模型
测试模型从“Start”节点开始运行,执行完毕后根据执行状态和链接条件选择下一个执行的节点,模型执行整个过程没有抛出异常或断言失败则执行成功不然执行失败。 html
模型元素
Gate测试模型的数学模型是一个有向矢量图,由带有方向的边和顶点由两类基本元素组成,Gate测试模型中顶点单元用于存储配置,并根据类型和配置执行预约义的操做;连线表达当前单元执行完毕后筛选下一个执行单元的条件,链接分为有向和无向的,无向连线用于解释说明其链接的单元不会被执行,有向连线表示执行条件,有向连线的无箭头一侧为起点,有箭头的一侧为终点。java
执行条件
执行条件能够是success、fail或next。success、fail条件即为执行单元的执行状态,next条件无视执行状态执行箭头指向的单元。一个执行单元链接多个条件,即下一步有多个单元可能根据执行条件被执行时,执行条件存在选择优先级,首先选择success条件,其次选择fail条件,最后选择next条件。当存在两个相同条件(如两个success)时,选择哪一个链接条件没有肯定的规律。 web
执行单元
- 执行单元执行某个预设的的操做,如打开某一个网页、寻找网页上某个元素进行点击操做等,执行单元执行完成后结果只能是功或失败两个状态。部分执行单元运行完成后还会返回字符串形式的执行结果,执行过程当中会配置某个属性、设置某个变量。
- JSR223采样器支持嵌入执行一段用户自定义代码,支持使用javascript和groovy,JSR223采样器和javascript、groovy语言的互相调用遵循Java JSR223规范。JSR223内置了一些预约义变量,能够实现获取并处理上一个采样器的结果。JSR223采样的内置预约义变量能够直接使用,变量名称和做用参考《Gate使用参考》。
- 全部元素的可配置参数在执行时转换成对应的Java基础数据类型,类型转换规则能够参考java 语言String转换各种数据的规则。参数配置支持基础数据类型,若是须要使用自定义或高级数据类型可使用JSR223采样器自定义完成。
注释
能够经过“note”类型连接和“comment”类型顶点能够给模型添加注释。“note”类型连接会被执行器忽略,“comment”单元只能和“note”连接。 chrome
模型运行
执行器
测试执行时系统会启动多个测试模型执行器执行器执行测试模型,模型从“start”顶点开始执行,按照顶点执行状态和执行条件顺序执行,当存在知足执行条件的测试模型时,执行器被建立并开始执行测试模型,模型执行完毕执行器会被系统销毁。执行器有最大个数限制,当到达最大个数限制时再也不分配新的执行器,若是存在知足执行条件的模型会等待已有执行器执行完毕再执行。浏览器
执行器最大数量在配置文件${GATE_HOME}/bin/gate.properties中的“gate.engine.test.runner.number”属性设置缓存
变量
- 定义和使用 变量能够经过“user define varaible”单元中配置或在JSR223单元中使用“vars”内 置变量定义,当定义变量的单元被执行后变量生效。当定义变量的单元被执行时变量没有被定义则生成一个变量,当定义变量的单元被执行时变量已经存在则从新赋值这个变量,变量只支持字符串一种类型。经过“${变量名}”方式使用变量,运行时“${变量名}”会被替换成变量的值。变量只有字符串一种类型,运行时会被转换成Java基础类型。
- 变量做用域 变量在test Suites中的“user define varaible”被定义时,会在整个测试执行过程生效;变量在test Suite中的“user define varaible”被定义时,会在这个test suite中全部的测试模型中生效;变量在test Case中的“user define varaible”被定义时,会在这个test case模型中生效;变量在测试模型中的“user define varaible”或JSR223单元被定义时会在这个单元执行后生效。
采样器返回值
模型的顶点有多种类型,模型执行时采样器类型的单元执行结果会被缓存直到下一采样器类型的单元执行完毕后替换,提取器和JSR223类型的PreResult预置变量处理的都是缓存的采样器执行结果。
多线程
测试框架
常见自动化测试框架都提供了,用例分组、夹具、用例筛选、用例依赖、数据驱动、用例执行最终报告输出,经过这些功能提供自动化测试组织和执行层面的支持,Gate的测试框架部分也提供了这些功能用于组织和执行测试用例。框架
用例分组
测试用例分组方式采用test suite/test case两层结构,根节点上能够添加test suite,test suite节点上能够添加test case,测试用例分组信息彻底和Test树形菜单相同。测试用例能够在所在的test suite中用鼠标拖拽调整顺序,也能够在不一样的分组中拖拽调整分组。 ide
夹具
夹具备setup、teardown两种类型,能够添加至于test suite或test suites,setup在测试用例执行以前执行,teardown在全部测试用例执行以后执行。当夹具添加在test suites及根节点上时,会在全部用例以前或以后执行,当夹具添加在test suite上时,会在所在test suite内的全部用例以前或以后执行。当同级目录存在多个相同类型的测试夹具时,按照它们在树的上下位置顺序执行。夹具能够被拖拽以调整执行次序,夹具能够被启用或禁用。
用例筛选
在图形模式执行用例时,从图形界面点击绿色箭头执行测试会筛选已经选中的test case、test suite、test suites。按下“ctrl”键点击鼠标,能够选择多个单元, 被选中的test case会被执行,当test suites即测试树形菜单根节点被选中时执行所有测试用例,当test suite节点被选中时会执行test suite内包含的所有用例,test suite、test case为“enable”状态时才会被执行。 命令行模式执行用例时,能够经过参数执行单元名称前缀筛选须要执行的test suites或test cases。
用例依赖
Gate可支持测试用例级别的多线程执行,多线程执行默认是开启的,能够经过设置行线程的最大数量令其单线程执行。多线程执行时执行测试用例的顺序并非固定的,能够设置测试用例依赖令其在某些测试用例执行成功以后执行。测试用例只能依赖处于上方的测试用例,当被依赖的用例状态为“disable”时在执行前会提示错误。
数据驱动
测试用例单元能够添加数据驱动单元,添加数据驱动单元至测试用例后,测试用例会根据csv data provider配置的csv文件内容迭代执行测试用例,每一个迭代读csv中的一行数据做为参数,生成一个数字后缀的测试用例结果,csv文件没有下一行数据时中止迭代这个测试用例而且设置本次执行结果的状态为失败。
测试执行
测试的执行过程分为生成和执行测试计划两个阶段,制定测试计划时从新调整筛选出的测试用例执的执行顺序并添加对应的测试夹具,执行测试计划时会寻找知足执行条件的用例或夹具,当找到知足把用例、夹具模型分派给模型执行器,当存在多个知足执行条件的用例或夹具时会启动多个执行器执行这些用例或夹具。
生成测试计划
测试计划根据筛选出的测试用例生成,测试夹具会根据筛选的测试用例自动被执行,不能指定执行测试夹具。生成测试计划时检查本次执行筛选的测试用例的依赖关系是否知足,当存在一个测试用例依赖不存在或禁用的测试用例时,中止并提示错误。所有用例的依赖关系被知足时,会依次把没有依赖的测试用例放在有依赖的测试用例以前。
执行测试计划
执行测试计划时,首先执行setup夹具,所有setup执行成功后开始执行测试用例,test suite内的所有测试执行完毕后执行test suite内的teardown夹具,所有test suite内的teardownn夹具执行完毕后,开始执行test suites及根目录内的teardown夹具。模型容器的的执行结果有成功、错误和失败三种,执行错误可能出如今模型执行前置条件不能知足,被外部中止,或执行过程当中出现未知错误。 执行夹具: 执行用例阶段,首先寻找并顺序执行test suites包含的setup夹具,此时不会启动多个执行器同时执行,test suites中的setup夹具共享上下文及前一个setup中定义的变量会向下传递。Test suites中的setup执行失败时中止测试执行,所有顺序执行成功后,开始执行每一个test suite中的setup夹具,不一样test suite中的setup夹具可能会同时执行,可是同一个test suite中的setup夹具会保持一个执行器顺序执行。
test suites及根目录中的setup夹具的变量会向下级目录的测试用例或夹具模型传递,test suite及二级目录中setup的变量不会向同级目录其余模型容器传递。
执行测试用例: 当test suite中的所有setup夹具执行成功后,开始执行测试用例。测试用例会被分配给模型执行器执行,此时当多个用例知足执行条件时会同时启动多个执行器执行测试用例。没有依赖其余用例的会被直接分配执行器并执行,依赖其余用例执行的用例在被依赖的用例执行成功后执行,当被依赖的测试用例执行不成功及结果为错误或失败,依赖它的所有用测试用例的执行结果会被设置成错误。 当test suite中的setup夹具执行结果为失败或错误时,其后全部的setup夹具和测试用例都不会执行测试用例结果都会被设置为错误。
执行结果
测试执行结果显示在下方面板中的“result”页签中的树形界面,测试进入执行阶段时会清空上次运行的结果,测试模型执行开始时会添加一个同名的结果节点至结果树,模型执行过程当中全部可执行单元的的执行结果做为子节点添加到这个节点。当模型经过action执行单元引用action模型时,执行action时会在这个模型的结果节点下新增一个和action执行单元同名的结果节点,action模型的执行单元的执行结果会做为子节点添加至action执行单元的结果节点。 Test Suites结果节点会记录测试计划执行的统计结果, Test suite结果节点会记录这个test suite执行的统计信息, Test suites节点显示执行所有用例的统计信息。
使用Selenium
- 经过使用Selenium采样器模型元素实现页面自动化测试,使用Driver、Windows和Navigtion进行浏览器相关的操做,使用Element对页面元素进行定位和操做,使用Selenium timeout设置全局的等待时间。
- 使用Element单元首先根据条件对页面元素定位并进行隐式等待,知足条件的页面元素出现后进行操做,不知足时抛出异常模型会中止执行,当须要判断页面元素是否知足条件,根据判断的结果选择下一步执行哪一个单元时可使用Expected Conditions,Expected Conditions有更多的隐式等待条件,隐式等待超时后会以失败状态结束而不是抛出异常终止模型执行。 使用Element单元时,能够根据条件对页面的操做进行截图,默认在执行失败失败时截图,能够在${GATE_HOME}/bin中的gate.properties中关闭截图配置或修改成任何操做都截图
# Condition for when to take screens shot. The options are always, fail or never gate.selenium.screenshot.condition=fail
- Selenium对应元素都有“driver_id”配置项用于支持在一个测试模型中操做多个浏览器,当使用Driver的Create或CreateRemote方法时会创WebDriver对象(能够简单理解为浏览器窗口)并把WebDriver和“driver_id”中配置的值存储前来造成一个键值对,其余Selenium元组经过“driver_id”配置,能够操做指定的WebDriver对象(浏览器窗口)。经过配置不一样的“driver_id”建立多个窗体和使用不一样的“driver_id”操做不一样的窗体能够实如今一个测试模型中操做多个浏览器。
- 使用Deriver元的的Create方法时须要配置系统变量,能够在${GATE_HOME}/bin中的system.properties中配置,以chrome和firefox为例
webdriver.chrome.driver=C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe webdriver.gecko.driver=C:\\Program Files (x86)\\Mozilla Firefox\\geckodriver.exe
- GUI模式运行时,测试模型执行完毕时若是没有执行Driver单元的quite方法会保留浏览器窗体,能够经过修改gate.properties中的参数在模型执行关闭测试模型打开的窗体。CMD模式运行时会在测试用例执行完毕关闭全部测试用例打开的窗体。
- Selenium CodeSnippet采样器是JSR223单元的一个扩展,能够更方便的使用Selenium API, Gate并无提供全部Selenium API的图形化封装,使用CodeSnippet能够完成全部Selenium Java API操做。Code Snippet比JSR223单元预约义内置变量多了一个“driver”变量,dirver变量为根据根据“driver_id”配置的键值获取的WebDriver,经过“driver”能够完成全部Selenium API的操做。CodeSnippet只支持使用Groovy, 因为Groovy对Java的彻底兼容性,能够直接使用Selenium的Java API。Selenium Java API 使用请参考Selenium相关文档。 移动鼠标示例:
import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.By; element = driver.findElement(By.linkText("sometext")); new Actions(driver).moveToElement(element).click().perform();
使用HTTP
- 经过使用HTTP相关采样器能够实现发送HTTP请求或者经过HTTP协议上传文件,HTTP采样器使用Apache Http Client实现。当模型运行到HTTP采样器时,首先根据URL和端口查找是否有已经建立的httpclient,若是没有会新建一个,若是有使用已经存在的。模型执行完时执行测试用例建立所用的httpclient的close方法释放资源。
- Apache Http Client对“https”提供了默认的实现,具体内容请参考Apache Http Client4.5以上版本文档。使用“https”协议须要使用指定证书时可使用"ssl manager"导入证书,GUI模式下菜单栏选择“Options->ssl manager”,选择须要使用的证书便可,下一次启动GUI模式须要从新导入证书。CMD模式会读取java系统变量,可使用"-D"也能够在“system.properites”中对应的证书配置
javax.net.ssl.keyStorePassword=123456 javax.net.ssl.keyStore=D:/swdtools/2waycert/client.p12