精华内容
下载资源
问答
  • 2022-03-02 17:42:29

    本篇旨在记录此次跳槽面试过程中的面试题,以及自己准备的一些题目

    计算机基础

    1、虚拟内存:进程被创建时,会被分配一个虚拟内存,在进程未开始运行时,这只是一个内存布局。当进程开始运行,就会把虚拟内存对应的数据和代码块拷贝到物理内存中。如果物理内存上没有对应的页表,会发生缺页异常。
    程序访问的地址都是虚拟内存地址,通过页表才能找到真正的物理内存地址。

    2、TCP/IP五层模型(从下往上):
    1)物理层:保证原始数据可在各种物理媒体上传输,主要应用:集线器
    2)数据链路层:传输单位为帧,主要应用:交换机
    3)网络层:传输单位为数据报,主要应用:路由器,保证端到端系统之间通信正常,路径选择、路由及逻辑寻址。主要协议:IP协议、ICMP协议(ping命令即为该协议)、ARP协议(IP地址转为MAC地址)、RARP协议(MAC地址转为IP地址)
    4)传输层:主要应用:网关,保证端口到端口之间的可靠/不可靠的传输,主要协议:TCP\UDP
    5)应用层:传输单位为报文,主要协议:HTTP\FTP等


    3、IP地址:
    A类地址:第一个字节为网络号,地址范围为0-127
    B类地址:前两个字节为网络号,地址范围为128-191
    C类地址:前三个字节为网络号,地址范围为192-223
    4、子网掩码:1表示网络位,0表示主机位

    5、http和https的区别
    1>http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
    2>http是80,https是443,http连接是无状态连接(每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。而cookie和session可以保持http连接状态),HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全


    6、cookie和session的区别:
    1>cookie存储在浏览器上,session存储在服务器上,更安全
    2>cookie可在浏览器明文查看,session通过服务器加密是一串无序字符串
    cookie有两种:
    一种存在于浏览器的进程中,一种存在于硬盘上。每个session有一个唯一的sessionid,这个id存放在浏览器进程中的cookie中。当关闭浏览器后cookie消失了,sessionid也消失了,那服务器端的session也消失了。但实际服务器不知道浏览器是否关闭,因此服务器会设置一个session失效时间,到时间后将对应的session删除。
    每次浏览器被关闭后再次打开访问同一个请求,都是不同的session。
    当勾选自动登录,其实是将sessionid存放在了硬盘cookie中,这样下次可以免登录

    7、tcp和udp区别
    1、udp是不可靠、无连接,tcp是可靠,有连接,三次握手,四次挥手。udp比tcp传播速度更快
    2、udp可以一对多或者多对多连接,tcp是一对一连接
    3、TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证(tcp支持重传,而且也有序列号保证数据顺序)

    8、进程与线程区别:
    1>进程是资源分配的最小单位,计算机把资源分配给进程,同个进程下的线程间共享资源
    2>一个进程可以包含多个线程,一个线程只能在一个进程中
    3>一个进程内即使有很多线程,也只运行在一个cpu内,多核cpu上可以运行多个进程,提高速度
    4>进程的切换开销比线程的大很多,因为每个进程有自己的虚拟地址空间,同个进程下的线程则是共享该进程的虚拟地址空间。进程切换需要切换虚拟地址,虚拟地址映射为物理地址通过页表实现,进程切换页表也切换,导致缓存失效,映射物理地址速率就变慢,而线程不需要切换地址空间
    5>线程间的通信方式有4种:wait/notify(等待唤醒)、volatile、CountDownLatch、CyclicBarrier

    9、tcp怎么保证可靠性传输:
    1、校验和:保持首部和数据的校验和
    2、序列号:使用序列号保证数据传输的顺序性
    3、支持重传
    4、停止等待协议:每发完一个分组就停止等待对端确认

    10、ping命令不通的原因:
    1、本机或目的机子未联网,报time_out超时
    2、网络很差超时
    3、对端有防火墙阻止Ping

    11、get和post区别:
    1、get一般用于从服务器获取数据,post用于向服务器提交数据
    2、get表单提交参数直接明文显示在url中,post提交的数据在body中,因此post比get更安全

    12、http状态码:
    1xx:信息性状态码
    2xx:成功状态码
    3xx:重定向
    4xx:客户端错误状态码
    5xx:服务器错误状态码
    13、重定向:在 HTTP 协议中,重定向操作由服务器通过发送特殊的响应(即 redirects)而触发。HTTP 协议的重定向响应的状态码为 3xx 。浏览器在接收到重定向响应的时候,会采用该响应提供的新的 URL ,并立即进行加载,大多数情况下,除了会有一小部分性能损失之外,重定向操作对于用户来说是不可见的。

    14、TCP的重传机制:
    1、超时重传:TCP协议要求在发送端每发送一个报文段,就启动一个定时器并等待确认信息;接收端成功接收新数据后返回确认信息。若在定时器超时前数据未能被确认,TCP就认为报文段中的数据已丢失或损坏,需要对报文段中的数据重新组织和重传。这种方式会增加端到端的时延
    2、快速重传:报文段1成功接收并被确认ACK 2,接收端的期待序号为2,当报文段2丢失,报文段3失序到来,与接收端的期望不匹配,接收端重复发送冗余ACK 2。这样,如果在超时重传定时器溢出之前,接收到连续的三个重复冗余ACK(其实是收到4个同样的ACK,第一个是正常的,后三个才是冗余的),发送端便知晓哪个报文段在传输过程中丢失了,于是重发该报文段,不需要等待超时重传定时器溢出,大大提高了效率。这便是快速重传机制。

    python

    1、python迭代器和生成器区别:
    1)、迭代器是一种访问集合元素的方式,只能往前访问不能后退,迭代器可以记住遍历的位置
    使用iter(obj)可生成一个迭代器对象,使用next(迭代器对象)可遍历迭代器中的元素,也可以for语句遍历。字符串,列表或元组对象都可用于创建迭代器。注:每次调用next()方法只会输出一个值
    2)、使用了yield关键字的函数为生成器函数,调用生成器函数返回的是迭代器对象

    2、python是动态语言,动态语言和静态语言区别:
    1)、动态语言无需申明变量类型,运行时才确定数据类型的语言,如python,js等
    2)、静态语言需要先申明变量类型,如java\c\c++

    3、python装饰器:当一个方法有装饰器修饰时,首先会将该方法当作参数传入装饰器函数中执行,再执行该方法。

    4、python2和python3的区别:
    1)、python2的字符串编码有两类(unicode【字符串】和str【字节】),unicode在python3中改为str,python2的str在python3中改为byte
    2)、python2可以使用print ‘hi’打印,python3必须使用小括号包含:print('hi')
    3)、Python2中使用ascii编码,Python3中使用uft-8编码
    4)、python3新增了set集合

    5、 python可变与不可变类型区别:可变表示值变,但是指向的内存地址不变;不可变表示值变,指向的内存地址也变
    tuple 整型 字符串都为不可变类型
    list dict set都为可变类型
    tuple中嵌套list或者dict,dict和list的值都可变,但是tuple的值不可变。


    6、浅拷贝与深拷贝与赋值:
    赋值表示指向同一个地址,任何一个变都会变。
    浅拷贝:嵌套内的原值改变,新值也变。原值改变,新值不变
    深拷贝:嵌套内的原值改变,新值不变。原值改变,新值不变

    7、python垃圾回收机制,python进程与线程

    8、python的列表和元组的区别以及其他Python基础

    数据库

    1、嵌套查询需关注:1>最外层的为最终的结果,再根据条件一层一层嵌套  2>嵌套查询每次只查找一个表
    2、内连接、左外连接、右外连接:1>写法:from table_a inner/left/right join table_b on 关联两个表的条件。
    三个连接区别:内连接只显示两表中有关联(符合条件)的数据;左连接显示左表所有数据,右表没有对应的数据用NULL补齐,右表多余的数据删除;右连接显示右表所有数据,左表没有对应的数据用NULL补齐,左表多余的数据删除
    3、group by的分组字段要与select的字段一致,除去使用聚合函数的字段
    4、group by后可以跟having对分组后的数据再进行筛查
    5、delete table where xxx,update table set xxx
    6、模糊查询用like,不匹配用is not
    7、sum和count区别:sum用于统计值的总和,count用于统计行数即记录数

    4、索引(用户不可见,主键默认为索引):
    1)、创建索引:create index 索引名称 on table_name(column_name)
    2)、根据索引查询:select * from tabel_name where column_name='xxx'
    为某一列创建索引,搜索该列的值的时候可以提高查询速度,但是索引太多将会影响更新和插入的速度,因为它同样需要更新每个索引文件。

    5、主键,外键和索引
    主键的值唯一,不能为空,一个表只能有一个主键。
    外键的值可以不唯一,可以为空,一个表可以有多个外键,一个表的外键通常是另一隔壁表的主键。
    索引的值不能唯一,可以为空,一个表可以有多个索引

    6、TOP 子句用于规定要返回的记录的数目,需要现场写sql语句,多为连表查询

    Linux

    1、vim下的指令参数:
    nx:连续向后删除n个字符
    dd:删除游标所在的那一行
    ndd:删除光标所在的向下n行
    yy:复制光标所在的那一行
    nyy:复制光标所在的向下n行

    2、python反转字符串
    1)切片: str【: : -1】
    2)list=list(str)  list. reverse() ' '. join(list)

    3、linux查看进程命令:
    1)ps -ef | grep  查找需要的进程
    2)top 列出各个进程的资源占用情况
    3)Linux找到被占用的端口号进程并结束:
    netstat -tunl|grep 端口号  找到进程号后kill -9 进程号(-9强制删除)

    Selenium

    定位元素方法有id,name,class_name,tag_name,linktext,xpath,css
    1、driver.quit()关闭浏览器,driver.close()仅关闭当前页面
    2、等待分为强制等待(必须等待多久),显示等待(直到某个元素出现才操作,除非超时)和隐式等待(为浏览器对象创建一个等待时间,得不到某个元素就等待,直至拿到)
    3、isDisplayed()方法可以判断某个元素是否显示
    4、driver.switchTo().alert()切换到web弹窗
    5、driver.window_handles()可查看当前所有句柄,driver.switch_to.window(index)切换句柄

    音视频相关

    流媒体协议:
    1、用于直播的协议——RTMP,建立在tcp上。即为常说的CDN拉流
    2、用户实时视频通话的协议——RTP/RTCP,建立在udp上,即为常说的RTC拉流
    3、zego自研的流媒体协议——AVERTP,基于RTP进行封装,抗丢包性强

    混流:即为几路音视频流通过云服务器混成一路流,远端只需要拉一路流即可展示 (也可以拉几路流)。本地录制和云录制都为混流,本地录制混流是指将屏幕共享的流和屏幕中的推拉流进行混流(主要是因为本地录制如果不勾选共享音频就会没有声音),因此不需要布局设置;而云录制的布局设置是由服务器端设置

    其他

    1、给定一个测试场景,说出测试点,除去功能测试外,还应包括性能、兼容、异常场景以及安全性考虑。尽量想的完善些

    2、编程题:二分查找、有效括号、回文串、最长回文串、给定字符串,输出各个字符出现的次数/输出出现次数最多的字符/按字符出现次数排序(这些为面试时碰到的)

    更多相关内容
  • 2020一线大厂测试工程师面试题(吐血推荐).doc
  • 如果将你的程序的语言扩展到非英语,例如中文,你如何测试.3.给你一个COCAN,你如何测试(解释说就是罐装的可口可乐).4.当你的程序遇到BUG的时候,你选择怎样处理.5.你如何isolation你程序1.你如何在pocketpc上TEST你的...
  • 初中级软件测试工程师面试资料(整理了很多,包括面试题,测试文档模板,简历模板)
  • 软件测试方法有哪些分类各有什么特点设计测试用例的主要方法有哪些 软件测试方法分类 白盒黑盒灰盒 单元测试集成测试系统测试验收测试回归测试Alpha 测试Beta 测试 静态测试和动态测试 设计测试用例的主要方法 等价...
  • 题目试题大概看了下,都不是很难,但现在很多企业都没有专门的测试部门或测试人员,测试过程也不规范,对于没有做过测试的人来讲还是有些难度的。01.为什么要在一个团队中开展软件测试工作?保证软件质量的最后一道...
  • 笔者详细介绍了腾讯面试过程中遇到的笔试题、面试题。包括24道面试题,职业能力测评,技术笔试题,非技术测试
  • 测试工程师面试试题

    2018-08-09 17:31:16
    测试工程师面试试题,十分的全面,值得一看,对测试面试很有帮助
  • 渗透测试工程师面试题大全
  • 软件测试工程师面试
  • 1. 面试时一般是先让其自我介绍以及介绍参与项目的测试情况,了解其以往测试工作是否规范; 2. 针对参与的实际工作,了解其设计测试用例使用的设计方法,并让其举例说明。 也可直接问其以下情况,如何进行用例设计?...
  • 北大方正以下是一位软件测试培训学员整理的北大方正软件测试工程师面试题北大方正软件测试工程师面试题笔试题,工程,软件测试一、数量关系1、甲乙2人比赛爬楼梯,已知每层楼梯相同,速度不变,当甲到3层时,乙到2层,...
  • java测试工程师面试题合集分享 软件测试工程师笔试题中数据库试题集锦 如何准备软件测试工程师面试
  • 渗透测试工程师面试题大全-96页.pdf
  • 测试工程师面试集锦

    2018-04-20 11:27:44
    包含许多测试工程师面试文档,对于相关行业有很多借鉴的地方
  • 本人自己整理的测面试宝典,十几次面试的总结,包含面试老套问题
  • 软件测试工程师面试指导软件测试工程师面试指导软件测试工程师面试指导软件测试工程师面试指导软件测试工程师面试指导软件测试工程师面试指导
  • 在此,我将自己招聘和面试软件测试工程师的一些经验与心得汇成三步曲,献给大家,希望对大家找工作能有所帮助。第一步、投递简历投递简历,让招聘公司发 很多做软件测试的朋友都想换换工作,找一个待遇好、环境好,...
  • 1软件测试的目的是尽可能多的找出软件的缺陷 Y 2Beta 测试是验收测试的一种 Y 3验收测试是由最终用户来实施的 N 4项目立项前测试人员不需要提交任何工件 Y 5单元测试能发现约 80%的软件缺陷 Y 6代码评审是检查源代码...
  • 第 PAGE 页码 页码 页 / 总页数 NUMPAGES 总页数 总页数 页 软件测试工程师助理面试自我介绍 在面试软件测试工程师助理的时候很多面试官的第一个问题往往就是"能否请您做一下自我介绍"你会怎么作自我介绍?...
  • 如软件测试规范 第 PAGE 5页共3页 1软件测试的目的是尽可能多的找出软件的缺陷Y 2Beta 测试是验收测试的一种Y 3验收测试是由最终用户来实施的N 4项目立项前测试人员不需要提交任何工件Y 5单元测试能发现约80%的软件...
  • 总结的测试工程师常见面试题,以及各种测试知识的集合,word文档版,易于背诵!希望大家都能找到心仪的工作啊!!
  • 软件测试工程师面试题精选

    千次阅读 2022-02-27 08:48:27
    注:纯手打,如有错误欢迎评论区交流! ...多谢!!! 1、请简单做一下自我介绍? 【参考答案】 从这些方面组织语言:从业时间 、教育...最近我测的项目主要是XX,项目中我负责过web测试、app测试。主要进行功能测试、接.

    注:纯手打,如有错误欢迎评论区交流!
    转载请注明出处:https://blog.csdn.net/testleaf/article/details/123159718
    多谢!!!

    目录

    1、请简单做一下自我介绍?【高频】

    【参考答案】
    从这些方面组织语言:从业时间 、教育背景、工作经验 、项目经验 、擅长技能、你的性格尽量与个人简历相一致。
    【案例】
    您好,我叫XX,来自XXXX,XX年毕业于XXX大学计算机专业,从事软件测试工作XX年。最近我测的项目主要是XX,项目中我负责过web测试、app测试。主要进行功能测试、接口测试,也负责过自动化测试、性能测试(跟简历项目一致)。能独立搭建tomcat项目环境,熟悉jmeter性能测试工具及monkey命令行工具的使用, 也有过开发的经验,擅长c/c++、Java、JavaScript编程语言(有该项经验就补充) 我是一个耐心认真的人,有很大的信心做好测试的工作(可说可不说,影响不大)。

    2、上一家公司的测试工作是怎么开展的?各个阶段有哪些产出物?

    【参考答案】
    首先会召开需求分析会议,参加人员有产品、开发和测试,主要是探讨需求主要的一些功能点,完了之后,开发就排期进行开发,我们测试会按照测试计划进行任务分配。先会参考需求规格说明书及原型图编写测试用例,写完之后会进行用例评审,有评审修改的就修改整理形成最终的用例版本,之后开发人员版本编译完成后,我们会先进行预测,主要对主功能业务进行测试,如果主业务流程不通过,直接返回给开发进行修改。预测通过,依据测试用例进行系统测试,测试过程中,提交bug,跟踪bug,进行回归测试直至不存在严重bug,满足用户需求,测试完后编写测试报告,发布上线后,关注web是否正常运行。产出物包括:测试计划、测试用例、bug、测试报告。

    3、讲一个熟悉/最近的项目,做了哪些工作?主要负责的什么模块?

    【参考答案】
    它是一个XXXX平台,主要的业务包括XXXX等;比如XXXX,这是这样的一个项目。
    在整个项目中主要测试接口、界面功能,还参与了少量的自动化、性能测试的工作;从项目立项开始就参与包括需求分析、写用例、到具体测试执行、跟开发沟通跟踪bug,到上线后的运行维护。
    该项目最近刚测试的一个需求,主要负责的就是XXXX模块、包括XXXX等功能。

    4、项目迭代了多少次?每次迭代周期多久?上家公司多少测试人员?多少开发?公司规模?公司地址?公司主要项目的网址?

    【参考答案】
    项目迭代次数可以参考app版本历史版本次数,web在此基础上做加减。迭代的项目周期有长有短,长的时候需要一个月甚至半年;短的时候,一周甚至两三天就发布一个版本。上家公司的测试人员/开发人员数量、公司规模、公司地址、公司主要项目的网址如实回答即可。

    5、给你一个购物车模块,你会如何设计测试用例?【高频】

    【参考答案】
    (1)界面测试
    界面布局、排版是否合理;文字是否显示清晰;不同卖家的商品是否区分明显。
    (2)功能测试
    ①未登录时: 将商品加入购物车,页面跳转到登录页面,登录成功后购物车数量增加;点击购物车菜单,页面跳转到登录页面。
    ②登录后: 所有链接是否跳转正确;商品是否可以成功加入购物车;购物车商品总数是否有限制;商品总数是否正确;全选功能是否好用;删除功能是否好用;填写订单功能是否好用;订单中填写的价格是否正确显示;价格总计是否正确;商品文字太长时是否显示完整;店铺名字太长时是否显示完整;满减券商品是否标注;购物车中下架的商品是否有特殊标识;新加入购物车商品排序(添加购物车中存在店铺的商品和购物车中不存在店铺的商品);是否支持TAB、ENTER等快捷键;商品删除后商品总数是否减少;购物车结算功能是否好用。
    (3)兼容性测试
    不同浏览器测试。
    (4)易用性测试
    删除功能是否有提示;是否有回到顶部的功能;商品过多时结算按钮是否可以浮动显示。
    (5)性能测试
    压力测试;并发测试。

    *6、说一下你项目的这个支付怎么测试的?

    【参考答案】
    (1)下好订单之后,在数据库中将订单价格改为0.01元进行支付。等待产品上线之后,进行大额价格的测试,并且做好报销。
    (2)考虑其他异常支付情况:比如支付金额超出账户限额;超出账户余额;

    7、需求文档不完善或者不准确,怎么处理?项目很紧急,也会写测试用例吗?

    【参考答案】
    在分析需求文档编写用例的时候,尽量把需求模糊的地方记录下来,同时可以参考市面同类型产品,给予自己的建议;把这些整理成问题集,统一跟产品确认;
    项目很紧急,把要测试的验证点写出来;测试完成后,有时间再去整理完善用例。

    8、有没有什么测出的特别好的,对开发帮助特别大的bug?或者是印象深刻的bug?【高频】

    【参考答案】
    一定要提前准备至少1个!
    有,可以拿你项目中的举个例子例如:身份证末尾X结尾的,实名认证显示成功。但是后面提现的时候,会报错,后面发现是保存到库里面,都是小写x的。导致提现这边不识别。
    如果面试官反问:我觉得这个bug很一般—请淡定,对于不同的项目可能是不同的效果,我对他深刻,是因为花了一定的时间去找到这个bug,并且自己尝试定位到原因,所以印象深刻!

    9、提交了一个bug,开发认为不是bug,作为测试怎么办?【高频】

    【参考答案】
    首先确认开发环境是否跟自己测试环境一致(有时候开发是在他们已更新代码的环境上验证bug的,所以bug就没出现,但在测试环境上面会出现;还要确认缓存有无清除),确认在测试环境能重现,如果确认是缺陷跟开发保持有效的沟通,如果是级别较低的建议性bug,可以先记录到bug平台,先保留沟通;如果是bug级别较高的问题,对应需求文档的预期结果跟开发说明,更有说服力;耐心讲解bug的危害,不行就找产品确认,确认是bug注明情况并再次指派给开发。

    10、你是如何部署测试环境的?能说说具体步骤吗?测试环境如何更新?会用到哪些命令?查看日志的命令是什么?你们用的tomcat、jdk等这些版本号是多少?你们公司有几台服务器?

    【参考答案】
    (1)
    a) 咱们项目用的数据库是mysql,然后部署到tomcat,首先确保服务器上tomcat、jdk、mysql已安装好;
    b) 新建一个库,运行开发提供的sql脚本,创建好对应项目的数据库表信息;
    c) 把开发提供的项目部署包放到tomcat的webapps里面,配置文件放到tomcat的conf里面,并修改好配置文件的IP地址和数据库连接信息;
    d)启动tomcat,并在浏览器输入项目访问地址,是否能打开项目界面,确认项目环境是否搭建成功;
    (2)
    开发修改代码后,会提交新的项目包,会替换tomcat的webapps原有的代码包,然后清除work下的缓存,重启tomcat;另外有涉及数据库升级脚本,同步执行升级脚本;大概就是这样。
    (3)
    cd ps -ef|grep tomcat kill ls vi ll ./startup.sh;
    查看日志tail -f 日志文件名;
    (4)版本号自己好好去看下当时环境的版本号;注意,涉及到具体数据,灵活变通。
    (5)一般是三台服务器;开发环境,测试环境,生产环境各一台,当然最少是3台,多的10来台都有的;

    11、你们接口项目有多少个接口?说一下你们是怎么做接口测试的?

    【参考答案】
    (1)接口多少个,没有具体算,(如果面试官一定要你说数字,可以100多个);我只负责了部分接口,大概30多个的测试;[问到概率不多,做了解]
    (2)
    先对开发提供的接口文档做好需求分析,进行用例编写及评审,然后就是选择jmeter做接口预测,确保接口功能能正常调用,然后才进行详细的测试。
    具体测试是用jmeter来完成的,比如先在测试计划下面添加线程组,添加http请求,页面进行相对应的接口请求地址、请求方式、传入参数的设置;然后添加查看结果树;点击运行,关注查看结果树中的响应结果中的status、code、msg信息是否跟预期一致,同步关注数据库变化,一般会在数据库项目表中插入一条信息,要确保插入表的各个字段数据的正确性;碰到报错的时候,需要通过日志排查下问题。大致就是这样。

    12、请列出接口测试用例的设计思路或方法?接口测试用例是怎么写的?

    【参考答案】
    首先了解接口需求,查看概要设计文档,弄懂业务逻辑和功能模块;
    (1)先保证这个接口功能是好的,也就是输入正常的参数输入,是否可以返回正确的结果
    (2)然后考虑接口异常验证:包括必填项验证、长度、类型异常等;比如说手机号11位,输入非11位,10位、12位的来验证;
    (3)还需要考虑接口的业务逻辑。比如说必须执行了XXXX,才能修改XXXX;
    (4)一些必要的接口安全验证要考虑到,例如注册接口中传入的密码是需要加密的;还有就是权限这块,必须是已登录已实名的账户才能进行操作,这跟业务逻辑是一样的;
    (5)编写用例的时候注意用例内容包括用例id、接口名称、请求方式、接口地址、用例标题、输入参数、预期结果(包括返回结果、数据库表字段变化);

    13、接口测试你是怎么定位bug的?请详细说明一个bug的发现过程?

    【参考答案】
    (1)如果返回结果是正常的:查看数据库以及日志是否有问题,无问题,则测试通过;有问题例如数据库数据增删改有问题就提交bug到bug管理系统;
    (2)如果返回结果是异常的:
    a、先确认地址、参数名、参数传值等是否正确,有问题对应修改;
    b、如果这些请求设置,传值都没问题,查看数据库以及日志是否有问题,有问题,则提交bug到bug管理系统,并且附上有问题的数据以及日志。
    Bug提交自行举例。

    14、web和APP测试有何区别?【高频】

    【参考答案】
    相同点:
    (1)同样的测试用例设计方法;
    (2)同样的测试方法;都会依据原型图或者效果图检查UI;
    (3)测试页面载入和翻页的速度、登录时长、内存是否溢出等;
    不同点:
    (1)app的中断测试:来电中断、短信中断、蓝牙、闹钟、插拔数据线、手机锁定、手机断电、手机问题(系统死机重启);
    (2)app的安装卸载:全新安装、升级安装、第三方工具安装、第三方工具卸载、直接删除卸载;
    (3)消息推送测试、手机授权测试、前后台切换、网络环境(wifi/2G/3G/4G/无网络);
    (4)兼容性测试:web项目考虑不同浏览器的兼容;app需要考虑手机不同操作系统、不同机型、不同屏幕等;
    (5)web自动化测试工具较常用selenium,而手机自动化monkey、monkeyrunner;

    15、有没有写过测试计划?里面包括哪些内容?

    【参考答案】
    一般是测试组长写的;测试计划包括的内容:测试目的、测试范围、测试时间安排、人员任务分配、测试策略及方法、测试环境内容、风险评估;(参考“5W+1H”去记忆)

    16、你觉得一个测试工程师应该具备哪些素质和技能?【高频】

    【参考答案】
    硬技能方面:
    (1)计算机知识,包括操作系统,数据库,通讯协议原理,熟悉至少一门编程语言;
    (2)软件测试知识,包括测试理论,测试方法,测试用例编写,缺陷跟踪流程,软件质量评估等;
    (3)产品业务分析能力,熟悉所测产品的一些隐藏需求或功能;
    素质就是测试相关例如:
    (1)耐心细心;
    (2)责任心,对自己测试的项目有一定的责任心;
    (3)良好的沟通能力,在出现问题的时候,才能跟开发进行良好的沟通,让整个项目进展更加顺利;
    (4)团结及合作能力;
    (5)学习能力;
    (6)分析及解决问题能力;

    17、对我们公司了解吗?

    【参考答案】
    提前有去百度或官网了解面试公司的介绍及主营业务。清楚咱们公司是XXXX成立的,目前主营产品及业务是XXXX。
    一定要说了解。

    18、你觉得你个人最大的缺点和优点是什么?【高频】

    【参考答案】
    目的:考察情商,想看诚实,能够认识的问题,并且有解决问题的思路。人非圣贤,孰能无过。知错能改,善莫大焉。
    所以缺点必须是真实的,无伤大雅的,并且已经发现,并且有改进措施。
    不想看到:强行把优点改成缺点,没缺点,调侃(吃太多–严肃点);
    严重的毛病:
    如懒,不认真,就不要说;
    【案例】
    优点:最好跟工作相关的优点:例如抗压能力强,可以举例自己公司赶项目,连续加班半个月,每晚10点后下班的情况;
    缺点:要有技术含量地说一些小缺点,比如我的记忆不太好,但是我认识到了,所以平时我会弄很多小标签、备忘录来提醒自己;

    19、你对薪资的要求?【高频】

    【参考答案】
    绝对要说一个具体的值,不要说区间。 可以参考职友集上的薪资:https://www.jobui.com/salary/guangzhou
    注:
    (1)了解市场薪资水平:
    一般来说,跳槽涨薪可达 10%-30%,高的话 50%,甚至是翻倍。如果跳槽前没有做足够的薪资调查,则很容易吃亏。在招聘平台依据自己工作年限进行搜索,多对比几家公司薪资区间,作为自己期望薪水的参考。
    (2)面试中如何正确谈薪:
    如果应聘者符合企业招人要求,面试时,HR 会主动提出谈薪的话题,否则你可能不是合适人选。当被问到"你期望薪资多少?",应该如何回答呢?
    ①直接告知对方“具体的期望薪资”:
    例如 ”我看了公司岗位薪资是 12-18k,所以我期望 16k“ 。如果已经做过市场调查,明确期望后,当 HR 问到期望薪资时,不建议反问“公司给出的薪资范围是多少?”,一般来说,HR 要么不说要么就直接把薪资范围缩减了,这反而使应聘者不占据主导权。当明确期望后,最好是自己直接说出期望。接下来就看 HR 能否给到了。
    公司开出的薪资范围是 12-18k。一般来讲,12k 是公司在这个岗位愿意支付的真正薪资,谈薪可上下浮动 20%-30% 不等,18k 非行业真实薪资水平,可能只是为了吸引更多人投递简历而已,一般是给不到的。
    如果你真的面试太差劲,HR 基本是不会跟你谈薪的,而是“今天的面试就到这吧,后面有结果我们再通知”。因此担心开薪过高,其实没必要,如果你真的是对方的合适人选,当你的期望过高时,HR 会跟你谈判的。
    ②不要因为 HR 压价,随意降低期望,但是可以给予商量的余地:
    除非你的期望在 HR 完全可接受范围内,HR 会很痛快接受;否则当应聘者抛出一个期望薪资时,HR 习惯性的回复话术都是:“看了下,你XXXX,我们这边最高只能给到 xxxxK!…”
    这个时候,不要急于回复说,“那好吧,我考虑下”。很多公司的 HR 都是以最高性价比招到合适的人为目的,所以 HR 压价是习惯,但这并不意味着,这个薪资就完全不可谈,切忌表现得我急于想获取这份工作,建议至少为自己争取 1-2 次,这个时候,可以先问下对方公司的薪资结构。
    在 HR 回复说明薪资结构时,尽量问清楚细节,例如
    是否加班,周末双休?加班费?是否任务绩效?考核绩效的难度?绩效奖?项目奖、年终奖等怎么算?对于“五险一金”,公司缴纳的比例,个人的缴纳比例是多少?试用期怎么算?每年是否都有提薪?提薪比例及范围是多少?提薪的标准是什么?
    这样综合确定下是否在自己的期望薪资区间,但注意一个原则,尽量保证基本工资是可观的,毕竟奖金福利补贴等浮动性较大,如果低于期望,则可直接地跟 HR 说明:“你好,是这样的,我上家公司基本薪资就达到了 12K,加上绩效奖、福利,公积金这些,每月差不多 14k,所以对于这个薪资,希望你这边帮我往上争取一下”。
    如果是在自己的期望区间内,但未达到高期望区间,可多补充到个人能力,自己可为公司做出的价值,尽量为自己争取到一个高薪资。
    另外注意下正规公司的薪酬体系都比较完善,比如 1-3 年工作经历,提供薪资范围 9k-15k。那么 15k 是上限,一般不会超过这个上限。这个时候可多关注公司其他福利,发展平台以及个人发展,做综合考量。
    ③学会骑驴找马,综合对比多家 offer:
    谈薪其实不仅仅只面试过程,当期望 HR 给予更高薪资争取后,接下来的 1-2 天,HR 会告知争取后的薪资结果,这个时候可判断是否在于期望区间,来决定接收 offer;如果 HR 没有主动告知,我们也可在 2 天后主动询问 HR 争取的结果。一般的面试时间大概为 2 周,过长的时间会让应聘者感到疲累,面试周期内,尽早保证先拿到一家 offer,并且可以这份 offer 为基准,作为接下来面试开薪的参考。
    另外对于面试没有很好把握的小伙伴,建议先不要提离职也不要透露离职想法,尽量找到下家再离职,这样可减少心理和经济负担,同时也可增加议价能力。

    20、用fiddler做什么?说下具体过程?

    【参考答案】
    (1)抓包,分析定位系统问题。
    (2)利用fiddler可以将测试环境资源重定向到本地,快速验证一些bug。
    (3)利用fiddler可以完成做一些简单的接口测试。
    (4)利用fiddler的断点可以完成一些特殊场景下的测试,比如安全测试。
    例如:
    web抓包,先进行fiddler的代理设置,默认端口号是8888,然后浏览器也要确认是否开启了网络代理; 代理设置确认后,浏览器输入要访问的网站,然后fiddler就可以抓取到对应的网站信息了,这里如果不想抓取所有网络资源,可以fiddler的过滤器设置一下只抓取自己网站的。

    21、给你一个项目,你会怎么测试?

    【参考答案】
    按工作流程来回答:
    (1)需求分析
    (2)制定计划
    (3)编写测试用例以及相关文档
    (4)执行测试/回归测试/提交bug
    (5)出具测试报告/上线后进行维护性测试
    按测试方法来说:
    黑盒测试/功能测试:我们重点体现在:测试用例的设计,采用常用的设计方法:等价类划分、边界值、错误推测法、场景法

    22、如何测试一个纸杯?(类似于铅笔、椅子、电梯、雨伞、发红包等!)【高频】

    【参考答案】
    在这里插入图片描述

    23、一天能写多少条用例?能执行多少条用例?发现多少bug? 如何保证测试用例的覆盖率?

    【参考答案】
    一天写多少用例或者是执行多少用例、发现多少bug是根据项目的需求是否明确,项目功能模块是否复杂、程序员的代码质量以及当天的时间安排来确定的。
    举例说明:我最近测试的一个XXXX功能,由于是功能升级,所以我们一天就写完用例了,只重点关注XXXX这一块的功能,大概写了200多条用例,执行我们用了3天的时间,bug一共大约是80多个。
    如果问:bug这么少?—直接回答,可能是我们程序员的需求分析做的好,功能代码写的六;
    保证用例覆盖率的话,首先自己在编写测试用例的时候,尽量覆盖所有的功能+功能业务,采用合理的用例设计方法去包含所有的正面、反面的测试点,然后我们会开展测试用例评审会议,开发测试产品一起讨论,进一步保证用例已全部覆盖所有的需求功能;测试执行过程中,发现的未被覆盖完整的用例,测试完整后,会进行用例完善。尽量确保下一次用例的覆盖完整。

    24、测试数据你们是怎么做的?怎么在用例里面体现出来?

    【参考答案】
    我理解的测试数据包括测试输入的数据,还有作为待测对象的数据例如报表记录这种数据。
    测试输入的数据是自己准备的,有难度的才叫开发帮忙,比如设计到数据库加密处理这种数据。举个例子说明:最近测试的一个XXXX功能,我们需要提前准备好用户数据,用户的登录信息,用户的账户余额准备,以及XXXX。这些都是我们自己通过后台以及结合数据库做的测试数据。

    25、对于复现率不高的bug怎么处理?

    【参考答案】
    答题需覆盖提交+跟踪;示例:
    先在出现问题的环境上尽量重现,保持浏览器环境、出现问题的特定账号等的一致,多次尝试仍然不能重现,也要记录到bug平台,将出现问题的特征步骤尽量描述清楚,附带问题截图及日志截图,注明偶现;
    如果项目时间允许,bug等级高,需要开发协助重现;如果时间不允许,记录到bug平台后续再跟进。多次测试版本验证,如果这个bug仍然复现不了,可能会视严重程度关闭。

    26、请写出内连接,左连接,右连接的关键字,并分别简述其作用。

    【参考答案】
    LEFT JOIN:左连接,会读取左表全部数据,即便右表没有对应数据。左连接从左表产生一套完整的记录,和右表匹配的记录 .如果右边没有匹配记录,右侧结果集字段将为null
    RIGHT JOIN: 右连接,以右表为基础,与LEFT JOIN相反
    INNER JOIN :内连接,或等值连接,可以获取两个表中字段匹配关系的记录。

    27、你们什么时候做接口测试啊?为什么要做接口测试?

    【参考答案】
    一般是前端还没有开发出来,但后端已经开发差不多的时候做。
    开发代码初期,UI和web页面设计还没有到位,提前介入测试更早发现问题,否则底层的一个bug可能会引起外面的很多bug;
    处于接口安全层面考虑,前端进行限制容易绕过,需要同样测试后端的限制;另外测试接口验证数据的加密传输,例如用户密码;

    28、POST和GET 的区别是什么?

    【参考答案】
    (1)GET提交的数据会放在URL之后,以 ?分割URL和传输数据,参数之间用 & 相连;POST方法是把提交的数据放在HTTP包的Body中;
    (2)GET提交的数据大小有限制(注意:HTTP协议规范没有对URL长度进行限制,这个限制是特定的浏览器及服务器对它的限制);POST方法提交的数据没有限制;
    (3)对参数的数据类型,GET只接受ASCII字符;而POST没有限制;
    (4)GET请求参数会被完整保留在浏览器历史记录里;而POST中的参数不会被保留;
    (5)GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息;

    29、测试报告包括哪些内容?测试报告交付文档有哪些?你认为测试报告的侧重点是什么?

    【参考答案】
    测试报告中主要包括本次测试记录,像测试范围、测试开始结束时间、测试人员、用例覆盖、执行通过率;还有bug统计及分析,总体bug汇总、bug不同维度的统计分析等;最后还有测试结论;
    交付物主要是测试用例、提交的bug、测试报告;
    侧重点我认为是bug的结果分析以及测试结论。

    30、测试过程中用过哪些测试工具?怎么使用的?

    【参考答案】
    自己会用的工具:Jmeter、postman、fiddler等。jmeter简单压力测试、接口测试;postman接口测试;fiddler抓包工具;
    举例子简述如何操作:用的比较多的是Jmeter,我们一般用来测试接口。比如说以前测试过XXXX接口,首先创建一个线程组,添加一个http类型的请求,把url以及参数都填写到http请求界面,然后再添加一个查看结果树,方便我们自己查看http请求以及返回结果。根据接口测试用例来一一测试接口,并把发现的bug提交到缺陷管理平台上面。

    31、在平时测试工作中你是如何保障测试的质量的 ?

    【参考答案】
    (1)从需求阶段开始,先理清楚产品的大致功能及功能模块的联系,进而再去熟悉需求细节,把需求不明确的部分及时跟产品进行沟通;
    (2)需求确定后,时间紧张的话,按功能模块去整理测试点,整理过程中也会参考同行业的产品去进去测试点设计;整理完成后,测试内部会进行测试点的评审,进而保证对于需求覆盖的完整性;
    (3)测试执行过程中,注意bug格式规范,提交详细有用的bug信息,便于开发解决问题;且做好bug跟踪。碰到测试点覆盖不到但出现bug的地方,都做好文档总结;
    (4)每天发送日报汇报进度安排,便于项目管理跟踪——项目结束后进行项目总结,便于下次项目测试;

    32、有做过安全测试吗?

    【参考答案】
    没有做过规范化的安全测试,拿我们项目来说,安全测试主要是对用户登录的校验、密码加密;充值、提现必须是绑定手机号的短信验证码校验;所有XXXX操作必须是实名认证为前提的,做压力测试的时候如果同一个ip地址的请求过多,网站会判断为恶意攻击,打入黑名单。

    33、你每天的工作内容是什么?你平常都会看一些什么网站?

    【参考答案】
    如果是项目期间,一般都会通过公司邮件发布测试任务,然后每天基本的工作内容就是进行测试,下班之前会提交工作日报,包括今天测试了什么项目,测试进度,测试出的问题等;如果是非项目时间,会进行一些文档的整理,比如说测试用例的完善;或者是自我技术提升的学习;
    可以讲一些技术博客,技术论坛等;比如CSDN、博客园;千万不要说什么视频网站、天猫淘宝、王者荣耀之类的,要考虑面试官问这个问题的用意!

    34、为什么要转行到测试行业呢?如果是开发转测试请回答:为什么开发转测试?开发转测试有什么优势或技能?【高频】

    【参考答案】
    (1)为什么换行?
    可以说自己所在行业呆了不短的时间了,薪资涨幅,职场晋升都比较难;
    刚好身边有亲戚(表哥/表姐/堂哥/堂姐/发小)之前是做开发/测试的,行业薪资待遇都不错;
    然后就带着我学习了些测试入门的东西,推荐我去找了工作,就这么转行进来的。
    (2)开发转测试:
    ①对软件测试的未来看好》》这样既说明你很了解行业发展,也很有规划和选择;
    ②开发的要求是深度,测试的要求是广度,所以测试可以让自己知识涉猎更加广泛一点;
    ③ 具有开发经验,Linux系统熟悉,对SQL熟悉,对软件测试会有相当大的帮助,更能胜任软件测试工作;
    ④做过开发,逻辑思维能力强;
    ⑤对软件内部实现、功能需求、功能实现了解更深入,能根据自己的经验分析,哪里容易出错,快速定位找出bug出现的地方,更有针对性。
    ⑥会代码,更适合做自动化测试。
    ⑦自身性格特点》》很细致很有条理,很擅长找bug,很擅长沟通。

    35、能否说一下上家公司离职原因?【高频】

    【参考答案】
    目前所在公司业务比较少,平常测试比较闲,想多充实下自己,在技术上再多历练提升下自己。换城市的可以说,因为离家近想在城市稳定下来或者说还年轻,想多在沿海打拼。
    以下是忌讳和注意的地方:
    (1)最重要的是:让HR小姐姐相信,你在过往的单位的“离职原因”在此家公司里不存在;
    (2)避免把“离职原因”说得太详细、太具体;
    (3)不能掺杂主观的负面感受,如“太辛苦”、“人际关系复杂”、“管理太混乱”、“公司不重视人才”、“公司排斥我们XX的员工”等;
    (4)但也不能躲闪、回避,如“想换换环境”、“个人原因”等;
    (5)不能涉及自己负面的人格特征,如不诚实、懒惰、缺乏责任感、不随和等;
    (6)尽量使解释的理由为个人形象添彩;
    给个总结,如何回答HR这个为何离职的问题:给人积极向上的感觉、给人看到你会长期在这边工作的感觉;

    36、你对加班的看法?对996的看法?

    【参考答案】
    之前公司在项目紧急的时候,也有加班情况,所以加班对我来说没问题,能适应。
    虽然我之前工作环境不是996环境,但项目紧急情况下也会有加班;
    所以适当的加班强度对我来没问题。996毕竟我没经历过,但如果咱们公司是996,我也愿意尝试,去适应。

    37、你可以评价一下你的上级吗?

    【参考答案】
    不要说上级不好的话。可以简单评论下,老大脾气很好之类的,也不要多说。

    38、你的职业规划?

    【参考答案】
    大部分人回答的很笼统。就说我想往性能、我想往自动化、我想往白盒建议从1年计划、2年计划、3年计划、5年计划分别去好好思考,比如技能掌握程度(包括主流工具、代码语言等掌握),业务掌握程度细节考虑;

    39、你还有什么问题想问吗?【高频】

    【参考答案】
    企业不喜欢求职者问个人福利之类的问题!不要问薪资待遇等,最好体现出你对学习的热情和对公司的忠诚度以及你的上进心。
    例如:我们的项目团队人数是多少?测试多少开发多少?目前做的项目是什么?等不要主动问对方公司有无培训?!
    参考答案: 您担任的职位是?公司现在的规模是什么样的?有多少人?项目在公司的地位?项目目前的状况,发布了几个版本,以后的计划?我如果入职的话,以后从事的是哪一块的工作?
    如果面试情况不好,可以直接问刚刚没回答的某一个问题,请教面试官。反例:反套路(动辄上升渠道和培训机会),没问题(缺乏思路和主动能力)。不要问薪资待遇福利(HR问)福利待遇在人事沟通的时候再问,不适合面试的时候问。
    目的:考察主动思考能力,对公司职位的青睐性。原则:一定要问,但是不要问多(1-3个),体现自己对这份工作的热情。比如:团队现状,项目现状;主要业务,对于公司,职位,感兴趣的技术咨询;

    40、是否做过性能测试?你对性能测试了解哪些?

    【参考答案】
    有简单的接触过。采用的工具是Jmeter,进行轻量级的压力测试。
    (1)确定好压力测试的功能模块,首先利用JMETER录制脚本,然后对脚本进行优化;
    (2)对一些测试数据进行参数化,利用CSV导入存在txt文档里面的数据;
    (3)设计测试场景;
    (4)执行压力测试;
    (5)查看压力测试结果,并对数据进行分析,主要考虑错误率、吞吐量、平均等待时间这些;
    (6)出压力测试报告;

    41、是否了解python自动化,如果了解,请简单介绍你用的工具或框架?

    【参考答案】
    对自动化是有所了解的;
    自己会用selenium做web自动化测试、用appium做app自动化测试、用uiautomation做windows端自动化;

    42、用python如何实现接口自动化测试?

    (1)安装requests库 pip install requests;
    (2)根据接口文档,使用python编写接口请求;
    (3)根据测试方法,编写正常、异常测试用例;

    展开全文
  • 分享方式:免费
  • 测试工程师校招面试题库 涵盖面试技巧及java、c++、Python、Shell等相关技术知识!
  • 总结测试工程师面试题(含答案)

    万次阅读 多人点赞 2021-08-13 16:18:18
    2)、测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围(来自需求文档),进度安排,人力物力的分配,整体测试策略的制定。风险评估与规避措施有一个制定。 3)、...

    一起加油哈

    软件的生命周期(基础)

    计划阶段-〉需求分析-〉设计阶段-〉编码->测试->运行与维护

    测试流程有啥(还是基础)

    1)、测试需求分析阶段:阅读需求,理解需求,主要就是对业务的学习,分析需求点,参与需求评审会议。
    2)、测试计划阶段:主要任务就是编写测试计划,参考软件需求规格说明书,项目总体计划,内容包括测试范围(来自需求文档),进度安排,人力物力的分配,整体测试策略的制定。风险评估与规避措施有一个制定。
    3)、测试设计阶段:主要是编写测试用例,会参考需求文档(原型图),概要设计,详细设计等文档,用例编写完成之后会进行评审。
    4)、测试执行阶段:搭建环境,执行冒烟测试(预测试)-然后进入正式测试,bug管理直到测试结束。
    5)、测试评估阶段:出测试报告,确认是否可以上线。

    项目中的测试流程(项目经历)

    需求评审(开发人员,产品经理,测试人员,项目经理进行)---需求确定(需求文档及原型图版本确定);

    开发设计文档(开发人员在开始写代码前就能输出设计文档:开发计划、架构设计、数据库设计、接口文档);

    测试计划、策略确定,编写测试用例---测试计划、用例评审;

    接到测试版本后执行测试用例(补充维护用例);

    提交bug---开发人员修改;

    回归测试(可能又会发现新问题,再按流程开始跑)

    验收测试后编写各项报告。

    测试用例设计方法(写没写过用例)

    白盒测试:逻辑覆盖、循环覆盖、基本路径覆盖

    黑盒测试:边界值分析法、等价类划分、错误猜测法、因果图法、状态图法、测试大纲法、随机测试、场景法(老司机靠脑补大法

    软件测试分为几个阶段 各阶段的测试策略和要求(又是基础)

    测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段

    单元测试:是针对软件设计的最小单位(对于功能测试就是模块)

    集成测试:是将模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。

    系统测试:是在集成测试通过后进行的,目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。

    验收测试:以需求阶段的《需求规格说明书》为验收标准,测试时模拟实际用户的运行环境

    bug描述与周期(对--基础)

    1、bug标题要简洁明了,重心明确

    2、要写明问题出现的前提条件

    3、操作过程要按步骤写清楚

    4、要写实际效果和预期效果

    5、要标明bug出现的概率

    6、提供必要的截图和日志,比较复杂的操作步骤提供视频

    7、bug等级要分好类,致命性bug、严重bug、一般性bug、建设性意见

    8、出现bug的软件版本号

    9、bug出现的模块

    发现》提交》指派》研发确认》研发修复》回归验证》是否通过验证》关闭

    测试结束的标准(emmmm)

    1、用例全部测试。

    2、覆盖率达到标准。

    3、缺陷率达到标准。

    4、其他指标达到质量标准

    你在测试中发现了一个bug,但是开发认为这不是一个bug,你应该怎样解决(坑爹的沟通能力)

    1、将问题提交到缺陷管理库里面进行备案。

    2、要获取判断的依据和标准:

    3、根据需求说明书、产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是否确认的直接依据;

    4、如果没有文档依据,可以根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;

    5、与设计人员、开发人员和客户代表等相关人员探讨,确认是否是缺陷;

    最后、抛给领导等结果~

    快速区分bug来源以及常见状态码(12345)

    哥,咱们一起看报文,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对;请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题,状态码如下:

    状态码 原因短语
    1XX Informational (信息性状态码)接收的请求正在处理  
    2XX    Success (成功状态码)请求正常处理完毕  
    3XX    Redirection (重定向状态码)需要进行附加操作以完成请求
    4XX    Client Error(客户端错误状态码)服务器无法处理请求
    5XX    Server Error (服务器错误状态码)服务器处理请求出错  

     http与https区别(加密传输)

    http协议和https协议的区别:传输信息安全性不同、连接方式不同、端口不同、证书zhuan申请方式不同、传输信息安全性不同

    1、http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息;

    2、https协议:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。

    二、连接方式不同

    1、http协议:http的连接很简单,是无状态的;

    2、https协议:是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。

    三、端口不同
    http协议:使用的端口是80;       https协议:使用的端口是443。

    四、证书申请方式不同

    http协议:免费申请            https协议:需要到ca申请证书,一般免费证书很少,需要交费

     get和post的区别(更详细的在后面的文章中,其实问put更好)

    a、GET请求在URL中传送的参数是有长度限制的,而POST没有

    b、GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

    c、GET参数通过URL传递,POST放在Request body中。

    d、GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

    e、GET请求只能进行url编码,而POST支持多种编码方式。

    f、GET请求会被浏览器主动cache,而POST不会,除非手动设置。

    g、GET产生的URL地址可以被Bookmark,而POST不可以。

    h、GET在浏览器回退时是无害的,而POST会再次提交请求。 

    Alpha测试与beta的区别(基础++)

    Alpha测试在系统开发接近完成时对应用系统的测试;测试后仍然会有少量的设计变更。这种测试一般由最终用户或其它人员完成,不能由程序或测试员完成。由一个或多个用户在开发环境下进行测试。

    Beta测试当开发和测试根本完成时所做的测试,最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其它人员完成,不能由程序员或测试员完成。由一个或多个用户在用户实际环境下进行而是。 

     常用的测试工具(可以学学~)

    (fiddle、jmeter、postman、roadrunner、selenium、appium、jenkins、git、svn、禅道、xss平台、mysql、monkey等)

    fiddle:常用抓包工具,使用方式都是万变不离其宗和jmeter代理服务器一样(详细在下面

    jmeter:比较强大的压测工具,我写了个专栏讲解,感兴趣可以看一下https://blog.csdn.net/weixin_46658581/category_11228583.html?spm=1001.2014.3001.5482

    postman:最简单的接口测试工具,个人觉得很一般...推荐jmeter-.-

    monkey:瞎几把点系列 https://blog.csdn.net/weixin_46658581/category_11265713.html?spm=1001.2014.3001.5482

    工具这东西不是一两句说的清的,后面我会慢慢完善编辑专栏进行分析哈~~~

    接口测试常见问题(emmm基础)

    1、通过性验证,说白了就是传递正确的参数,是否返回正常的结果

    2、参数组合,因为参数有必传和非必传,参数的类型和长度,以及传递时可能业务上的一些限制,所以在设计用例时,就要排列组合这些情况,保证所有情况都能覆盖到

    3、接口的安全性,这个又分为几种情况:

    1)绕过验证,比如提交订单时,在传递商品价格参数时,修改商品价格,就要看后端有没有验证了。或者我支付时,抓个包将订单金额一改,如果能以我改后的金额支付,那这个借口就有问题了。

    2)绕过身份验证,就是某个功能只有有特殊权限的用户才能操作,那我传递一个普通的用户,是不是也能操作呢

    3)参数是否加密,这个关系到一些账户的安全,比如我们在登录一些网站时,它要将我们的登录信息进行加密,如果不加密我们的信息就会暴露,危害性极大。

    4) 密码安全规则,设置密码时复杂程度的校验。

    依赖性接口测试:上下游接口依赖性(+++1)

    用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数

    依赖于第三方数据的接口如何进行测试最正确的回答是mock,当然我们简单点去搞也一

    1、获取上一个接口的返回值

    2、将返回值设置成环境变量或者全局变量

    3、设置下一个接口的参数形式

    依赖于登录的接口如何处理?

    登录接口依赖token的,可以先登录后,token存到一个yaml或者json或者ini的配置文件里面
    后面所有的请求去拿这个数据就可以全局使用了,如果是cookies的参数,可以用session自动关联

    接口测试用例的举例:登录

    参数是否必填、参数间是否存在关联、参数取值范围 业务规则

    phoneNumber和password参数正确,登陆成功

    phoneNumber参数正确,password类型不为String, 登陆失败

    phoneNumber参数正确,password参数缺失, 登陆失败

    password参数正确,phoneNumber超过11位,登陆失败

    password参数正确,phoneNumber不为String,登陆失败

    password参数正确,phoneNumber参数缺失,登陆失败

    用户未注册,返回登陆失败 密码错误,返回登陆失败
    参数故意传入空字符串或null, 可看是否有进行处理

    常见面试中坑爹用例设计:如何测试一个纸杯=.=(有时候是花盆、桌子)

    功能度:用水杯装水看漏不漏;水能不能被喝到

    安全性:杯子有没有毒或细菌

    可靠性:杯子从不同高度落下的损坏程度

    可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用

    兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等

    易用性:杯子是否烫手、是否有防滑措施、是否方便饮用

    用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述

    疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等

    压力测试:用根针并在针上面不断加重量,看压强多大时会穿透

    APP测试哪些方面(对没错还是基础) 

    权限测试、安装、运行、卸载测试、UI测试、功能测试、性能测试、中断测试、兼容测试、安全测试、回归测试、升级更新测试、用户体验测试

    fiddler抓包使用(没错,有幸被一个步骤一个步骤的问过)

    web:打开fiddler工具后,再去浏览器打开网页,fiddler会自动抓包,抓取请求响应数据。他会自动设置为本地代理,还可以设置抓取https协议的包。【亲~浏览器F12了解下】

    手机:在手机上的网络设置里,设置代理服务器。就是把fiddler作为代理服务器(fiddler自身要设置为支持远程连接),手机连接fiddler工具,所以手机代理服务器设置页面要输入打开fiddler工具的电脑的ip地址和fiddler的端口号8888,好让手机能连接fiddler,通过fiddler来访问互联网。

    什么是性能测试=.=(千言万语emmm)

    系统在一定的压力情况下,查看cpu,内存,磁盘,网络带宽,TPS、响应时间、并发用户数、等各项指标,通过模拟生产运行的业务压力量和使用场景组合,测试系统的性能是否满足生产性能要求,就是在特定的运行条件下验证系统的能力状况。

    什么是负载测试(无力反驳)

    负载测试主要是考察软件系统在既定负载下的性能表现。就是站在用户的角度去观察一定条件下软件系统的性能表现。期望结果是用户的性能指标需求得到满足。性能指标一般体现为响应时间、并发量等。

    测试环境搭建(我怕麻烦简单bb下)

    1、通过winscp上传tomcat,MySQL安装包,JDK(Java开发环境工具包)到linux下

    2、利用tar -zxvf解压缩包命令对jdk,tomcat,mysql进行解包、安装,再配置jdk环境变量。

    3、把war包(web程序)放到tomcate指定目录webapps下,再启动服务器即可。(输入startup.sh的路径,直接回车即可运行)

    常用的Linux命令

    常用操作命令

    shutdown -h now 立刻关机 
    shutdown -h 5   5分钟后关
    poweroff        立刻关机
    shutdown -r now 立刻重启
    shutdown -r 5   5分钟后重启
    reboot 立刻重启
    cd / 切换到根目录cd 
    /usr 切换到根目录下的usr目录
    cd …/ 切换到上一级目录 或  cd … cd ~ 切换到home目录
    cd - 切换到上次访问的目录
    ls 查看当前目录下的所有目录和文件
    ls -a查看当前目录下的所有目录和文件(包括隐藏的文件)
    ls -l 列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
    ls / 查看指定目录下的所有目录和文件
    查找命令
    grep    命令是一种强大的文本搜索工具
    find    命令在目录结构中搜索文件,并对搜索结果执行指定的作。
    locate  让使用者可以很快速的搜寻某个路径。
    whereis 命令是定位可执行文件、源代码文件、帮助文件在文件系统中的位置。
    which   命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
    命令格式
    crontab [-u user] file
    crontab [-u user] [ -e | -l | -r ]
    参数说明:
    -u user:用来设定某个用户的crontab服务
    file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。
    -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
    -l:显示某个用户的crontab文件内容。如果不指定用户,则表示显示当前用户的crontab文件内容。
    -r:删除定时任务配置,从/var/spool/cron目录中删除某个用的crontab
    文件,如果不指定用户,则默认删除当前用户的crontab文件。
    命令:pwd 查看当前目录路径
    命令:ps -ef 查看所有正在运行的进程
    命令:kill pid 或者 kill -9 pid(强制杀死进程) pid:进程号
    ifconfig:查看网卡信息
    命令:ifconfig 或 ifconfig | more
    ping:查看与某台机器的连接情况
    命令:ping ip
    netstat -an:查看当前系统端口
    命令:netstat -an
    搜索指定端口
    命令:netstat -an | grep 8080

    目录操作【增,删,改,查】

    【增】 mkdir
    mkdir aaa      在当前目录下创建一个名为aaa的目录
    mkdir /usr/aaa 在指定目录下创建一个名为aaa的目录
    【删】rm
    删除文件:
    rm 文件    删除当前目录下的文件
    rm -f 文件 删除当前目录的的文件(不询问)
    删除目录:
    rm -r aaa  递归删除当前目录下的aaa目录
    rm -rf aaa 递归删除当前目录下的aaa目录(不询问)
    全部删除:
    rm -rf *   将当前目录下的所有目录和文件全部删除
    rm -rf /* 【慎用!慎用!慎用!】将根目录下的所有文件全部删除
    注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了方便大家的记忆,无论删除任何目录或文件,都直接使用 rm -rf 目录/文件/压缩包
    【改】mv 和 cp
    重命名目录
    命令:mv 当前目录 新目录
    例如:mv aaa bbb 将目录aaa改为bbb
    剪切目录
    命令:mv 目录名称 目录的新位置(将/usr/tmp目录下的aaa目录剪切到/usr目录下面 mv/usr/tmp/aaa/usr)
    拷贝目录
    命令:cp -r 目录名称 目录拷贝的目标位置 -r代表递归
    (将/usr/tmp目录下的aaa目录复制到 /usr目录下面 cp /usr/tmp/aaa /usr)
    【查】find
    命令:find 目录 参数 文件名称
    示例:find /usr/tmp -name ‘a*’ 查找/usr/tmp目录下的所有以a开头的目录或文件

    文件操作【增,删,改,查】

    【增】touch
    touch 文件名(示例:在当前目录创建一个名为aa.txt的文件 touch aa.txt)
    【删】 rm
    rm -rf 文件名
    【改】 vi或vim
    vi编辑器的3种模式
    基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
    1、command mode 命令行模式下的常用命令:
    【1】控制光标移动: ↑,↓,j
    【2】删除当前行: dd
    【3】查找:/字符
    【4】进入编辑模式: i o a
    【5】进入底行模式: :
    
    2、Insert mode编辑模式
    编辑模式下常用命令:
    【1】ESC 退出编辑模式到命令行模式;
    
    3、last line mode底行模式下常用命令:
    【1】退出编辑: :q
    【2】强制退出: :q!
    【3】保存并退出: :wq
    
    【查】文件的查看命令:cat/more/less/tail
    cat:看最后一屏 cat sudo.conf(使用cat查看/etc/sudo.conf文件,只能显示最后一屏内容)
    
    more:百分比显示more sudo.conf(使用more查看/etc/sudo.conf文件,可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看)
    
    less:翻页查看less sudo.conf(使用less查看/etc/sudo.conf文件,可以使用键盘上的PgUp和PgDn向上 和向下翻页,q结束查看)
    
    tail:指定行数或者动态查看tail -10 sudo.conf(使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束)
    
    
    打包和压缩
    Windows的压缩文件的扩展名 .zip/.rar
    linux中的打包文件:aa.tar
    linux中的压缩文件:bb.gz
    linux中打包并压缩的文件:.tar.gz
    Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的。
    命令:tar -zcvf 打包压缩后的文件名 要打包的文件,其中:z:调用gzip压缩命令进行压缩
    c:打包文件
    v:显示运行过程
    f:指定文件名
    示例:打包并压缩/usr/tmp 下的所有文件 压缩后的压缩包指定名称为xxx.tar
    tar -zcvf ab.tar aa.txt bb.txt
    或:tar -zcvf ab.tar *
    解压
    命令:tar [-zxvf] 压缩文件
    其中:x:代表解压
    示例:将/usr/tmp 下的ab.tar解压到当前目录下
    tar -zxvf ab.tar
    示例:将/usr/tmp 下的ab.tar解压到根目录/usr下
    tar -zxvf ab.tar -C /usr------C代表指定解压的位置
    

    常用的mysql命令

    【增】insert
    insert into 表名 values(值1,值2,…);
    insert into 表名(字段1,字段2…) values(值1,值2,…);(较常用)
    insert into 表名(字段1,字段2…) values(值1,值2,…),(值1,值2,…),(值1,值2,…);
    
    【删】delete
    delete from 表名 where 条件 
    
    【改(更新)】update
    update 表名 set字段1 = 值1, 字段2 = 值2 where 条件
    
    重要*【查】select
    select * from 表名               查询表中的所有数据 
    select 字段 from 表名            指定数据查询 
    select 字段 from 表名 where 条件  根据条件查询出来的数据 
    
    where 条件后面跟的条件 
    关系:>,<,>=,<=,!=
    逻辑:or, and
    区间:id between 4 and 6 ;闭区间,包含边界
    
    【排序】
    select 字段 from 表 order by 字段 排序关键词(desc | asc)
    排序关键词 desc 降序 asc 升序(默认)
    通过字段来排序 :select * from star orser by money desc, age asc;
    多字段排序 :select 字段 from 表 order by 字段1 desc |asc,…字段n desc| asc;
    
    【常用的统计函数】 sum,avg,count,max,min
    

    多表联合查询

    
    1.内连接
    隐式内连接 select username,name from user,goods where user,gid=gods,gid;
    显示内连接 select username,from user inner join goods on user.gid=goods.gid;
              select * from user left join goods on user.gid=goods.gid;
    2.外链接 左/右连接
    select * from user where gid in(select gid from goods);
    select * from user right jOin goods on user.gid=goods.gid;
    
    3.数据联合查询
    select * from user left join goods on user.gid=goods.gid union select * from user right join goods on user.gid=goods.gid;
    
    4.两个表同时更新
    update user u, goods g set u.gid=12,g.price=1 where u.id=2 and u.gid=g.gid;

    子句

    说明

    是否必须使用

    select

    要返回的列或表示式

    form

    从中检索数据的表

    仅在从表选择数据时使用

    where

    行级过滤

    group by

    分组说明

    仅在按组计算聚集时使用

    having

    组级过滤

    order by

    输出排序顺序

    limit

    要检索的行数

     monkey

    命令:adb shell monkey +命令参数
    所有的参数都需要放在monkey和设置的次数之间;参数的顺序可以调整,若带了-p ,-p必须放在monkey之后,参数必须在-p和次数之间
    
    2.monkey基础命令
    adb shell monkey -p 包名 -v -s seed值 压测次数
    
    参数-p:
    此命令用于指定要测试的包,若不指定则在整个系统中执行
    
    a)指定一个包执行10次:adb shell monkey -p 包名 10
    
    如下出现事件执行次数和所耗时间,则算是执行成功;
    
    b)指定多个包执行10次:adb shell monkey -p 包名 –p 包名 10
    
    参数 -v:
    用于指定反馈日志的详细程度级别(共3个级别)
    
    1.Level 0: adb shell monkey -p 包名 -v 10
    
    默认级别,仅提供启动、测试完成和最终结果等少量信息
    
    2.Level 1: adb shell monkey -p 包名 -v -v 10
    
    提供较为详细的日志,包括每个发送到Activity的事件信息
    
    3.Level 2: adb shell monkey -p 包名 -v -v -v 10
    
    提供最详细的日志,包括了测试中选中/未选中的Activity信息
    
    参数 -s:
    用于指定伪随机数生成器的seed值
    
    命令:adb shell monkey -p 包名 –s seed值 执行次数
    
    作用:如果seed值相同,则两次Monkey测试所产生的事件序列也相同的。
    
    示例:
    
    测试1:adb shell monkey -p com.qq –s 15888 100
    
    测试2:adb shell monkey -p com.qq –s 15888 100
    
    说明:
    
    两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。(也就是说,重复执行上次的随机操作)
    
    操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;
    
    运行:
    >>不间断操作500次              adb shell monkey -p 包名 -v 500  
    
    >>每个操作间隔500ms,共执行100次             adb shell  monkey -p 包名  -v-v --throttle  500 100
    
    >>每个操作间隔100ms,共执行1000次 ,其中点击事件占比50%,轨迹50%                 adb shell monkey  -p  包名  -v-v --pct-touch  50  --pct-trackball 50 --throttle 100 1000
    
    >>日志重定向到桌面文件夹                               adb shell monkey  -p  包名  -v-v --pct-touch  50  --pct-trackball 50 --throttle 100 1000>C:\Users\xyp\Desktop\Android脚本\1.log
    
    >>每个操作间隔500ms、崩溃、超时、许可错误继续执行                       adb shell  monkey -p  包名   --throttle  500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v-v-v  1000000>C:\Users\xyp\Desktop\Android脚本\1.log
    
    停止monkey测试           
    重新打开一个cmd窗口>>进入adb shell>>ps | grep monkey查找monkey进程>>kill  进程号结束monkey
    
    日志分析
    1. 查找出差步骤:
    a)找到monkey里哪个地方出错
    
    查看Monkey执行的是哪一个Activity,在switch后面找,两个swtich之间如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。
    
    b)查看Monkey里面出错前的一些事件动作,手动执行该动作
    
    >>Sleeping for XX milliseconds这是执行Monkey测试时,throttle设定的间隔时间,每出现一次,就代表一个事件
    
    >>Sending XX 就是代表一个操作,如下图的两个操作 应该就是一个点击事件。
    
    c)若以上步骤还不能找出,则可以使用之前一样的seed,再执行monkey命令一遍,便于复现
    
    2.测试结果分析:
    >>程序无响应,ANR问题:在日志中搜索“ANR”
    
    >>崩溃问题:在日志中搜索“CRASH”
    
    >>其他问题:在日志中搜索”Exception”
    
    monkey说明
    --throttle   时间间隔
    
    --ignore-crashes    忽略崩溃
    
    --ignore-timeouts  忽略超时
    
    --ignore-security-exceptions   忽略许可错误
    
    --ignore-native-crashes  忽略本地崩溃
    
    --monitor-native-crashes   监控本地崩溃
    
    --pct-touch  触摸、点击
    
    --pct-motion 调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)
    
    --pct-trackball  调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
    
    --pct-nav 调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
    
    --pct-majornav 调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
    
    --pct-syskeys 调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
    
    --pct-appswitch 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
    
    --pct-flip 调整“键盘翻转”事件的百分比。
    
    --pct-anyevent 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等
    
    注意:各事件类型的百分比总数不能超过100%
    

    请看更多文章哦~~~ 

     

     

    展开全文
  • “自动化测试”,一个耳熟能详的软件测试行业术语、一个绝大部分测试界人员的奋斗目标、一个听上去就很有感觉的名词、一个甚至能牵动未来测试界发展水平快慢的技术。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,439
精华内容 24,575
关键字:

测试工程师面试

友情链接: Lang.rar