APP功能测试要点
1、功能性测试
根据产品需求文档编写测试用例而进行测试,包括客户端的单个功能模块以及功能业务逻辑(功能交互)如:涉及输入的地方需要考虑等价类,边界值,异常或非法等
1.1 安装与卸载测试
>软件安装后是否可以正常运行
>安装过程中是否可以取消
>安装空间不足时是否有相应提示
>是否可以卸载应用(可通过桌面卸载,也可以通过软件卸载安装)
>卸载是否支持取消功能,单击取消后软件卸载功能是否正常===不可逆
>卸载后文件是否全部删除所有的安装文件夹
>安装到本地还是SD卡,有选择可以提供
>安装完自动删除安装包
>从不同的应用市场下载进行安装?---安卓端
>重复安装
1.2 软件升级测试
>当客户端有新版本时,是否有更新提示
>当版本为非强制升级时,用户可以取消更新,老版本能正常使用,用户在下次启动app时仍能出现更新提示
>当版本为强制升级时,当给出强制更新后用户没有做更新时,退出客户端,下次启动app时仍能出现强制升级提示(没有取消按钮)
>检查更新后各个功能是否正常使用
>在线跨版本升级后是否正常使用
---问题:版本升级测试是全部测试还是部分测试?
>关于新版本的更新内容:1.新功能 2.修复bug、优化模块 先测试更新的内容,再在发布之前走一下基本功能
1.3 登录测试
>1)账号密码登录 2)第三方登录 3)指纹登录 4)手势密码登录 5)快捷登录 6)声音识别登录 7)刷脸 8)二维码
>用户主动退出登录后,下次启动APP时,应该进入登录界面 QQ、微信、天猫、外卖
>对于登录状态时,一些页面的操作是否做了控制
>切换账号登录时,检验登录的信息是否做到及时更新
>对于多个端(web、ios、android等)进行操作时,确保数据库操作无误,且每个端可以及时看到数据更新
>一个账号只允许登录一台机器的软件,需要账号登录多个手机时,是否将原用户踢下线,且能够给出提示信息
>用户登录状态太久,sessionid 会过期,会出现“虽然是登录状态,系统会提示用户没有登录”
1.4 离线测试
>是应用程序在本地客户端会缓存一部分数据以供程序下次调用,对于一些程序,离线状态下可以浏览本地数据
>对于离线(无网络时),刷新获取新数据时,不能获取数据时能给出友好提示
>对于界面的数据不提供离线查看,需要给出相应提示且界面更新后无任何数据
>离线下,退出APP再启动APP时能正常浏览
>离线下,切换到后台再切回APP应用时可以正常浏览
>离线下,锁屏后再解锁回到应用前台可以正常浏览
>离线后上线,断点发送/传送/记录 (手动/自动断点续传:网盘/直播视频APP)
1.5 消息推送测试
>默认开关应该是全打开状态(设置)
>设置而已*打开关闭,设置开关关闭时,客户端接收不到消息推送
>未锁屏时,应用后台运行,消息推送是否可以正常接收
>未锁屏时,APP客户端使用过程中,可以收到消息提醒,且点击可以查看
>锁屏时,推送消息是否支持接收?且点击可查看
>手机消息栏是否可以接收到消息提醒,且点击可查看,点击后消息栏中消失
>当push消息是针对用户登录的时候,需要检查收到的push与用户身份是否相符,没有错误的将其他人的消息推送过来
>push 推送消息是否能有针对性的推送,如相应内容推送给相应应付(精确推送)
>退出登录后,是否接受push推送(根据需求来)
2 UI测试
>确保产品UI符合产品经理制定的原型图与UI设计效果图、切图
>一般涉及界面(如菜单对话框、窗口和其他可视控件)布局,风格,文字是否正确,页面是否美观,操作是否友好,如:安装APP后的加载页显示,分享页面的产品logo显示
- 兼容性测试
>应用是否可以在不同操作系统正常使用,如果开发有Android 和IOS 两个平台的软件,那么在这两个平台都要做兼容性测试,如:Android 版本有 5.1 6.。。8 IOS 有7.1.2/8.3/9.1/10/11 等
>能否适配各种屏幕尺寸
Android 系列:4x 5.x 市场占有率最高
IOS 系列: 3.5英寸 4英寸 4.8 英寸 5.5 英寸
>分辨率适配
分辨率不同,界面图标,文字大小会不同,保证主流分辨率下图标展示完整,文字不被遮挡
>一般测试兼容性项Android 系统手机,选取市面上主流手机,如:小米,华为,vivo,OPPO等 ios 系统手机就是5,6,6s,6plus,7
百度统计流量研究院:http://tongji.baidu.com/data/browser
- 安全性测试 --权限测试
>扣费风险:包括发送短信、拨打电话、连接网络、没有网络时能否提醒,例如:当网络状况很差的时候,用户在支付界面的多次确认操作必须只能被执行一次
>隐私泄露风险:包括访问手机信息、访问联系人信息等
>是否运行访问相册,拍照
>是否允许定位
>是否允许接收通知推送
>一般对于大多数非支付APP来说,安全并不是一个特别大的问题,只需要保证登录鉴权的安全性即可
- 中断测试
>交互异常性测试:客户端作为手机特性测试,包括被打扰的情况,如来电、来短信、低电量测试等,还要注意手机硬件上,如 待机、插拔数据线、耳机等操作不会影响客户端
>异常性测试:主要包含了断网、断电等情况下,客户端能否正常处理,保证数据正确性
>对于有(主功能) 实时数据交换的页面,每个页面都必须要进行前后台切换,锁屏解锁,网络切换,APP关闭开启,电话切换,断电切换等中断测试,这种页面最容易出现崩溃
>语音通话,发送语音,音乐视频,冲突,暂停
一些关于APP 测试的问题
- APP的测试资源准备?
ios 设备,Android设备(选取市面上主流手机产品)
支付宝、银联支付的项目,需要提前申请支付宝,银联账户等
有秒杀专题的题目,需要规划秒杀时间表
有优惠券使用的项目,需要添加优惠券数据
- APP测试的稳定性
了解什么是稳定性,这项工作一般是在软件产品基本功能无缺陷后进行的一项测试工作,一般是软件系统满足持续运行模式(7x24),进行正常情况,临界情况的测试,看系统是否有异常(闪退、卡死)
一般使用monkey工具,向系统发送随机事件流,如按键输入,触摸屏输入,手势输入等,实现对软件的稳定性测试
- APP 测试与web测试的区别?
相同点:
同样的测试用例设计方法
同样的测试方法,都会依据原型图或者效果图检查UI
测试页面载入和翻页的速度,登录时长,内存是否溢出等
测试应用系统的稳定性
不同点:
APP 的中断测试:来电中断,短信中断,蓝牙,闹钟,插拔数据线,手机锁定,手机断点,手机问题(系统死机重启)
APP的安装卸载:全新安装,升级安装,第三方工具安装,第三方工具卸载,直接删除卸载
消息推送测试,手机授权测试,前后台切换,网络环境(WiFi,2G/3G/4G/无网络)
兼容性测试:web项目考虑不同浏览器的兼容,APP 需要考虑不同操作系统,不同机型,不同屏幕等
web 性能测试===>服务器性能 APP===>服务器性能 ,APP 本身性能监控(流量、CPU、内存、耗电情况)
web自动化测试工具较常用QTP,而手机自动化monkey
- APP 云测平台:百度云测,testin云测--拓展部分:众测 平台怎么使用?
http://www.open-open.com/lib/view/open1463526042631.html
软件测试的定义及目的
软件分为:系统软件和应用软件
软件测试的定义:使用人工和自动化的手段来运行或测试某个系统的过程,其目的在于检验他是否满足规定或者弄清预期结果与实际结果之间的差别。
1)发现程序存在代码或业务逻辑的错误
2)检验产品是否符合用户需求
3)提高用户体验
软件测试的原则:
1)测试应尽早介入
2)所有测试都应追溯到用户需求
3)程序员应避免检查自己的程序,除了单元测试。一般交由第三方或者专业的测试
4)设计测试用例时应考虑合法和不合法输入以及各种边界条件,符合情况下还要制造极端状态和意外状态
5)二八原则
6)对错误结果要进行一个确认过程
7)制定严格的测试计划
8)完全测试是不可能的,测试要终止
9)妥善保管测试过程中的所有文档
C/S与B/S架构:
C/S:client-server 客户端
B/S:browser-sever 网站
笔试面试整理题:
1)什么是软件测试?软件测试的目的是什么?
2)软件测试的分类有哪些?
3)什么是黑盒测试?
软件测试的分类:
按测试执行阶段:单元测试、集成测试、系统测试、验收测试、(正式验收测试,Alpha 测试-内侧,Beta 测试-公测)
按测试技术分类:黑盒测试、白盒测试、灰盒测试
按测试对象是否运行划分:动态测试、静态测试(文档检查、代码走查、界面检查)
按不同的测试手段:手工测试、自动化测试
按测试包含的内容划分:功能、界面、安全、兼容、易用、性能、压力、负载、恢复
其他测试:冒烟、回归、探索(*发挥)
软件测试生命周期:
1)问题定义及规划--讨论大体需求
2)需求分析-详细的分析,需求规格说明书(由产品经理写),需求评审会议。
3)软件设计
概要设计--主要架构的设计,表述各模块功能
详细设计--对概要设计中个模块进行深入分析
4)软件编码
5)单元测试
6)集成测试
7)系统测试-参考规格说明书中的需求测试
8)验收测试-用户验收测试
9)运行维护-纠错性和改进性维护,比如版本升级(修复bug或者新增功能)
软件生命周期模型
敏捷开发模型
瀑布模型
V模型
螺旋模型
W模型
软件测试的基本流程(重点)
01、测试需求分析阶段:阅读需求,理解需求,主要就是对业务的学习,分析需求点,参与需求评审会议
02、测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围(来自需求文档),进度安排,人力物力的分配,整体测试策略的制定。风险评估与规避措施有一个制定。
03、测试设计阶段:主要是编写测试用例,会参考需求文档(原型图),概要设计,详细设计等文档,用例编写完成之后会进行评审。
04、测试执行阶段:搭建环境,执行冒烟测试(预测试)-然后进入正式测试,bug管理直到测试结束
05、测试评估阶段:出测试报告,确认是否可以上线
总结
开发流程:了解用户需求--》进行需求分析--》得知功能组成及设计软件结构--》开发设计计划--》概要设计--》详细设计--》进行软件编码--》单元测试--》代码审查--》打包提交给测试部--》测试部返回bug--》更新修复bug--》再次进入测试部测试-。。。直到bug解决--》版本上线--》面向用户使用
测试流程:了解用户需求--》参考需求规格说明书--》测试计划(人力物力时间进度的安排)--》编写测试用例--》评审用例--》搭建环境--》测试包安排预测(冒烟测试)-正式测试-bug-测试结束出报告--》版本上线--》面向用户
常见面试笔试题:
1)生命周期模型包含哪些阶段?你们开发的模型是什么?
2)测试流程包含哪些阶段?
3)你们公司的开发流程是怎样的?
4)你们公司的测试流程是怎样的?各个阶段的输出是什么?
测试用例设计方法:
1.等价类划分法 --有效等价类、无效等价类,一般按照长度 数据类型 来考虑
等价类划分原则
1)划分有效及无效等价类,为每一个等价类规定一个意识变化
2)设计一个新的测试用例数据,使其尽可能多的覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类被覆盖为止
3)设计一个新的测试用例数据,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止
2.边界值分析法
3.场景法--业务流程
4.错误推测法
笔试面试题:
1)编写测试用例会用什么方法?接着问,你觉得你在写用例的时候用到了吗?结合项目来答
2)给出一个登陆、购物车、支付页面,设计尽可能多的用例
软件测试需求分析
测试点分析:
---通过分析需求描述中的输入、输出、处理、限制、约束等,给出对应的验证内容(功能测试)
---通过分析各个功能模块之间的业务顺序,和各个功能模块之间传递的信息的数据,对存在功能项给出对应的验证(功能交互测试)
---考虑需求的完整性(界面、易用、兼容、安全、性能压力)
测试点分析思路步骤:
1、正常功能:是否可以正常提交
2、单个功能项验证(正常+异常):重点输入项意识
规则:按顺序从上至下,对每一个输入项进行验证
1)数据长度、数据类型验证、必填项验证、重复
2)限制约束验证
3、功能交互验证
4、隐性需求
笔试面试题:
1、作为测试人员,电梯、雨伞、杯子、笔怎么测?
测试用例的编写及评审
软件测试用例--每一个测试点的数据设计和步骤设计。
测试用例的重要性:
1)测试用例是软件测试的核心
2)评估测试结果的基准--通过率及错误率,测试结果的依据
3)保证不遗漏功能点,引导测试人员
4)提前对系统架构业务流程的了解
5)指导性
测试用例的八大要素:
1)用例编号:产品名-测试阶段(st it ut)-测试项-xxx
2)测试项目:对应一个功能模块(细分功能)
3)测试标题:直接对测试点进行细化得出,输入内容+结果,同一功能模块标题不能重复(来自测试点)
4)重要级别:高中低
5)预置条件:前提条件
6)测试输入:测试中需要的测试数据
7)操作步骤:详细操作步骤
8)预期结果:期望得到的结果
9)实际结果
10)Remark:额外的标注
用例评审的重要性
1)保证设计的用例能覆盖完全
2)保证测试人员与开发人员的一致性
3)确保提交给客户高质量的成功
4)评估工作量
BUG 的生命周期
Bug-->软件程序的漏洞或缺陷
Bug 的类型:代码错误、设计缺陷、界面优化、性能问题、配置相关、安装部署、安全相关、标准规划、测试脚本、。。。其他(功能类、界面类、性能类、易用性类、兼容性类、。。。)
Bug 的等级
1)致命错误:
常规操作引起的系统崩溃、死机、死循环
造成数据泄露的安全性问题,比如恶意攻击造成的账户私密信息泄露
设计金钱的计算
2)严重错误:
重要功能不能实现
错误的波及面广,影响到其他重要的正常功能实现,功能交互
非常规操作导致的程序崩溃、死机、死循环
外观难以接受的缺陷
密码文明显示,(界面+数据) 前提:眼睛
3)一般错误
次要功能不能正常实现
操作界面错误(包括数据窗口内列名定义,含义不一致)
查询错误,数据错误显示
简单的输入限制为放在前段进行控制(格式限制)
删除操作为未给出提示,误删
4)细微错误
界面不规范
辅助说明描述不清楚
提示窗口文字未采用行业术语
界面存在文字错误
- 用户输入正确的用户名和密码不能登录网站-->代码错误 1
- 客户需求要有充值功能,但是网站没有做-->设计缺陷 1
- 网站首页的图片在IE8浏览器上显示不全-->兼容方面或者网络太慢或者界面优化 1
- 点击网站的注册和其他链接,不能正常跳转--跳转相应非常慢10s-->代码错误或者网络太慢 2
- 酒店管理网站的网页某些图片重复显示-->界面优化 2
- 酒店管理网站的网页某些酒店图片显示不出来-->兼容方面 1
- 网站充值后,出现金额错误-->代码错误 1
- 关闭按钮在弹窗左侧-->设计缺陷或者界面优化 3
- APP某个图标显示太小或者像素失真-->界面优化或者性能问题 1
- 某个提示语音需要改进一下,用户对专业术语不太懂-->标准规划 4
Bug 的生命周期:new -open-fixing-verify-close
否 否
发现bug-->提交bug-->指派bug-->研发确认bug-->研发去修复bug-->回归验证bug-->是否通
过验证-->关闭bug
Bug 的管理状态处理-测试
- 已经指派的bug
- 已经解决的bug
- 重复bug
- 不足缺陷
- 无法重现
- 不予解决
- 设计如此
- 延期修改
常见笔试面试题
- 有没有你印象深刻的bug?怎么解决的?
- Bug 的生命周期?(笔试)
- 当你开了一个bug,但开发不认为是bug,如何处理
- 你在发现bug并确认bug的过程中对于复现率不高的bug怎么处理的?
常见bug 管理系统
禅道(zentao)、bugzilla、jira、bugfree、easybug、QC
Bug 包含的内容:
Bug 标题 短描述、重现步骤--详细步骤、实际结果、预期结果、Bug 类型和严重程度、Bug 测试环境、附件
常见笔试面试题
- bug 记录里面包含哪些内容
- 你了解哪些bug 管理系统
- 你们测试用例和bug是如何管理的
浏览器兼容性知识&测试计划&测试报告
浏览器兼容性问题:网页或网站兼容性问题,因为不同浏览器使用内核及所支持的HTML(标准通用标记语言下的一个应用)等网页语言标准不同;以及用户客户端的环境不同(如分辨率不同)造成的显示效果不能达到理想效果,最常见的问题是网页元素位置混乱,错位
常见的浏览器
IE -->IE内核
Ios, chrome -->webkit 内核-------手机浏览器(Android、ios)
火狐-->gecko 内核
Opera -->presto内核
浏览器兼容性测试应用场景
- 用户有要求,指定浏览器 需求(环境、浏览器、ie8 ie9)
- 网站一般都需要做兼容,用户使用量+内核来看,选取住浏览器 4-5 其他浏览器
- 兼容性测试内容:
主要是页面格式,字体,输入框,下拉框,复选框,按钮等的检查,页面显示正常在功能进行中检查。
面试问:
- 小众浏览器出现问题,需不需要做兼容性测试?用户反馈在小众浏览器上有问题?公司怎么处理?
答:需要做兼容性测试,建议更换为已经通过兼容性测试的浏览器去做
- 如果一个网站分为前台访问系统,后台管理系统,是否需要做浏览器兼容性测试?
答:前台访问系统--用户访问的 后台管理系统--网站管理人员使用的
前台需要做,后台一般不需要做
常用的浏览器兼容性测试工具
1 Ietester, 可以测试不同版本的IE浏览器,但是经常崩溃
2 在虚拟机里面安装不同版本的IE浏览器
3 https://apb.crossbrowertesting.com 这个网站可以支持不同系统不同版本浏览器兼容性测试,但是免费时间不多
软件测试计划:
目的(why),浏览范围(what),测试进度安排(when),测试人员(who),测试环境(where),测试方法(how) ,测试工具,风险评估,培训计划。
软件测试报告:
测试范围,测试环境,遗留的bug有哪些,测试用例覆盖率有多少,bug的统计与分析,风险有哪些,版本测试评估,发布的建议
常见笔试面试题:
1、写过测试计划么?都有哪些内容
2、写过测试报告吗?内容是什么
3、报告中的结果是怎么分析的
4、你认为测试报告的侧重点?
什么是Appium?
第三方自动化框架(工具),扩充了selenium webdriver 协议,在原有的基础上添加了移动端测试API
selenium webdriver 指定了客户端到服务端的协议
appium 是一个开源的、跨平台的自动化测试工具,用于app的自动化测试
appium 是跨平台的,支持android,ios,firefoxos等操作系统下的app测试
什么是selenium?
用于web应用程序测试工具,直接运行在浏览器,模拟用户操作,覆盖Windows、Linux、Mac,覆盖 IE、Chrome、firefox等浏览器,Java、Python多种语言进行脚本编写
官网:https://docs.seleniumhq.org/download/
版本:http://selenium-release.storage.googleapis.com/index.html
什么情况适合做自动化:
周期比较长的、需求比较稳定的、迭代周期比较长的
使用appium 做APP自动化测试的原理:
1)appium 的核心其实是一个暴露了一系列rest api的server
2)这个server的功能其实很简单:监听一个端口(4723),然后接受由client发送的command
3)然后翻译 这些command,把这些command 转成移动设备可以理解的形式发送给移动设备
4)移动设备执行完这些command后把执行结果返回给appium server
5)最后appium server 再把执行结果返回给client
1、APP自动化测试的环境配置:
1) 安装nodejs:https://nodejs.org/en/download/ 官网下载,安装好之后 cmd 里输入node -v 确定是否安装好(appium 是使用node js实现的,所以node是解释器)
2) 配置Android sdk 环境(monkey 工具下)
概念:
ADT(Android develpoment tools),安卓测试开发环境
adb(Android debug bridge) 是Android sdk 的一个工具,用来连接安卓手机和pc端的桥梁
创建ANDROID_HOME 系统环境变量,值为ADT下的sdk目录(D:\Program Files (x86)\adt-bundle-windows-x86_64-20140702\sdk)
将ANDROID_HOME 下的tools和platform-tools配置进path变量,即在path变量的值后面加上“;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;”
打开模拟器通过在Windows命令输入adb devices,检查是否可以检测到连接的设备信息(真机下需要用usb先连接电脑并在开发者模式下打开usb调试):127.0.0.1:62001
3)安装Appium:https://bitbucket.org/appium/appium.app/downloads/
安装完成之后需要配置环境变量,将appium安装路径下的node_modules/.bin目录配置到环境变量path后面
输入appium-doctor 检查appium做自动化需要依赖的环境ANDROID_HOME,JAVA_HMOE等是否都已准备好
出现这种就表示所需环境以及配置好了。
代码:
deviceName:设备名:127.0.0.1:62001
APPpackage:因为一个设备有很多APP,通过包名确定app--->com.tencent.mm
cmd输入:adb shell dumpsys activity | find “mFocusedActivity”
appActivity:app的一个页面--->com.tencent.mm/
monkey 是Android的一个内置程序
2、maven项目+selenium+testng 集成 环境搭建
1)创建maven项目:在左边空白处右击--new--project--输入maven,选择maven project--next--勾选 create a simple project--next--group id(分组,一般填写组织结构,相当于包)命名 如 com.ningmengban artifact id (例如jar 包名) 命名如:appium42 ,packaging 是指打包成jar 或者war 包--finish
maven集成包官网下载:http://www.eclipse.org/m2e
1、本地仓库:C:\Users\Administrator\.m2
2、*仓库:http://mvnrepository.com/
3、项目添加selenium,testng依赖,jar包的依赖:
http://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java/2.53.1
http://mvnrepository.com/artifact/org.testng/testng
4、eclipse 集成testng插件
selenium-Java:selenium是用于web应用程序测试的工具,测试直接运行在浏览器中,selenium webdriver 指定了客户端到服务端的协议
Java-client:扩充了webdriver的协议,在原有的基础上添加移动自动化相关的api
testng:下一代测试技术,利用注释来强化测试功能的测试框架,可以用来做单元测试和集成测试
5、如果没有集成,到eclipse插件中心下载安装,安装步骤(这个比较复杂,一般不用):
- help--install new software
- 在available software页面点击add
- 输入name:TESTNG ,location:http://beust.com/eclipse/
- 点击ok,选择加载出来的testng
- 点击next---i accept the。。---finish
- 开始安装
- 安装完毕,重启即可使用
一种简单的集成方法:解压testng压缩包,把里面对应的features 与plugins 文件夹下的文件夹copy到本地eclipse 根目录下对应文件夹下,重启即可
http://www.cnblogs.com/TankXiao/archive/2012/02/06/2337728.html fiddler 学习网站
Fiddler 是位于客户端和服务器端的HTTP,也是目前最常用的http抓包工具,能够记录客户端和服务端之间的所有http请求,捕获他们之间交互的信息即HTTP请求(抓包),分析请求数据、设置断点、调试web应用、修改请求的数据、可以修改服务器返回的数据,127.0.0.1:8888
设置fiddler 上的代理:
定制代理:修改指定浏览器的端口,同时相应的要修改fiddler 里的端口
Inspectors:分为上下俩部分,上半部分是请求头,下半部分是响应头,对于每一部分,提供了多种不同格式查看每个请求和响应
AutoResponder:自动响应器,可用于调试服务器端代码而无需修改服务器的代码和配置,因为拦截和重定向后,实际访问的是本地的文件或者得到的是fiddler的内置响应。在本地修改完及脚本之后,再修改服务器的内容,可以保证尽量在真实的环境下去调试,从而最大限度的减少bug的发生
Composer:可以进行接口测试,检验传参,它是绕过前端直接与服务器进行比较,
如果参数非法,就应该拦截而不能到达后台
Filters:过滤器
Fiddler 常用命令:
select xxx,例如select image 就可以筛选出所有的图片请求
?text 命令:匹配出所有url中包含的“text”的那些请求
>size 和<size:选择响应大小,大于某个size(单位是b)或者小于size的所有请求
=status:选择响应状态等于给定状态码status的所有请求,如=200
@host:选择包含指定host的全部请求
利用fiddler 录制APP请求:
1、启动Fiddler,在Fiddler 上做好设置:
- 设置手机代理:在wlan 里设置代理,填入电脑的ip地址,fiddler 上的端口8888
打开手机浏览器输入:ip地址+端口号,然后安装安全证书
APP自動化測試腳本1
package com.lemon.day01;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
public class APPTest {
AppiumDriver<WebElement> driver;
@BeforeMethod
public void beforeMethod() throws MalformedURLException{
//1;添加配置
//手工:找到设备、APP、APP某个页面
DesiredCapabilities desiredcapabilities = new DesiredCapabilities();
desiredcapabilities.setCapability("deviceName","127.0.0.1:52001");//设备名
desiredcapabilities.setCapability("appPackage","com.tencent.mm");//app包,区别我们每台设备的app
//使用命令:adb shell dumpsys activity | find "mFocusedActivity"
desiredcapabilities.setCapability("appActivity","com.tencent.mm.ui.LauncherUI");//指定页面
//2;创建驱动
//remoteAddress:远程url地址
//desiredCapablites :这个驱动期望得到的能力
URL remoteAddress = new URL("http://127.0.0.1:4723/wd/hub");//固定不变的
driver = new AndroidDriver<WebElement>(remoteAddress,desiredcapabilities);
}
@Test
public void TestCase001() throws MalformedURLException, InterruptedException {
//3;找到页面元素
//自动化:程序自动定位到页面元素
Thread.sleep(10000);
WebElement registerBtn = driver.findElement(By.id("d36"));
Thread.sleep(10000);
registerBtn.click();
Thread.sleep(1000);
//4;操作页面元素来模拟用户操作
//测试用例,进入注册页面,如 昵称、手机号、密码都不输入的情况,然后点击注册
List<WebElement> elements = driver.findElements(By.id("ht"));
// WebElement nickNameInput = driver.findElement(By.id("ht"));
//nickNameInput.sendKeys("");//输入字符串
elements.get(0).sendKeys("");
// WebElement mobilPhoneInput = driver.findElement(By.id("ht"));
// mobilPhoneInput.sendKeys("");
elements.get(1).sendKeys("");
// WebElement pwdInput = driver.findElement(By.id("ht"));
//pwdInput.sendKeys("");
elements.get(2).sendKeys("");
WebElement registerBtnn = driver.findElement(By.id("cw1"));
boolean isEnabled = registerBtnn.isEnabled();//是否被激活
Assert.assertFalse(isEnabled);//断言判断是否可以点击
driver.quit();
}
@Test
public void TestCase002() throws MalformedURLException, InterruptedException {
//3;找到页面元素
//自动化:程序自动定位到页面元素
Thread.sleep(10000);
WebElement registerBtn = driver.findElement(By.id("d36"));
Thread.sleep(10000);
registerBtn.click();
Thread.sleep(1000);
//4;操作页面元素来模拟用户操作
//测试用例,进入注册页面,如 昵称、手机号、密码都不输入的情况,然后点击注册
List<WebElement> elements = driver.findElements(By.id("ht"));
// WebElement nickNameInput = driver.findElement(By.id("ht"));
//nickNameInput.sendKeys("");//输入字符串
elements.get(0).sendKeys("shashe");
// WebElement mobilPhoneInput = driver.findElement(By.id("ht"));
// mobilPhoneInput.sendKeys("");
elements.get(1).sendKeys("");
// WebElement pwdInput = driver.findElement(By.id("ht"));
//pwdInput.sendKeys("");
elements.get(2).sendKeys("");
WebElement registerBtnn = driver.findElement(By.id("cw1"));
boolean isEnabled = registerBtnn.isEnabled();//是否被激活
Assert.assertFalse(isEnabled);//断言判断是否可以点击
driver.quit();
}
@Test
public void TestCase003() throws MalformedURLException, InterruptedException {
//3;找到页面元素
//自动化:程序自动定位到页面元素
Thread.sleep(10000);
WebElement registerBtn = driver.findElement(By.id("d36"));
Thread.sleep(10000);
registerBtn.click();
Thread.sleep(1000);
//4;操作页面元素来模拟用户操作
//测试用例,进入注册页面,如 昵称、手机号、密码都不输入的情况,然后点击注册
List<WebElement> elements = driver.findElements(By.id("ht"));
// WebElement nickNameInput = driver.findElement(By.id("ht"));
//nickNameInput.sendKeys("");//输入字符串
elements.get(0).sendKeys("shashe");
// WebElement mobilPhoneInput = driver.findElement(By.id("ht"));
// mobilPhoneInput.sendKeys("");
elements.get(1).sendKeys("15111916767");
// WebElement pwdInput = driver.findElement(By.id("ht"));
//pwdInput.sendKeys("");
elements.get(2).sendKeys("");
WebElement registerBtnn = driver.findElement(By.id("cw1"));
boolean isEnabled = registerBtnn.isEnabled();//是否被激活
Assert.assertFalse(isEnabled);//断言判断是否可以点击
driver.quit();
}
}
APP自動化測試腳本2
package com.lemon.day01;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
public class APPTest2 {
AppiumDriver<WebElement> driver;
@BeforeMethod
public void beforeMethod() throws MalformedURLException{
//1;添加配置
//手工:找到设备、APP、APP某个页面
DesiredCapabilities desiredcapabilities = new DesiredCapabilities();
desiredcapabilities.setCapability("deviceName","127.0.0.1:52001");//设备名
desiredcapabilities.setCapability("appPackage","com.tencent.mm");//app包,区别我们每台设备的app
//使用命令:adb shell dumpsys activity | find "mFocusedActivity"
desiredcapabilities.setCapability("appActivity","com.tencent.mm.ui.LauncherUI");//指定页面
//2;创建驱动
//remoteAddress:远程url地址
//desiredCapablites :这个驱动期望得到的能力
URL remoteAddress = new URL("http://127.0.0.1:4723/wd/hub");//固定不变的
driver = new AndroidDriver<WebElement>(remoteAddress,desiredcapabilities);
}
@Test(dataProvider = "testDatas")
//拿到数据提供者的数据,循环这个二维数组,提取元素(一维数组),会把一维数组中的每个元素依次注入到形式参数里
//可以把数据提供者的数据注入到测试方法的形式参数里
public void TestCase(String nickName,String mobilPhone,String pwd ) throws MalformedURLException, InterruptedException {
//3;找到页面元素
//自动化:程序自动定位到页面元素
Thread.sleep(10000);
WebElement registerBtn = driver.findElement(By.id("d36"));
Thread.sleep(10000);
registerBtn.click();
Thread.sleep(1000);
//4;操作页面元素来模拟用户操作
//测试用例,进入注册页面,如 昵称、手机号、密码都不输入的情况,然后点击注册
List<WebElement> elements = driver.findElements(By.id("ht"));
// WebElement nickNameInput = driver.findElement(By.id("ht"));
//nickNameInput.sendKeys("");//输入字符串
elements.get(0).sendKeys(nickName);
// WebElement mobilPhoneInput = driver.findElement(By.id("ht"));
// mobilPhoneInput.sendKeys("");
elements.get(1).sendKeys(mobilPhone);
// WebElement pwdInput = driver.findElement(By.id("ht"));
//pwdInput.sendKeys("");
elements.get(2).sendKeys(pwd);
WebElement registerBtnn = driver.findElement(By.id("cw1"));
boolean isEnabled = registerBtnn.isEnabled();//是否被激活
Assert.assertFalse(isEnabled);//断言判断是否可以点击
driver.quit();
}
@DataProvider
public Object[][] testDatas(){
//int[] array1 = {1,2,3,4};//静态数组
Object[][] datas = {{"","",""},{"shashe","",""},{"shashe","15111917843",""}};
return datas;
}
}
APP自動化測試腳本3
package com.lemon.day01;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.android.AndroidDriver;
public class APPTest3 {
AppiumDriver<WebElement> driver;
@BeforeClass
public void beforeClass() throws MalformedURLException, InterruptedException{
//1;添加配置
//手工:找到设备、APP、APP某个页面
DesiredCapabilities desiredcapabilities = new DesiredCapabilities();
desiredcapabilities.setCapability("deviceName","127.0.0.1:52001");//设备名
desiredcapabilities.setCapability("appPackage","com.tencent.mm");//app包,区别我们每台设备的app
//使用命令:adb shell dumpsys activity | find "mFocusedActivity"
desiredcapabilities.setCapability("appActivity","com.tencent.mm.ui.LauncherUI");//指定页面
//2;创建驱动
//remoteAddress:远程url地址
//desiredCapablites :这个驱动期望得到的能力
URL remoteAddress = new URL("http://127.0.0.1:4723/wd/hub");//固定不变的
driver = new AndroidDriver<WebElement>(remoteAddress,desiredcapabilities);
//3;找到页面元素
//自动化:程序自动定位到页面元素
Thread.sleep(10000);
WebElement registerBtn = driver.findElement(By.id("d36"));
Thread.sleep(10000);
registerBtn.click();
Thread.sleep(1000);
}
@AfterClass
public void fun(){
driver.quit();
}
@Test(dataProvider = "testDatas")
//拿到数据提供者的数据,循环这个二维数组,提取元素(一维数组),会把一维数组中的每个元素依次注入到形式参数里
//可以把数据提供者的数据注入到测试方法的形式参数里
public void TestCase(String nickName,String mobilPhone,String pwd ) throws MalformedURLException, InterruptedException {
//4;操作页面元素来模拟用户操作
//测试用例,进入注册页面,如 昵称、手机号、密码都不输入的情况,然后点击注册
List<WebElement> elements = driver.findElements(By.id("ht"));
//每次清空
elements.get(0).clear();
elements.get(1).clear();
elements.get(2).clear();
// WebElement nickNameInput = driver.findElement(By.id("ht"));
//nickNameInput.sendKeys("");//输入字符串
elements.get(0).sendKeys(nickName);
// WebElement mobilPhoneInput = driver.findElement(By.id("ht"));
// mobilPhoneInput.sendKeys("");
elements.get(1).sendKeys(mobilPhone);
// WebElement pwdInput = driver.findElement(By.id("ht"));
//pwdInput.sendKeys("");
elements.get(2).sendKeys(pwd);
WebElement registerBtnn = driver.findElement(By.id("cw1"));
boolean isEnabled = registerBtnn.isEnabled();//是否被激活
Assert.assertFalse(isEnabled);//断言判断是否可以点击
}
@DataProvider
public Object[][] testDatas(){
//int[] array1 = {1,2,3,4};//静态数组
Object[][] datas = {{"","",""},{"shashe","",""},{"shashe","15111917843",""}};
return datas;
}
}
如何在服务器中安装mysql 以及安装禅道
安装mysql:以下命令在xshell 中输入:
1、卸载mysql :yum -y remove mysql*
2、查找mysql命名安装的所有文件: find / -name mysql 只能删除 rm -rf /var/lib/mysql
3、安装mysql:yum -y install mysql-server
4、安装完毕之后进行启动mysql:service mysqld start
5、登录数据库:mysql -uroot -p 回车后输入密码(默认没有密码)
6、登录成功后切换到mysql数据库:use mysql;
7、赋权语句:grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
8、打开Navicat for mysql 连接虚拟机的mysql(确认是否关闭防火墙:service iptables status 查看防火墙状态,service iptables stop 关闭防火墙)
8、设置开机启动:通过编辑 vi /etc/rc.local 文件最后一行添加:service mysqld start
1234
禅道安装/部署(不能在线安装,手动下载软件安装包)
uname -a 去查看系统位数
1、通过xftp 软件copy禅道软件包到虚拟机 /opt
2、通过tar命令进行解压tar -xzvf 压缩包名字
3、启动禅道 ./zbox start
4、登录禅道:http://192.168.1.128:80
空白原因:端口号冲突
解决冲突:
vi /opt/zbox/app/zentao/config/my.php 3306 改成3307
vi /opt/zbox/etc/mysql/my.cnf 3306 改成3307
重启禅道: ./zbox restart
第一个masql:手动yum命令在线安装
第二个mysql:禅道软件包自带的 3306
部署Tomcat 环境(mysql+tomcat+jdk)
1、下载Tomcat 软件包
2、通过xftp创建root 连接,然后将Tomcat 软件包拖拽到/opt目录下
3、在xshell 上root权限 输入tar -zxvf 软件包名 解压缩
4、下载JDK 软件安装包(64位)
5、通过xftp软件拷贝到服务器的/opt目录下
6、再xshell 上解压JDK 压缩包
7、配置服务器上JDK的环境变量--->目的是为了全局生效
vi /etc/profile 进入在后面添加:
JAVA_HOME=/opt/jdk1.8.0_65
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
8、source /etc/profile (让环境变量生效)
9、执行java-version 检查jdk 是否安装好
(如果执行这一步报错:-bash: /opt/jdk1.8.0_65/bin/java: Permission denied
就执行: chmod 777 /opt/jdk1.8.0_65/bin/javaa(重点),然后再执行java-version 检查jdk 是否安装好
)
10、cd 进入Tomcat 的bin 目录, ./startup.sh 执行启动Tomcat启动(判断linux 系统位数:uname -a)
11、通过在浏览器输入:http://ip 地址:8080 去访问(首先确定你的服务器防火墙有没有关闭:service iptables status 查看防火墙状态,service iptables stop 关闭防火墙)--如果出现的界面Tomcat 的环境就搭建好了
怎么去访问项目:http://ip 地址:8080/项目名称
作为测试人员需要获取的文档/项目包(1、项目war包 2、接口文档 3、项目配置文件)
部署借口测试环境
1、后台人员开发代码(后台逻辑)
2、前端
1、拷贝开发人员给的war包到Tomcat 的webapps 根目录下
2、拷贝配置文件到config 目录下
3、重启Tomcat服务器(./shutdown.sh ./startup.sh)
4、查看日志 tail -f 实时刷新日志文件--->另外建一个会话,进入到Tomcat 的logs文件夹中执行:tail -f catalina.out 如果结果中有service startup in 字眼就表示已经部署好了
5、拷贝配置文件到Tomcat 的conf 文件夹中,然后重启Tomcat,然后查看日志文件(这里查看的过程其实就是对配置文件的解压过程,直到出现 service startup in字眼)
6、进入Tomcat 的webapps 目录下查看
7、登录mysql 导入数据库表,确认有没有future 数据库(mysql 有没有运行)
8、验证(在浏览器输入接口地址去访问:http://192.168.1.128:8888/futureloan/mvc/api/member/register
nmon监控
一、检查安装环境
# uname –a (查看操作系统信息,所检查服务器为64位操作系统)
Linux iZ94pmb2p24Z 2.6.32-431.23.3.el6.x86_64 #1 SMP Thu Jul 31 17:20:51 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
# lsb_release –a (查看linux发行商版本,所检查服务器linux版本为:CentOS6.5)
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.5 (Final)
Release: 6.5
Codename: Final
二、下载软件
nmon:
版本:nmon_linux_14i.tar.gz (下载适合服务器的版本)
地址:https://osdn.jp/projects/sfnet_nmon/releases/
nmonanalyser:
版本:nmon_analyser_v47.zip
地址:
三、安装
安装位置:/home/nmon (任意目录)
1、 在home 目录下创建nmon文件夹:# mkdir nmon
2、 上传nmon_linux_14i.tar.gz 到nmon目录
3、 解压:# tar –zxvf nmon_linux_14i.tar.gz
4、 赋权限:# chmod –R 755 nmon
5、 启动nmon:# ./nmon_x86_64_sles11(在nmon目录下执行命令)
安装成功显示以下界面:
四、实时监控
输入以下命令:
c 可显示CPU的信息
m 对应内存
n 对应网络
d 可以查看磁盘信息
t 可以查看系统的进程信息
五、配置环境变量
1、修改启动文件名称:
# mv nmon_x86_64_sles11 nmon
# ./nmon
2、 添加到环境变量中:
# vim /etc/profile (在profile中写入以下两行内容)
PATH=$PATH:/home/nmon/nmon ($PATH:后为命令的路径)
export PATH
3、 保存退出
4、 使配置文件立即生效
# source /etc/profile
# nmon (在任何目录下执行nmon命令启动nmon)
六、采集监控数据
在实际的性能测试中我们需要把一段时间之内的数据记录下来,如:
1、采集数据
# nmon -s1 -c60 -f -m /home/nmon
# ll /home/nmon/
total 15220
-rw-r--r-- 1 root root 23923 Oct 14 16:59 chen_151014_1659.nmon
参数说明:
-s1 每隔n秒抽样一次,这里为1秒
-c60 取出多少个抽样数量,这里为60,即监控=1*60/60=1分钟
-f 按标准格式输出文件名称:<hostname>_YYMMDD_HHMM.nmon
-m 指定监控文件的存放目录,-m后跟指定目录
七、生成图形化报表
1、将.nmon文件转化成.csv文件
# sort chen _151014_1659.nmon > chen _151014_1659.csv
# ll /home/nmon
total 15300
-rw-r--r-- 1 root root 51999 Oct 14 17:09 chen_151014_1659.csv
-rw-r--r-- 1 root root 51999 Oct 14 17:00 chen _151014_1659.nmon
2、将.csv文件下载到本地
3、打开nmon analyser工具
在本地解压nmon_analyser_v47.zip
双击打开:nmon analyser v47.xlsm
点击Analyse nmon data按钮,加载之前下载的chen_151014_1659.csv文件。
补充说明:本地安装的excle是2010版本
八、结果分析
九、结果nmon运行
nmon运行本身是会消耗系统资源,如需关闭nmon,直接kill掉
# ps -ef | grep nmon (得到pid)
# kill -9 pid (安全kill)