案例故事: Android App或者系統測試過程中,涉及需要斷網異常測試(無網路情況下,App或系統是否提示正常,運行正常), 聯網測試(網路恢復的情況下,App或系統是否提示正常,運行正常), 目前基本上設備都具備wifi,4G兩種網路, 需要考慮兩種網路全部斷開, 或者兩種網路全部連上,並需要 ...
案例故事: Android App或者系統測試過程中,涉及需要斷網異常測試(無網路情況下,App或系統是否提示正常,運行正常),
聯網測試(網路恢復的情況下,App或系統是否提示正常,運行正常), 目前基本上設備都具備wifi,4G兩種網路,
需要考慮兩種網路全部斷開, 或者兩種網路全部連上,並需要考慮優先使用哪種網路。
準備階段
android 自帶的svc命令,可以實現網路管理。
- adb shell svc wifi disable 可以關閉wifi
- adb shell svc wifi enable 可以打開wifi
- adb shell svc wifi prefer 即wifi+4G一起打開的情況下,可以優先使用wifi通訊
- adb shell svc data disable 可以關閉4G數據通訊
- adb shell svc data enable 可以打開4G數據通訊
- adb shell svc data prefer 即wifi+4G一起打開的情況下,可以優先使用4G通訊
- 由於測試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
也可關註“武散人”微信訂閱號,隨時接受文章推送。