前言:
本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 😘
当我们使用模拟器来进行测试的时候,Appium为我们提供一些Android AVD 模拟器专用的API(类似MUMU等第三方模拟器无法使用),来帮助我们模拟复杂的测试环境,例如,模拟来电,模拟来短信,模拟网络切换等等,下面就也得大家介绍一下常用的API。
API链接:http://appium.io/docs/en/commands/device/network/send-sms/
功能:在连接的模拟器上模拟发送SMS事件。(仅Android可用)
方法:send_sms( phone_number: str, message: str)
参数说明:
使用方法:self.driver.send_sms('18300000001', 'Hey Appium!')
示例:
from time import sleep
from appium import webdriver
from appium.webdriver.extensions.android.gsm import GsmCallActions, GsmSignalStrength, GsmVoiceState
from appium.webdriver.extensions.android.network import NetSpeed
class TestPhoneNetwork:
def setup(self):
# 创建一个字典
desire_cap = {}
# 模拟器名称,只支持AVD模拟器
desire_cap['automationName']='UiAutomator2'
# 平台
desire_cap['platform'] = 'Android'
# 手机系统版本
desire_cap['platformVersion'] = '6.0'
# 设备名
desire_cap['deviceName'] = 'emulator-5554'
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_send_sms(self):
#模拟发短信
self.driver.send_sms('555-123-4567',"Hello! Appium!")
效果展示:
API链接:http://appium.io/docs/en/commands/device/network/gsm-call/
功能:在连接的模拟器上模拟打电话操作。(仅Android可用)
方法:make_gsm_call( phone_number: str, action: str)
参数说明:
使用方法:self.driver.make_gsm_call('18300000001', GsmCallActions.CALL)
示例:
from time import sleep
from appium import webdriver
from appium.webdriver.extensions.android.gsm import GsmCallActions, GsmSignalStrength, GsmVoiceState
from appium.webdriver.extensions.android.network import NetSpeed
class TestPhoneNetwork:
def setup(self):
# 创建一个字典
desire_cap = {}
# 模拟器名称,只支持AVD模拟器
desire_cap['automationName']='UiAutomator2'
# 平台
desire_cap['platform'] = 'Android'
# 手机系统版本
desire_cap['platformVersion'] = '6.0'
# 设备名
desire_cap['deviceName'] = 'emulator-5554'
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_phone_call_acept(self):
#模拟打电话并接通
#打电话
self.driver.make_gsm_call('18300000001', GsmCallActions.CALL)
sleep(5)
#接通
self.driver.make_gsm_call('18300000001',GsmCallActions.ACCEPT)
sleep(5)
def test_phone_call_cancel(self):
# 模拟打电话并挂断
self.driver.make_gsm_call('18300000002', GsmCallActions.CALL)
sleep(5)
self.driver.make_gsm_call('13000010002', GsmCallActions.CANCEL)
sleep(5)
def test_phone_call_hold(self):
# 模拟打电话并呼叫保持
self.driver.make_gsm_call('18300000003', GsmCallActions.CALL)
sleep(5)
self.driver.make_gsm_call('13000010003', GsmCallActions.HOLD)
sleep(5)
效果展示:
打电话:
接通:
API链接:http://appium.io/docs/en/commands/device/network/gsm-signal/
功能:模拟设置型号强弱。(仅Android可用)
方法:set_gsm_signal(strength: int)
参数说明:
使用方法: self.driver.set_gsm_signal(GsmSignalStrength.GOOD)
示例:
from time import sleep
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from appium.webdriver.extensions.android.gsm import GsmCallActions, GsmSignalStrength, GsmVoiceState
from appium.webdriver.extensions.android.network import NetSpeed
class TestPhoneNetwork:
def setup(self):
# 创建一个字典
desire_cap = {}
# 模拟器名称,只支持AVD模拟器
desire_cap['automationName']='UiAutomator2'
# 平台
desire_cap['platform'] = 'Android'
# 手机系统版本
desire_cap['platformVersion'] = '6.0'
# 设备名
desire_cap['deviceName'] = 'emulator-5554'
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_phone_signal(self):
# 模拟设置信号强度
#满格
self.driver.set_gsm_signal(GsmSignalStrength.GREAT)
#以五格满格为准的话
# 无信号
# self.driver.set_gsm_signal(GsmSignalStrength.NONE_OR_UNKNOWN)
# 两格
# self.driver.set_gsm_signal(GsmSignalStrength.POOR)
# 三格
# self.driver.set_gsm_signal(GsmSignalStrength.MODERATE)
# 四格
#self.driver.set_gsm_signal(GsmSignalStrength.GOOD)
设置前信号状态:
设置后信号状态:设置成GREAT后,信号变为满格状态
API链接:http://appium.io/docs/en/commands/device/network/network-speed/
功能:设置模拟器网速。(仅Android模拟器可用)
方法:set_network_speed(speed_type: str)
参数说明:
使用方法:self.driver.set_network_speed(NetSpeed.LTE)
示例:
from time import sleep
from appium import webdriver
from appium.webdriver.extensions.android.gsm import GsmCallActions, GsmSignalStrength, GsmVoiceState
from appium.webdriver.extensions.android.network import NetSpeed
class TestPhoneNetwork:
def setup(self):
# 创建一个字典
desire_cap = {}
# 模拟器名称,只支持AVD模拟器
desire_cap['automationName']='UiAutomator2'
# 平台
desire_cap['platform'] = 'Android'
# 手机系统版本
desire_cap['platformVersion'] = '8.1'
# 设备名
desire_cap['deviceName'] = 'emulator-5554'
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_phone_network_speed(self):
self.driver.set_network_speed(NetSpeed.LTE)
效果展示:
运行前网络类型GSM:
运行后网络类型LTE:
功能:设置模拟器网速。(仅Android模拟器可用)
方法:set_network_connection( connection_type: int)
参数说明:
使用方法:self.driver.set_network_connection( 1)
示例:
from time import sleep
from appium import webdriver
from appium.webdriver.extensions.android.gsm import GsmCallActions, GsmSignalStrength, GsmVoiceState
from appium.webdriver.extensions.android.network import NetSpeed
class TestPhoneNetwork:
def setup(self):
# 创建一个字典
desire_cap = {}
# 模拟器名称,只支持AVD模拟器
desire_cap['automationName']='UiAutomator2'
# 平台
desire_cap['platform'] = 'Android'
# 手机系统版本
desire_cap['platformVersion'] = '8.1'
# 设备名
desire_cap['deviceName'] = 'emulator-5554'
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
self.driver.implicitly_wait(10)
def teardown(self):
self.driver.quit()
def test_phone_network_connection(self):
# 模拟网络设置
self.driver.set_network_connection(1) # 1:airplane model
效果展示:
运行前没有开启飞行模式:
运行后开启运行模式:
❓❗问题记录:
在使用set_network_connection进行练习的过程中发现,当从其他模式切换到飞行模式,或者从飞行模式切换到其他模式的时候,测试用例都会执行失败并报错(虽然测试用例报错运行失败,但实际上模式切换是成功了。),主要报错内容如下:
Permission Denial: not allowed to send broadcast android.intent.action.AIRPLANE_MODE from pid=14717, uid=2000
错误的主要原因是因为没有权限无法进行飞行模式的切换。怎么去解决这个问题呢?目前也没找到解决办法,如果有了解的小伙伴,欢迎告知!!
文末说明:
接口测试中我们很容易混淆Session、cookie和token,你知道他们有什么区别吗?快来跟我一起看,一篇文章让你了解三者的区别。😎
⬇⬇⬇⬇⬇⬇⬇
👍👍👍:接口测试经典面试题:Session、cookie、token有什么区别?