# 安卓

基于 linux 的原理,通过 cat /proc/进程id/net/dev 拿到网卡数据;

间隔一秒 分别拿到两次发送数据量、接受数据量 ( sendNum_pre recNum_pre

然后计算数据差,得到网速

def getAndroidNet(self, wifi=True):
    """Get Android send/recv data, unit:KB wlan0/rmnet0"""
    net = 'wlan0' if wifi else 'rmnet0'
    cmd = f'cat /proc/{self.pid}/net/dev |{d.filterType()} {net}'
    output_pre = adb.shell(cmd=cmd, deviceId=self.deviceId)
    m_pre = re.search(r'{}:\s*(\d+)\s*\d+\s*\d+\s*\d+\s*\d+\s*\d+\s*\d+\s*\d+\s*(\d+)'.format(net), output_pre)
    sendNum_pre = round(float(float(m_pre.group(2)) / 1024), 2)
    recNum_pre = round(float(float(m_pre.group(1)) / 1024), 2)
    time.sleep(1)
    output_final = adb.shell(cmd=cmd, deviceId=self.deviceId)
    m_final = re.search(r'{}:\s*(\d+)\s*\d+\s*\d+\s*\d+\s*\d+\s*\d+\s*\d+\s*\d+\s*(\d+)'.format(net), output_final)
    sendNum_final = round(float(float(m_final.group(2)) / 1024), 2)
    recNum_final = round(float(float(m_final.group(1)) / 1024), 2)
    sendNum = round(float(sendNum_final - sendNum_pre), 2)
    recNum = round(float(recNum_final - recNum_pre), 2)
    return sendNum, recNum

# IOS

间隔 3 秒拿到数据,基于 instrument

def getPerformance(self, perfTpe: DataType):
    if perfTpe == DataType.NETWORK:
        perf = Performance(self.deviceId, [perfTpe])
        perf.start(self.pkgName, callback=self.callback)
        time.sleep(3)
        perf.stop()
        perf_value = self.downflow, self.upflow
    else:
        perf = iosP.Performance(self.deviceId, [perfTpe])
        perf_value = perf.start(self.pkgName, callback=self.callback)
    return perf_value
def iter_network_flow(d: BaseDevice, rp: RunningProcess) -> Iterator[Any]:
    n = 0
    with d.connect_instruments() as ts:
        for nstat in ts.iter_network():
            # if n < 2:
            #     n += 1
            #     continue
            yield DataType.NETWORK, {
                "timestamp": gen_stimestamp(),
                "downFlow": (nstat['rx.bytes'] or 0) / 1024,
                "upFlow": (nstat['tx.bytes'] or 0) / 1024
            }