zoukankan      html  css  js  c++  java
  • 《自拍教程62》Python adb反复断网联网测试

    案例故事: Android App或者系统测试过程中,涉及需要断网异常测试(无网络情况下,App或系统是否提示正常,运行正常),
    联网测试(网络恢复的情况下,App或系统是否提示正常,运行正常), 目前基本上设备都具备wifi,4G两种网络,
    需要考虑两种网络全部断开, 或者两种网络全部连上,并需要考虑优先使用哪种网络。


    准备阶段

    android 自带的svc命令,可以实现网络管理。

    1. adb shell svc wifi disable 可以关闭wifi
    2. adb shell svc wifi enable 可以打开wifi
    3. adb shell svc wifi prefer 即wifi+4G一起打开的情况下,可以优先使用wifi通讯
    4. adb shell svc data disable 可以关闭4G数据通讯
    5. adb shell svc data enable 可以打开4G数据通讯
    6. adb shell svc data prefer 即wifi+4G一起打开的情况下,可以优先使用4G通讯
    7. 由于测试100次,可以考虑使用random模块实现随机wifi优先或者4G优先。

    Python批处理脚本形式

    记住批处理脚本的精髓:批量顺序执行语句。
    判断字符串值是否相同,尽量多用is 及 is not, 少用== 及 !=

    # coding=utf-8
    
    import os
    import time
    import random
    
    # 反复断网联网100次
    for i in range(100):
        print("正在进行第%s轮断网 + 联网测试" % i)
        os.system("adb shell svc wifi disable")
        os.system("adb shell svc data disable")
        time.sleep(12)  # App需要断网后10秒之后才会弹出无网络体现,所以建议等待12秒
        os.system("adb shell svc wifi enable")
        os.system("adb shell svc data enable")
        perfer = random.choice(["wifi", "4G"])
        if perfer is "wifi":
            print("优先启用wifi网络")
            os.system("adb shell svc wifi perfer")
        else:
            print("优先启用4G网络")
            os.system("adb shell svc data perfer")
        time.sleep(15)  # wifi连接需要时间,4G拨号上网也需要时间,App识别网络并进行通信也需要时间,所以建议等待15秒
    
    os.system("pause")
    

    Python面向过程函数形式

    面向过程函数的编程思维应该是这样的:
    你需要多少个功能(函数),才能做成这个事。
    最好把功能(函数)都尽量封装好,只暴露一些的参数接口即可。

    # coding=utf-8
    
    import os
    import time
    import random
    
    
    def enable_network():
        '''同时打开wifi,4G网络'''
        os.system("adb shell svc wifi enable")
        os.system("adb shell svc data enable")
    
    
    def disable_network():
        '''同时关闭wifi,4G网络'''
        os.system("adb shell svc wifi disable")
        os.system("adb shell svc data disable")
    
    
    def perfer_network(network):
        '''选择以哪种网络优先,是wifi网络,还是4G网络'''
        network = network.lower()  # 全部转换成小写
        if network is "wifi":
            print("优先启用wifi网络")
            os.system("adb shell svc wifi perfer")
        elif network is "4g":
            print("优先启用4G网络")
            os.system("adb shell svc 4G perfer")
        else:
            print("只支持2种网络,wifi或者4G")
    
    
    # 反复断网联网100次
    for i in range(100):
        print("正在进行第%s轮断网 + 联网测试" % i)
        disable_network()
        time.sleep(12)  # App需要断网后10秒之后才会弹出无网络体现,所以建议等待12秒
        enable_network()
        perfer = random.choice(["wifi", "4G"])
        perfer_network(perfer)
        time.sleep(15)  # wifi连接需要时间,4G拨号上网也需要时间,App识别网络并进行通信也需要时间,所以建议等待15秒
    
    os.system("pause")
    

    Python面向对象类形式

    面向对象类的编程思维应该是这样的:
    如果给你一个空白的世界,在这个世界里你需要哪些种类的事物,
    这些种类的事物都具备哪些共有的属性与方法,
    这些种类(类)的事物(对象),和其他种类(其他类)的事物(其他对象)有什么关系。
    尽量把这些类封装好,只暴露对外的属性(变量)和方法(函数)即可。

    # coding=utf-8
    
    import os
    import time
    import random
    
    
    class NetworkManger(object):
        '''网络管理器,其只需要3个方法即可'''
    
        def __init__(self):
            pass
    
        def enable_network(self):
            '''同时打开wifi,4G网络'''
            os.system("adb shell svc wifi enable")
            os.system("adb shell svc data enable")
    
        def disable_network(self):
            '''同时关闭wifi,4G网络'''
            os.system("adb shell svc wifi disable")
            os.system("adb shell svc data disable")
    
        def perfer_network(self, network):
            '''选择以哪种网络优先,是wifi网络,还是4G网络'''
            network = network.lower()  # 全部转换成小写
            if network is "wifi":
                print("优先启用wifi网络")
                os.system("adb shell svc wifi perfer")
            elif network is "4g":
                print("优先启用4G网络")
                os.system("adb shell svc 4G perfer")
            else:
                print("只支持2种网络,wifi或者4G")
    
    
    # 新实例化类的对象
    n_obj = NetworkManger()
    
    # 再反复断网联网100次
    for i in range(100):
        print("正在进行第%s轮断网 + 联网测试" % i)
        n_obj.disable_network()
        time.sleep(12)  # App需要断网后10秒之后才会弹出无网络体现,所以建议等待12秒
        n_obj.enable_network()
        perfer = random.choice(["wifi", "4G"])
        n_obj.perfer_network(perfer)
        time.sleep(15)  # wifi连接需要时间,4G拨号上网也需要时间,App识别网络并进行通信也需要时间,所以建议等待15秒
    
    os.system("pause")
    

    运行方式

    确保Android设备通过USB线与电脑连接了,adb设备有效连接,
    以上代码的3种实现形式都可以直接运行,比如保存为network_test.py并放在桌面,
    打开你需要测试的App或跳转到你需要测试的系统的某个界面下,
    建议python network_test.py运行,当然也可以双击运行。

    更多更好的原创文章,请访问官方网站:www.zipython.com
    自拍教程(自动化测试Python教程,武散人编著)
    原文链接:https://www.zipython.com/#/detail?id=73de3fe1ef094d44a5613e237106aa68
    也可关注“武散人”微信订阅号,随时接受文章推送。

  • 相关阅读:
    网络管理不得不知道的一些常识
    DWZ(一):框架初了解
    第三天 ThinkPHP手把手高速拼接站点(三)
    stl之list双向链表容器应用基础
    如何使用ninja编译系统编译我们的程序?
    由抓取豆瓣信息想到的網絡知識
    学习实践:使用模式,原则实现一个C++数据库訪问类
    加入新的linux系统调用
    【转】repo 的一些用法和理解-不错
    【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角
  • 原文地址:https://www.cnblogs.com/zipython/p/12775217.html
Copyright © 2011-2022 走看看