Appium实现Speedtest软件测速自动化

Speedtest简介

Speedtest是一款专业测速的软件,可以对当前网络的上传,下载速度进行测试。近期有以下需求,需要重复点击开始按钮,不间断地对网络质量进行测试。人工操作的话,需要占用大量的时间。

能否自动化呢?移动端自动化测试Appium来了!
在这里插入图片描述

Appium环境搭建

参考白月黑羽大佬的博客: 点我跳转
在这里插入图片描述
主要由三个模块构成,Appium-client,Appium-Server,和设备组成。

  • 自动化程序

自动化程序是由我们来开发的,实现具体的手机自动化功能。

要发出具体的指令控制手机,也需要使用 客户端库。

Appium 组织 也提供了多种编程语言的客户端库,包括 Java,Python,js, Ruby等,我们使用的是Python。

我们需要安装好客户端库,调用这些库,就可以发出自动化指令给手机。

  • Appium Server

Appium Server 是 Appium 组织开发的程序,它负责管理手机自动化环境,并且转发 自动化程序的控制指令 给 手机,并且转发 手机给 自动化程序的响应消息。

  • 手机设备

我们这里说的手机设备,其实不仅仅是手机,包括所有 苹果、安卓的移动设备,比如:手机、平板、智能手表等。

为了直观方便的讲解,这里我们简称: 手机

当然手机上也包含了 我们要自动化控制的 手机应用APP。

手机设备为什么能 接收并且处理自动化指令呢?

因为,Appium Server 会在手机上 安装一个 自动化代理程序, 代理程序会等待自动化指令,并且执行自动化指令。

比如:要模拟用户点击界面按钮,Appium 自动化系统的流程是这样的:

自动化程序 调用客户端库相应的函数, 发送 点击元素 的指令(封装在HTTP消息里)给 Appium Server

Appium Server 再转发这个指令给 手机上的自动化代理

手机上的自动化代理 接收到 指令后,调用手机平台的自动化库,执行点击操作,返回点击成功的结果给 Appium Server

Appium Server 转发给 自动化程序

自动化程序了解到本操作成功后,继续后面的自动化流程

其中,自动化代理控制,使用的什么库来实现自动化的呢?

如果测试的是苹果手机, 用的是苹果的 XCUITest 框架 (IOS9.3版本以后)

如果测试的是安卓手机,用的是安卓的 UIAutomator 框架 (Android4.2以后)

这些自动化框架提供了在手机设备上运行的库,可以让程序调用这些库,像人一样自动化操控设备和APP,比如:点击、滑动,模拟各种按键消息等。

Appium支持多种变成语言,我使用的是Python,需要安装下面几个软件。

pip install Appium-Python-Client

至此,Appium客户端相关程序安装成功

至此,Appium服务器相关程序安装成功

至此,手机测试需要的一些工具包安装成功

手机连接测试

环境搭建好啦!手机USB线连接电脑试试。

然后,手机进入开发者模式,打开调试功能 。

开发者模式进入方式:设置->系统设置->开发者选项,勾选开发者选项,USB调试

在这里插入图片描述
如果第一次使用开发者模式,可能会找不到该选项。进入“我的设备”,多次点击“软件版本号”,直至出现提示信息。
在这里插入图片描述

命令行输入下面命令,电脑识别出来USB连接的手机

adb devices 

在这里插入图片描述

编写自动化代码

接下来开始编写程序,打开Jupyter Notebook

#导包
from appium import webdriver
from appium.webdriver.extensions.android.nativekey import AndroidKey
from appium.webdriver.common.appiumby import AppiumBy
import time

#APP启动常用参数
desired_caps={
    "platformName":"Android", #Android or IOS
    "platformVersion":"9", #手机Android版本
    "deviceName":"***",#苹果必须,可选
    "appPackage":"org.zwanoo.android.speedtest", #APP的包名
    "appActivity":"com.ookla.mobile4.screens.main.MainActivity", #APP的activity名
    "unicodeKeyboard":False,#不使用系统自带的软键盘
    "resetKeyboard":True,#隐藏键盘
    "noReset":True,#每次重启APP,是否重置
    "newCommandTimeout":60000,
    "automationName":"UiAutomator2"
}

#之所以加上try,catch,是因为程序还有些问题.每运行300秒,程序会自动崩溃
#代码改写后,每次遇到异常,会重启APP
while(1):
	#启动APP
    driver = webdriver.Remote(
    "http://localhost:4723/wd/hub",  #服务器ip端口
    desired_caps 
)
	#设置隐式等待
    driver.implicitly_wait(60)
    try: 
    	#初次打开测速软件,需要搜索附近可用信号
    	#等待20s再进行测速
        time.sleep(20)
        #循环执行
        for i in range(100):
            driver.find_element(by=AppiumBy.XPATH, value = '//android.view.View[@content-desc="Start a Speedtest"]').click() 
    except Exception: 
        driver.quit()
        print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

APP的包名和Activity获取方法

手机打开Speedtest 软件,并放置在最上层

电脑命令行键入

adb shell dumpsys activity recents | find "intent={"

在这里插入图片描述
查询到的第一个intent就是Speedtest应用的相关信息,cmp后面跟的信息就是Speedtest的包名和activity名。

开始执行

首先,打开Appium服务器
在这里插入图片描述
在这里插入图片描述
点击startServer按钮
在这里插入图片描述
Appium-Server已启动

运行代码

speedtest演示视频

虽然代码能跑起来,基本可以满足需求,但是程序还存在5分钟重启一次的问题。

XDM,有什么问题,评论区相互交流哈!我也是刚接触Appium撒!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值