【App自动化测试】(九)移动端复杂测试环境模拟——来电、短信、网络切换

本文主要是介绍【App自动化测试】(九)移动端复杂测试环境模拟——来电、短信、网络切换,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1. 发送短信
  • 2. GSM电话
  • 3. 设置模拟信号强弱
  • 4. 设置网速
  • 5. 设置网络连接类型


前言
本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 😘

当我们使用模拟器来进行测试的时候,Appium为我们提供一些Android AVD 模拟器专用的API(类似MUMU等第三方模拟器无法使用),来帮助我们模拟复杂的测试环境,例如,模拟来电,模拟来短信,模拟网络切换等等,下面就也得大家介绍一下常用的API。

1. 发送短信

API链接:http://appium.io/docs/en/commands/device/network/send-sms/

功能:在连接的模拟器上模拟发送SMS事件。(仅Android可用)

方法send_sms( phone_number: str, message: str)

参数说明

  • phone_number:发送人手机号
  • message:发送的短信内容

使用方法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 NetSpeedclass 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!")

效果展示
在这里插入图片描述

2. GSM电话

API链接:http://appium.io/docs/en/commands/device/network/gsm-call/

功能:在连接的模拟器上模拟打电话操作。(仅Android可用)

方法make_gsm_call( phone_number: str, action: str)

参数说明

  • phone_number:来电号码
  • action:呼叫动作,GsmCallActions中的对象
    • CALL:拨打
    • ACCEPT:接通
    • CANCEL:挂断
    • HOLD:呼叫保持

使用方法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 NetSpeedclass 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)

效果展示

打电话:
在这里插入图片描述
接通:
在这里插入图片描述

3. 设置模拟信号强弱

API链接:http://appium.io/docs/en/commands/device/network/gsm-signal/

功能:模拟设置型号强弱。(仅Android可用)

方法set_gsm_signal(strength: int)

参数说明

  • strength:信号强度,GsmSignalStrength中的对象
    • NONE_OR_UNKNOWN :无信号
    • POOR:信号弱
    • MODERATE:信号中等
    • GOOD:信号好
    • GREAT :信号满格

使用方法 self.driver.set_gsm_signal(GsmSignalStrength.GOOD)

示例

from time import sleepfrom 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 NetSpeedclass 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后,信号变为满格状态
在这里插入图片描述

4. 设置网速

API链接:http://appium.io/docs/en/commands/device/network/network-speed/

功能:设置模拟器网速。(仅Android模拟器可用)

方法set_network_speed(speed_type: str)

参数说明

  • speed_type:网络类型,NetSpeed中的对象
    • GSM:GSM/CSD (网速上限:14.4kbps, 网速下限:14.4kbps)
    • SCSD:HSCSD (网速上限: 14.4kbps, 网速下限: 57.6kbps)
    • GPRS:GPRS(网速上限: 28.8kbps, 网速下限: 57.6kbps)
    • EDGE:EDGE/EGPRS(网速上限:473.6kbps, 网速下限:473.6kbps)
    • UMTS: UMTS/3G(网速上限: 384.0kbps, 网速下限: 384.0kbps)
    • HSDPA: HSDPA(网速上限: 5760.0kbps, 网速下限: 13980.0kbps)
    • LTE: LTE(网速上限: 5800.0kbps, 网速下限: 17300.0kbps)
    • EVDO: EVDO (网速上限:7500.0kbps, 网速下限: 28000.0kbps)
    • FULL: 无限制(默认网速上限: 0.0kbps, 网速下限: 0.0kbps)

使用方法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 NetSpeedclass 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:
在这里插入图片描述

5. 设置网络连接类型

功能:设置模拟器网速。(仅Android模拟器可用)

方法set_network_connection( connection_type: int)

参数说明

  • connection_type:网络连接类型
    • 0:无网络连接
    • 1:飞行模式
    • 2:只有WiFi
    • 4:只有数据模式
    • 6:WIFI和数据模式都启用

使用方法self.driver.set_network_connection( 1)

示例

from time import sleepfrom appium import webdriver
from appium.webdriver.extensions.android.gsm import GsmCallActions, GsmSignalStrength, GsmVoiceState
from appium.webdriver.extensions.android.network import NetSpeedclass 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有什么区别?

这篇关于【App自动化测试】(九)移动端复杂测试环境模拟——来电、短信、网络切换的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/166987

相关文章

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

IDEA如何切换数据库版本mysql5或mysql8

《IDEA如何切换数据库版本mysql5或mysql8》本文介绍了如何将IntelliJIDEA从MySQL5切换到MySQL8的详细步骤,包括下载MySQL8、安装、配置、停止旧服务、启动新服务以及... 目录问题描述解决方案第一步第二步第三步第四步第五步总结问题描述最近想开发一个新应用,想使用mysq

Python Invoke自动化任务库的使用

《PythonInvoke自动化任务库的使用》Invoke是一个强大的Python库,用于编写自动化脚本,本文就来介绍一下PythonInvoke自动化任务库的使用,具有一定的参考价值,感兴趣的可以... 目录什么是 Invoke?如何安装 Invoke?Invoke 基础1. 运行测试2. 构建文档3.

macOS怎么轻松更换App图标? Mac电脑图标更换指南

《macOS怎么轻松更换App图标?Mac电脑图标更换指南》想要给你的Mac电脑按照自己的喜好来更换App图标?其实非常简单,只需要两步就能搞定,下面我来详细讲解一下... 虽然 MACOS 的个性化定制选项已经「缩水」,不如早期版本那么丰富,www.chinasem.cn但我们仍然可以按照自己的喜好来更换

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Jenkins中自动化部署Spring Boot项目的全过程

《Jenkins中自动化部署SpringBoot项目的全过程》:本文主要介绍如何使用Jenkins从Git仓库拉取SpringBoot项目并进行自动化部署,通过配置Jenkins任务,实现项目的... 目录准备工作启动 Jenkins配置 Jenkins创建及配置任务源码管理构建触发器构建构建后操作构建任务

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11