zoukankan      html  css  js  c++  java
  • 自动遍历测试

    前沿:

    1、版本迭代过程中,为了保证新功能之外 还要保证原有老功能不受影响且运行正常, 而老功能回归遍历的工作量太大,优先级又相对较低;不适合投入较大工作量;

    2、使用UI自动化测试做回归遍历又有一些弊端, case过于繁琐,case量大,且运行case后的断言不易包含过多验证点; 因此使用UI自动化偏向于维护主流核心业务,且稳定性较高,链路不要太复杂为宜;

    3、现有的monkey可控性差,稳定性差,不支持定制;

    4、自动化遍历工具还适用于做健壮性测试;性能测试;专项测试等;

    因此急需引入新的开源自动化遍历工具appcrawler, 解决以上痛点.

    项目地址: https://github.com/seveniruby/AppCrawler

    执行方法:

    1、下载完成后, 启动Appium(该开源项目是基于Appium开发的);

    2、在项目路径下 运行  生成配置文

    java -jar appcrawler-2.4.0-jar-with-dependencies.jar --demo

      

    3、自定义配置文件  vim demo.yml

      设置运行配置  appium配置

      编写testcase  运行前的自动化程序 比如进入某个模块

      编写selectedList  编写该模块内遍历的内容项

      编写遍历的顺序  first  last

      设置遍历深度  maxDepth 可以先查看存在几层 urlStack=Activity (每个activity代表一层)

    pluginList: []

    saveScreen: true     #是否截图

    reportTitle: ""    #测试报告名字

    resultDir: "20190826111341"

    waitLoading: 500           #操作后的等待页面加载时间

    waitLaunch: 6000         #加载app等待时间 ,一般会有加载广告

    showCancel: true         #遍历页面时 页面中没有遍历到的内容是否展示

    maxTime: 10800       #最多执行时间

    maxDepth: 10        #遍历深度

    capability:         #capability 是appium相关配置 除了appium(配置服务地址),其余项与appium配置一致

      noReset: "true"

      fullReset: "false"

      appium: "http://127.0.0.1:4723/wd/hub"

    testcase:          #testcase用例配置  启动app后基础测试用例  自动化用例 比如想遍历某个模块,就配置进入该模块的步骤

      name: "TesterHome AppCrawler"

      steps:

      - given: []   #先决条件

        when: null  #条件成立后的执行行为

        then: []    #断言

        xpath: "/*" #when行为中的元素定位

        action: "Thread.sleep(5000)" #when行为元素的操作

        actions: []

        times: 0

     

     - when:   #简写形态,可以直接写when 寻找定位元素后 对其进行操作

        xpath: "/*" #when行为中的元素定位  元素定位可以使用xpath  正则  包含关系

           action: "Thread.sleep(5000)" #when行为元素的操作  默认是点击行为  可以改成函数driver.swipe(,,,) monkey随机事件,长按longTap,后退backApp(可以定制),

     - xpath:我的

       action:点击

      then:

     

    selectedList:      #selectedList 被选择控件清单列表,列表中没有 遍历过程中将不会被选中  可以在这个地方设置用例的遍历模块范围

    - given: []

      when: null

      then: []

      xpath: "//*[contains(name(), 'Button')]"   #遍历页面所有button

      action: null

      actions: []

      times: 0

    - given: []

      when: null

      then: []                     #遍历所有文本 且文本可被点击 长度小于10

      xpath: "//*[contains(name(), 'Text') and @clickable='true' and string-length(@text)<10]"

      action: null

      actions: []

      times: 0

    - given: []

      when: null

      then: []

      xpath: "//*[@clickable='true']/*[contains(name(), 'Text') and string-length(@text)<10]"

      action: null

      actions: []

      times: 0

    - given: []

      when: null

      then: []

      xpath: "//*[contains(name(), 'Image') and @clickable='true']"

      action: null

      actions: []

      times: 0

    - given: []

      when: null

      then: []

      xpath: "//*[@clickable='true']/*[contains(name(), 'Image')]"

      action: null

      actions: []

      times: 0

    - given: []

      when: null

      then: []

      xpath: "//*[contains(name(), 'Image') and @name!='']"

      action: null

      actions: []

      times: 0

    - given: []

      when: null

      then: []

      xpath: "//*[contains(name(), 'Text') and @name!='' and string-length(@label)<10]"

      action: null

      actions: []

      times: 0

    firstList: []  #优先遍历

    lastList:    #最后遍历

    - given: []

      when: null

      then: []

      xpath: "//*[@selected='true']/..//*"

      action: null

      actions: []

      times: 0

    - given: []

      when: null

      then: []

      xpath: "//*[@selected='true']/../..//*"

      action: null

      actions: []

      times: 0

    backButton:     #后退按钮

    - given: []

      when: null

      then: []

      xpath: "Navigate up"

      action: null

      actions: []

      times: 0

    triggerActions:      #遇到特点事件时触发动作, 一般处理弹窗

    - given: []

      when: null

      then: []

      xpath: "share_comment_guide_btn"

      action: null

      actions: []

      times: 0

    xpathAttributes:  #默认带哪些属性

    - "name"

    - "label"

    - "value"

    - "resource-id"

    - "content-desc"

    - "instance"  #动态变化的元素 instance定位有时不准确 需删掉

    - "text"

    sortByAttribute:

    - "depth"

    - "list"

    - "selected"

    findBy: "default"

    defineUrl: []

    baseUrl: []

    appWhiteList: []

    urlBlackList: []

    urlWhiteList: []

    blackList:  #黑名单

    - given: []

      when: null

      then: []

      xpath: ".*[0-9]{2}.*"

      action: null

      actions: []

      times: 0

    beforeRestart: []

    beforeElement:

    - given: []

      when: null

      then: []

      xpath: "/*"

      action: "Thread.sleep(500)"

      actions: []

      times: 0

    afterElement: []

    afterPage: []

    afterPageMax: 2

    tagLimitMax: 2  #同类型元素最多被点击次数

    tagLimit:       #设置限制,某个操作执行的次数限制

    - given: []

      when: null

      then: []

      xpath: "确定"

      action: null

      actions: []

      times: 1000

    - given: []

      when: null

      then: []

      xpath: "取消"

      action: null

      actions: []

      times: 1000

    - given: []

      when: null

      then: []

      xpath: "share_comment_guide_btn_name"

      action: null

      actions: []

      times: 1000

    assertGlobal: []  #遍历过程中的全局断言 

    - xpath: //*

      then:

      - //*[@package='com.xueqiu.android']  #可以断言操作过程中应用是否推出

    4、执行 java -jar <appcrawler Path> -c demo.yml -capability "appPackage=,appActivity=" -o /path/report


    pluginList: []
    saveScreen: false
    reportTitle: "演练"
    resultDir: ""
    waitLoading: 1000
    waitLaunch: 6000
    showCancel: true
    maxTime: 10800
    maxDepth: 10
    capability:
    appPackage: com.xueqiu.android
    appActivity: .view.WelcomeActivityAlias
    noReset: "true"
    fullReset: "false"
    unicodeKeyboard: true
    resetKeyboard: true
    appium: "http://127.0.0.1:4723/wd/hub"

    testcase:
    name: "TesterHome AppCrawler"
    steps:
    - xpath: //*[@text='行情']/../android.widget.ImageView              #点击行情
    - xpath: //*[contains(@resource-id, 'buttons_container')]//*[@text='私募']  #点击私募
    - { xpath: 私募排行,action: back }                      #点击返回

    selectedList:  #遍历模块范围
    - xpath: //*[contains(@resource-id, 'buttons_container')]//android.widget.TextView
    - xpath: //*[contains(@resource-id, 'ti_tab_indicator')]//android.widget.TextView
    - xpath: //*[contains(@resource-id, 'll_stock_item_container')]//android.widget.TextView

    firstList:
    - xpath: 基金
    lastList:
    - xpath: 极速开户
    backButton:
    - xpath: 转到上一层级
    triggerActions:   #遇到特定事件执行特定操作;遍历之前执行操作,进入固定页面  (也可以用于执行固定操作,如去弹框)
    - xpath: //*[contains(@resource-id, 'home_search')]//*[contains(@resource-id, 'tv_search')]
    times: 1
    - xpath: //android.widget.EditText  #定位输入框
    action: alibaba  #执行输入操作
    times: 1
    xpathAttributes:
    - "name"
    - "label"
    - "value"
    - "resource-id"
    - "content-desc"
    #- "instance"
    - "text"
    sortByAttribute:
    - "depth"
    - "list"
    - "selected"
    findBy: "xpath"
    defineUrl: []
    baseUrl: []
    appWhiteList: []
    urlBlackList: []
    urlWhiteList: []
    blackList:
    - given: []
    when: null
    then: []
    xpath: ".*[0-9]{2}.*"
    action: ""
    actions: []
    times: 0
    beforeRestart: []
    beforeElement:
    - given: []
    when: null
    then: []
    xpath: "/*"
    action: "Thread.sleep(500)"
    actions: []
    times: 0
    afterElement: []
    afterPage: []
    afterPageMax: 2
    tagLimitMax: 5   #同级别   同辈份的元素最多被遍历5次
    tagLimit:    #特定内容 最多被遍历10次
    - xpath: //*[contains(@resource-id, 'ti_tab_indicator')]//android.widget.TextView
    times: 10
    assertGlobal: []

     Xpath定位:

  • 相关阅读:
    ArcGIS API for javascript开发笔记(四)——GP服务调用之GP模型的规范化制作详解
    ArcGIS API for javascript开发笔记(三)——解决打印输出的中文为乱码问题
    ArcGIS API for javascript开发笔记(二)——解决ArcGIS Service中的服务在内网环境下无法进行javascript预览问题
    解决GP服务产生的结果无法自动发布为地图服务的问题
    解决oracle12c安装报“[INS-30131]执行安装程序验证所需的初始设置失败(原因:无法访问临时位置)”方法
    Pdf File Writer 中文应用(PDF文件编写器C#类库)
    七牛云存储客户端(本人开发,开源)
    如鹏网 net高级技术 第二章 委托和事件(复习)
    如鹏网 net高级技术 第一章 各种知识点(复习)
    写个QuartzHelper类
  • 原文地址:https://www.cnblogs.com/1026164853qqcom/p/11411439.html
Copyright © 2011-2022 走看看