当前位置:   article > 正文

App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_selenium app版本

selenium app版本

Selenium Grid方案

Selenium工具集
Selenium Remote Control 原始版本
Selenium WebDriver
Selenium Server 调用远程浏览器
Selenium Client 脚本端
Selenium IDE 录制脚本
Selenium Grid 分布式

Grid的原理
使用HUB来控制服务端对应的节点,我们只要通过脚本来控制HUB,来通过HUB来通过对应的服务来执行用例即可
在这里插入图片描述
在这里插入图片描述
优点:
1、所有测试的中心入口点
2、管理和控制浏览器,手机设备等运行的NOdes/环境
3、扩展
4、并行运行测试
5、跨平台的测试
6、负载平衡

安装
官方下载https://www.selenium.dev/downloads/
Selenium Grid文档:https://github.com/SeleniumHQ/selenium/wiki/Grid2
Appium Grid文档:https://www.selenium.dev/documentation/zh-cn/grid/

启动
1、Selenium Grid启动
https://www.selenium.dev/documentation/zh-cn/grid/grid_3/setting_up_your_own_grid/
Appium Grid启动
到对应jar包下运行

java -jar selenium-server-standalone-3.141.59.jar -role hub
  • 1

注册node节点:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node.json
在这里插入图片描述
2、然后进入:http://30.203.160.103:4444/grid
在这里插入图片描述
地址:http://30.203.160.103:4444/grid/console
在这里插入图片描述
3、然后通过http://appium.io/docs/cn/advanced-concepts/grid/获取到配置文件
原配置文件

{
  "capabilities":
      [
        {
          "browserName": "<e.g._iPhone5_or_iPad4>",
          "version":"<version_of_iOS_e.g._7.1>",
          "maxInstances": 1,
          "platform":"<platform_e.g._MAC_or_ANDROID>"
        }
      ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "url":"http://<host_name_appium_server_or_ip-address_appium_server>:<appium_port>/wd/hub",
    "host": <host_name_appium_server_or_ip-address_appium_server>,
    "port": <appium_port>,
    "maxSession": 1,
    "register": true,
    "registerCycle": 5000,
    "hubPort": <grid_port>,
    "hubHost": "<Grid_host_name_or_grid_ip-address>"
    "hubProtocol": "<Protocol_of_Grid_defaults_to_http>"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

配置后

{
  "capabilities":
      [
        {
          "browserName": "Android",
          "version":"6.0",
          "maxInstances": 1,
          "platform":"Android"
        }
      ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "url":"http://localhost:4723/wd/hub",
    "host":"localhost",
    "port":4723,
    "maxSession": 1,
    "register": true,
    "registerCycle": 5000,
    "hubPort": 4444,
    "hubHost": "30.203.160.103",
    "hubProtocol": "http"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

在这里插入图片描述
4、配置好json文件后,运行json文件注册对应节点

appium --nodeconfig node.json  # 这时不要启动appium服务
  • 1

在这里插入图片描述
这时再访问下【http://30.203.160.103:4444/grid/console】就可以发现多一个设备注册成功了。
在这里插入图片描述
在HUB端查看注册出的节点
在这里插入图片描述
添加节点到脚本中

class App(BasePage):
    _package = "com.xueqiu.android"
    _activity = ".view.WelcomeActivityAlias"

    def start(self):
        if self._driver is None:
            desire_cap = dict()
            desire_cap["platformName"] = "android"
            desire_cap["deviceName"] = "emulator-5554"
            desire_cap["appPackage"] = self._package
            desire_cap["appActivity"] = self._activity
            desire_cap["noReset"] = True
            self._driver = webdriver.Remote('http://30.203.160.103:4444/wd/hub',desire_cap)  # 通过HUB注册出的脚本
        else:
            self._driver.start_activity(self._activity,self._package)
        self._driver.implicitly_wait(15)
        return self

    def main(self):
        return Main(self._driver)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

多设备时,添加新的json文件(注意指明设备udid)

{
  "capabilities":
      [
        {
          "browserName": "Android",
          "version":"6.0",
          "maxInstances": 1,
          "platform":"Android"
        }
      ],
  "configuration":
  {
    "cleanUpCycle":2000,
    "timeout":30000,
    "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
    "url":"http://127.0.0.1:4725/wd/hub",    #  更改了端口
    "host":"127.0.0.1",
    "port":4725,  #  更改了端口
    "maxSession": 1,
    "register": true,
    "registerCycle": 5000,
    "hubPort": 4444,
    "hubHost": "30.203.160.122",
    "hubProtocol": "http"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

client端指定设备名udid

class App(BasePage):
    _package = "com.xueqiu.android"
    _activity = ".view.WelcomeActivityAlias"

    def start(self):
        if self._driver is None:
            desire_cap = dict()
            desire_cap["platformName"] = "android"
            desire_cap["deviceName"] = "emulator-5554"
            desire_cap["udid"] = os.getenv("udid",None)   # 获取系统的udid
            desire_cap["appPackage"] = self._package
            desire_cap["appActivity"] = self._activity
            desire_cap["noReset"] = True
            self._driver = webdriver.Remote('http://30.203.160.122:4444/wd/hub',desire_cap)
        else:
            self._driver.start_activity(self._activity,self._package)
        self._driver.implicitly_wait(15)
        return self

    def main(self):
        return Main(self._driver)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

使用shell脚本一步运行该文件的多条用例

for i in `adb devices | grep 'device$' | awk '{print $1}'`
do
    echo $i
    udid = $i pytest test_search.py & 
done
  • 1
  • 2
  • 3
  • 4
  • 5

自动化遍历测试

常见的遍历测试工具

google android 原生monkey、app crawler
百度 smartmonkey
腾讯 newmonkey
vigossjjj smart_monkey
macaca 的 NoSmoke
头条的zhangzhao maxim
weveniruby appcrawler

Android monkey 测试工具

简介:
Monkey是一个子啊模拟器或设备上运行的程序
生产用户事件的伪随机流

安装
Android SDK提供了Monkey工具
使用移动设备
在这里插入图片描述
在这里插入图片描述

使用
基本配置选项,例如设置事件数量
操作约束,例如对指定App进行测试
事件类型和频率
调试选项
adb shell monkey [options] 事件计数

使用Monkey基本命令
abd shell monkey 100 对所有包随机操作
adb shell monkey -p com.xueqiu.android 100 指定包
adb shell monkey -p com.xueqiu.android -s 20 80 时间种子(方便回溯,重复同样的操作)
adb shell monkey -p com.xueqiu.andorid -vv -s 20 80 详细日志 (-s 指定有规律的)
adb shell monkey -p com.xueqiu.android --throttle 5000 100 时间延迟
adb shell monkey -p com.xueqiu.android --pct-touch 10 1000 提升事件百分比(这里是提升touch事件到10%)
相关事件:
–pct-touch:触摸事件,比如:点击
–pct-motion:动作事件,比如:滑动
–pct-trackball:轨迹事件,比如:移动 + 点击,曲线滑动
–pct-majornav:主要导航事件,比如:回退按钮,菜单按键

Maxim 工具

Android Monkey 进行改进
1、基于遍历规则
2、高性能

使用
下载地址:https://github.com/zhangzhao4444/Maxim
将 framework.jar , monkey.jar push 到手机上某个目录中,建议/sdcard

adb push framework.jar /sdcard
adb push monkey.jar /sdcard
  • 1
  • 2

命令行模式
cmd 命令 : adb shell CLASSPATH=/sdcard/monkey.jar:/sdcard/framework.jar exec app_process /system/bin tv.panda.test.monkey.Monkey -p com.panda.videoliveplatform --uiautomatormix --running-minutes 60 -v -v
参数说明:
tv.panda.test.monkey.Monkey: monkey入口类,不要修改
com.panda.videoliveplatform: 被测app包名,需要修改
–uiautomatormix: 遍历策略

策略
1、模式DFS–uiautomatordfs
- 增加深度遍历算法
2、模式Mix–uiautomatormix
- 使用accessibilityserver获取界面接口解析各控件
- 随机选取一个控件执行touch操作
- 同时与原monkey其他操作按比例混合使用
策略
1、模式 Mix (基于事件概率的压力测试)

--uiautomatormix
直接使用底层accessibiltyserver获取界面接口 解析各控件,随机选取一个控件执行touch操作。
  同时与原monkey 其他操作按比例混合使用
  默认accessibilityserver action占比50%,其余各action分剩余的50%
  accessibilityserver action占比可配置 --pct-uiautomatormix n
  • 1
  • 2
  • 3
  • 4
  • 5

2、模式 DFS

--uiautomatordfs
深度遍历算法
  • 1
  • 2

3、模式Troy

--uiautomatortroy
控件选择策略按max.xpath.selector配置的高低优先级来进行深度遍历
  • 1
  • 2

4、保留原始monkey

5、总运行时长 --running-minutes 3 运行3分钟

6、–act-whitelist-file /sdcard/awl.strings 定义白名单 --act-blacklist-file

其他参数与原始monkey一致

AppCrawler

后续…

openSTF 手机管理平台、远程管理、调试

介绍
1、地址:https://github.com/openstf/stf
2、OpenSTF是一个手机设备管理平台
3、可以对手机进行远程管理、调试、远程手机桌面监控等操作
4、最好使用Linux系统、Mac系统
5、NODE_VERSION=8.16.1

Mac安装:

brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config
  • 1

windows安装
使用Docker安装
1、拉取镜像

docker pull openstf/stf:latest
docker pull sorccu/adb:latest
docker pull rethinkdb:latest
  • 1
  • 2
  • 3

2、启动上面拉去的镜像
启动rethinkdb

docker run -d --name rethinkdb -v /宿主机目录:/data --net host rethinkdb
rethinkdb --bind all --cache-size 8192 --help-port 8090
  • 1
  • 2

启动stf

docker run -d --name stf --net host openstf/stf stf local --allow-remote
  • 1

然后访问:localhost:7100
API使用说明
说明文档:https://github.com/openstf/stf/blob/master/doc/API.md
远程连接手机
1、将手机使用手机线连接到电脑,并且在手机的设置中打开开发者模式。
2、在电脑终端,使用adb devices查看设备是否连接上,然后在stf中查看是否连接上
3、给手机开一个远程调试端口 使用命令

adb -s 手机设备名 tcpip 6666
  • 1

4、查看手机ip地址(部分手机设置了权限无法查看,这时就只能直接在手机上查看了)

adb -s 手机设备名 shell  ifconfg
  • 1

5、查看主机ip确认是否和手机是在一个网段下(确认在同一网段后)
6、开始使用远程连接来连这个设备,终端操作

adb connect 自己手机的IP地址:6666 (加上开的调试端口这是是6666)
  • 1

7、这时再使用adb devices查看下是否连接成功,然后在stf网页中查看是否连接上。如果成功就连接成功了。
如果没有成功,可以重新连接下:

adb kill-server
adb start-server
adb connect 自己手机的IP地址:6666 (加上开的调试端口这是是6666)
  • 1
  • 2
  • 3

新增工具

Instruments 使用说明:https://www.jianshu.com/p/dcc342cda042?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
Traceview 使用说明:https://www.jianshu.com/p/7e9ca2c73c97

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/417888
推荐阅读
相关标签
  

闽ICP备14008679号