最全的软件测试面试题(上)

编程入门 行业动态 更新时间:2024-10-27 06:21:48

<a href=https://www.elefans.com/category/jswz/34/1768819.html style=最全的软件测试面试题(上)"/>

最全的软件测试面试题(上)

1.熟悉软件测试流程,能够独立完成软件测试相关工作

  软件测试流程:首先由公司高层进行立项,产品给出产品说明书,需求人员进行需求分析,接着进行需求评审(参加人员:项目组里的人,产品,需求,研发,测试),开发进行概要设计和详细设计,测试人员根据需求文档编写测试用例,测试用例评审,如果改动较大的话还要进行二次评审。评审完成后开发进行编码,测试进行部署测试环境进行测试,首先进行冒烟测试(主功能),然后进行功能测试,遇到bug利用禅道进行跟踪记录,开发进行修改,测试进行验证,然后进行回归测试,然后进行验收测试,最后将各个文档交给运维人员进行部署上线。(交给运维人员的一般有,需求文档,测试报告,前后端代码包,版本号等等)

  2.灵活运用各种方法编写测试用例

  等价类划分,边界值,场景法,正交表,错误推测,因果图,判断表。

  1)等价类划分:注册密码长度在618位数字字母注册:有效等价类:618数字和字母组成的,无效等价类: 小于6位,大于18位,6~18纯数字,纯字母,特殊符号,空格等。

  2)边界值:注册密码长度6~18位可以选取5,6,18,19位进行边界测试。

  3)场景法:ATM取款机取钱,梳理流程:插入合法的卡-输入正确密码-输入合法金额-余额充足-ATM金额充 足-取款;插入不合法的卡-退卡;插入合法的卡-输入错误密码-提示输入密码;等。

  4)错误推测:手机拨号失败:考虑可能是手机没有卡,手机欠费,手机没有信号,手机通讯服务有问题 等。

  5)因果图和正交表:投币买饮料:投入不同的硬币,选择不同的饮料,最终给你返回硬币和饮料。

  3.测试用例模板

  用例编号,用例模块,用例标题,前置条件,优先级,操作步骤,输入数据,预期结果,实际结果。

  4.缺陷报告模板

  缺陷编号,缺陷状态,缺陷标题,重现步骤,严重程度,优先级,缺陷类型,测试环境。

  5.禅道的缺陷报告

  缺陷报告中包含:所属产品,所属模块,所属项目,指派人员,截至日期,bug类型,测试环境,bug标题,严 重程度,优先级,重现步骤。(操作步骤,预期结果和实际结果)

  6.测试报告模板

  测试目的,测试依据,测试范围,测试环境,实际进度,几轮回归测试 ,遗留缺陷 ,等级,如何解决,测试结论。

  7.接口测试模板

  用例编号,所属模块,用例功能,请求方式,请求头,请求体,请求路径,请求参数,预期结果,实际结果。

  8.测试计划模板

  测试背景,测试目的,确定测试范围,制定测试策略,测试资源安排,人员的分配,时间安排,风险评估。

  Postman

  接口流程

  拿到后端开发提供的接口文档,分析接口中的功能,请求方式,请求头,请求参数(参数是否必填,类型,长度,是否唯一等),编写接口测试用例,最后使用postman工具进行接口测试。

  1.全局变量

  通常情况下,我们共同使用的部分可以存放在全部变量里,调用的时候只需要{{变量名}}即可,适用全部的接 口

  2.接口关联

  将第一个接口设置断言,拿到返回体内容转成json对象,通过json表达式提取想要的值,将这个值设置全局 变量,在第二个接口中使用{{变量名}}代替,实现接口关联

  // 获取响应体的文本内容

  var resbody = responseBody;

  console.log(resbody)

  // 转成json对象

  var jsonobj = JSON.parse(responseBody)

  // 通过json表达式提取值

  var pro = jsonobj.result.province

  pm.globals.set("prodes", pro);

  3.断言

  用于预期结果和实际结果的对比

  Tests响应断言的几种方式 :

  (1)Status code:code is 200 (校验响应头是否包含某个值)

  (2)response body:contains string (校验返回结果中是否包含某个字符串)

  (3)response body:Json value check (校验返回结果中某个字段是否等于某个 值)

  (4)response header:content-type header check (校验响应头是否包含某个值)

  (5)response time is less than200ms (校验响应时间是否少于200ms)

  (6)response body:Is equal to string (校验返回结果中是否等于该字符串)使用少

  4.用例的批量执行

  将测试数据保存本地,一次性进行运行,在参数里面的数据文件值和取全局变量一致,使用{{}},在断言里面 取数据文件的值使用:data.字段名。

  5.接口自动化测试

  我在公司使用的是postman,newman和jenkins做接口自动化测试 首先将接口填充在postman中调试导出脚本(.json脚本) 安装nodejs和Newman,最近在dos命令中通过newman命令执行生成测试报告(newman命令:newman run 脚本.json -r html --reporter-html-export html路径) 最后在Jenkins中新建项目,设置定时任务时间,在调度任务中添加window 命令(Newman命令),最后定时 执行任务生成测试报告。

  协议

  Web测试和APP测试相同点:

  · 设计测试用例时,依然都是依据边界值分析法、等价类划分等

  · 需要检查界面的布局、风格和按钮等是否简洁美观、是否统一等

  web和app测试,单从功能界面测试来说,没有什么差异。有差异的主要是以下几点:

  · 结构:

  web端,是B/S架构的,服务端有修改的话,客户端会同步更新

  app,是C/S架构的,如果服务端有修改的话,客户端必须更新,核心版本的客户端都要重新回归测试

  · 性能指标:

  web端:响应时间、CPU、内存、吞吐量

  app:响应时间、CPU、内存、吞吐量、手机流量、手机电量

  · 兼容

  web端:浏览器兼容;PC端的操作系统(windows、mac、linux)

  app:手机操作系统(安卓、ios、windows);手机型号;分辨率(手机屏幕大小)

  · 相对于web,app有一些专项测试

  中断测试(来电、信息、其他应用)

  弱网络测试、网络切换测试

  安装、更新、卸载

  · 自动化测试工具

  app:appium

  web:selenium

  ·界面操作

  web端:屏幕放大缩小等

  app:手势、手机横屏竖屏、触控等测试

  · 安全测试

  web:敏感信息泄露、跨站脚本、sql注入

  app:访问通讯录、相册、相机

  网络的七层协议

  物理层:物理接口规范,传输比特流,网卡是工作在物理层的。

  数据层:成帧,保证帧的无误传输,MAC地址,形成EHTHERNET帧

  网络层:路由选择,流量控制,IP地址,形成IP包

  传输层:端口地址,如HTTP对应80端口。TCP和UDP工作于该层,还有就是差错校验和流量控制。

  会话层:组织两个会话进程之间的通信,并管理数据的交换使用NETBIOS和WINSOCK协议。QQ等软件进行通讯因该是工作在会话层的。

  表示层:使得不同操作系统之间通信成为可能。

  应用层:对应于各个应用软件,应用程序。

  三次握手,四次挥手

  三次握手

  1.客户端向服务端发送请求连接

  2.服务端收到请求发出收到请求,可以连接

  3.客户端收到请求向服务端发送收到,连接成功

  四次挥手

  1.客户端向服务端发送请求连接

  2.服务端收到请求后发出收到请求,可以连接

  ……数据传输中

  3.数据传输完毕后,服务端请求断开

  4.客户端收到请求,发出断开消息。OK

  数据库操作

  1.数据库分类

  关系型数据库:mysql,sql server,oracle,sqlite,db2…

  非关系型数据库:redis,mongodb

  2.sql的分类

  DDL,DML,DQL

  3.具体操作

  DDL中操作

  库操作:

  新增库:create database 库名;

  查询创建库的语句:show create database 库名;

  删除库:drop database 库名;

  使用库:use 库名;

  表操作:

  新增表:create table 表名(字段名 类型(长度),字段名 类型(长度));

  查询创建表的语句:show create table 表名;

  查询表结构:desc 表名;

  删除表:drop table 表名;

  表字段的新增:alter table 表名 add 字段名 类型(长度);

  表字段的删除:alter table 表名 drop 字段;

  表字段的修改:

  alter table 表名 MODIFY COLUMN 字段名 类型(长度); ------修改表中字段长度

  alter table 表名 change 旧字段名 新字段名 类型 长度-------修改表中字段名

  MML中操作

  新增数据:

  insert into 表名 values (字段值,字段值,字段值,,,);

  insert into 表名 values (字段值,字段值,字段值,,,),(字段值,字段值,字段

  值,,,),(字段值,字段值,字段值,,,)

  修改数据:update 表名 set 字段名= 新值,字段名= 新值 where 条件;

  删除数据:

  delete from 表名 where 条件

  delete from 表名

  DQL中操作

  查询数据:

  select * from 表名 查询全部数据

  select * from 表名 where 条件 查询指定数据

  查询在某某之间的数据:SELECT * from 表名 where 字段 BETWEEN X and XX;

  模糊查询:select * from 表名 where 字段 like '%数据%'

  排序:

  select * from 表名 order by 字段 正序

  select * from 表名 order by 字段 desc 倒序

  分组:select * from 表名 group by 字段 having 条件

  统计次数; max() 计算最大值; min() 计算最小值; avg() 计算最小值 ; sum() 求和

  分页:select * from 表名 limit 起始位置,显示个数

  两个表联查

  select 表1.字段,表2.字段 from 表1 inner join 表2 on 表1.字段=表2.字段 where 条件

  三表联查

  select 表1.字段,表2.字段,表3.字段 from 表1 inner join 表2 on 表1.字段=表2.字段

  inner join 表3 on 表1.字段=表3.字段 where 条件

  sql优化语句:

  1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

  2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

  3.不要写一些没有意义的查询,如需要生成一个空表结构。

  4.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,

  其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。

  5.避免使用*,in,not in !=等等,可以较多的使用count。

  Linux

  1.Linux命令

  目录

  新增 mkdir 目录名

  修改 mv 目录名 新目录名     剪切  mv 目录名   路径

  复制 cp 目录名   路径

  删除 rm -rf 目录名

  查看 ls        ls -a          ls -l==ll        find / -name '目录名'

  文件

  新增 touch 文件名

  删除 rm -rf 文件名

  修改 vi/vim    i/o/a      Esc     Shift+:         wq保存并退出      q! 强制退出

  查     cat/more/less/tail/head       

  查询底部多少行    tail -n  文件名   

      查看前多少行      head -n 文件名

  过滤查询    grep  error/exeption 文件名     

  动态查询日志   tail -f 日志名

  打包  tar -zcvf 文件名.tar  目录名/文件名

  解压  tar -xvf  文件名.tar       指定解压路径   tar -xvf  文件名.tar -C 路径

  进程

  全都:ps -ef 

  某一个 :ps -ef | grep 进程名(tomcat/mysql)

  杀:kill -9 pid 

  端口

  全部:netstat -an

  某一个 :netstat -an | grep 端口号(3306/8080)

  网络

  ping www.baidu

  ping 内网ip

  查询ip

  ifconfig(linux)   ipconfig(window)

  查看资源信息

  cpu:top

  内存:free

  磁盘:df -h

  权限

  su root     

  chmod 777(rwx) 文件名

  2.Linux环境部署

  安装jdk,tomcat(配置环境)

  1:从公司的工具库中拿到jdk.tar,tomcat.tar包

  2:通过远程连接工具(ssh/xshell)连接Linux服务器,将jdk和tomcat上传到服务器上

  3:首先解压jdk.tar包(tar -xvf),将解压的之后的jdk路径填写在配置文件中

  4:重启配置文件

  5:通过Java -version 判断是否安装成功,安装成功则显示jdk的版本信息(1.8.0的版本)

  6:jdk配置成功之后,接下来解压tomcat.tar包(tar -xvf )

  7:开放8080端口

  8:在tomcat中的bin目录在,启动(./startup.sh),

  9:在游览器中输入ip:8080,可以检验tomcat是否成功启动(如果tomcat没有启动,可以通过ps -ef |grep tomcat 查看tomcat进程是否开启,如果没有开启,,再次执行启动tomcat命令)

  项目部署(web端项目)

  1:将开发的压缩包(.tar),解压之后,放到tomcat中的webapps目录下,重启tomcat(./startup.sh)

  2:在游览器中输入ip:8080/解压后名称,查看项目

  安装MySQL

  1:从公司的工具库中拿到mysql.tar包

  2:通过远程连接工具(ssh/xshell)连接Linux服务器,将mysql压缩包上传到服务器上

  3:解压mysql.tar包(tar -xvf )

  4:解压后的rpm文件,分别进行客户端和服务端的安装(rpm -ivh)

  5:启动mysql(service mysql start)

  6:将mysql加到系统服务中并设置开机启动

  7:登录mysql(msyql –u root -p)

  8:修改密码(set password = password('xxx');)

  9:需要设置开启远程登录mysql的权限

  10:开放Linux的对外访问的端口3306

  11:通过连接MySQL工具(navicat)直接访问 

  Charles

  1.熟练使用Charles进行抓包,断点等操作。

  charles原理

  客户端向服务器发送请求,被Charles拦截,charles伪装成客户端向服务器发送请求,拿到服务器返回的证书,伪装成服务器返回给客户端,客户端用charles的公钥加密对称密钥发给伪装服务器的Charles,Charles用自己的私钥解密对称密钥,用服务器公钥加密发给服务器,服务器解密对称密钥,发送请求。

  证书下载

  默认情况下,charles不能解析https协议的接口,里面的请求和响应数据都是乱码格式,所以我们需要下载 ssl证书,来获取里面的数据。

  web端证书下载操作步骤

  点击help,选中ssl Proxying(ssl代理),点击Install Charles Root Certificate(下载根 证书), 然后按照证书,将证书指定在受新任的根证书颁发机构,提示"导入成功"; 最后在proxy(代理)中设置ssl proxy setting(ssl代理设置),将host和port写入*号,重启 charles即可。

  2.如何定位问题

  方式一:

  通过抓包工具Charles抓取该接口,查看接口中请求和响应的数据,如果请求中的请求头,请求参数,请求 url有问题那么是前端的问题,如果请求没有问题响应有问题,那么是后端的问题。

  方式二:

  查看日志信息,如果日志中出现:FileNotFoundError(找不到对应的文件),IndexError(下标越界), KeyError(错误的key),ValueError(错误的值),TypeError(类型错误),ZeroDivisionError(逻辑 算术出错)等是后端的报错,找后端的开发进行解决,如果出现类似:undefined。(已声明,未赋值)

  一、修改request请求参数值

  1. 在接口处鼠标右击 选择breakpoints(断点)

  2. 点击proxy(代理)选择Breakpoint settings(断点设置)

  3. 选中Enanle Breakpoint,清除已有的接口信息,点击Add,点击选中的接口,复制粘贴回车,自动填充 修改query(参数)为* request勾选 输完值 点击ok保存变量

  4. 重新请求接口 在edit request 点击具体值进行修改添加或删除 点击Execute

  5. 关掉 break point(断点) 点击 abort(终止)

  场景:

  注册中密码长度在6~18位,在界面上操作,如果密码小于6位或者大于18位,那么前端会进行约束,注册是置。

  灰的,那么需要验证后端是否进行处理。

  实现步骤:在前端输入用户名和密码点击注册的时候,我这边打开Charles抓取该接口,通过断点调试修改。

  request中密码长度小于6位,发送请求验证后端是否处理,如果后端显示注册成功,那么需要后端进行修改。

  二、修改返回值 response

  1. 选中接口右击 选择breakpoints(断点)

  2. 点击proxy(代理)选择breakpoints settings (设置断点)

  3. 选中Enanle Breakpoint,清除已有的接口信息,点击Add,点击选中的接口,复制粘贴回车,自动填充 修改query(参数)为* request勾选 输完值 点击ok保存变量

  4. 重新请求接口 点击edit response 返回值所有的字符都可以修改 点击Execute

  5. 刷新页面 请求接口 点击abort(终止)

  三、修改返回值 response (map local 本地存储)

  1. 选中接口点击右键,save response保存为TXT文件 存放到本地 编码的格式为’utf-8’否则可能会出现乱码

  2. 选择tools, 选择maplocal功能 query(参数)修改为 *

  (map to 下 local path 填TXT文件的绝对路径)

  3. 修改TXT文件中 需要修改的字段值

  4. 关闭浏览器,重新打开浏览器请求

  5. 完毕后 点击 tools(工具) 点击 map local 取消勾选的 enable map local

  场景:

  品界面详细信息展示,如果超过三行以小数点省略,抓取该接口,修改响应数使商品信息描述超过三行,看看在前端的展示是否正确

  四、弱网测试

  1. 点击proxy(代理) 选择 throttle settings(节流阀调整) 勾选 enable throttling(使用节流阀) 修改 宽带: 上限值 下限值 带宽的利用率:上限值 下限值 数据传输往返延迟时间值 最大传输字节量 可靠性 网速不稳定性的占比等 点击ok保存。

  2. 打开throttle setting 版本3.0是红旗 4.0的是乌龟。

  五、模拟 404/403 返回值

  1. 点击tools(工具)选择blacklist(黑名单)。

  2. 允许启动黑名单功能 选择接口返回值的形式 添加接口地址并保存。

  3. 选中需要返回404/403的接口 点击ok再次请求。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

更多推荐

最全的软件测试面试题(上)

本文发布于:2023-11-15 23:58:54,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1610152.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:最全   面试题   测试   软件

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!