编写第一个 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设计模式设计的,这就是核心逻辑,用例层调用该方法即可,后续再详细写。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/467492.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

劫持微信聊天记录并分析还原 —— 访问数据库并查看聊天记录(五)

本工具设计的初衷是用来获取微信账号的相关信息并解析PC版微信的数据库。程序以 Python 语言开发,可读取、解密、还原微信数据库并帮助用户查看聊天记录,还可以将其聊天记录导出为csv、html等格式用于AI训练,自动回复或备份等等作用。下面我们…

微软日志丢失事件敲响安全警钟

NEWS | 事件回顾 最近,全球最大的软件公司之一——微软,遭遇了一场罕见的日志丢失危机。据报告,从9月2日至9月19日,持续长达两周的时间里,微软的多项核心云服务,包括身份验证平台Microsoft Entra、安全信息…

音视频入门基础:H.264专题(17)——FFmpeg源码中,获取H.264视频的profile的实现

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

硬件基础06 滤波器——无源、有源(含Filter Solutions、Filter Pro、MATLAB Fdatool)

目录 一、Filter Solutions 1、软件资源及安装教程如下 2、使用相关内容 二、Filter Pro使用 1、软件资源及安装教程如下 2、使用相关内容 三、MATLAB Fdatool 1、在matlab命令中输入fdatool 2、输入相关参数,例如低通、FIR、20阶、hamming窗 3、调用 &am…

《数据治理精选案例集2.0(2024版)》592页PDF(已授权分享)

《亿信华辰数据治理精选案例集2.0》是北京亿信华辰软件有限责任公司倾力打造的专业数据治理案例集,汇集了100个一线政企数据治理实践案例,覆盖13大行业和500业务场景,通过深入剖析数据治理难题,提供了新思路和实战经验&#xff0c…

LangChain大模型应用开发指南:打造个性化LLM

在之前的课程中,我带领小伙伴们使用开源项目实现了将星火模型的OpenAI-API接口适配转换封装, 但是这种做法的局限性也很强,只能使用开源项目适配过的大模型,并且由于多了一层适配代理,接口的性能也存在一定损耗。今天…

Spring WebFlux 核心原理(2-3)

1、Project Reactor 高级 1.1、响应式流的生命周期 要理解多线程的工作原理以及 Reactor 中实现的各种内部优化,首先必须了解 Reactor 中响应式类型的生命周期。 1.1.1、组装时 流生命周期的第一部分是组装时(assembly-time)。 Reactor 提供…

走进算法大门---双指针问题(一)

一.双指针算法介绍 概念:双指针是指在遍历数据结构(如数组、链表等)时使用两个指针,通过特定的移动规则来解决问题。这两个指针可以同向移动,也可以相向移动。 同向双指针:常用于解决需要两个位置信息的问…

智能问答系统流程详解:多轮对话与模型训练的技术要点及案例

随着智能客服系统的广泛应用,如何在提升用户体验的同时保障系统的准确性与效率,成为了智能问答系统设计中的重要问题。本文将介绍一种智能问答系统的流程设计,涵盖从识别用户意图、匹配知识库、多轮对话到模型训练的全流程,并通过…

03集合基础

目录 1.集合 Collection Map 常用集合 List 接口及其实现 Set 接口及其实现 Map 接口及其实现 Queue 接口及其实现 Deque 接口及其实现 Stack类 并发集合类 工具类 2.ArrayList 3.LinkedList 单向链表的实现 1. 节点类(Node) 2. 链表类&a…

pyspark基础准备

1.前言介绍 学习目标:了解什么是Speak、PySpark,了解为什么学习PySpark,了解课程是如何和大数据开发方向进行衔接 使用pyspark库所写出来的代码,既可以在电脑上简单运行,进行数据分析处理,又可以把代码无缝…

gitlab项目如何修改主分支main为master,以及可能遇到的问题

如果你希望将 Git 仓库的主分支名称从 main 修改为 master: 1. 本地修改分支名称 首先,切换到 main 分支: git checkout main将 main 分支重命名为 master: git branch -m main master2. 更新远程仓库 将本地更改推送到远程仓库…

albert模型实现微信公众号虚假新闻分类

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

最新三维视觉下的扩散模型综述——Diffusion Models in 3D Vision: A Survey

目录 摘要 一、引言 二、扩散模型简介 A.扩散模型的介绍 B.扩散模型的数学基础 C.扩散模型的变体 D.三维视觉中的生成过程 三、三维视觉基础 A.三维表示 B.三维视觉中的深度学习方法 C.3D视觉中的挑战 四、三维扩散生成任务 A.无条件生成 B.图像到三维 C.文本到…

《今日制造与升级》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答 问:《今日制造与升级》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《今日制造与升级》级别? 答:国家级。主管单位:中国机械工业联合会 …

基于开源 AI 智能名片 S2B2C 商城小程序的视频号交易小程序优化研究

摘要:本文探讨了完善适配视频号交易小程序的重要意义,重点阐述了开源 AI 智能名片 S2B2C 商城小程序在这一过程中的应用。通过分析其与直播间和社群的无缝衔接特点,以及满足新流量结构下基础设施需求的能力,为门店在视频号直播交易…

A021基于Spring Boot的自习室管理和预约系统设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

while()与string::length()的使用错误

在写KMP算法时&#xff0c;把i<S.length()&&j<T.length()直接放到了while()中&#xff0c;当j为负数时&#xff0c;发现循环进不去&#xff1a; void KMP(string S,string T){int i0,j0;while(i<S.length()&&j<T.length()){cout<<"i&q…

Java I/O流面试之道

先赞后看&#xff0c;Java进阶一大半 南哥在国外 stackoverflow 看到13年前的这么一个问题&#xff1a;如何使用 Java 逐行读取大型文本文件。大家有什么思路吗&#xff1f;评论区一起讨论讨论。 I need to read a large text file of around 5-6 GB line by line using Java. …

精选 Top10 开源调度工具,解锁高效工作负裁自动化

在大数据和现代 IT 环境中&#xff0c;任务调度与工作负载自动化&#xff08;WLA&#xff09;工具是优化资源利用、提升生产效率的核心驱动力。随着企业对数据分析、实时处理和多地域任务调度需求的增加&#xff0c;这些工具成为关键技术。 本文将介绍当前技术发展背景下的Top …