单纯从功能测试层面上来讲的话,APP测试、web测试在流程和功能测试上是没有区别的
根据两者载体不一样,则区别如下:
1.系统结构方面
web项目:b/s架构,基于浏览器的;web测试只要更新来服务器端,客户端就会同步更新
app项目:c/s架构,必须要有客户端;app修改来服务端,则客户端用户所有核心版本都需要进行回归测试一遍。
2.性能方面
web项目 需监测 响应时间,CPU、Memory
app项目 除了监测 响应时间,CPU、Memory外,还需监测浏览,电量等。
3.兼容方面
web项目
1.浏览器(火狐、谷歌、IE等)
2.操作系统(Windows7、Windows10、Linux等)
app项目:
1.设备系统:iOS(iPad、iPhone)、Android(三星、华为、联想等)、Windows(Win7、Win8)、OS X(Mac)
2.手机设备可根据 手机型号、分辨率不同
4. 相对于Web项目,app有专项测试
1.干扰测试:中断,来电,短信,关机,重启等
2.弱网络测试(模拟2g、3g、4g,wifi网络状态以及丢包情况);网络切换测试(网络断开后重连,3g切换到4g/wifi等)
5. 安装、更新、卸载
安装:需要考虑安装时的中断、弱网、安装后删除安装文件等情况
卸载:需考虑卸载后是否删除app相关的文件
更新:分强制更新,非强制更新,增包更新,断点续传,弱网状态下更新
6.测试工具方面
自动化工具:APP一般使用Appium;Web一般使用Selenium
性能测试工具:APP一般使用Jmeter;Web一般使用LR Jmeter
7. 界面操作
关于手机端测试,需要注意手势,横竖屏切换,多点触控,前后台切换
8. 安全测试
安装包是否可以编译代码,安装包是否签名,权限设置,例如访问通讯录等
9. 边界测试
可用存储空间少,没有SD卡/双SD卡,飞行模式,系统时间有误,第三方依赖(QQ,微信登录)等
10. 权限测试
设置某个app是否可以获取权限,例如是否可访问通讯录,相册照相机等
一、 注册
以等价类划分和边界值法来分析
- 用户名字和密码都为最大长度(边界值分析法,取上点)
- 用户名字和密码都为最小长度(边界值分析法,取上点)
- 用户名字和密码长度在最大和最小长度之间(边界值分析法,取内点)
- 必填项分别为空注册
- 用户最大长度+1(边界值分析法,取上点)
- 用户最小长度-1(边界值分析法,取上点)
- 密码最大长度+1(边界值分析法,取上点)
- 密码最小长度-1(边界值分析法,取上点)
- 用户名含有非法字符注册(这和可以划分几个无效的等价类,如空格,#等,看需求是否允许)
- 密码含有非法字符注册(这个可以划分几个无效的等价类)
- 两次输入密码不一致(如果注册时候要输入两次密码,那么必须这个是必须的)
- 重新注册存在的用户
- 以已经注册的用户名(改变大小写)来注册。(有的需求是区分大小写,有的是不区分)
- 看是否支持Tab和Enter键等;密码是否可以复制粘贴,密码是否以*之类的加密符号显示
- 邮箱地址格式不正确,正确格式—@---.com
- 验证码错误(大小写,空值,错误输入等)
二、 登录
- 用户名和密码都是正确
- 用户名和密码都是错误
- 用户名正确和密码错误
- 用户名错误和密码正确
- 用户名或密码为空
- 删除的用户名和错误的密码
- 删除的用户名和正确密码
- 未注册用户名和错误密码
- 用户名或密码中插入空格
- 使用Tab或Enter键是否能登陆
- 改变用户名和密码的大小写登陆
- 用户名和密码中含有全角字符登陆
- Web系统是否有超时的限制
- 登陆错误次数是否有限制
- 密码的安全性是否有强中弱鉴定
三、修改密码
- 不输入酒密码,直接改密码
- 输入错误旧密码
- 不输入确认新密码
- 不输入新密码
- 新密码和确认新密码不一致
- 新密码中有空格
- 新密码为空
- 新密码长度为最大长度
- 新密码为最大长度与最小长度之间
- 新密码长度为最小长度
- 新密码为最大长度+1
- 新密码为最大长度-1
- 新密码为最小长度+1
- 新密码为最小长度-1
- 新密码为非法字符(如有的密码要求必须是英文和数字组成,如中文汉字)
- 检查是否支持Tab和Enter键等;密码是否可以复制粘贴;密码是否以*之类的加密符号
- 检查密码是否区分大小写,新密码中英文小写,确认密码中英文大写
- 新密码与旧密码一样能否修改成功
四、添加
- 要添加的数据项均为合理,检查数据库中是否添加了相应的数据
- 流出一个必填数据为空
- 按照边界值等价类设计测试用例的原则设计其他输入项的测试用例
- 不符合要求的地方要有错误提示
- 是否支持table键
- 按enter是否能保存
- 若提示不能保存,也要察看数据库里是否多了一条数据
五、删除
- 删除一个数据库中存在的数据,然后查看数据库中是否删除
- 删除一个数据库中并不存在的数据,看是否错误提示,并且数据库中没有数据删除
- 输入一个格式错误的数据,看是否有错误提示,并且数据库中么有数据被删除
- 输入的正确数据前加空格,看是否能正确删除数据
- 什么不输入
- 是否支持table键
- 是否支持enter键
六、 查询
精确查询:
- 输入的查询条件为数据库中存在的数据,看是否能正确地查出相应的数据
- 输入正确的查询条件以前加上空格,是否能正确地查出相应的数据
- 输入格式或范围不符合要求的数据,看是否有错误提示
- 输入数据库中不存在的数据
- 不输入任何数据
- 是否支持table键
- 是否支持enter键
模糊查询:
在精确查询的基础上加上以下一点:
8. 输入一些字符,看是否查出数据库中所有相关信息
功能测试自动化
- 轻量接口自动化测试 Jmeter
- APP UI层面的自动化 Android:UI Automator Viewer,Android Junit,Instrumentation,UI Automator ,iOS:基于Instrument的iOS UI自动化
性能测试
- Web前端性能测试
网络抓包工具:Wireshark
网页文件大小
webpage test
pagespeed insight
chrome adb - APP端性能测试
Android内存占用分析:MAT
iOS内存问题分析:ARC模式
Android WebView性能分析
iOS WebView性能分析 - 后台服务性能测试
负载,压力,耐久性,可扩展性,基准
工具:apacheAB,Jmeter,LoadRunner - 专项测试
兼容性测试
手工测试:操作系统,分辨率,rom,网络类型
云平台:testin,脚本编写,Android
流量测试
Android自带流量管理
iOS自带的Network
tcpdump抓包
Wi-Fi代理抓包:Fidder
流量节省方法:压缩数据,json优于xml;Webp优于传统的JPG,PNG;控制访问的频次;只获取必要的数据,缓存;
电量测试
基于测试设备的方法,购买电量表进行测试
GSam Battery Monitoe Pro
IOS基于Instrument Energy工具
弱网络测试
手机自带的网络状态模拟工具
基于代理的弱网络的模拟
工具:Windows;network delay simulator
Mac:network link conditioner
分析
随着手机应用不断状态,同一款产品的移动端应用市场占相较PC端也越来越大,那么app与pc端针对这些产品的测试有什么相同之处与不同之处呢?
总结如下:
相同之处
一、针对同一个系统功能的测试,三端所测试的业务六月初是一样的
二、一般情况下手机端和PC端都对应一套后台服务,比如说某公司所开发的互联网金融平台,整个平台做了分布式服务架构,后台服务包括用户服务,交易服务,产品服务,PC和手机端测试以上三个流程时,调用的都是同一个后台服务。
(注:也有一些功能,比如PC与手机端展示不一致,或者有什么特殊处理,这样情况下后台会写两套不同的接口来处理对应的业务需求)
不同之处
一、 测试平台(容器)不同:
pc项目都是在电脑上进行测试的:常见的PC项目架构有BS架构和CS架构(server),后台返回的到相应内容显示在浏览器上,常见BS架构的项目比如QQ,微信等,需要在电脑下载客户端(client),客户端与后台服务器(server)进行数据传输交互,基于以上信息,PC端测试都是在电脑上,要么是在浏览器上测试要么安装对应客户端,平台都是电脑
app测试平台分为安卓和iOS端:安卓测试需要在安卓手机上安装开发提供的apk测试包,iOS测试需要将手机UUID提供给开发安装ipa测试包进行测试
H5测试就是测试HMTL5页面:在PC或者手机浏览器都可以直接访问H5页面
二、兼容性测试不同
基于以上测试平台的不同,三端的兼容性也不一样
PC的兼容性主要包括各个浏览器和不同操作系统,目前笔者所经历的公司主要测试了不同主流版本浏览器的兼容性,还未涉及操作系统层面
APP的兼容性包含安卓和iOS不同机型,不同版本,不同屏幕都要适配
H5的兼容性主要测试手机端的不同浏览器的兼容性
三、系统架构不一样
PC和H5端项目尤其是WEB项目对应一个后台服务,所有客户访问的都是同一个后台。上线测试时,直接访问线上地址测试即可
APP测试虽然对应一个后台,但是不同的用户可一下载了不同版本的客户端,上线测试时,需要兼容每个版本的测试。
四、发布流程不同:
PC端每次更新发布,需要将测试通过的包退换线上包,重启服务后立即生效,访问的就是最新的环境
H5由于是一些html5网站发布上线后无需重启即可访问
APP端需要向应用市场发布,安卓发布的市场有很多,应用宝,豌豆荚,应用商店等每个应用都需要单独审核;iOS端应用比较单一就是app store。从提交,审核发到发布会有几天的时间间隔,开发的应用包不会立即发布。
五、专项测试
除以上不同外,app端还有一些专项测试
性能方面:响应时间,流量测试和耗电量测试
安装测试(PC端web项目不用测试,CS架构的也需要考虑)
交叉测试:就是在操作某个软件的时候,来电话,来短信,电量不足提示等外部事件
操作类型:手势测试,横竖屏
网络测试:包含弱网和网络切换测试,重点要考虑回退和刷新是否会造成二次提交,弱网络的模拟,据说可以用360Wi-Fi实现设置。
升级测试:升级测试的提醒机制,升级取消是否影响原有功能的使用,升级后用户数据是否被清除了
六、启动
app端:需要制定desired_caps内容,因为里面包含了设备信息等
web端:通过启动webdriver不同的浏览器类,获取driver,如webdriver.Chrome(),也可以模拟手机端加载wap页面做wap页面测试
七、关于元素的属性
app端:查找到元素以后,查看元素对象,发现里边基本上只有元素的text属性,也没有相关方法修改,这个区别还是很大的,不过appium有set_value的方法,目前还没有尝试,用的还是send_keys().
web端:web端简直就是人间天堂,比起修改,读取元素属性,比如我要获取input标签的name,我可以用get_attribute方法,也可以自行写js代码改变这些属性。
八、使用JS
app端:似乎是支持了,但是执行任何命令server端都会提示404的错误。
web端:支持非常好,因为本身Js就是负责网页交互的,所以会很方便
九、关于滑动
app端:关于滑动是会用很多的,比如页面很长,或者打开通知栏,这种需要在屏幕上滑动的,用到的还比较多。
web端:用到的比较少,之前基本上没有用到过。
十、异常
app端:需要注意的是其他apk给你带来的影响,目前没有找到很好的方式去处理这些问题,因为其他apk给你做了弹窗,比如qq异地登陆,或者短信这种推送,会影响到目前的流程。办法肯定是解决的,我个人理解,可以在出错之后对比一下是否在当前apk,如果不再的话则进入当前apk再做一次相关操作。
web端:很少影响,可以边跑用例边聊QQ,当然我只是举个例子,总之个人体会就是影响比较小,因为浏览器的driver完全只是控制浏览器,别的地方和它无关。
软件测试流程
-
制定测试策略
首先测试策略,当用户提出新的需求时,测试人员应该和开发人员一起做测试需求分析,一般我们都会通过会议的形式去进行讨论分析,这样测试人员会对测试需要有个大概的了解,需要是干什么的,包括哪些功能等等,而不至于什么都不清楚不了解。 -
制定测试计划
大概了解需求内容之后,要对整个测试进行预期评估,包括计划要测试哪些方面的功能,要计划分配哪些人员参与到测试中,哪些人负责哪个模块,以及按照交叉测试的方法,同时还要计划要测试的开始和结束时间,便于掌握这个测试进展等等。 -
编写测试用例
测试计划规范之后,则是进行测试用例的编写,测试用例的编写,主要围绕界面模块而展开,如界面包括哪些按钮,按钮操作是否可以正常进行,其次围绕功能来设计,然后根据不同的场景来设计,对于测试过程中,出现的缺陷问题,要在将缺陷问题记录到测试用例“测试结果”一列,便于查找测试项测试任务情况。 -
形成测试报告
测试用例执行之后,对于测试过程中发现的缺陷问题,要汇报自己的测试情况并且测试中的缺陷反馈到测试工具中,便于开发人员解决,对于安排的不同模块的负责人在测试自己对应模块任务时,也要及时汇报自己的测试工作进度,便于测试小组掌握测试的整个进度。 -
测试总结及文档编写
按照测试用例执行完所有的测试任务,且开发人员修复完来所有的bug问题(不包含一些难以修复但不紧急的问题)测试人员需要编写针对本次项目的测试总结,要在总结中说明,测试计划是否按照如期执行,总测试缺陷数据多少,测试覆盖了多少等等。
同时文档人员要针对本次项目开发新增加的功能进行项目“升级日志”和“帮助手册”任务的编写,便于用户了解并能够快速上手使用新增的功能。
web测试常见的测试场景
下面从页面,页面元素,功能,提示信息,容错性,权限,键盘操作部分讲述常见的测试点。
1. 页面部分
- 页面清单是否完整(是否已经将所需要的页面全部列出来了)
- 页面是否显示(在不同分辨率下页面是否存在,在不同浏览器版本中页面是否显示)
- 页面在窗口中的显示是否正确,美观(在调整浏览器窗口大小时,屏幕刷新是否正确)
- 页面特殊效果(如特殊字体效果,动画效果是否显示)
- 页面特殊效果显示是否正确
2. 页面元素部分
- 页面元素清单(为实现功能,是否将所需要的元素全部都列出来,如按钮,单选框,复选框,列表框,输入框等)
- 元素是否显示(元素是否存在)
- 元素是否正确(针对文字,图形,签章等)
- 元素的外形,摆放位置是否合理(如按钮,单选框,复选框,列表框,输入框等)
- 元素基本功能是否实现(如文字特效,动画特效,按钮,超链接等)
- 元素的容错性列表(如输入框,时间列表或日历)
- 元素的容错性是否正确或存在
3. 功能部分
- 数据初始化是否执行
- 数据初始化是否正确
- 数据处理功能是否执行或正确
- 数据保存是否执行或正确
- 是否对其他功能有影响
- 如果影响其他功能,系统能否做出正确的反应
- 对模块的具体功能进行测试时可以列出功能模块所有的功能,进行排列组合,测试所有情况
- 查询功能分2种–验证操作结果, 打开网页时自动显示结果,则不需要特别强调;需要手工操作进行查询,则每次在其他功能完成后进行
4. 提示信息
- 成功,失败提示
- 操作结果失败
- 确认提示
- 危险操作,重要操作提示
- 返回页面提示后显示的页面
5. 容错性
- 为空,非空
- 唯一性
- 字长,格式
- 数字,邮编编码,电话,电子邮件,ID号,密码
- 日期,时间
- 特殊字符(对于数据库),英文单词,单双引号
6. 权限部分
- 功能:指定用户可以使用哪些功能,不能使用哪些功能
- 数据:指定用户可以处理哪些数据,不可以处理哪些数据
- 操作:在逻辑关系上,操作前后顺序,数据处理情况
- 权限变化
7. 键盘操作
- Tab键
- 上下方向键
- Enter键
- 系统设定快捷键
问题:什么是性能测试,什么是负载测试,什么是压力测试?
参考答案:
性能测试:性能测试是和功能测试相对应的,根据用户场景进行的单个用户操作,是属于功能测试领域,主要是验证软件是否可以满足用户的功能需求,比如,单个用户使用系统,系统各项功能是否满足用户的需求。
如果把这一个用户的操作放大,变为100个,1000个,10000个用户同时操作软件,验证软件系统是否满足用户需求,那么这个就是软件性能测试。通常使用性能测试工具对软件开展并发的访问,同时监控系统各项指标,比如CPU,内存,网络,磁盘等关键部件的使用情况,性能测试是负载测试,压力测试,并发测试的统称。
负载测试: 通过逐步加压的方式类确定系统的处理能力,确定系统能承受的各项阀值。
压力测试: 逐步增加负载,使系统某些资源达到饱和、极限甚至失效的测试,目的是用来发现系统的软件业务处理能力,系统硬件的极限处理能力等。
网站作为一款web端软件,是测试小伙伴们测试产品的重要组成部分,拿到一个网站,不知道怎么测试?那么按照下面10大安全问题依次寻找。
性能测试这种测试方式在发生的过程中,其中一个过渡性的工作,就是对执行过程中的问题,进行定位,对功能的定位,对负载的定位,最重要的,当然是问题中说的“瓶颈”,接触性能测试不深,更非专家,自己的理解,瓶颈产生在以下几方面:
- 网络瓶颈,如宽带,流量等形成的网络环境
- 应用服务器瓶颈,如中间件的基本配置,CACHE等
- 系统瓶颈,这个比较常用,应用服务器,数据库服务器以及客户机的CPU,内存,硬盘等配置
- 数据库瓶颈,以oracle为例,SYS中默认的一些参数设置
- 应用程序本身瓶颈,这个是测试过程中最需要去关注的,需要测试人员和开发人员配合执行,然后定位逐步细化分析,先可以监控一些常用衡量CPU,内存,磁盘的性能指标,进行综合分析,然后根据所测试系统具体情况,进行初步问题定位,然后确定更详细的监控指标来分析。
怀疑内存不足时:
方法一:
【监控指标】:Memory Available Mbytes, Memory的Pages/sec, page read/sec, Page Fault/sec
【参考值】:如果 Page Reads/Sec比率持续保持为5 ,表示可能内存不足。
Page/Sec推荐00-20(如果服务器没有足够的内存处理器工作负荷,此数值将一直很高,如果大于80,表示有问题)
方法二:
根据Physical Disk 值分析性能瓶颈
【监控指标】:Memory Available MBytes ,Pages read/sec,%Disk Time 和 Avg.Disk Queue Length
【参考值】:%Disk Time建议阈值90%
当内存不足时,有点进程会转移到硬盘上去运行,造成性能急剧下降,而且一个缺少内存的系统常常表现出很高的CPU利用率,因为它需要不断的扫描内存,将内存中的页面移到硬盘上。
怀疑内存泄漏时
【监控指标】:Memory Available MBytes ,Process\Private Bytes和Process\Working Set,PhysicalDisk/%Disk Time
【说明】:
Windows资源监控中,如果Process\Private Bytes计数器和Process\Working Set计数器的值在长时间内持续升高,同时Memory\Available bytes计数器的值持续降低,则很可能存在内存泄漏,内存泄漏应该通过一个长时间的,用来研究分析当所有内存耗尽时,应用程序反应情况的测试来检验。
- 不安全的加密存储
常见的问题是不安全的密钥生成和储存、不轮换密钥和使用弱算法。使用弱的或者不带salt的哈希算法来保护密码也很普遍。外部攻击者因访问的局限性很难探测这种漏洞,他们通常必须首先破解其他东西以获得需要的访问。 - 传输层保护不足
在身份验证过程中没有用SSL/TLS,因此暴露传输数据和会话ID,被攻击者截听,或使用过期或者配置不正确的证书。 - 登录信息提示
用户登录提示信息会给攻击者一些有用的信息,作为程序的开发人员应该做到对登录提示信息的模糊化,以防攻击者利用登录得知用户是否存在 - 重复提交请求
程序员在代码中没有对重复提交请求做限制,这样就会出现订单被多次下单,帖子被重复发布,恶意攻击者可能利用此漏洞对网站进行批量灌水,致使网站瘫痪 - 网页脚本错误
访问者所使用的浏览器不能完全支持 页面里的脚本,形成“脚本错误”,也就是网站中的脚本没有被成功执行,遇到“脚本错误”时,一般会弹出一个非常难看的脚本运行错误警告窗口
H5如何测试?
它跟安卓APP与iOS App有什么样的区别呢?
&我们以往的app是使用原生态系统内核的,相当于直接在系统上操作,是我们传统意义上的软件,更加稳定
& H5的app先得调用系统的浏览器内核,相当于是在网页中进行操作,较原生app稳定性稍差,似乎还没有百万级用户量的H5app
&H5最大的优点是可以跨平台,开发容易,app的话需要用android的语言和iOS的语言各自写,H5只要开发一套
&简单来说:H5是基于web,native基于客户端
H5测试应该从哪些方面考虑?
- 业务逻辑相关
除基本的功能测试之外,H5页面的测试,需要关注以下几点:
1.1登陆
目前H5与native各个客户端都做来互通,所以大家在测试的时候要注意两点:
a)若客户端已登录,那么进入H5后仍然是登录状态
b)若客户端未登录,进入H5,点击对应按钮OR链接
如果需要登录,须拉起native登录;
若取消登录,是否可再次拉起登录,或者停留在页面是否有对应的登录提示。
1.2翻页
遇到翻页加载的页面,需要注意内容为1页或者多页的情况;
a)数据分页加载时,注意后续页面请求数据的正确
ps:这个需要注意在快操作场景中,请求页数是不是依次递增,快速操作。
(如第一页尚未loading出来的时候仍然继续上拉操作)时是否发出对应的请求了。
1.3刷新与返回
A、下拉刷新是否仍然处于当前页面
B、用户主动点击刷新按钮是否仍然处于当前页面
C、点击返回与back键,回退页面是否是期望页面