编写第一个 Appium 测试脚本:从安装到运行!
前言
最近接到一个测试项目,简单描述一下,需求就是:一端发送指令,另一端接受指令并处理指令。大概看了看有上百条指令,点点点岂不是废了,而且后期迭代,每次都需要点点点,想想就头大。冷静分析一下,其实这个需求的测试工作重复性很高,操作一端发送指令,查看另一端日志,验证指令接收处理是否正确,果断考虑自动化测试方案。
框架选择
基于本人情况,选择python+pytest+appium,具体该如何搭建,我们先从理论知识开始回顾熟悉一下。
Android自动化
想要开始Android自动化,必须要获取APP的相关信息。因为appium的capabilities配置中需要使用。当然Android sdk环境变量相关是更基本的,可以自行查找文档进行配置,这里就不介绍了。
获取APP信息
-
获取当前界面元素:adb shell dumpsys activity top
-
获取任务列表:adb shell dumpsys activity activities
App入口
-
adb logcat |grep -i displayed
-
aapt dump badging mobike.apk | grep launchable-activity
启动应用
adb shell am start -W -n com.qw.amobile/.splash.SplashActivity -S
回顾adb基本命令
-
adb devices:查看设备
-
adb kill-server:关闭 adb 的后台进程
-
adb tcpip:让 Android 脱离 USB 线的 TCP 连接方式
-
adb connect:连接开启了 TCP 连接方式的手机
-
adb logcat:Android 日志查看
-
adb bugreport:收集日志数据,用于后续的分析,比如耗电量
adb shell
adb shell 本身就是一个 Linux 的 shell,可以调用 Android 内置命令
-
adb shell dumpsys
-
adb shell pm
-
adb shell am
-
adb shell ps
-
adb shell monkey
性能统计
-
获取所有的 dumpsys 子命令 dumpsys | grep -i DUMP
-
获取当前 activity adb shell dumpsys activity top
-
获取 activities 的记录,可以获取到 appium 依赖的原始 activity dumpsys activity activities
-
获取特定包基本信息 adb shell dumpsys package com.xueqiu.android
-
获取系统通知 adb shell dumpsys notifification
-
获得内存信息 adb shell dumpsys meminfo com.android.settings
-
获取 cpu 信息 adb shell dumpsys cpuinfo
-
获取 gpu 绘制分析 adb shell dumpsys gfxinfo com.android.settings
-
获取短信 adb shell dumpsys activity broadcasts | grep senderName=uiautomator
Appium
我们先来看看appium的生态工具
-
Appium Desktop:内嵌了 Appium Server 和 Inspector 的综合工具
-
Appium Server:Appium 的核心工具,命令行工具
-
Appium Clients:各种语言的客户端封装库,用于连接 appium server Java、Python、Ruby、robotframework-appium
Appium Desktop
桌面版,这个更容易上手,可以让你更快体会到简易自动化的乐趣。它有哪些功能呢?元素查找、录制用例两大基本功能,爽的飞起。
Appium Server
官方推荐安装方式:npm install -g appium
,这种方法可能会失败或者很慢,那可以使用下面的方法
淘宝cpm:
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install -g appium
还需要安装Node,可以从Appium源码中找推荐的版本。
验证是否安装配置成功,可以执行命令
appium-doctor
哪里失败,再针对问题具体搜索解决吧。开始环境配置可能遇到很多问题,不要被吓到,一个个解决,基本都可以找到解决方案。笔者配置时也遇到很多问题,最终还是成功了。建议:安装之前先找好适配版本,可以减少很多问题。
Python中使用
需要安装Appium-Python-Client
pip install Appium-Python-Client
定位元素
想要自动化,定位元素是必要的一步,有哪些方式可以定位元素呢
class By:
"""Set of supported locator strategies."""
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
可以看到可以通过这么多方法来定位元素。
举个例子:定位钉钉登录页面,最终实现自动登录
class LoginPage(BasePage):
_mobile_input_locator = (By.XPATH, '//XCUIElementTypeApplication[@name="钉钉"]/XCUIElementTypeWindow/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[1]/XCUIElementTypeOther[2]/XCUIElementTypeTextField')
_password_input_locator = (By.XPATH, '//XCUIElementTypeApplication[@name="钉钉"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[1]/XCUIElementTypeOther[3]/XCUIElementTypeSecureTextField')
_clear_input_locator = (By.XPATH, '//XCUIElementTypeButton[@name="清除文本"]')
_agree_locator = (By.XPATH, '//XCUIElementTypeApplication[@name="钉钉"]/XCUIElementTypeWindow[1]/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther/XCUIElementTypeOther[1]/XCUIElementTypeOther[5]/XCUIElementTypeButton')
_login_locator = (By.XPATH, '//XCUIElementTypeStaticText[@name="登录"]')
def login(self, mobile, pwd):
self.find_element_and_click(self._mobile_input_locator)
self.find_element_and_click(self._clear_input_locator)
self.find_element(self._mobile_input_locator).send_keys(mobile)
self.find_element(self._password_input_locator).send_keys(pwd)
self.find_element_and_click(self._agree_locator)
self.find_element_and_click(self._login_locator)
return "登录成功"
和真实场景是一样的,点击手机号输入框->清除已有输入内容->输入登录手机号->输入密码->点击同意协议->点击登录,就登录成功了。这是基于page object设计模式设计的,这就是核心逻辑,用例层调用该方法即可,后续再详细写。
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。