APP UI自动化测试思路总结

首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去。接下来,一起总结一下APP UI自动化测试的思路吧。

01 开发语言选择

通常用于自动化测试的编程语言有:Python、Java、Javascript、Ruby、C#、PHP等。一般我们会选择自己熟悉的编程语言来编写自动化脚本,但对于编程基础基本为0的童鞋(或者专注于做自动化测试的童鞋),推荐学习使用Python。

相对于其他语言,Python做自动化测试有以下优点:

对于初学者来说,Python语法简洁,可读性强,易于学习

有强大的第三方库,编写脚本效率更高

Python中的Pytest自动化测试框架是目前最流行的测试框架之一

02 测试框架选择

选择编开发语言之后,我们需要选择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)

03 单元测试框架选择

区别于上面所说的UI测试框架,单元测试框架用于加载测试用例、执行测试用例、断言、输出测试结果等。

不同的开发语言有各自对应的单元测试框架,如Java有JUnit、TestNG、Robot等,Python有unittest、pytest等。博主主要使用Python做自动化测试,所以这里只针对Python单元测试框架做说明。

python主流的单元测试框架:

unittest,Python自带的单元测试框架

pytest,基于unittest开发,易用性好,信息更详细,插件众多

robot framework,基于Python的关键字驱动测试框架,有界面,自带报告及log,功能完善,清晰美观

这里强烈推荐使用pytest,功能强大且容易上手,官方文档为英文,中文可参考Pytest 使用手册)。

04 测试环境搭建

1,测试电脑选择

有条件的话建议使用Mac机器专门用于UI自动化测试,因为ios app ui自动化只能在Mac机器上进行。

2,测试手机选择

刚开始进行测试脚本调试时可以选择模拟器,Android模拟器可选择Gernymotion、夜神模拟器,待整个测试项目开发完成后,建议换成真机跑自动化脚本,这样更接近真实的用户使用场景。

3,开发语言环境

建议安装python 3以上的版本,官方已经停止对python2版本的更新维护。

4,UI自动化测试框架环境搭建

windows环境下搭建Appium请参考appium环境搭建,Mac下搭建Appium稍微复杂点,后续会分享。若选择Airtest框架的话,请参考官网。

05 脚本编写

1、编写测试demo

为了验证整个测试环境是否搭建成功、是否能跑通用例,一般我们需要先编写简单的测试脚本并执行,通过则说明整个环境搭建成功。

2、确定目录结构

推荐使用Page Object设计模式来开发APP UI自动化测试项目请

3、选择测试报告

不同的开发语言、不同的单元测试框架可选用不同的测试报告。在python中,unittest框架使用HTMLTestRunner或BSTestrunner生成测试报告,Pytest框架使用pytest-html生成报告或通过allure定制测试报告。

以上步骤完成后,继续往测试项目里新增测试用例便可。

06 Jenkins集成

根据上述步骤编写完成整个app UI自动化测试项目,且运行一段时间稳定后,就可以考虑进行Jenkins的集成。

07 总结

总结APP UI自动化可使用以下几种实现方式:

python + appium + unittest + HTMLTestRunner

python + appium + pytest + pytest-html / allure

python + Airtest(AirtestIDE)

python + Poco + pytest + pytest-html / allure

可根据实际情况自行选择。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

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

相关文章

每日一题——LeetCode961

方法一 排序法: 2*n长度的数组里面有一个元素重复了n次,那么将数组排序,求出排序后数组的中间值(因为长度是偶数,没有刚好的中间值,默认求的中间值是偏左边的那个)那么共有三种情况:…

FFmpeg学习笔记--Centos8安装FFmpeg

1--安装指令 sudo yum install epel-releasesudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpmsudo yum install ffmpeg ffmpeg-develffmpeg -version 2--版本信息

C/C++ BM3 链表中的节点每k个一组翻转

文章目录 前言题目思路阐述代码总结 前言 这道题的关键是理解链表指针的位置; 在BM2的区间翻转基础上,多了个指针偏移,博客里面我贴图阐述一下。 题目 思路阐述 这道题的翻转过程参考BM2的题解,这里主要阐述一下指针移动和整体思…

JavaScript使用教程(二):类型、值和变量

计算机程序通过操作值(如数值3.14)或文本(如“Hello World”)来工作。编程语言中这些可以表示和操作的值被称为类型,而一门语言支持的类型集也是这门语言最基本的特征。程序在需要把某个值保存下来以便将来使用时&…

【Maven】报错合集

问题1:com.github.everit-org.json-schema:org.everit.json.schema:pom:1.12.1 failed to transfer from http://localhost:8081/repository/maven-public/ during a previous attempt 发现原来是maven的settings.xml文件配置出现了问题。首先是之前maven进阶学习时…

亚马逊云科技 re:Invent 2023 产品体验:亚马逊云科技产品应用实践 国赛选手带你看 Elasticache Serverless

抛砖引玉 讲一下作者背景,曾经参加过国内世界技能大赛云计算的选拔,那么在竞赛中包含两类,一类是架构类竞赛,另一类就是 TroubleShooting 竞赛,对应的分别为亚马逊云科技 GameDay 和亚马逊云科技 Jam,想必…

基于Java学生成绩管理系统设计与实现(源码+部署文档+报告)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…

2047过滤空格(C语言)

目录 一:题目 二:思路分析 三:代码 一:题目 二:思路分析 1.首先,这道题是一个字符串的问题,我们要先知道字符串存放在char类型的数组中的,并不是一个变量就可直接存放的下一个完整…

react+redux+antd-mobile 之 记账本案例

1.环境搭建 //使用CRA创建项目,并安装必要依赖,包括下列基础包 //1. Redux状态管理 - reduxjs/toolkit 、 react-redux //2. 路由 - react-router-dom //3. 时间处理 - dayjs //4. class类名处理 - classnames //5. 移动端组件库 - antd-mobile //6. 请…

PHP序列化总结1--序列化和反序列化的基础知识

序列化和反序列化的作用 1.序列化:将对象转化成数组或者字符串的形式 2.反序列化:将数组或字符串的形式转化为对象 为什么要进行序列化 这种数据形式中间会有很多空格,不同人有不同的书写情况,可能还会出现换行的情况 为此为了…

vue+web3js+metamask实现代币转账授权功能

vueweb3jsmetamask实现代币转账授权功能 介绍完整代码依赖index.vueMetaMask.vueWalletconnect.vue 踩坑点 介绍 主要实现功能: 连接钱包、获取余额、获取地址、转账、授权 大概效果就是下面这样 默认打开会请求连接小狐狸钱包连接后用户可以进行转账、授权等一系…

ArcGIS批量计算shp面积并导出shp数据总面积(建模法)

在处理shp数据时, 又是我们需要知道许多个shp字段的批量计算,例如计算shp的总面积、面积平均值等,但是单个查看shp文件的属性进行汇总过于繁琐,因此可以借助建模批处理来计算。 首先准备数据:一个含有多个shp的文件夹。…