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

Selenium Grid方案

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

Grid的原理
使用HUB来控制服务端对应的节点,我们只要通过脚本来控制HUB,来通过HUB来通过对应的服务来执行用例即可
App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第1张图片
App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第2张图片
优点:
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

注册node节点:java -jar selenium-server-standalone-3.141.59.jar -role node -nodeConfig node.json
App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第3张图片
2、然后进入:http://30.203.160.103:4444/grid
App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第4张图片
地址: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>"
  }
}

配置后

{
  "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"
  }
}

App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第5张图片
4、配置好json文件后,运行json文件注册对应节点

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

App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第6张图片
这时再访问下【http://30.203.160.103:4444/grid/console】就可以发现多一个设备注册成功了。
App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第7张图片
在HUB端查看注册出的节点
App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第8张图片
添加节点到脚本中

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)

多设备时,添加新的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"
  }
}

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)

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

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

自动化遍历测试

常见的遍历测试工具

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

Android monkey 测试工具

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

安装
Android SDK提供了Monkey工具
使用移动设备
App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第9张图片
App测试工具 Appium(Selenium) Grid方案 Android monkey 测试工具 Maxim测试工具 AppCrawler openSTF手机管理平台、远程管理、调试_第10张图片

使用
基本配置选项,例如设置事件数量
操作约束,例如对指定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

命令行模式
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

2、模式 DFS

--uiautomatordfs
深度遍历算法

3、模式Troy

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

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

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

docker pull openstf/stf:latest
docker pull sorccu/adb:latest
docker pull rethinkdb:latest

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

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

启动stf

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

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

adb -s 手机设备名 tcpip 6666

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

adb -s 手机设备名 shell  ifconfg

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

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

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

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

新增工具

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

你可能感兴趣的:(测试开发,测试,测试工具,selenium,android)