移动互联网测试技术体系
01
移动测试技术体系
移动测试技术体系
02 shell
03 Android自动化
Android自动化用例编写
Android WebView测试与Toast识别
04 iOS自动化
05 自动遍历与兼容性测试
06 接口测试
07 接口测试进阶
08 Web自动化测试
09 接口压力测试
10 专项测试
11 安全测试
12 DevOps与持续交付上
13 DevOps与持续交付下
14 质量监控和审计平台
15 答疑和总结
其他公开课:
移动互联网服务架构
服务端测试:大数据、数据分析等
项目实施的关键过程
需求、设计、研发(单元测试、代码审计、冒烟、自测)、测试(用户端、服务端)、交付
从左到右发布
从右到左反馈
质量保证工作实施的三大阶段
一、研发阶段的质量保证
1.研发工程师的交付物
设计文档
需求文档、设计文档、接口文档、Confluence Wiki
代码管理
git,svn
Java Python PHP
数据
数据库:SQL MySql PG
索引文件
可部署的产品
构建的二进制包、联调环境
2.研发阶段常见的质量保证手段
代码评审 code review
价值点
代码规范约束,培养良好的代码习惯和追求
深入了解业务,知识和规范的传承
沟通设计思路并改进,互相评审防止烂代码烂设计进入
行业观点和落地
行业经验普遍认为代码评审是最有效的质量保证手段
借助标准的代码管理工具即可.比如gitlab的pr机制
整个过程测试工程师参与度低
(版本直接的diff)
代码审计
综合性的代码分析平台
sonar 支持自定义规则, 较多的公司使用
360火线
IDE辅助功能
xcode、Android studio
编辑器报警
阿里巴巴java开发手册 ide插件支持
独立的静态分析工具
findbugs scan-build
pmd androidlint
阿里巴巴java开发手册 pmd插件
代码审计关注的质量指标
对代码质量进⾏综合性的评估和审查,集中式的代码质量管理平台
代码坏味道
代码规范
技术债评估
bug和漏洞
代码重复度
单测与集成
测试用例数量
覆盖率
代码问题示例:
bug
分支同名
代码坏味道
有2个result,重复赋值,带来性能问题;只有if,没有else,逻辑问题。
安全风险
cookie
单元测试:条数,覆盖率,新增代码的覆盖
价值
最底层的质量保护网
用于验证修改的影响范围
责任
单元测试是研发同学的责任和义务
建立持续集成快速反馈的机制
单测的可测性是决定单测成败的关键
覆盖度评估很关键
几乎所有的开源项目都有单测用例
研发自测
研发自测
防止低质量的产品进⼊下游浪费成本
保证高质量交付有助于缩短项目周期
自查和自测试是负责任的态度,也是优秀的研发工程师的习惯
产品自测
评估产品流程和UI设计是否符合预期
自测行为的监督与推动参照后面的监控体系
自动化冒烟测试
debug版本的冒烟
自动打debug包
基于debug包的自动化测专项试
monkey健壮性测试
自动遍历+专项测试
LeakCanary自动检测内存泄漏
Bugly等检测崩溃
BlockCanary 检测卡顿
test版本的冒烟
少量的自动化冒烟用例
自动遍历+功能探索
New Monkey:稳定性测试
Magnifier:卡顿监控
二、测试阶段的测试流程
app交付策略
内部交付
Jenkins自动打包
提供内部网站下载入口,供整个项目团队手工验证
公测
使用fir.im bugly testflight服务
正式发布
打包渠道包推送到各市场
上传到app store
建立测试准入机制
建立适合的自动打包机制
自动对研发、测试分支进行打包
自动对测试分支进行测试
对研发分支进行自动化冒烟确保研发分支无重大问题
对测试分支建立完善的测试流程
打回 or 接受
建立合适的版本管理机制
版本号的使用规范 三位+四位
根据版本号定位代码
常见后端发布机制
代码编译和发布包构建
后端打包mvn
移动端打包 gradle cocospod
二进制部署打包 rpm docker
环境构建
docker等容器技术
Jenkins等自动构建和部署平台
测试推送
后端升级自动触发接口测试
基本的测试checklist和手段
业务测试 手工测试 、接口测试(脚本)
回归测试 重要 服务端-接口 、用户端-自动化(UI)、自动遍历
专项测试 占比不高
质量监控
合理的测试安排
新功能测试(新业务、新需求)
老功能回归测试(老功能和老需求)
小版本测试(功能点搞定)
大版本测试(大功能改动或者新增)
回归与新功能测试每次都要执行
专项测试可以每个大版本测试一次
业务测试
价值
保证当前版本需求实现的正确
保证产品业务长期的功能正确
保证交互和产品体验
验证方式
目前手工测试审查为主
自动化验证
数据分析
手工测试相关管理
测试用例维护与bug管理
管理系统 Jira Redmine BugFree
bug等级
项目等级
用例等级
测试用例细化 Jira Redmine
场景梳理与业务建模 思维导图 freemind xmind
测试知识管理体系
环境管理
数据管理
业务知识
外部测试资源
内测
项目组内资源
项目组外关公 比如华为手机的测试模式
公测
灰度测试:根据特征抽样一部分,或者天使用户群
众测:第三方众测服务 ⼀些测试社区
众包:第三方的众包平台 utest
beta版本测试
自动化测试分类
流程自动化(研发-测试-交付,让整个流程更顺畅)
打包自动化 Bash Jenkins
环境自动化 Bash Jenkins Docker
测试自动化(加速业务测试)
UI测试自动化 Selenium Appium
接口测试自动化 RestAssured SoapUI HttpClient
专项测试自动化 LeakCanary BlockCanary Appetizer Proxy
Android自动化测试
UI Automator 验收
Appium Calabash
iOS自动化测试
重点:
XCTest(KIF)
XCUITest
自动化测试框架选择
推荐Appium
跨语音
跨平台
底层多引擎可切换
生态丰富,社区强大
iOS: KIF WDA XCTest
Android: Robotium Uiautomator1/2 更底层的框架
calabash也是同样优秀的方案
阿里开源的macaca性能更好
UI自动化测试的瓶颈
技术成本高:
人力成本高:测试开发工程师难招
技术门槛高:
技术选型可能走错,自动化测试理论和实践扎实的人太少
复用率不高:UI和业务流程变更是最主要变更
稳定性不足:容易被干扰,执行慢
常见行业错误观点
UI自动化测试无用论 [X]
UI自动化测试只能模拟人工 [X]
合理的使用UI自动化
策略改进方案
使用分层测试策略,结合接口测试与单元测试,控制UI自动化测试规模
大部分的基础回归测试交个自动遍历
少数核心用例交给自动化测试
新功能测试交给人工测试与自动探索性测试
技术改进方案
良好的维护模型:PageObject或者其他更简单的封装
更好的框架支持:增加Watch,智能等待,失败重试等机制
自动遍历测试
通过自动遍历app中业务路径尝试发现问题的方法
是为了弥补现有自动动化手段的不足
UI自动化维护成本问题
原有遍历工具可控性差 比如monkey(做压力测试)
我想要看的功能它就是不点
经常点到外部的app
经常点击到注销和退出
不支持复杂业务
常见遍历工具与技术
自动遍历常见工具
google android原生monkey
百度smartmonkey
腾讯newmonkey
vigossjjj smart_monkey
seveniruby appcrawler
这方面的理论和工具正在快速的完善
❖ ⾃动遍历的技术分类
❖ 基于底层机制。基本的命令或者api进⾏事件注⼊ 改造monkey
❖ 基于⾃动化框架。uiautomator xctest uiautomation appium macaca
❖ 基于图像识别
发布后的质量监控
发布后的质量监控
全流程监
研发自测