软件基础
1.测试人员在测试中的任务是什么?
1.尽可能早的找出系统中的bug;
2.避免软件开发过程中缺陷的出现;
3.衡量软件的品质,保证系统的质量;
4.关注用户的需求,并保证系统符合用户需求。
总的目标是:确保软件的质量
2.测试用例评审的流程是什么
1.测试用例是否按照公司定义的模板进行编写的;
2.测试用例的本身的描述是否清晰,是否存在二义性;
3.测试用例内容是否正确,是否与需求目标相一致;
4.测试用例的期望结果是否确定、唯一的;
5.操作步骤应与描述是否相一致;
6.测试用例是否覆盖了所有的需求;
7.测试设计是否存在冗余性;
8.测试用例是否具有可执行性;
9.是否从用户层面来设计用户使用场景和业务流程的测试用例;
10.场景测试用例是否覆盖最负载的业务流程;
11.用例设计是否包含了正面、反面的用例;
12.对于由系统自动生成的输出项是否注明了生成规则;
13.用例应包含对中间和后台数据的检查;
14.测试用例应有正确的名称和编号;
15.测试用例应标注有执行的优先级;
16.测试用例包含相关的配置信息:测试环境、数据、前置测试用例、用户授权等;
17.每个测试用例步骤应<=15 step;
18.自动化测试脚本必须带有注释(注释应包括:目的、输入、期望结果等);
3.bug不能复现怎么办
A.首先考虑环境问题,看是否能够还原原来的环境
B.尽量回想发生问题时的复现步骤,不要漏掉任何一个细节,按照步骤的组合尝试复现
C.与开发人员配合,让开发人员对相应的代码检查,看是否通过代码层面检查出问题
D.保留发生bug时的log,附加到提交的Bug中,希望可以通过log中找到一些蛛丝马迹。
E.进行多次测试 更换设备进行测试
4.什么是Http协议,请求方法是什么?,以及Http协议与Https协议的区别?
Http协议又叫超文本传输协议,是定义了一个客户端到服务器请求与应答的标准,分别为请求头与响应头。
请求方法是:get请求与post请求。
HTTPS协议是以安全为目标的HTTP通道,简称Http的安全版。
- get请求常用在获取数据 post常用在发送数据
- get安全性没有post安全性高,因为参数直接暴露在url上
- get请求会被浏览器主动缓存,post不会除非手动设置
- get请求参数受长度限制,post没有限制
200:请求发送成功。
302:代表重定向。
400:客户端发送的请求语法错误。
401:请问的页面没有授权。
403:没有权限访问这个页面。
404:没有这个页面。
500:服务器内部异常。
501:当前不能处理客户端的请求。
504:服务器端超时,没返回结果。
5.web测试和App测试的区别
系统架构方面:
1.web项目,一般都是b/s架构,基于浏览器的
app项目,则是c/s的,必须要有客户端,用户需要安装客户端。
2.web测试只要更新了服务器端,客户端就会同步会更新。
App项目则需要客户端和服务器都更新。
性能方面:
3.web页面主要会关注响应时间
4.app则还需要关心流量、电量、CPU、GPU、Memory这些。 它们服务端的性能没区别,都是一台服务器。
兼容方面:
5.web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容
6.app测试则要看分辨率,屏幕尺寸,还要看设备系统。
安装 更新 卸载
7.web测试是基于浏览器的所以不必考虑安装卸载。
8.app是客户端的,则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件此外APP还有一些专项测试:如网络、适配性。。。
自动化测试
9.Web大多用的selenium webdriver
10.app是appium
6.当你参加评审时,你的评审原则是什么
首先要从正确性,一致性,可行性,必要性,可跟踪性,分配优先级,可测性,可修改性考虑:
正确性:每一条需求都必须准确的陈述其要开发的功能。
一致性:必须与其他软件需求或高层需求不相矛盾。
可行性:其每一项需求都必须是已系统和环境的权能和限制范围可以来实施的。
必要性:每项需求都是用来授权你编写文档的“根源”,要使每项需求都能回潮至某项客户的输入。
可测性:每项需求都能通过设计测试用例或其他的验证方法来进行测试。
可修改性:每项需求只应在SRS中出现一次,这样更改会容易保持一致性。
可跟踪性:在每项软件需求与它的根源与设计元素,源代码,测试用例之间建立起链接,而这种可跟踪性要求每项需求都必须以一种结构化的,粒度好(fine-grained)的方式编写并单独标明,而不是大段大段的陈述。
分配优先级:应当对所有的需求分配优先级,如把所有需求都看作同样重要,那么项目管理者在开发或节省预算或调度中丧失控制自由度、
7.Android手机和IOS手机,系统有什么区别
A.运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制
B.两者后台制度不同:IOS中任何第三方程序都不能在后台运行,安卓中任何程序都能在后台运行,直到没有内存才会关闭
C.IOS中用于UI指令权限最高,安卓中数据处理指令权限最高
8.软件质量的特性是什么
A.功能性:软件需求要满足用户显示或者稳式的功能。
B.易用性:软件易于学习和上手使用
C.可靠性:软件必须实现需求当中指明的具体功能。
D.效率性:类似于软件的功能。
E.可维护性:需求软件具有将某个功能修复之后继续使用的功能。
9.开发环境和测试环境的区别
开发环境:是在编码阶段,一般我们的代码基本上都是在开发环境中,不会再生产与测试环境,如操作系统,web服务器,语言环境,php,数据库等等。
测试环境:项目完成后,找Bug,以及修改Bug。 生产环境: 项目数据前后端已经疏通,部署到阿里云上有客户去使用以及访问,网络正常运行就好了。
10.写好测试用例的关键/写好用例要关注的维度
1.覆盖用户的需求
2.从用户使用场景出发,考虑用户的各种正常和异常的使用场景;
3.用例的颗粒大小要均匀。通常,一个测试用例对应一个场景;
4.用例各个要素要齐全,步骤应该足够详细,容易被其它测试工程师读懂,并能顺利执行
5.做好用例评审,及时更新测试用例。
11.软件测试的流程
第一步先立项 也就是确定项目——接着是产品说明书 也就是PRD——需求文档——需求评审(需求人员下发 有:开发人员,测试人员,经理)——开发 开发环境-详细的概要设计-进行编码-进行自己测试。测试:测试的环境——测试的计划:用例 评审 时间估计 资源申请 人员的分配-编写测试的用例-用例评审——进行提测(就是提交测试)——冒烟测试(如果没有冒烟测试,则该组件就通过测试,在软件中,冒烟测试这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程)——其次是功能测试(功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到 用户要求的功能)——禅道(就是国产的开源项目管理软件)——回归测试(回归测试就是修改了旧代码以后,重新测试以确认修改没有引入新的错误或导致其他代码出现错误)——验收测试(它是技术测试的最后一个阶段,也是交付测试)——最后是上线(将开发完的系统,放到真的运营环境中进行使用和测试)
了解用户需求--》参考需求规格说明书--》测试计划(人力物力时间进度的安排)--》编写测试用例--》评审用例--》搭建环境--》测试包安排预测(冒烟测试)-正式测试-bug-测试结束出报告--》版本上线--》面向用户
12.请描述一下v模型
13.如果一个问题认为是bug 但开发说不是 你怎么处理
1.bug重现 在开发的前面重新操作一遍给他看 确定大家看到的都是同一个现象
2.校队需求 看是否是同一版本的需求 如果不是同个版本 那就确定哪一方需求是最新的
3.如果需求一致 双方意见还达不到一致 那就找产品经理确认
4.开会讨论决定 找相关人员决定最终的决定
14.请描述一下W模型图
15.web测试的方法有哪些
16.App测试的方法有哪些
17.你在项目中最经典的bug是什么
1.兼容性问题,在IE浏览器提交按钮可以点击,到了谷歌,火狐就不能了
2.字段的值显示不是想要的结果,或没有显示。(开发从库表取值有误)
3.提交数据之后,状态没有转变为已提交。(代码没有正确获取库表中记录状态改变的状态码)
4.修改密码,新密码与旧密码一致也能成功,没有做新旧密码的校验。
18.为什么要进行抓包
A.有些时候公司没有标准的接口文档,测试人员只能抓包来获取接口测试。
B.抓包可以迅速找到请求,通过抓包可以查看整个请求的过程,以及响应时间,还可以分辨前台与后台Bug.
C.通过抓包,可以查看是否有敏感信息,如(用户密码,个人账户信息等数据)
D.可以通过抓包进行测试,拦截请求,修改请求数据,查看对应的响应结果,抓包本身就是接口的一部分。
19.项目上线的标准是什么
(1)紧急、严重级别错误修复率应达到100%
(2)普通级别错误修复率应达到95%以上
(3)优化级别错误修复率应达到60%以上
(4)Abcd级别的bug,ad不能有,c完成30%,d类达到100%
(5)用例覆盖率、执行率100%
20.代码的版本管理用什么工具 上传和合并代码 SVN Git介绍
git远程分支
- 还原plateform文件夹
git clone 克隆地址
cd 进入文件夹
git branch test 创建分支
git branch -v 查看
git checkout -b test分支名 切换
git add . 提交
git commit -m "add 提交"
git push 将本地修改的推送到远程服务器中
拉取最新代码 git pull origin develop
git push origin develop
git 提交失败 就这样
git fetch origin dev //获取远程dev分支的修改 git merge origin dev // 合并远程dev分支 git pull origin dev // 更新本地的代码
//退出 esc :q
查看修改的文件
查看不同地方 git diff
21.怎么判断一个bug是前端还是后端bug
1.像界面排位等问题都是前端 直接找前端
2.像报服务器异常问题 一般都是后端 也有可能是前端传参有误
3.接口调用错误 直接找前端
4.返回值正确 显示错误 直接找前端
如果还不能定位问题 就把前端和后端拉个群 把问题爆出来 然后由他们讨论
前端bug | 后端bug |
| | 界面相关 | 业务逻辑相关 |
| | 布局相关 | 性能相关 |
| | 兼容性相关 | 数据相关 |
| | 交互相关 | 安全性相关
22.给你一个网站,你应该如何测试?
① 首先,查找需求说明、网站设计 m 等相关文档,分析测试需求。 制定测试计划,确定测试范围和测试策略,一般包括以下几个部分: 功能性测试;界面测试;性能测试;数据库测试;安全性测试;兼容性测试
② 设计测试用例: 功能性测试可以包括,但不限于以下几个方面: 链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回等。
③ 功能的测试: 多媒体元素是否可以正确加载和显示。 多语言支持是否能够正确显示选择的语言等。
④ 界面测试可以包括但不限于以下几个方面: 页面是否风格统一,美观;页面布局是否合理,重点内容和热点内容是否突出;控件是否正常使用;对于必须但为安装的空间,是否提供自动下载并安装的功能;文字检查
⑤ 性能测试一般从以下两个方面考虑: 压力测试;负载测试;强度测试 数据库测试要具体决定是否需要开展。数据库一般需要考虑连结性,对数据的存取操作,数据内容的验证等方面。
⑥ 安全性测试: 1 基本的登录功能的检查 2 是否存在溢出错误,导致系统崩溃或者权限泄露 3 相关开发语言的常见安全性问题检查,例如 SQL 注入等。4 如果需要高级的安全性测试,确定获得专业安全公司的帮助,外包测试,或者获取支持
⑦ 兼容性测试,根据需求说明的内容,确定支持的平台组合:浏览器的兼容性;操作系统的兼容性;软件平台的兼容性;数据库的兼容性 开展测试,并记录缺陷。合理的安排调整测试进度,提前获取测试所需的资源,建立管理体系(例如,需求变更、风险、配置、测试文档、缺陷报告、人力资源等内容)。定期评审,对测试进行评估和总结,调整测试的内容。
23.三次握手的过程
1.第一次,客户端发送请求到服务器,服务器知道客户端发送,自己接收 正常
2.第二次,服务器发给客户端,客户端知道自己发送,接收正常,服务器接收正常、发送正常
3.第三次,客户端发送给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常
24.四次挥手的过程
第一次:客户端请求断开
第二次:服务器确认客户端的断开请求
第三次:服务器请求断开
第四次:客户端确认服务器的断开
25.上线之后出现bug怎么解决
评估bug的影响范围,检查bug是否业务核心环节的功能问题,检查bug是否涉及到个人信息 紫金财产等
影响小的bug,出现的场景呜呜操作结合日志 让开发人员修复bug 保证bug解决
影响大的bug,无法确定可以通过回滚版本的方式,或者将功能降级或关闭
26.经常复现的bug怎么解决
评估bug的重要性以及对项目的影响 ,如果影响小,就记录下来继续追踪
影响大的话 尽量复现当时bug出现的场景、环境、数据,或者让开发代码走查 或者就是反馈给醒目经理
总结经验,分析问题发生的原因,避免下次出现同样的问题
27.测试总结
测试用例方法
等价类划分法(将测试的范围划分成几个互不相交的子集)
边界值分析法(选出的测试用例,应选取正好等于、刚刚大于、刚刚小于边界的值)
错误推测法(在测试程序时,人们可以根据经验或直觉推测程序中可能存在的各种错误)
判定表法(适合于逻辑判断复杂的场景,通过穷举条件获得结果,对结果再进行优化合并,会得到一个判断清晰的策略)
正交实验法(在各因素互相独立的情况下,设计出一种特殊的表格,找出能以少数替代全面的测试用例)
测试报告
测试背景说明 范围说明 环境说明 方法说明 结果与缺陷分析 测试结论和建议 质量和风险评估 后期优化问题
测试用例模板
用例编号 所属模块 用例标题 优先级 前提条件 操作步骤 测试数据 预期结果 预期结果
接口测试用例模板
用例标识 标题 模块 优先级 描述 前置条件 请求类型 请求参数 类型 操作步骤 预期结果
缺陷报告模板
缺陷编号 用例编号 缺陷类型 严重级别 优先级 缺陷状态 测试阶段 可重现性 bug原因 缺陷描述 预期结果 实际结果 重现步骤 测试环境
28.网络的七层模型
*应用层 *-> *表示层 *-> *会话层 *(统称应用层)、 *传输层 *(提供端对端的接口)、 *网络 **层 *(为数据包选择路由)、 *链路层 *(单一链路通信的方法,由底层网络定义 的协议)、 *物理层 *(看得到,摸得到的,介质)
应用层协议:http、SMTP、DNP,FTP协议
传输层协议:TCP、UDP
网络层:IP
网络层-传输层:TCP IP
29.Charles抓包原理
1.客户端向服务器发起HTTPS请求
2.Charles拦截客户端的请求,伪装成客户端向服务器进行请求
3.服务器向“客户端”(实际上是Charles)返回服务器的CA证书
4.Charles拦截服务器的响应,获取服务器证书公钥,然后自己制作一张证书,将服务器证书替换后发送给客户端。
5.客户端接收到“服务器”(实际上是Charles)的证书后,生成一个对称,用Charles的公钥加密,发送给“服务器”(Charles)
6.Charles拦截客户端的响应,用自己的私钥解密对称(Charles拿到了对称),然后用服务器证书公钥加密,发送给服务器。
7.服务器用自己的私钥解密对称,向“客户端”(Charles)发送响应
8.Charles拦截服务器的响应,替换成自己的证书后发送给客户端
9.至此,连接建立,Charles拿到了 服务器证书的公钥 和 客户端与服务器协商的对称**,之后就可以解密或者修改加密的报文了
30.搭建过什么环境 搭建工作环境是如何搭建的
测试环境操作系统用Linux,通常测试环境包括JDK环境,Tomcat环境和MySQL环境
JDK安装:
1.安装jdk如果有自带,先卸载再装,
2.把包复制/usr/local
3.解压,
4.配置环境变量
5.检查java是否安装成功java -version
Tomcat安装:
1.安装tomcat,
2.把下载的tomcat包复制/usr/local,
3.解压,
4.在tomcat/bin目录执行startup.sh文件
5.启动服务
6.在浏览器中连接:IP:8080,
7.如果连接不上,但tomcat又是显示启动OK,检查firewall,路径为 /etc/sysconfig/iptables,将8080端口开启,
8.重启服务
Mysql数据库:
mysql安装比较简单,可以使用源码安装,也可以使用yum在线安装,在这里简单地介绍一下yum在线安装 用yum在线安装
1.rpm -qa|grep mysql --检查linux是否有存在的mysql
2.如果有mysql,卸载 rpm -e --nodeps mysql
3.安装 yum install mysql-server mysql mysql-dev -y
4.安装成功后,启动服务 service mysqld start service 服务名 restart/start
5.直接输入mysql 进入到数据库。
随着docker的发展 变成了docker+Jenkins进行的一个持续集成的部署 测试环境一般都是由运维去搭建
31.接口测试是如何做的
1.获取接口规范
2.设计接口测试功能用例(主要从用户角度触出发看接口能否实现业务需求)
3.各种入参验证(异常情况包括输入参数个数不对,类型不对 可选/必选)
4.接口返回值各种验证(符合接口文档需求)
5.发现问题 该报bug报bug 该跟踪状态的跟踪状态
32.在浏览器中输入url后发生了什么
一共分为五部 :
1.是dns解析获取ip地址
2.建立tcp链接
3.发送请求数据
4.服务器返回数据
5.浏览器进行渲染
33.接口测试检查点有哪些
1.服务器的日志
2.数据库的落库
3.服务端的业务逻辑
34.测试一个C/S 客户端时,需要考虑的因素
C/S架构:C是指客户端(Client),S是指服务端(Server),例如:聊天软件、qq、wechat等。
BS架构:是指浏览器和服务端的一种架构,例如:常用的浏览器,百度、谷歌。
只包含B:后端中的与前端交互的部分(接口文档等)
只包含S:后端中的与数据库交互的部分(进行数据库的一些操作)
1.安装/卸载
1.安装包的完整性 安装包的大小是否达到要求 显示基本信息是否正确 步骤是否明确 内容是否合理
2.首次安装
1.是否与其他已安装的软件冲突
2.各种杀毒软件(卡巴 瑞星 360)对安装程度的影响
3.安装目录的考虑(中英文字符,长度,空目录 根目录 修改目录 默认目录)
4.干净环境下能否正常完成安装
5.安装后快速启动 桌面 开始程序里面的快捷方式情况等
6.360一键智能安装是否能正常完成
7.安装的程序是否带有插件
2.1再次安装
1.在已经安装该软件的情况下 再次进行安装 表现是否正常(比如提示是否升级)
2.卸载后再次安装是否正常完成
2.2升级安装
1.在线升级时 是否能合理处理网络中断的情况 2.升级包升级时 考虑软件正在使用时是否运行进行升级 升级过程中是否正确 3.升级完成后 软件启动是否正常
3.卸载
1.卸载时是否要退出客户端(退出和不退出都要考虑),下载后的表现 不退出卸载 是否能成功 不成功 是否有相应提示等
2.是否能在控制面板里面卸载
3.是否自带卸载工具 卸载能否成功
4.借助其他工具卸载能否成功
5.卸载是否完全卸载干净 包括快捷方式 注册表信息等
4.界面及用户体验
(1)界面美观及控件样式是否符合用户的常用习惯
(2)程序所有可点击地方是否可以进行操作,菜单、按钮、超链接(文字颜色以及 是否能正常链接)、文字等
(3)还需要考虑在不同显示器上的显示,各种比例和分辨率下的显示情况
5.窗口
(1)窗口的缩放(双击的最大最小,点击按钮的最大最小,关闭)、拖动(开 多个窗口拖动)任务栏(左键单击和右键单击的操作)、托盘区、任务管理 器操作。一般客户端软件,开着窗口在桌面上移动的时候,cpu占用都比较 高,这个性能需要控制在某个合适的范围内。
(2)多窗口的操作是否合理,需要考虑窗口的模态性,比如有模态窗口的时候, 进行其他的操作,以及模态窗口的重绘等
6.提示信息
(1)各种操作对应的正确、错误类提示信息是否正确
(2)界面文字提示是否友好、易懂、简练
(3)操作流程是否清晰,用户知道自己每步都是在做什么,即操作提示是否清晰明了
(4)有错误类信息,不要使用代码类文字,考虑到用户群体的情况,还要区分中英文(用哪个更好)
7.键盘鼠标操作
(1)快捷键操作是否正常,是否与其他软件的快捷键冲突等
(2)鼠标拖放显示是否正常,是否影响操作
(3)鼠标右键功能是否正常合理
8.具体功能
(1)是否所有可操作的功能都能按需求实现(如:登陆退出,信息传输功能,备份功 能,系统设置功能,搜索功能,界面模板更新,信息增删改功能等)
(2)对于功能块的无效操作和极端操作是否都有合理的处理(如:无效的输入字符, 超长的字符长度,脚本注入等)
(3)操作界面是否即时动态刷新
(4)如果有托盘图标,需要考虑托盘图标的显示状态,是否能显示,操作是否正常等
(5)各类控件的表现和操作是否正常,如下拉列表、日历控件等
9.文件传输功能
(1)需要考虑不传输文件、传输文件内容为空(大小为0KB,边界值考虑)、文件内容包含特 殊字符、文件名字符
(2)传输文件的格式
(3)涉及到网络传输,和端口有关系的,要考虑模拟一下端口错误,封端口的操作
(4)发送文件时,考虑本地文件,还要考虑ftp,http上的文件
(5)需要考虑磁盘空间不足的情况
(6)正在使用的文件是否是独占状态
(7)涉及到文件保存时,需要考虑文件保存的类型、名称的默认给出
(8)文件拖动类的考虑
(9)涉及到文件写入读取的,需要考虑移动设备,比如U盘、硬盘、ftp等
(10)是否超过最大容量、流量限制
10.兼容测试
(1)不同语言系统上的使用区别,在控制面板的区域和语言选项里面进行设置,管 理选项卡里更改系统区域设置。例如中文系统,英文系统,韩语系统等。
(2)不同操作系统上使用的区别(winXP,Vista,Win7,Win2000,Win2003, Win2008,32位和64位系统)
(3)同一个系统的不同系统用户操作(管理员和非管理员)
(4)需要考虑计算机休眠,待机后在启动软件的表现情况,各种杀毒软件对软件的 影响。瑞星、卡巴、360等(杀毒软件对一些文件类型、端口等有监控,需要考 虑。可能由于软件使用某些端口而被杀毒软件阻止而导致不能正常使用)
11.性能测试
(1)并发负载问题
(2)不同网络环境的信息传输性能,丢包率
(3)同等网络环境下,不同并发数场景下,信息传输性能,丢包率
(4)大数据量的测试
35.一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别
一个客户端,三百个用户
只有一个客户端,三百个用户肯定不能同时进行操作,假设每次一人操作客户端对服务器施压,服务器承受的压力小但持续时间长
三百个客户端,三百个用户
假设三百个客户端同时进行操作对服务器施压,就要求服务器带宽能够承受三百人同时在线操作,且服务器短时间内承受压力大但持续时间短
36.你对测试最大的兴趣在哪里
感觉这是一个有挑战性的工作;
测试是一个经验行业,工作越久越能感觉到做好测试的难度和乐趣,
通过自己的工作,能使软件产品越来越完善,从中体会到乐趣。
性能测试
1.性能测试关注的指标是什么
1.吞吐量(Rps):每秒钟系统能够处理的请求数、任务数
2.响应时间(Rt):服务处理一个请求或一个任务的耗时
3.错误率:一批请求中结果出错的请求所占比例
4.从服务器的角度看,性能测试主要关注CPU、内存、服务器负载、网络、磁盘IO等。
5.每秒事物数(TPS)
6.内存(CPU)
7.网络(IO)
8.每秒点击数\
2.要进行性能测试,你是如何展开操作的
1.确定关键业务,关键路径;
2.确定测试的关键数据。比如并发量,响应时间,循环次数等;
3.准备测试环境,完成脚本录制或脚本开发;
4.执行测试,观察或监控输出参数,比如吞吐量,响应时间,资源占有率等;
5.对执行结果进行分析,分析性能问题。
3.怎么分析性能测试结果
1.查看聚合报告和服务器的资源使用图,检查响应时间,事务成功率,CPU,内存和IO使用率是否达到要求,如果出错率达到了总请求的3%,我们会检查是什么原因导致的,修改好后,重新测试;
2.如果出现了性能瓶颈,比如响应时间,或者CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致响应时间过长,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给代发修复,修复好了就进行回归测试。
3.查看聚合报告和服务器的资源使用图,检查响应时间,事务成功率,CPU,内存和IO使用率是否达到要求,如果出错率达到了总请求数的3%,我们会检查是什么原因导致的,修改好后,重新测试;事务通过率为100%,90%的事务响应时间不超过5秒,并发用户为1000人,CPU和内存的使用率为70%以下
4.如何判断网络是否存在瓶颈
查看在整个性能测试过程中,网络的吞吐量是多少,如果网络的吞吐量占到了服务器的70%以上,我们就认为网络存在瓶颈,通常会增加带宽或者压缩传输数据。
5.如何判断响应时间不达标
根据性能测试结果先检查看下是否是服务器带宽存在问题,如果带宽存在瓶颈,则会考虑增加带宽或者压缩传输数据,如果带宽没有问题的话,我们会从服务器上导出日志,开发一起讨论分析是哪个地方导致响应时间过长,确定问题后,就提单给开发修复,修复好了就进行回归测试。
6.如何判断CPU使用率不达标
CPU使用率不达标,我们会从服务器上导出日志,分析是哪个地方导致CPU使用率不达标,如果分析不出来,就叫上开发一起讨论,确定问题后,就提单给开发修复,修复好了就进行回归测试
7.项目最佳的并发用户数是多少
通过负载测试,不断增加用户数,随着用户数的增加,各项性能指标也会相应产生变化,当出现了性能拐点,比如,当用户数达到某个数量级时,响应时间突然增长,那么这个拐点处对应的用户数就是系统能承载的最大用户数,我们当时做到1500个并发用户的时候,查询功能的响应时间超过了性能指标2秒多,原因是有几个表的索引建得不合理导致的,重新建索引后,问题就解决了。我们当时做到1500并发用户后,就没再继续增加用户量了,
8.App常见崩溃原因
1.设备碎片化:由于设备极具多样性,App在不同的设备上可能有不同表现形式;
2.宽带限制:宽带不佳的网络对App所需的快速响应时间不够;
3.网络的变化:不同网络的切换可能会影响App的稳定性;
4.内存管理:可能内存过低,或者是授权的内存位置的使用可能会导致App失败;
5.用户过多:连续数量过多可能会导致App崩溃;
6.代码错误:没有经过测试的新功能,可能会导致App在生产环境中失败;
7.第三方服务:广告或弹出屏幕可能会导致App崩溃。
9.弱网情况下你是如何测试的
A.2G的网速150kbps,折合下载速度15-20K/S.B=8b.g
B.3G的网速 1-6Mbps,折合下载速度120K/S-600K/S.
C.4G的网速10-100Mbps,折合下载速度1.5M/s-10M/s.
a)使用真实的SIM卡,运营上网络来进行测试。
b)通过代理的方式模拟弱网环境下进行测试(charles应延迟)
c)链接模拟弱网的热点进行测试(如360wifi助手可以设置)
1.在Charles中设置需要模拟弱网的主机和端口号
2.切换2G3G4G网络,测试客户端的容错能力(崩溃或者ANR问题)
3.还可以设置带宽、利用率、最大传输单元、不稳定性范围等参数模拟不同的网络环境,测试客户端的容错能力
10.测试手机兼容性如何测试的
一般测试手机兼容性的时候会考虑到手机的型号,分辨率以及安卓版本号,一般常用的手机型号如:华为,锤子,小米,魅族等,一般碎片化会严重,从Android6.0到Android10.0的版本是不一样的,而最近的版本号已经到10了,也就是AndroidQ,它是协助开发者利用5G,折叠屏,无框屏,设备内置Al等最新技术继续创新,同时确保用户安全,隐私及数字健康。向分辨率这块大部分是19201080,还有好多的分变率,如7201280,还有大的分辨率,都要考虑兼容,不然的话手机视觉体验就会不太好,一般会买真机去测。
11.压力测试与负载测试的区别
1.负载测试 背10个人跑
2.压力测试 背一个 在背一个 在背一个
12.你是如何篡改请求数据的
1.我使用的是Charles进行篡改响应数据的
2.在配置好代理以后,抓取对应想要测试的接口,对该接口设置断点
3.再次进入这个请求,断点停留在当前的接口位置,点击下一步(excute)
4.在顶部点击Edit request修改请求数据,再次点击excute
5.查看接口放回的相应数据是否和对应错误参数的提示一致,是否有异常数值
13.App提示无法连接网络,你会如何排查
1.首先看其他app能否连接网络,如果也连不上就是网络问题
2接着切换流量,wifi,热点,几种网络之间来回切换,如果在流量下访问不到,就是欠费啦
3.接着在排查wifi是否设置了代理,如果开了代理就通过抓包工具看看请求响应是否正常,如果没有响应或者400 404之类的就是后端问题 如果抓不到包就是代理配置有问题或者https证书问题
ADB命令
1.说几个常见的adb命令
-
查看当前连接设备: adb devices
-
查看日志:adb logcat
-
安装apk文件:adb install -r (apk的绝对路径)
-
卸载App: adb uninstall 包名 adb uninstall -k 包名 (保存配置及缓存文件)
-
列出所有的包名: adb shell pm list package
-
列出第三方的包名: adb shell pm list package - 3
-
列出系统应用的包名: adb shell pm list package - s
-
查看手机内存的命令: adb shell dumpsys meminfo 包名
-
启动: adb start server
-
关闭: adb kill-server
-
adb logcat . 日志级别 V Verbose 最低 D Debug bug I Info 信息 W Warn 警告 E Error 错误 F Fatal 致命S Silent (supress all output) adb install -r xx.apk 覆盖低版本的
adb install -r -d 覆盖高版本的
2.性能测试的adb命令
adb shell dumpsys cpuinfo 查看手机cpu的使用情况
adb shell getprop|findstr dalvik 手机系统自己运行的内存使用
Monkey命令
1.说几个monkey指令
-
打印日志的命令: adb shell monkey 200 >d: / monkeylog. txt
-
触摸事件:--pct-touch
-
动作事件:--pct-motion
-
轨迹事件:--pct-tackball
-
系统按键:--pct-sykeys
-
基本导航:--pct-nav
-
主要导航:--pct-majornav
-
启动事件:--pct-qppswitch
-
指定弹窗事件:--pct-flip
-
指定其他事件:--pct-anyevent
-
指定缩放事件:--pct-pinchzoom
-
忽略崩溃:--ignore-crashes
-
忽略超时:--ignore-timeouts
-
忽略许可异常:--ignore-security-exeptions
-
延时:--throttle
-
adb shell monkey -p com.sxxh.linghuo -s 23 --throttle 200 --ignore-crashes --ignore-timeouts -v -v -v 400
postman
1.postman与jmeter的区别是什么?
1.用例组织不同:jmeter的组织是比较偏扁平,首先它没有工作空间的概念,直接就是测试计划,而postman功能上更简单,组织方式是轻量级,他主要针对的是单个的http请求。 2.支持接口的类型与测试的类型不同:jmeter的功能更强大,可以通过各种类型的接口,不支持的页可以通过网上或者自己编写的插件进行扩展,而postman更轻量级,定位不同,可用来测试rest接口。 3.配置不同:jmeter可以在线程组里添加http,tcp,而postman只支持rest接口。
2.postman做接口测试
1.postman上将接口地址 传参方式以及参数写在对应的输入框里面 点击send按钮 会在下面reponse文本框显示返回的数据是以json凡是返回来的,这个 时候我们会对应接口文档 惊醒正返例数据的填写 对比接口文档查看数据是否符合标准 2.创建项目》选择请求方式》输入接口地址》配置参数名以及参数值》send按钮》看看是否有返回数据
3.postman配置测试环境
- 1:在Postman中设置两个环境,本地环境、测试环境
- 2:在两个环境中分别设置变量名为 base_url的变量,存放各自环境的IP地址
Postman 中获取环境变量值的方式为:{{变量名}},这样就可以获取变量值。
这里base_url的值获取方式就是: {{base_url}}
- 3:在Postman的URL地址栏中设置 为 {{base_url}}/login
- 4:切换不同的环境,base_url的值就会发生改变,这样就达到了IP地址切换的效果。
4.postman中如何实现接口之间的关联
获取响应文本,通过json提取器或正则表达式提取相关参数,下一个接口直接引用定义的参数
如何取:
第一个接口tests中用pm.response.json() 获取所有返回值,根据自己的需要取,用pm.globals.set(变量名,取数据的表达式) 定义为全局变量
如何用:
在第二个接口中直接用{{变量名}} 引用即可
Mysql数据库
1.Mysql数据库查询语句有哪些/多表联查
数据库语言最常用的是SQL
多表联查:select * from table1 t1,table2 t2 where tl.id=t2.id
这样就是多表联查。
left join
right join
inner join
2.Mysql数据库的增删改查
增: alter table 数据表名 add birthday datetime;
删: alter table 表名 drop 列名;
改:
1.修改字段,不重命名,用modify alter table 数据表名 modify birthday date;
2.修改字段,重命名,用change alter table 表名 change 原名 新名 类型及约束 alter table 数据表名 change birthday birth date;
查: 查询表使用数据 select * from 表名;
部分查询 select * from 表名 where 条件;
可以使用as 为列表指定别名 select 字段 as 别名,字段 as 别名 from 数据表名 where…;
3.sql内关联和内关联的区别
内关联是求交集 外关联是以主表为标准,去附表找需要的信息
4.熟悉数据库嘛 平时数据库用的多吗
还行,一般出现问题,遇到bug,就要去查询数据库,初步定为问题。开发会给到我们一个库表设计的excel(数据字典),里面有描述表名和表中的字段,我把交易过程的一些唯一标识,把他作为where条件去查询数据。初步分析后,再把问题暴露给开发。
(比如做智联项目支付时,输入支付密码后,已经返回了支付成功的提示信息,然后界面上的订单查询还是待付款,这个时候就要去查询订单表的数据,找到自己刚才做的交易的那一笔订单,去分析一下错误,再暴露给开发
linux查看文件用什么命令 查看进程用什么命令
Jmeter
1.Jmeter是如何测试的,如何使用的
1.打开jmeter;
2.创建线程组;
3.设置线程数和循环次数;
4.配置元件;
5.配置我们需要进行测试的程序协议、地址和端口;
6.构造http请求;
7.添加http请求头;
8.添加断言;
9.添加查看结果树;
10.添加Summary Report;
11.执行测试计划,执行测试计划不能用GUI,需要用命令来执行;
12.web报告。
2.jmeter连接数据库
1.在jmeter的线程组中分别添加JDBC Connection ConfigConfiguration 、JDBC Request 、 Debug Sampler 、 查看结果数。
2.在测试计划中将连接mysql需要的包加到classpath中。
3.在JDBC Connection Configuration 中添加JDBC的配置。
3.jmeter为什么要参数化
1,多用户登录的时候,如果不进行参数化就没演示了。
2,需要使用CSV将参数放到文件,来演示多用户登陆。
3,在进行录制的时候,有可能存在第二个请求的参数是从第一个请求中获取出来的,需要在第一个请求下,去将参数提取出来,再到第二个请求中进行参数化。
4.jmeter如何进行压力测试
我们在公司大部分是进行的数据库压测以及接口压测
创建线程组设置循环次数创建http请求添加查看结果数和聚合报告
jmeter设置线程数 启动时间 循环次数运行 检查并保存运行数据 判断是否需要优化
5.jmeter的接口测试是怎么做的
1.把线程组设置数量为1,循环次数为1
2.配置好全局变量URL通过配置元件---用户自定义的变量添加
3.增加配置元件http请求默认值,添加事物控制器
4.在事物控制中添加http请求添加接口请求信息
5.添加对应的断言元件进行断言
6.监听器(查看结果树,图形结果,聚合报告等)
6.jmeter中的关联是怎么做的
我们的一个接口,需要另外一个接口,响应里边的某个参数 会用jmeter中提取方法,常用的四种方法 边界提取器 xpath提取器 beanshel
1. 正则表达式提取器
解决方案分析
1. 测试计划->线程组
2. 线程组->HTTP请求(获取title)
3. 获取title->后置处理器->正则表示式提取器
4. 线程组->HTTP请求(使用title)
5. 测试计划->察看结果树
2. XPath Extractor
解决方案分析
1. 测试计划->线程组
2. 线程组->HTTP请求(获取title)
3. 获取title->后置处理器->XPath Extractor
4. 线程组->HTTP请求(使用title)
5. 测试计划->察看结果树
Linux
1.Linux系统操作的指令增加 删除 复制 移动等
Cd:进入目录
Cd app:切换到app目录
Cd.. :切换到上一层目录
Cd/ : 切换到系统根目录
Ifconfig :查看ip
Ll:查看文件及其属性
Vi: 编辑
Rm-rf: 删除
Cp:复制
Mv 隐藏文件
Ls -d只显示隐藏文件
Pwd:显示当前路径
Mv:移动
Df 磁盘空间
Touch:创建文件
Ps:查看进程
cat /proc/cpuinfo:查看CPU信息
2.Linux查看日志命令
1.Tail【参数】【文件】
tail -f info.log : 动态查看实时输出info.log日志
tail -n 200 info.log: 查看info.log日志后200行
tail -f info.log | grep "orderId": 动态查看含有关键字orderId的日志
2.Cat
cat info.log:查看info.log的全部日志内容
cat info.log | grep "java":查看info.log的java关键字关联的全部内容
cat info.log | grep -A 5 "java":查看info.log的java关键字后5行关联的全部内容
cat info.log | grep -B 10 "java":查看info.log的java关键字前10行关联的全部内容
cat info.log | grep -C 20 "java":查看info.log的java关键字前后20行关联的全部内容
3.Less
less info.log :从头开始查看info.log日志内容
4.More
more info.log: 查看info.log的日志内容,按下方附加操作滚动日志内容
more info.log |grep "test": 查看全部关键字test关联内容
5.Head
head -n 20 info.log: 查看info.log日志的前20行内容
3.Linux系统日志查看指令,压缩,解压指令等问题
tar -xvf 文件名 :解压
Tar -n logcat 查看系统日志
tar -zcvf 文件名:压缩
4.Linux 中 find和grep的区别
grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式进行匹配查找。 语法: find 查找位置 文件名或目录名
find是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间 语法:grep 字符串 文件名
5.Linux 一个文件的访问权限是755,其含义是什么
1、第一位7,代表文件所有者拥有的权限为可读
2、第二位5,代表文件所有者同组用户的权限为可读
3、第三位5,代表公共用户的权限为可读
6.linux查看文件用什么命令 查看进程用什么命令
查看进程:ps -ef | grep 进程号
查看文件内容的命令有 more less head tail cat
查看日志文件常用:less、view
7.查看日志主要查看什么内容
主要查看程序运行的记录,比如支付失败,后台就有报错信息打印到.log日志文件中,就可以通过分析日志信息来初步定为问题。 (补充:同时也去查询数据库,分析订单数据,查看支付状态等等)