赞
踩
问题:同样的测试用例在同样的环境上,时而测试通过,时而测试失败;
造成GUI测试不稳定的常见五种因素:
非预计的弹出对话框
新增异常场景恢复流程,一旦发现控件无法定位时,就走到该逻辑下,遍历满足的情况,执行相应的操作,缺点就是,不同对话框需要更新到该进程了,存在维护成本;
页面控件属性的细微变化
比如控件ID属性发生变化,也建议新增定位控件逻辑处理:
上面的方法只是一种思路,可以根据不同业务特性归总一定适用的方法来在出错时定位控件,提高识别率;
还可以使用xpath,但也一样存在属性被改的情况,只是相对控件元素,概率会少一点;
被测系统的A/B测试
在测试脚本内部对不同的被测版本做分支处理,脚本需要能够区分 A
和 B
两个的不同版本,并做出相应的处理;
随机的页面延迟造成控件识别失败
增加重试机制,当操作失败时,自动发起重试;
主要是说,好的测试报告,需要有截图
及高亮显示操作元素
功能;
如果使用selenium,需要扩展selenium原来的操作函数和hook函数实现;
web APP
和native APP
两者之间的一种形态,在原生内嵌webview
,通过webview
来访问网页,优点是具备跨平台,维护更新,是主流的开发模式;从业务功能测试的角度看,移动应用的测试用例设计和传统 PC
端的 GUI
自动化测试策略比较类似,只是测试框架不同,数据驱动、页面对象模型和业务流程封装依旧适用;
交叉事件测试
也称场景测试,模拟各种交叉场景,手工测试为主;
兼容性测试
因为需要大量真实社保,所以使用第三方的云测平台较多;
流量测试
借助于Android
和 iOS
自带的工具进行流量统计,也可以利用 tcpdump
、Wireshark
和 Fiddler
等网络分析工具;
对于 Android 系统,网络流量信息通常存储在 /proc/net/dev 目录下,也可以直接利用 ADB 工具获取实时的流量信息。另外,推荐一款 Android 的轻量级性能监控小工具 Emmagee,类似于 Windows 系统性能监视器,能够实时显示 App 运行过程中 CPU、内存和流量等信息;
对于 iOS 系统,可以使用 Xcode 自带的性能分析工具集中的 Network Activity,分析具体的流量使用情况;
常见流量优化的方法:
耗电量测试
耗电量一般从三个方面思考:
检验方法,偏硬件的是耗电仪,软件则如下:
adb shell dumpsys battery
来获取应用的耗电量信息;Sysdiagnose
来收集耗电量信息,然后,可以进一步通过 Instrument
工具链中的 Energy Diagnostics
进行耗电量分析;弱网络测试
日常生活中,弱网的场景比较多,如地铁、隧道、车库,伴随着就是丢包、延迟、断线的异常场景;
文中作者推荐Augmented Traffic Control
,是Facebook的开源移动网络测试工具,详情请点击这里查阅;
而jb日常用的比较多的是fiddler来模拟弱网,感兴趣的点击这里查阅;
边界测试
意思就是找出程序的临界值场景,验证这些临界场景是否正常,常见的就是最大值最小值;
本文主要是介绍了Appium
及安装使用,网上也有很多,请自行查阅;
Appium 的内部原理可以总结为:
Appium 属于 C/S 架构,Appium Client 通过多语言支持的第三方库向 Appium Server 发起请求,基于 Node.js 的 Appium Server 会接受 Appium Client 发来的请求,接着和 iOS 或者 Android 平台上的代理工具打交道,代理工具在运行过程中不断接收请求,并根据 WebDriver 协议解析出要执行的操作,最后调用 iOS 或者 Android 平台上的原生测试框架完成测试。
常用的api测试工具有cURL
、postman
,还有jmeter跟soapui也算;
cURL
是一款命令行工具,需要安装,然后执行下面的命令发起api调用;
curl -i -H "Accept: application/json" -X GET "https://www.baidu.com"
返回的内容如图:
常见的参数解析:
参数 | 含义 |
---|---|
-i | 显示response的header信息; |
-H | 设置request中的header; |
-X | 执行执行方法,如get、post、Put,不指定-X,则默认使用get; |
-d | 设置http参数,参数之间用&串接; |
-b | 需要cookie时,指定cookie文件路径; |
Session 的场景
curl -i -H "sessionid:XXXXXXXXXX" -X GET "http://XXX/api/demoAPI"
Cookie 的场景 使用 cookie,在认证成功后,后端会返回 cookie给前端,前端可以把该 cookie 保存成为文件,当需要再次使用该 cookie 时,再用-b cookie_File
的方式在 request 中植入 cookie 即可正常使用;
// 将 cookie 保存为文件
curl -i -X POST -d username=robin -d password=password123 -c ~/cookie.txt "http://XXX/auth"
// 载入 cookie 到 request 中
curl -i -H "Accept:application/json" -X GET -b ~/cookie.txt "http://XXX/api/demoAPI"
相对于cURL,postman用的比较频繁,官网地址点这里;
结果验证 点击Test
右侧的SNIPPETS
,挑选一些需要验证的场景,代码就会自动生成,当然也可以自己写;
基于postman的测试代码自动生成 点击右侧的code
,选择需要的语言,保存即可;
又或者,使用newman工具,直接执行postman
的collection
;
newman run examples/sample-collection.json;
多个api调用协助
通过代码将上个 API 调用返回的response
中的某个值传递给下一个 API;
api依赖第三方
mock server;
异步api
异步 API 是指,调用后会立即返回,但是实际任务并没有真正完成,而是需要稍后去查询或者回调的API;
早期的基于 Postman 的 API 测试在面临频繁执行大量测试用例,以及与 CI/CD
流水线整合的问题时,显得心有余而力不足。
为此,基于命令行的 API 测试实践,也就是 Postman+Newman`,具有很好的灵活性,解决了这两个问题。
但是,Postman+Newman
的测试方案,只能适用于单个 API 调用的简单测试场景,对于连续调用多个 API 并涉及到参数传递问题时,这个方案就变得不那么理想和完美了。随后,API 测试就过渡到了基于代码的 API 测试阶段;
respons结果发生变化时自动识别
具体实现的思路是,在 API
测试框架里引入一个内建数据库,推荐采用非关系型数据库
(比如 MongoDB),然后用这个数据库记录每次调用的 request 和 response 的组合,当下次发送相同 request 时,API 测试框架就会自动和上次的 response 做差异检测,对于有变化的字段给出告警;
单体架构是将所有的业务场景的表示层、业务逻辑层和数据访问层放在同一个工程中,最终经过编译、打包,并部署在服务器上。
缺点:
在微服务架构下,一个大型复杂软件系统不再由一个单体组成,而是由一系列相互独立的微服务组成;
庞大的测试用例数量
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。