软件测试所有内容笔记正在陆续更新中,笔记已经在本地记录,全部为自己手动记录的笔记及总结,正在开始更新中,后续会逐步更新并完善到 软件测试学习内容总结 专栏。
本节内容:移动端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地址”
  • 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自动化测试 - 软件测试相关推荐

  1. 一种很轻松的Excel关键字方式进行Android端APP自动化测试(Java+Appium+TestNG+Excel)

    说明 本次分享Android端APP自动化测试Excel执行逻辑,整体逻辑与Web端类似,没看过的读者可看这里 =========>> 一种很轻松的Excel关键字方式进行网页Web自动化 ...

  2. Detox 移动端 APP 自动化测试框架

    软件简介 Detox 是一个用于移动端 APP 灰盒测试(介于白盒测试和黑盒测试之间,既关注内部逻辑实现,也关注软件最终效果,但关注度不及两者,通常在集成测试阶段进行)的自动化测试框架. 下面是登录界 ...

  3. Python Appium移动端app自动化测试框架

    最近有时间把前面写的Python UI自动化脚本转换成了适用于App的测试,整体架构没多少变化,先看整体架构 先从入口说起: (1)config.ini:运行前进行基本的配置,配置文件,由于是借鉴的U ...

  4. 软件测试的基本理论-移动端app测试-6

    软件测试的基本理论-移动端app测试-6 一.移动app测试 1. 移动app测试概述 2.移动app测试要点 3, UI测试要点 1,界面布局 2,图形测试 3,内容测试 4, 功能测试 1,切换测 ...

  5. 2022软件测试技能 APP自动化测试 Python+Appium+Uiautomator2 实战教程

    系列文章目录 提示:阅读本章之前,请先阅读目录 文章目录 系列文章目录 前言 一.Appium 原理 二.环境搭建,一键搞定 1. 安装Java JDK 2. Android SDK 安装与配置 3. ...

  6. 【软件测试】APP自动化测试面试题,含答案

    1.Android APP 内存不足时, 系统如何结束进程获得内存? 系统优先结束被挂起(暂停)的进程,释放内存 2.APP 测试常见的严重问题有哪些? 分别引起的原因有哪些? 常见的有 crash. ...

  7. APP自动化测试系列之Appium介绍及运行原理

    VOL 161 23 2020-09 今天距2021年99天 这是ITester软件测试小栈第161次推文 点击上方蓝字"ITester软件测试小栈"关注我,每周一.三.五早上 0 ...

  8. 让HR眼前一亮:30个APP项目软件测试经验,点燃你的简历

    在求职过程中,我们都希望自己的简历能够吸引面试官的眼球,从而获得更多的面试机会.作为一名软件测试人员,丰富的实战经验是让自己脱颖而出的关键之一. 在我多年从事APP项目软件测试的工作中,我积累了大量的 ...

  9. 2022年最新csdn涨薪技术栈-app自动化测试概述

    目录 一. 应用背景 二. 测试框架介绍 1.Android自动化框架 IOS自动化框架 三. 测试流程与分类 1.测试流程 2.自动化测试分类 四. 移动操作系统与app类型 1.移动操作系统and ...

最新文章

  1. http传输json文件_python
  2. Struts2 method=get方法乱码
  3. 善于 调用Windows API
  4. PyQt 5布局管理
  5. 消除类游戏ccf c语言,ccf试题 消除类游戏
  6. linux 命令行字符终端terminal下强制清空回收站
  7. Angular应用Base Element Href属性的设置
  8. c primer plus 第6版 中文版pdf_内功实力再精进 试驾上汽大通V80 PLUS城市版_搜狐汽车...
  9. ARP检测的技术手段和作用详述
  10. 学习动态性能表 第五篇--V$SESSION
  11. Unigam标注和Ngram标注
  12. 【BZOJ4554】游戏(二分图匹配,网络流)
  13. 7 ida pro 网盘_7月上市新车汇总 日产轩逸领衔 自主高端红旗HS7最具潜力
  14. springboot集成微信APP支付V3最新版
  15. 新建web项目上传SVN服务器
  16. Cisco Packet Tracer Student的路由器接口配置
  17. 昆仑通态触摸屏的使用
  18. 文档查看器PrizmDoc Viewer v13.13发布:多个修订及更新
  19. 我国芯片的未来发展前景如何呢
  20. hdu 3665 Seaside floyd+超级汇点

热门文章

  1. HDU 2674 N! Again
  2. linux禁止root账户远程访问
  3. Tomcat调优(详细)
  4. 用Python压缩和提取文件
  5. Python数据清洗实战案例--拉勾招聘数据清洗
  6. 有没有什么软件可以识别表格?快来试试这几个软件
  7. kurento 6.14.0文档翻译 第一章 关于kurento与webrtc
  8. 计算机实验报告2,计算机组成原理实验报告2
  9. java sslcontext详解_Java SslContext.newServerContext方法代码示例
  10. 关于xlsx.full.js 使用 和 行高设置