自我介绍+项目介绍
面试官你好,我叫xxx,,今年21岁,25年应届生,软件工程专业。我的上一个项目经历是在东莞一家青软科技创新科技公司里做的一个项目,是一个仓库管理系统,我主要负责测试工作,然后这款软件主要是管理和监控仓库内货物的实时状态的一款软件,主要的模块有出库管理、入库管理、库存管理、任务调度、订单管理、退货管理、客户和供应商管理等模块,我主要负责出入库和库存管理模块,主要是做功能测试、接口测试和部分的自动化测试。主要熟悉的技术栈有linux的基础和进阶指令以及mysql的基础与调优方案,能够使用jmeter做接口测试,能够独立自主的搭建接口自动化测试的框架,以及对页面元素的定位和断言,还能够对web漏洞做分析以及提供应对方案。然后我非常热爱软件测试这个行业,并且自己也在不断的学习,然后非常感谢贵公司能给我一个面试的机会。我的自我介绍完毕!
针对的项目提问:
1、压测流程?
测试计划中添加线程组(线程数模拟用户数量、设置所有用户启动所用时间以及每个用户循环次数)还有定时器对接口做压测,对接口做一个阶梯型的加压,然后再添加监听器查看测试结果
2、出入库模块、库存模块是如何去测的?
首先对UI页面进行诊断,UI页面是否有错别字、颜色是否符合原型设计图(交互图)、按钮能不能使用、排版是否合理、让自己作为一个用户的角度去体验这款软件的适用性。然后通过功能测试去对增删改查操作进行测试,验证功能是否正常。再然后通过接口测试去测试数据的存储、流转情况是否正常、数据库里的数据是否能正常显示在页面上。然后在接口测试和功能测试完成后,自己还会去做自动化任务,搭建一个接口测试框架。
1.1、测试流程
首先产品经理会完成需求文档的编写,召开需求评审会议。我们测试组会根据需求文档编写测试计划,分配任务。然后用xmind提取测试点,设计测试用例,再进行用例评审。用例通过后提取10%优先级最高的测试用例组成冒烟用例让开发自测。百分百通过之后,就可以提测了。然后就是常规的测试流程,执行测试用例,发现bug,提交bug,开发改完之后再进行回归测试,回归测试一般会通过自动化执行,通过jenkins自动运行python脚本,然后没有被自动化覆盖的地方自己手工执行。执行通过后,用jenkins、k8s和docker部署线上项目,完成上线后再跟进一下,看看有没有线上bug
1.2、新项目测试思路
(1)首先熟悉需求文档,熟悉测试的范围和测试侧重点,再召开需求评审会议和测试用例评审会议
(2)定制测试计划,安排好时间线,确定好测试人员的测试任务以及测试数据、环境、工具等,确定测试面,比如接口、兼容性、网络等,确定是否需要做安全、性能测试。
(3)编写测试用例,确定优先级并进行测试、发现bug、提交bug
(4)回归测试,确保新的代码不会影响其它功能
(5)编写测试报告、对测试工作做总结
(6)观察线上问题
1.3、敏捷开发的理解
迭代速度比较快(一周迭代两三次)、增量交付(每个迭代结束后交付一部分可以工作的软件给用户,得到反馈)
1.4、测试时间短时间不够用或者迭代速度快或需要快速上线怎么办(测试左移)
(1)减少一些会议的召开(合并会议),编写完整测试用例简化为测试点
(2)测试过程中产生的bug,优先解决bug中严重的,一些界面小bug可以留在下个迭代上
(3)把更多时间放在接口测试上(接口测试做好了,主干核心的bug会少很多)
(4)加班
1.5、输入三个值构成三角形,针对以上场景设置测试用例
功能场景:(1)正常输入、异常输入(2)边界值测试(3)等价类测试
接口场景:查看数据是否会存入数据库,如果存入或者与后端交互,就会有接口字段的测试
性能场景:数值过大是否会卡顿、频繁点击是否会卡顿
安全场景:是否sql注入或xss漏洞
兼容性场景:不同系统、浏览器等等条件
2.1、测试报告的编写
包含概述、时间、地点、人员、环境描述、测试对象、覆盖率统计、测试过程评估、遗留问题、测试总结等等
3.1、出现线上bug怎么处理
首先按照用户反馈的操作步骤、版本操作一遍,确认问题是否存在,是否是用户自己操作失误的问题
确认问题存在后,在最新的测试环境中复现一下线上的bug,bug还是存在的话就要做进一步的问题排查
看是否是本次迭代导致的bug,还是用例漏测导致的bug、还是其它问题进一步复现bug
然后再在禅道上上传bug,bug修复后,重新回归测试,确保问题解决后反馈给用户,最后再总结这次问题所在,进行复盘
4.1、linux常见命令
ls、touch、mkdir、cp、mv
tail可以结合-f 实时查看日志、ps一般结合grep查找进程、netstat结合grep根据服务查找端口或者反过来、tar压缩和解压工具、rz命令上传文件
5.1、数据库的使用
经常使用的是mysql数据库、使用最多的情况是增删查改、多表联查、内外连接、创建存储、sql调优、创建索引
5.2、制造测试数据是在什么库里面
测试环境的库,线上环境没有权限访问
5.3、多表联查怎么查
用where关键字即可,比如where A.id=S.id,或者left join 、right join左连接右连接
5.4、性能瓶颈优化
在对接口进行压测时,大量的查询导致接口的响应时间很长。像这样的常见一般是慢查询导致的。这时需要进行索引优化或者sql调优或者表结构优化等等
6.1、postman接口关联
postman里面有一个后置操作、发送请求后可以对返回的数据进行操作,接口关联的话就通过json或正则提取的方式提取中间变量,提取之后再将中间变量设置为全局变量,这样便可以在另一个接口使用这个变量
7.1、pom模型
核心思想就是将页面结构抽象出来,将页面结构和功能封装在一个对象中(page页),测试代码(testcase页)通过操作这些对象与页面进行交互,而不是直接操作页面元素,实现元素和操作分离
提高代码复用性和可维护性、降低维护成本、代码可扩展性
框架结构(封装思路):基础测试类(basepage)提供一些常用的页面元素操作的方法、页面对象类(objectpage)封装页面的元素以及操作步骤、测试用例类(testcase)通过操作页面对象类,执行测试用例,(datacase)封装测试数据,(log)日志报告、(common)存放工具类、如果是pytest框架,那么还有pytest.ini文件和requirements配置文件
7.2、常用装饰器
pytest.mark.parametrize(数据驱动)、pytest.fixture(前后置)、pytest.mark.skip(跳过测试用例)、pytest.mark.run(测试用例执行顺序)等
7.3、接口自动化框架
使用request+pytest+allure+yaml+logging这样的一个框架,具体结构就是首先有一个(testcase包)存放接口测试用例、一个(common包)存放工具类、(logs包)存放日志文件、(data包)存放测试数据、(reports包)存放测试报告、config.yaml文件存放常量链接、pytest.ini文件存放配置信息等等
7.4、使用代码进行接口关联
不封装的话可以直接将中间变量设置为全局变量,封装的话需要编写读取和存放中间变量的方法来实现接口关联
7.5、UI自动化断言方式
比较常见的ui自动化断言:文本匹配断言、元素状态断言、元素存在断言、页面跳转断言
7.6、接口自动化断言
在测试工具中(postman):
pm.test("Status code is 200", function () {
pm.response.to.have.status(200);
});
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("tag");
});
最常用的一个判断状态码是否200,还一个判断response中是否包含某个值
在代码中、比如pytest框架中:
则需要封装一个判断断言的方法,断言里面常用的断言有eq断言,先判断status状态码再判断其余的eq断言,还要contains断言,判断是否包含某个值
8.1、定位前后端bug
1、通过bug的范围判断
如果是前端页面上,比如ui和交互、展示出现问题,一般是前端bug
如果是数据处理或存储出现问题,一般是后端bug
2、通过错误提示或日志
如果是f12控制台报错一般是前端bug
如果是linux服务器日志文件报错,一般是后端问题
3、通过接口状态码判断
状态码4开头是前端问题
5是后端问题
3是重定向的问题、
9.1、jenkins的插件
git插件:支持与git版本控制系统的集成、能够触发构建、检出代码
gitee插件:支持与github的集成,通过webhook触发jenkins构建
Email插件:允许配置和发送邮件通知的插件
docker插件:与docker集成,可以在构建过程中使用docker容器运行构建环境或发布到docker仓库等等
9.2、部署测试环境
遗留。
简历外的扩展:
10.1、python列表和元组区别?
可变性、安全性、语法方式
10.2、python字典和列表区别?
读取方式、语法方式、有无序
10.3、常见接口类型和请求方式
restful类型的接口,基于http协议的接口,支持多种数据格式(json)、get post delete
10.4、http协议与https协议区别?
安全性(一个明文传送,一个使用协议认证加密)
端口:http 80 https 443
10.5、tcp和udp区别?
连接性、可靠性、速度和效率
10.6、安全性测试的了解
常见的xss漏洞、csrf漏洞、sql注入、文件上传漏洞
10.7、AWS工具是什么
输入要测试的网址,然后输入账号密码就可以进行自动化测试。快速识别潜在的安全漏洞和暴露的风险。
10.8、性能测试报告
测试范围、需求性能指标、测试环境、测试策略(单接口、多接口)、测试结果、
单场景压测结论(最大并发、最优并发等等)
10.9、深拷贝和浅拷贝
浅拷贝:对于基础类型的属性,拷贝其值,对于引用类型的属性,拷贝其内存地址,原始对象中的引用类型属性发生变化,那么浅拷贝的对象也会发生变化
深拷贝:对于基础类型的属性,拷贝其值,对于引用类型的属性,也是拷贝其值,原始对象发生变化不会影响深拷贝后的对象
10.10、合并列表,字典
列表直接加号、字典直接双星连接。dict3 = {**dict1,**dict2}
自我规划:
问题提问: