1-如何提高测试覆盖率?
1:面向代码覆盖:
功能覆盖:检查与功能相关的所有功能和数据库存储过程。
语句覆盖率:检查每一行代码。
条件覆盖:检查代码中的所有循环和条件。
路径覆盖:在已执行的代码中从起点找到可能的路径。
进入和退出覆盖率:检查从开始到结束执行了多少函数或过程。
2:面向数据覆盖
面向数据的覆盖适用于白盒和黑盒测试,例如边界值、等价划分和组合测试。
3:面向平台覆盖
确保对各种平台(如 Web、桌面和移动端)的测试覆盖。
2-说下自动化测试流程?
需求分析、需求评审——制定测试计划——编写测试用例、用例评审——执行测试用例——Bug发现、处理——回归测试——输出测试报告
3-接口测试你是怎么做的?都发现了哪些问题,详细说下定位分析过程?
随机应变😂例如:1要开发文档;2分析测试点;3编写测试案例同开发(或者QA等其他人员)进行评审;4(测试环境已准备好)利用相关工具软件进行测试。
发现的问题具体因个人经历回答,比如,发现接口不通。服务器返回错误等
4-你们的项目中自动化用例占比是多少?
因人而异,(不可能完全到达100%自动化)可以根据根据接口,UI回答纯接口用例占多少,UI占多少等等
5-说下你对软件测试的理解?
无固定答案
6-熟悉Linux吗?,简单说下几个Linux命令及含义?(或者可能面试官主动提问Linux查询IP的命令,内存CPU使用率等等之类的)
查看磁盘空间:df -h
查看电脑ip:ifconfig
查看端口占用:netstat -anp| grep 端口号
查看哪个端口被哪个进程占用:lsof -i
查找特定程序进程:ps -ef | grep java
创建文件:touch 文件名(test.txt, config.ini……)
搜索文本字符串: grep “待搜索的单词” xxxx.log
浏览文件:less log2013.log
实时监控:tail -F xxx.log | grep “内容”
编辑文件:vi/vim xxx.log
7-说下POST和GET的区别?
1:GET向服务器“获取”数据,POST向服务器“提交”数据。
2:GET相对POST不安全,(GET也可以加Request Body,POST也可以带上URL参数,技术上完全可以。但不一定保证服务器收的到,所以传输角度2个都不安全,想要安全就用https)
3:GET产生一个数据包,POST产生两个数据包(GET请求会将header和data一并发送,服务器响应200,返回数据;POST会先发送header,服务器响应100 continue,浏览器在继续发送data,服务器响应200,返回数据)
并不是所有浏览器都会在POST发送2次包,Firefox只发送1次
4:GET方法发出的请求存储在浏览器历史记录中;POST方法发出的请求不会存储在浏览器历史记录中
5:在GET方法中,只允许使用ASCII字符。POST方法中,任意数据类型都是可以的。
6:GET不能发送大量数据因为请求参数附加到 URL 中(具体因浏览器而议);POST 方法中,由于请求参数附加到正文中,因此可以发送大量数据。
8-网络七层协议是哪7层?TCP与UDP区别?HTTP在哪一层?
自上而下:(7字记忆)应·表·会·传·网·数·物(应用层-表示层-会话层-传输层-网络层-数据链路层
物理层)。
TCP有连接,面向字节流,可靠传输,只能是一对一
UDP无连接,面向报文流,不可靠传输,支持一对多,多对一等
HTTP属于应用层,TCP/UDP在传输层。(IP在网络层)
9-TCP三次握手,四次挥手?
自行百度
Python基础相关
1-谈谈你对Python中装饰器的理解?
Python 的装饰器本质是一个闭包函数(之前面试OPPO的时候面试官说其实就想听到这个答案,可惜我没回答到点子上😅),它接受另一个函数作为其参数,并返回另一个函数。装饰器做用:允许扩展现有函数,而无需对原始函数源代码进行任何修改。
2-Python列表与元祖的区别?
列表可变元祖不可变(也是oppo的面试坑,然后紧接着问可变与不可变的区别是什么?😅)然后我说可变是指对象的内容可变,不可变直对象的内容不可变(面试官说其实他想问的是他们的内存地址变化🤦♂️🤣,麻了)
可变对象 内存地址(对象引用)不变 (eg:l=[1], print(id(l)), l.append(3), print(id(l)), 2次内存地址是没变的)
不可变对象 内存地址(对象引用)可变 (eg: s=1, print(id(s)) s=2, print(id(s)),
2次内存地址是不一样的)
3-生成器,迭代器是什么?有什么区别?
可迭代对象:需要提供 iter()方法
迭代器:任何内部实现了_iter) 和_next)方法的对象都可以称为迭代器
生成器其实是一种特殊的迭代器,内部会自动创建_iter)和_next)这种迭代器更加优雅(它不需要迭代器的类一样写_iter)和_next)方法了),只需要一个yield关键字。 生成器一定是迭代器(反之不成立)