《自拍教程62》Python adb反覆斷網聯網測試

来源:https://www.cnblogs.com/zipython/archive/2020/04/25/12775217.html
-Advertisement-
Play Games

案例故事: Android App或者系統測試過程中,涉及需要斷網異常測試(無網路情況下,App或系統是否提示正常,運行正常), 聯網測試(網路恢復的情況下,App或系統是否提示正常,運行正常), 目前基本上設備都具備wifi,4G兩種網路, 需要考慮兩種網路全部斷開, 或者兩種網路全部連上,並需要 ...


案例故事: 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
也可關註“武散人”微信訂閱號,隨時接受文章推送。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 直接進入主題需求: (1) 獲取你對象chrome前一天的瀏覽記錄中的所有網址(url)和訪問時間,並存在一個txt文件中 (2)將這個txt文件發送給指定的郵箱地址(你的郵箱) (3)建立例行任務,每天定時自動完成這些操作,你就可以通過郵件查看你對象每天看啥了 這裡要註意:不管你是為了Python ...
  • 定時任務 每天定時執行任務可以使用springboot裡面提供的@Schelduled註解加上cron表達式,但是有一些特殊的任務,比如幾分鐘之後執行,像這類定時任務可以使用Spring Cloud Stream+RabbitMQ來實現 這個首先要下載rabbitmq "插件" 創建boot工程,需 ...
  • Python爬蟲為什麼受歡迎 如果你仔細觀察,就不難發現,懂爬蟲、學習爬蟲的人越來越多,一方面,互聯網可以獲取的數據越來越多,另一方面,像 Python這樣的編程語言提供越來越多的優秀工具,讓爬蟲變得簡單、容易上手。 利用爬蟲我們可以獲取大量的價值數據,從而獲得感性認識中不能得到的信息,這裡要註意: ...
  • python入門介紹 一、編程語言的分類 分類: 機器語言: 用二進位代碼0和1描述的指令稱為機器指令,由於電腦內部是基於二進位指令工作的,所以機器語言是直接控制電腦硬體 彙編語言: 彙編語言的實質和機器語言是相同的,都是直接對硬體操作,只不過指令採用了英文縮寫的標識符,更容易識別和記憶 高級語 ...
  • 編程語言及電腦介紹 一、編程語言是什麼 語言其實就是人與人之間溝通的介質/工具,比如英語、法語等 而編程語言則是人與電腦之間溝通的介質,常見的編程語言有python、java、php、.net等 二、為什麼要編程 編程就是人把自己想電腦做的事,也就是自己的思維邏輯,用編程語言表達出來 編程的目 ...
  • 1 package com.yhqtv.demo01Exception; 2 /* 3 * 一、異常體繫結構 4 *java.lang.Throwable 5 * java.lang.Error:一般不編寫針對性的代碼進行處理。 6 * java.lang.Exception:可以進行異常的處理 7 ...
  • 前言 文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。 爬蟲的網站:萬邦國際集團。其成立於2010年,總部位於河南省鄭州市,以“立足三農、保障民生、服務全國”為宗旨,業務涵蓋綜合性農產品冷鏈物流、高效生態農業開發、生鮮連鎖超市、跨境 ...
  • 前言 由於AQS的源碼太過凝練,而且有很多分支比如取消排隊、等待條件等,如果把所有的分支在一篇文章的寫完可能會看懵,所以這篇文章主要是從正常流程先走一遍,重點不在取消排隊等分支,之後會專門寫一篇取消排隊和等待條件的分支邏輯。讀源碼千萬別在每個代碼分支中來回游走,先按一個正常的分支把流程看明白,之後再 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...