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

本帖已被设为精华帖!,

项目的由来

在小红薯运行我们的分布式移动自动化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()

* 注:本文来自网络投稿,不代表本站立场,如若侵犯版权,请及时知会删除