123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- import re
- import time
- import requests
- import ssat_sdk.uiautomator2 as u2
- from logzero import logger
- import logging
- logger.setLevel(logging.DEBUG)
- def install_apk(device_url, apk_url):
- """
- Args:
- device_url: udid, device_ip or serial(when usb connected)
- """
- psurl = pkgserv_addr(device_url)
- _http_install_apk(psurl, apk_url)
- def pkgserv_addr(device_url):
- """
- 根据设备线获取到atxserver的地址,然后再获取到u2init的地址,直接再决定是无线安装还是手动安装
-
- Returns:
- Package API url
- """
- logger.info("device url %s", device_url)
- d = u2.connect(device_url)
- devinfo = d.device_info
- serial = devinfo['serial']
- logger.info("serial %s, udid %s", serial, devinfo['udid'])
- aserver_url = devinfo.get(
- "serverUrl",
- "http://wifiphone.nie.netease.com")
- logger.info("atx-server url %s", aserver_url)
- r = requests.get(
- aserver_url + "/devices/" + devinfo['udid'] + "/info").json()
- pvd = r.get('provider')
- if not pvd:
- logger.info("u2init not connected")
- return "http://" + d.wlan_ip + ":7912/packages"
- pkg_url = 'http://%s:%d/devices/%s/pkgs' % (pvd['ip'], pvd['port'], serial)
- logger.info("package url %s", pkg_url)
- return pkg_url
- def _http_install_apk(pkg_restapi, apk_url):
- """ install apk from u2init """
- resp = requests.post(pkg_restapi, data={"url": apk_url}).json()
- if not resp.get('success'):
- raise RuntimeError(resp.get('description'))
- id = resp['data']['id']
- logger.info("install id %s", id)
- _wait_installed(pkg_restapi + "/" + id)
- def _wait_installed(query_url):
- """ query until install finished """
- while True:
- data = safe_getjson(query_url)
- status = data.get('status')
- logger.debug("%s %s", status, data.get('description'))
- if status in ("success", "failure"):
- break
- time.sleep(1)
- def safe_getjson(url):
- """ get rest api """
- r = requests.get(url).json()
- desc = r.get('description')
- if not r.get('success'):
- raise RuntimeError(desc)
- return r.get('data')
- def main():
-
-
- apk_url = "https://gohttp.nie.netease.com/tools/apks/qrcodescan-2.6.0-green.apk"
-
-
-
- psurl = pkgserv_addr("10.242.163.69")
- install_apk(psurl, apk_url)
- if __name__ == '__main__':
- main()
|