STF 使用 stf_selector 模块来对 STF 上的 device 进行筛选

法布雷加斯 · 2016年12月29日 · 最后由 PEPSI 回复于 2018年12月10日 · 2127 次阅读
本帖已被设为精华帖!

项目的由来

在小红薯运行我们的分布式移动自动化 Cartier 项目的时候,我们经常需要根据一些不同的条件来筛选一批在部署在 STF 上符合要求的设备,并做为启动参数传入到我们的自动化框架中,实现 Android 设备的并行自动化。例如所有三星的机器,所有 Android 操作系统版本大于 5.0 的机器等。为了解决这个问题,我们实现了一个简单的 Python 模块来支持针对 STF 的 Restful 接口的返回结果进行高效方便的查询。相信很多在使用 STF 的团队也会和我们有一样的困扰,我们把这个项目开放给社区的同学使用,也希望可以收集到更多大家的需求,把这个工具做的越来越好

项目地址:https://github.com/RedQA/stf-selector

STF 的返回格式

下面是 STF 常见的返回一部手机信息


{'devices': [
            {
                'status': 3,
                'product': 'R9PlusmA',
                'browser': {
                    'selected': True,
                    'apps': [{}]
                },
                'reverseForwards': [],
                'battery': {},
                'statusChangedAt': '2016-10-21T13: 29: 16.111Z',
                'operator': ',',
                'owner': None,
                'airplaneMode': False,
                'presenceChangedAt': '2016-10-22T03: 28: 40.586Z',
                'ready': True,
                'using': False,
                'serial': '778d4f10',
                'createdAt': '2016-10-21T12: 30: 24.250Z',
                'sdk': '22',
                'network': {},
                'remoteConnect': False,
                'abi': 'arm64-v8a',
                'remoteConnectUrl': None,
                'platform': 'Android',
                'version': '5.1.1',
                'present': False,
                'provider': {
                    'name': 'red-Inspiron-3647',
                    'channel': 'O1HNR2n6Q+iWYV2YAEZRhw=='
                },
                'model': 'R9PlusmA',
                'manufacturer': 'OPPO',
                'display': {
                    'secure': True,
                    'height': 1920,
                    'width': 1080
                },
                'channel': 'a/nbaUCQMduULvq/8HeNTwtCWNs=',
                'phone': {}
            }
            ]
            }

常见的需求

  1. 需要所有 sdk 大于 19 的设备
  2. 需要所有三星的设备
  3. 需要 sdk 大于 21,并且是三星的手机
  4. 需要 display 的 height 是 1920,width 是 1080 的手机

环境需求

  • macOS,linux,windows
  • STF
  • python2、python3

轻松使用

安装 stf-selector

pip 安装:

$ pip install stf-selector

或者从 GitHub下载解压缩安装:

$ python setup.py install

常见的使用方法

根据 STF 的 API,首先需要一个 token,如何获取这个 token,可以参考 Authentication.获取完 token 以后,把 STF 和 token 赋值。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from stf_selector.selector import Selector
from stf_selector.query import where

# Your STF's url, like: https://stf.example.org/api/v1/user
url = ""
# Token genereated from the STF, some like:"3e5dd447c..."
token = "" 

一些例子

  • 得到所有 STF 上的设备
s = Selector(url=url, token=token)
device_list = s.load().devices()
  • 获取所有三星的设备
s = Selector(url=url, token=token)
s.load()
device_list = s.find(where("manufacturer")=="SAMSUNG").devices()
  • 获取版本是’5.0‘并且设备是’SAMSUNG‘的手机
s = Selector(url=url, token=token)
s.load()
conds = (where("manufacturer")=="SAMSUNG") & (where('version')=='5.0')
device_list = s.find(conds).devices()
共收到 10 条回复 时间 点赞
仅楼主可见

高手👍

不错,赞~

建议把标题里面的 “如何” 去掉吧,一开始还以为是提问帖。

数据库操作没困难呀。
r.table('devices').filter(r.row(manufacture).eq('SAMSUNG').and(r.row(version).eq('5.0')))
然后直接用 dpapi.loaddiveces().then()......

陈恒捷 将本帖设为了精华贴 12月30日 09:45

不错,赞一个👍

加精理由:功能实用,且做成了开源库分享,很符合社区鼓励的分享方式。

@jet 估计小法就要来踢中超了,要么你也复出踢一个?

手工赞一个。

用我的头像防守你的头像如何

记得更新打赏二维码或者个人微信. 你已经错过 10 元打赏

刘大头 [该话题已被删除] 中提及了此贴 06月05日 20:59
14楼 已删除
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册