自动化框架Quantum Automation Framework (JAVA,Appium,TestNG,QAF) + cucumber + perfecto (web)

偶然接触到该框架,发现国内网上资料很少,仅以此作为学习笔记分享,描述理解有错误欢迎指正。(转载请注明出处)

Quantum是一款基于JAVA的自动化框架,可用于手机app(mobile web,mobile混合应用)和桌面web自动化测试。特点是与cucumber和perfecto框架整合,实现自动化测试用例的BDD案例编写,分析以及云端真机测试。不过提供云端真机测试的perfecto是收年费的。然后即便如此,该框架也能搭配Appium和模拟器对手机实现本地测试。

Quantum的官方主页是http://projectquantum.io/。 并且提供了Github仓库供下载使用(https://github.com/Project-Quantum/Quantum-Starter-Kit/wiki)。不过该项目说明文档中的参数设置多数是和perfecto相关。


下载和安装

  1. 该框架实用与Eclipse和IntelliJ IDEA(社区版即可),所以首先确保电脑上安装了其中之一,同时安装有JDK并且配置好了JAVA_HOME环境变量。

  2. 另外该项目是基于MAVEN创建,所以也需要安装MAVEN并配置环境变量。其他必要插件包括Maven Plugin for IDEA和 Cucumber PluginTestNG Plugin (该插件IDEA已经内置)。如果购买了perfecto服务,请下载perfecto CQ Lab Plugin,不得不说的确很好用。

  3. 准备好后,下载项目,重命名后,以Maven方式导入项目(POM.XML),等待IDEA自动更新依赖关系。由于访问Maven中央仓库的速度国内很慢,建议使用国内几个大型仓库。在POM.XML中加入如下存储库地址


也可以在Maven的setting.XML文件中添加镜像,后续会尝试自己搭建一个专门针对该框架的个人云仓库。


桌面Web自动化配置

  1.  打开根目录resource文件夹下面的application.properties文件,该文件是对测试环境的一个初始配置文件,把里面和perfecto相关的设置注释掉同时设置本地的webdriver,其实还有一个方法是在测试执行的testNG.xml添加参数来让程序执行本地的webdriver,以后会提到。



  2. 进入src/main/resources/config文件夹下,可以看到有3个testNG的xml的用例参数配置文件,同时也是通过执行这3个文件来开启自动化测试(test suit),选中testng_web_desktop.xml。

<listeners>
   <listener class-name="com.quantum.listeners.QuantumReportiumListener" />
</listeners>

  <listeners>是默认的监听端口,不用更改。

<test name="Web Scenarios Chrome Test" enabled="true">

  <test>标签指名单个test case,name为test case名字,对应出现在test report中便于定位。enabled属性表示该suit是否执行。thread-count是设置并发线程数量。作为测试,把后两个test case设置为不执行。

  在parameter标签是测试参数设置,也就是前面提到的,可以把application.properties文件里的配置单独写在这里。标签在<test>内是对该case的设置,写在外面则是针对整个test suit的全局设置。

<groups>
   <run>
      <include name="@Web" />
   </run>
</groups>

  <groups> <run>标签指定的是测试场景,也就是test case需要执行的具体步骤。这里就是quantum框架的特色了。


  3. 定义测试场景

进入进入src/main/resources/scenarios文件夹下,该文件夹包含了所有测试用例需要的测试场景以及步骤,也就是具体的test case内容。quantum结合了cucumber架构(Given, When, And, Then, etc....),使用自定义关键字来编写test case(和RF的关键字方式类似),@为系统自定义关键字,在feature文件中用来设定并区分不同的测试模块。

@Web
Feature: Baidu Search

  @WebSearch
  Scenario: Search Quantum
    Given I am on Baidu Search Page
    When I search for "quantum perfecto"
    Then it should have "Supersymmetric" in search results
    Then I am on Baidu Search Page

  @WebResultsList
  Scenario: Search Quantum with results
    Given I am on Baidu Search Page
    When I search for "Project-Quantum Quantum-Starter-Kit"
    Then it should have following search results:
      | Project for Web Qa F |
      | 自动化框架Quantum |

  @WebDD
  Scenario Outline: Search Keyword Inline Data
    Given I am on Baidu Search Page
    When I search for "<searchKey>"
    Then it should have "<searchResult>" in search results

    Examples:
      | recId | recDescription     | searchKey               | searchResult                  |
      | 1     | First Data Set | quantum perfecto       | Supersymmetric quantum |
      | 2     | Second Data Set    | Project-Quantum Quantum-Starter-Kit | Project for Web Qa F|

  4. 编写test step的实现方法,上图中通过类自然语言执行的test step,需要编写对应的程序操作。/src/main/java中包含所有需要实现的方法的类。为了演示,这里修改了一些程序,让其在百度里做搜索测试。

@QAFTestStepProvider
public class GoogleStepDefs {
   @Given("^I am on Baidu Search Page$")
   public void I_am_on_Google_Search_Page() throws Throwable {
      new WebDriverTestBase().getDriver().get("https://www.baidu.com/");
   }

   @When("^I search for \"([^\"]*)\"$")
   public void I_search_for(String searchKey) throws Throwable {
      QAFExtendedWebElement searchBoxElement = new QAFExtendedWebElement("search.text.box");
      QAFExtendedWebElement searchBtnElement = new QAFExtendedWebElement("search.button");

      searchBoxElement.clear();
      searchBoxElement.sendKeys(searchKey);
      // Web and mobile elements are sometimes different so we have done two things we
      // used multiple/alternate locator strategy for finding the element.
      // We also used Javascript click because the element was getting hidden in
      // Desktop Web due to suggestions and was not clickable. This java script click
      // will work for both desktop and mobile in this case.
      JavascriptExecutor js = (JavascriptExecutor) DeviceUtils.getQAFDriver();
      js.executeScript("arguments[0].click();", searchBtnElement);

   }

   @Then("^it should have \"([^\"]*)\" in search results$")
   public void it_should_have_in_search_results(String result) throws Throwable {
      QAFExtendedWebElement searchResultElement = new QAFExtendedWebElement("partialLink=" + result);
      searchResultElement.verifyPresent(result);

一些参数,比如search.text.box,这是可以自定义的,方便维护,在testng的config的文件中,可以通过如下配置,为你的test suit导入程序专用的参数。

<parameter name="env.resources" value="src/main/resources/common" />

参数放在src/main/resources/common中的**.loc文件里

#locator repository for search page
search.text.box = {\"locator\":\"name=wd\",\"desc\":\"Search Text Box\"}
#The syntax used below is called alternate locator strategy. The element will be searched using the first locator and if there is no element then the second locator will be tried.
search.button=["xpath=//input[@id='su']","xpath=//button[@aria-label='Google Search']"]
一切准备好后就可以运行testng文件来执行自动化测试了。


猜你喜欢

转载自blog.csdn.net/LeonLee85/article/details/80892401