APP UI自动化测试思路总结
首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去。
接下来,一起总结一下APP UI自动化测试的思路吧。
一,开发语言选择
通常用于自动化测试的编程语言有:Python、Java、Javascript、Ruby、C#、PHP等。一般我们会选择自己熟悉的编程语言来编写自动化脚本,但对于编程基础基本为0的童鞋(或者专注于做自动化测试的童鞋),推荐学习使用Python。
相对于其他语言,Python做自动化测试有以下优点:
-
对于初学者来说,Python语法简洁,可读性强,易于学习
-
有强大的第三方库,编写脚本效率更高
-
Python中的Pytest自动化测试框架是目前最流行的测试框架之一
二,UI测试框架选择
选择编开发语言之后,我们需要选择UI测试框架。目前较为主流或者使用较多的APP UI自动化测试框架有Appium、Airtest等。
1,Appium
-
开源
-
Appium server支持在Windows、macOS、Linux上运行
-
支持多种主流编程语言,如Python、Java、Javascript、Ruby等
-
支持Android、ios、H5自动化测试(集成了UiAutomator、UiAutomation框架)
-
环境搭建较为复杂
2,Airtest
-
由网易开发(官方文档),只支持python语言
-
提供集成Airtest与Poco两个测试框架的强大的IDE,对新手很友好
-
集成基于图像识别的UI自动化测试框架airtest,即使不懂代码也能编写自动化脚本
-
跨平台,可对Windows、Android和iOS应用软件进行自动化测试
-
对游戏测试较为友好
-
Airtest与Poco本质上是python的两个第三方库,测试环境搭建没有Appium那么复杂
3,选择框架
根据实际情况选择合适的框架。
以下情况可以优先选择网易的Airtest (Airtest官网):
-
无编程基础
-
游戏测试
-
测试场景较为单一(Appium相对来说较为笨重)
-
支付宝小程序自动化(博主目前使用Airtest集成的Poco框架做支付宝小程序自动化测试)
以下情况建议选择Appium:
-
测试场景比较复杂(如需要多台手机批量测试)
-
测试脚本语言非Python(Airtest目前只支持Python)
三,单元测试框架选择
区别于上面所说的UI测试框架,单元测试框架用于加载测试用例、执行测试用例、断言、输出测试结果等。
不同的开发语言有各自对应的单元测试框架,如Java有JUnit、TestNG、Robot等,Python有unittest、pytest等。博主主要使用Python做自动化测试,所以这里只针对Python单元测试框架做说明。
python主流的单元测试框架:
-
unittest,Python自带的单元测试框架
-
pytest,基于unittest开发,易用性好,信息更详细,插件众多
-
robot framework,基于Python的关键字驱动测试框架,有界面,自带报告及log,功能完善,清晰美观
这里强烈推荐使用pytest,功能强大且容易上手,官方文档为英文,中文可参考Pytest 使用手册。
四,测试环境搭建
1,测试电脑选择
有条件的话建议使用Mac机器专门用于UI自动化测试,因为ios app ui自动化只能在Mac机器上进行。
2,测试手机选择
刚开始进行测试脚本调试时可以选择模拟器,Android模拟器可选择Gernymotion、夜神模拟器,具体参考博客Android模拟器的使用
待整个测试项目开发完成后,建议换成真机跑自动化脚本,这样更接近真实的用户使用场景。
3,开发语言环境
建议安装python 3以上的版本,官方已经停止对python2版本的更新维护。
4,UI自动化测试框架环境搭建
windows环境下搭建Appium请参考博客appium环境搭建,Mac下搭建Appium稍微复杂点,后续会写博客分享。
若选择Airtest框架的话,请参考官网。
五,脚本编写
1,编写测试demo
为了验证整个测试环境是否搭建成功、是否能跑通用例,一般我们需要先编写简单的测试脚本并执行,通过则说明整个环境搭建成功。
2,确定目录结构
推荐使用Page Object设计模式来开发APP UI自动化测试项目,请参考博客Page Object设计模式。
3,选择测试报告
不同的开发语言、不同的单元测试框架可选用不同的测试报告。在python中,unittest框架使用HTMLTestRunner或BSTestrunner生成测试报告,可参考博客unittest单元测试框架。Pytest框架使用pytest-html生成报告或通过allure定制测试报告。
以上步骤完成后,继续往测试项目里新增测试用例便可。
六,Jenkins集成
根据上述步骤编写完成整个app UI自动化测试项目,且运行一段时间稳定后,就可以考虑进行Jenkins的集成,
七,总结
总结APP UI自动化可使用以下几种实现方式:
1,python + appium + unittest + HTMLTestRunner
2,python + appium + pytest + pytest-html / allure
3,python + Airtest(AirtestIDE)
4,python + Poco + pytest + pytest-html / allure
可根据实际情况自行选择。

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:开心螺蛳粉】自提!

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

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群:1150305204,里面有各种测试开发资料和技术可以一起交流哦。
相关文章:
APP UI自动化测试思路总结
首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去。 接下来,…...
Codeforces Round 936 (Div. 2)
C. Tree Cutting 题意:给定一棵树,需要删除 k 条边,使得 k1 个联通块中的最小结点数最大。求出这个最大值 思路:求最小值最大--想到二分答案--然后深搜满足条件的连通块是否大于k即可 #include<iostream> #include<al…...
yolov6实现遥感影像目标识别|以DIOR数据集为例
1 目标检测是计算机视觉领域中的一项重要任务,它的目标是在图像或视频中检测出物体的位置和类别。YOLO(You Only Look Once)是一系列经典的目标检测算法,最初由Joseph Redmon等人于2016年提出。YOLO算法具有快速、简单、端到端的特…...
stable-diffusion-electron-clickstart 支持windows AMD显卡
前言 使用vue3 vite electron element-plus构建,正好学习下electrongithub stable-diffusion “画境导航者” 启动器 简介 stable-diffusion “画境导航者” 启动器支持功能 一键启动打开文件夹(tmp、txt2img-images)等模型所在文件夹&…...
ES进程除了kill之外,有什么优雅关闭的方式吗?
问题 Linux环境中,Elasticsearch 8的进程除了kill之外,有什么优雅关闭的方式吗? 具体实施方式 在Linux环境中,Elasticsearch(ES)进程可以通过多种方式实现优雅关闭,这种方式允许它完成必要的…...
院子摄像头的监控
院子摄像头的监控和禁止区域入侵检测相比,多了2个功能:1)如果检测到有人入侵,则把截图保存起来,2)如果检测到有人入侵,则向数据库插入一条事件数据。 打开checkingfence.py,添加如下…...
SpringBoot3使用响应Result类返回的响应状态码为406
Resolved [org.springframework.web.HttpMediaTypeNotAcceptableException: No acceptable representation] 解决方法:Result类上加上Data注解...
基础:TCP四次挥手做了什么,为什么要挥手?
1. TCP 四次挥手在做些什么 1. 第一次挥手 : 1)挥手作用:主机1发送指令告诉主机2,我没有数据发送给你了。 2)数据处理:主机1(可以是客户端,也可以是服务端),…...
Android Studio实现内容丰富的安卓校园二手交易平台(带聊天功能)
获取源码请点击文章末尾QQ名片联系,源码不免费,尊重创作,尊重劳动 项目编号083 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端: 1.注册登录 2.查看二手商品列表 3.发布二手商品 4.商品详情 5.聊天功能…...
第十一届蓝桥杯省赛第一场真题
2065. 整除序列 - AcWing题库 #include <bits/stdc.h> using namespace std; #define int long long//记得开long long void solve(){int n;cin>>n;while(n){cout<<n<< ;n/2;} } signed main(){int t1;while(t--)solve();return 0; } 2066. 解码 - …...
设计模式 模板方法模式
01.如果接到一个任务,要求设计不同型号的悍马车 02.设计一个悍马车的抽象类(模具,车模) public abstract class HummerModel {/** 首先,这个模型要能够被发动起来,别管是手摇发动,还是电力发动…...
【STM32嵌入式系统设计与开发】——6矩阵按键应用(4x4)
这里写目录标题 一、任务描述二、任务实施1、SingleKey工程文件夹创建2、函数编辑(1)主函数编辑(2)LED IO初始化函数(LED_Init())(3)开发板矩阵键盘IO初始化(ExpKeyBordInit())&…...
乐优商城(九)数据同步RabbitMQ
1. 项目问题分析 现在项目中有三个独立的微服务: 商品微服务:原始数据保存在 MySQL 中,从 MySQL 中增删改查商品数据。搜索微服务:原始数据保存在 ES 的索引库中,从 ES 中查询商品数据。商品详情微服务:做…...
XSS-labs详解
xss-labs下载地址https://github.com/do0dl3/xss-labs 进入靶场点击图片,开始我们的XSS之旅! Less-1 查看源码 代码从 URL 的 GET 参数中取得 "name" 的值,然后输出一个居中的标题,内容是 "欢迎用户" 后面…...
设计模式——模板方法模式封装.net Core读取不同类型的文件
1、模板方法模式 模板方法模式:定义一个操作中的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 特点:通过把不变的行为搬移到超类,去除子类中重复的代…...
[思考记录]技术欠账
最近对某开发项目做回顾梳理,除了进一步思考整理相关概念和问题外,一个重要的任务就是清理“技术欠账”。 这个“技术欠账”是指在这个项目的初期,会有意无意偏向快速实现,想先做出来、用起来,进而在实现过程中做出…...
React - 实现菜单栏滚动
简介 本文将会基于react实现滚动菜单栏功能。 技术实现 实现效果 点击菜单,内容区域会自动滚动到对应卡片。内容区域滑动,指定菜单栏会被选中。 ScrollMenu.js import {useRef, useState} from "react"; import ./ScrollMenu.css;export co…...
线性筛选(欧拉筛选)-洛谷P3383
#include <bits/stdc.h> using namespace std; int main() {std::ios::sync_with_stdio(false); cin.tie(nullptr); //为了加速int n, q;cin >> n >> q; vector<int>num(n 1); //定义数字表vector<int>prime; //定义素数表数组num[1] …...
企业微信可以更换公司主体吗?
企业微信变更主体有什么作用?当我们的企业因为各种原因需要注销或已经注销,或者运营变更等情况,企业微信无法继续使用原主体继续使用时,可以申请企业主体变更,变更为新的主体。企业微信变更主体的条件有哪些࿱…...
Qt教程 — 3.6 深入了解Qt 控件:Display Widgets部件(2)
目录 1 Display Widgets简介 2 如何使用Display Widgets部件 2.1 QTextBrowser组件-简单的文本浏览器 2.2 QGraphicsView组件-简单的图像浏览器 Display Widgets将分为两篇文章介绍 文章1(Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件-CSDN…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
怎么让Comfyui导出的图像不包含工作流信息,
为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐) 在 save_images 方法中,删除或注释掉所有与 metadata …...
通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...
