请选择行业
请选择职位
请选择省份
请选择城市

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

时间: 2023-11-06 16:10   作者: 你遗憾吗   点击次数: 
 
  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 an d 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.com
   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再次请求。

打印本页 | 加入收藏

上一篇:不加班,指挥外包干活,国企的测试岗位真的    

关闭  
主要城市: 北京 上海 杭州 广州 南京 武汉 长沙
全部城市: