16 移动端app自动化测试 - 软件测试
软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到
软件测试学习内容总结
专栏。
本节内容:移动端app自动化测试
文章目录
- 1. appium参数化用例
- 2. android webview测试
- 3. 微信小程序测试
- 4. Appium设备交互Api
- 5. 模拟器控制
- 6. capability使用进阶
- 7. android webview技术原理
- 8. appium问题分析定位
- 9. appium原理与JsonWP协议分析
- WebDriver协议的基础
- 10. appium源代码分析
1. appium参数化用例
2. android webview测试
Android纯web页面测试
多架构支持
环境准备
- 手机端
- 被测浏览器:(不可以是第三方浏览器) ‘Safari’ for iOS and ‘Chrome’,’ Chromium’,or ‘Browser’ for Android,
- PC端
- 安装Chrome浏览器(或chromium),并且能登录 https://www.google.com
- 下载对应手机浏览器对应的 driver版本
- 国内镜像地址:https://npm.taobao.org/mirrors/chromedriver
- appium github:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
- 客户端代码:
- desirecapability
- “browser” = “Browser” 或者 “browser”=“Chrome”
- “chromedriverExecutable” = “指定driver地址”
- desirecapability
- Mac Chromedriver 默认地址:
- /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/ appium-chromedriver/ chromedriver/mac
如何判断页面是webview
- 断网查看
- 看加载条
- 看顶部是否有关闭按钮
- 下拉刷新 页面是否刷新
- 下拉刷新的时候是否有网页提供方
- 用工具查看
- WebView
- android系统提供能显示网页的系统控件(特殊的view)
- < Android 4.4 WebView底层实现WebKit内核
- >= Android 4.4 Google采用chromium作为系统WebView底层支持,API没变,支持HTML5,CSS3,JavaScript
前提条件
- PC:
- 浏览器能访问 https://www.google.com
- chromedriver下载对应的版本
- https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/web/chromedriver.md
- 手机端
- 应用代码需要打开webview开关
- 代码
- appPackage, appActivity
- desirecapability里面添加:chromedriverExecutable: driver路径
定位元素方式
- 1. chrome://inspect
- 2. 获取URL在浏览器里查看
调试页面
webview开关
- 文档:
- https://developers.google.com/web/tools/chrome-devtools/remote-debugging/webviews?hl=zh-cn
- Android6.0 不打开也能查看页面结构
必须从您的应用中启用WebView调试。要启用WebView调试,请在 WebView类上调用静态方法setWebContentsDebuggingEnabled
。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {Webview.setWebContentsDebuggingEnabled(true);
}
此设置适用于应用的所有WebView。
案例2
- 雪球案例
- 打开应用
- 点击 ‘交易’
- 点击 'A股开户’
- 在输入用户名和密码
- 点击 '立即开户’
- 退出应用
遇到的坑
- 设备
- android模拟器6.0默认支持webview操作(mumu不可以,genimotion和sdk自带的emulator可以)
- 其它模拟器和物理机需要打开app内开关(webview调试开关)
- PC浏览器定位元素
- chrome浏览器 - Chrome 62才可以更好的看见webview的内部,其它的版本都有bug,
- 也换成chromium浏览器可以避免很多坑,展示效果和速度比chrome要快
- 代码
- 有的设备可以直接使用find_element_by_accessibility_id(),不同的设备渲染的页面不同,兼容性不适合
- switch_to.context()
- switch_to.window()
3. 微信小程序测试
小程序的运行环境
小程序的运行环境
微信小程序运行在多种平台上: iOS (iPhone/iPad) 微信客户端、Android 微信客户端、PC 微信客户端、Mac 微信客户端和用于调试的微信开发者工具。
各平台脚本执行环境以及用于渲染非原生组件的环境是各不相同的:
- 在iOS上,小程序逻辑层的 javascript 代码运行在 JavaScriptCore 中,视图层是由WKWebView来渲染的,环境有iOS 12、iOS 13等;
- 在Android上,小程序逻辑层的javascript代码运行在 V8 中,视图层是由自研XWeb引擎基于 MobileChrome 内核来渲染的;
- 在开发工具上,小程序逻辑层的 javascript 代码是运行在 NW.js 中,视图层是由Chromium Webview来渲染的。
平台差异
尽管各运行环境是十分相似的,但是还是有些许区别:
- JavaScript 语法和 API 支持不一致: 语法上开发者可以通过开启 ES6 转 ES5 的功能来规避(详情);此外,小程序基础库内置了必要的Polyfill,来弥补API的差异(详情)。
- WXSS 渲染表现不一致: 尽管可以通过开启
样式补全
来规避大部分的问题,还是建议开发者需要在iOS和Android上分别检查小程序的真实表现。
开发者工具仅供调试使用,最终的表现以客户端为准。
微信调试开关
- 微信每个版本都很“善变”
- 可手工开启调试开关
- 默认关闭了调试开关而且无法开启
- 默认开启调试开关
- 手工开启办法
- 文件传输助手发送
- debugtbs.qq.com
- debugx5.qq.com
- 打开微信小程序调试开关
微信小程序自动化测试的关键步骤
- 设置chromedriver正确版本
- 设置chrome option传递给chromedriver
- 使用adb proxy解决fix chromedriver的bug
为什么有些手机无法自动化微信小程序
- 低版本的chromedriver在高版本的手机上有bug
- chromedriver与微信定制的chrome内核实现上有问题
- 解决方案:fix it
- chromedriver没有使用adb命令,而是使用了adb协议
- 参考课程中提到的adb proxy源代码
adb proxy
- mitmdump \
- -p 5038 \
- –rawtcp \
- –mode reverse:http://localhost:5037/ \
- -s adb_proxy.py
- https://ceshiren.com/t/topic/3994
基本capability设置
DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
desiredCapabilities.setCapability( capabilityName: "platformName", value: "android");
desiredCapabilities.setCapability( capabilityName: "deviceName", value: "测试人社区 ceshiren.com");
desiredCapabilities.setCapability( capabilityName: "appPackage", value: "com.tencent.mm") ;
desiredCapabilities.setCapability( capabilityName: " appActivity", value: "com.tencent.mm.ui.LauncherUI") ;
desiredCapabilities.setCapability( capabilityName: "unicodeKeyboard", value: "true") ;
desiredCapabilities.setCapability( capabilityName: "resetKeyboard", value: "true") ;
//高危操作,如果设置错误,聊天记录会被清空,建议使用小号测试
desiredCapabilities.setCapability( capabilityName: "noReset", value: "true");
chromedriver版本配置
//第一步:设置正确的chromedriver
//简单粗暴的解决方案
desiredCapabilities. setCapability( capabilityName: "chromedriverExecutable", value: " /Users/seveniruby/projects/chromedriver/chromedrivers/chromedriver_78.0.3904.11");
desiredCapabilities.setCapability( "chromedriverExecutable", "/Users/seveniruby/projects/chromedciver/chromedrivers/chromedriver_2.23");
//完善的版本选择方案,不过会优先找android webview默认实现
desiredCapabilities.setCapability("chromedriverExecutableDir",
"/Users/seveniruby/projects/ chcomedriver/chromedcivers");
desiredCapabilities.setCapability("chromedriverChromeMappingFile", "/Users/seveniruby/projects/Java3/src/main/resources/mapping.json");
//打印更多chromedriver的log方便定位问题
desiredCapabilities.setCapability( capabilityName: "showChromedriverLog", value: true);
chromedriver参数配置
//第二步:设置chromeoption传递给chromedriver
//因为小程序的进程名跟包名不一样,需要加上这个参数
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.setExperimentalOption( name: "androidProcess", value: "com.tencent.mm:appbrand0"); desiredCapabilities.setCapability ("goog:chromeOptions", chromeOptions);
//必须得加上,因为默认生成browserName=chrome的设置,需要去掉
desiredCapabilities.setCapability( capabilityName: "browserName", value: "");
使用adb proxy
//第三步:设置adb proxy
//通过自己的adb代理修夏chromedriver的bug并解决@xweb_devtools_remote的向題
desiredCapabilities.setCapability( capabilityName: "adbPort", value: "5038") ;
4. Appium设备交互Api
- 测试过程中模拟来电,来短信
- 模拟网络切换
- 运行过程中获取系统日志
- 截图
5. 模拟器控制
模拟电话、短信
- appium可以模拟来电话,来短信功能,在app运行过程中收到短信/电话,app如何做处理的,专属的一些场景
- 只支持原生模拟器,不支持mumu,genimotion等
def test_mobile(self):self.driver.make_gsm_call("13801010101",GsmCallActions.CALL)self.driver.send_sms('555-123-4567', 'Hey lol')
6. capability使用进阶
Capability高级用法
- newCommandTimeout
- udid
- autoGrantPermissions
Capability高级用法
- 测试策略相关
- - noReset
- - fullreset
- - dontStopAppOnReset
Capability高级用法
- 性能相关
- skipServerInstallation
- skipDeviceInitialization
- skipUnlock
- skipLogcatCapture
- systemPort
- - ignoreUnimportantViews
- relaxed-security 启动的时候设置
7. android webview技术原理
WebView技术原理
- Webview 日志获取
- 关键日志分析
8. appium问题分析定位
9. appium原理与JsonWP协议分析
- 理解客户端、appium server、uiautomator2-server的协议
WebDriver协议的基础
JsonWP 协议
- session_ id 创建
curl -l -H "Content-type: application/json" -X POST -d '{"desiredCapabilities": {"platformName": "Android", "deviceName": "192.168.56.101:5555", "platformVersion": "6.0", "appPackage": "com.xueqiu.android", "appActivity": "com.xueqiu.android.common.MainActivity"}}' 'http://127.0.0.1:4723/wd/hub/session'
- session_id 获取
session_id=$(curl 'http://127.0.0.1:4723/wd/ hub/sessions' \ | awk -F \"'{print $6}')
JsonWP 协议
- element_id 获取
curl -X POST http://127.0.0.1:4723/wd/hub/session/$session_id/elements --data-binary '{"using": "xpath", "value": "//*[@text=\"同意\"]"}' -H "Content-Type: application/json; charset=UTF-8"
- 元素属性获取
curl http://127.0.0.1:4723/wd/hub/session/$session_id/element/$element_id/attribute/text
- 元素动作(例如:点击)
curl -X POST http://127.0.0.1:4723/wd/hub/session/$session_id/element/$element_id/???
10. appium源代码分析
所有源代码
- appium server
- Node.js系列包
- adb shell
- ChromeDriver
- 底层引擎
- Uiautomator Java
- WDA
- selenium
- appium client: Python、 Java
16 移动端app自动化测试 - 软件测试相关推荐
- 一种很轻松的Excel关键字方式进行Android端APP自动化测试(Java+Appium+TestNG+Excel)
说明 本次分享Android端APP自动化测试Excel执行逻辑,整体逻辑与Web端类似,没看过的读者可看这里 =========>> 一种很轻松的Excel关键字方式进行网页Web自动化 ...
- Detox 移动端 APP 自动化测试框架
软件简介 Detox 是一个用于移动端 APP 灰盒测试(介于白盒测试和黑盒测试之间,既关注内部逻辑实现,也关注软件最终效果,但关注度不及两者,通常在集成测试阶段进行)的自动化测试框架. 下面是登录界 ...
- Python Appium移动端app自动化测试框架
最近有时间把前面写的Python UI自动化脚本转换成了适用于App的测试,整体架构没多少变化,先看整体架构 先从入口说起: (1)config.ini:运行前进行基本的配置,配置文件,由于是借鉴的U ...
- 软件测试的基本理论-移动端app测试-6
软件测试的基本理论-移动端app测试-6 一.移动app测试 1. 移动app测试概述 2.移动app测试要点 3, UI测试要点 1,界面布局 2,图形测试 3,内容测试 4, 功能测试 1,切换测 ...
- 2022软件测试技能 APP自动化测试 Python+Appium+Uiautomator2 实战教程
系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录 系列文章目录 前言 一.Appium 原理 二.环境搭建,一键搞定 1. 安装Java JDK 2. Android SDK 安装与配置 3. ...
- 【软件测试】APP自动化测试面试题,含答案
1.Android APP 内存不足时, 系统如何结束进程获得内存? 系统优先结束被挂起(暂停)的进程,释放内存 2.APP 测试常见的严重问题有哪些? 分别引起的原因有哪些? 常见的有 crash. ...
- APP自动化测试系列之Appium介绍及运行原理
VOL 161 23 2020-09 今天距2021年99天 这是ITester软件测试小栈第161次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...
- 让HR眼前一亮:30个APP项目软件测试经验,点燃你的简历
在求职过程中,我们都希望自己的简历能够吸引面试官的眼球,从而获得更多的面试机会.作为一名软件测试人员,丰富的实战经验是让自己脱颖而出的关键之一. 在我多年从事APP项目软件测试的工作中,我积累了大量的 ...
- 2022年最新csdn涨薪技术栈-app自动化测试概述
目录 一. 应用背景 二. 测试框架介绍 1.Android自动化框架 IOS自动化框架 三. 测试流程与分类 1.测试流程 2.自动化测试分类 四. 移动操作系统与app类型 1.移动操作系统and ...
最新文章
- http传输json文件_python
- Struts2 method=get方法乱码
- 善于 调用Windows API
- PyQt 5布局管理
- 消除类游戏ccf c语言,ccf试题 消除类游戏
- linux 命令行字符终端terminal下强制清空回收站
- Angular应用Base Element Href属性的设置
- c primer plus 第6版 中文版pdf_内功实力再精进 试驾上汽大通V80 PLUS城市版_搜狐汽车...
- ARP检测的技术手段和作用详述
- 学习动态性能表 第五篇--V$SESSION
- Unigam标注和Ngram标注
- 【BZOJ4554】游戏(二分图匹配,网络流)
- 7 ida pro 网盘_7月上市新车汇总 日产轩逸领衔 自主高端红旗HS7最具潜力
- springboot集成微信APP支付V3最新版
- 新建web项目上传SVN服务器
- Cisco Packet Tracer Student的路由器接口配置
- 昆仑通态触摸屏的使用
- 文档查看器PrizmDoc Viewer v13.13发布:多个修订及更新
- 我国芯片的未来发展前景如何呢
- hdu 3665 Seaside floyd+超级汇点
热门文章
- HDU 2674 N! Again
- linux禁止root账户远程访问
- Tomcat调优(详细)
- 用Python压缩和提取文件
- Python数据清洗实战案例--拉勾招聘数据清洗
- 有没有什么软件可以识别表格?快来试试这几个软件
- kurento 6.14.0文档翻译 第一章 关于kurento与webrtc
- 计算机实验报告2,计算机组成原理实验报告2
- java sslcontext详解_Java SslContext.newServerContext方法代码示例
- 关于xlsx.full.js 使用 和 行高设置