开发转测试,需要哪些必备测试技能?
开发转测试,需要哪些必备测试技能?
随着软件行业的快速发展,测试工程师的角色变得越来越重要。对于有开发背景的工程师来说,转行测试开发是一个很好的选择。本文将详细介绍从开发转测试所需掌握的技能和面试要点,帮助你顺利实现职业转型。
一、为什么从开发转测试
从2019年5月开始,我从一名Java开发工程师转为测试开发工程师。在这个过程中,我深刻体会到测试工程师需要具备更全面的技术能力。随着产品规模的扩大和用例的增多,测试工程师需要掌握自动化测试、服务器部署、网络架构、软件性能、软件安全等多方面的知识。
开发工程师转测试之后可做的内容非常多,测试领域也需要更多有开发背景的人员加入。
二、面试题准备指南
开发基础面试题
Java知识
- List、Set、Map之间的区别
- List:有序且允许元素重复,底层数据结构是数组。
- Set:无序且不允许元素重复,底层数据结构是哈希表。
- Map:键值对形式,键不能重复,值可以重复。
- ArrayList与LinkedList的区别
- ArrayList基于数组实现,支持随机访问,查询速度快。
- LinkedList基于链表实现,不支持随机访问,查询速度慢。
- Hashtable与HashMap的区别
- Hashtable是过时的类,方法是同步的,线程安全但效率较低。
- HashMap不是线程安全的,但效率更高。
Java中++操作符是否线程安全
不是线程安全的,因为涉及到多个指令,可能会出现线程交叉。
int和Integer哪个占用内存更多
Integer是对象,需要存储指针和对象值,占用更多内存。int是基本数据类型,占用空间更少。
Java中sleep方法和wait方法的区别
- sleep()只是暂停当前线程,不会释放锁。
- wait()是条件等待,会释放锁,直到满足条件才能重新获取锁。
解释Java堆空间及GC
Java进程启动时会分配堆空间,用于创建对象。GC(垃圾回收器)负责回收无效对象的内存。
Python知识
Python的八大基本数据类型
int、str、float、list、bool、tuple、dict、set
Python中可变数据类型和不可变数据类型
- 不可变数据类型:数值型、字符串、元组
- 可变数据类型:列表、字典
- Python字典和json字符串相互转化方法
- 字典转json:json.dumps()
- json转字典:json.loads()
- Python中@staticmethod和@classmethod的区别
- @staticmethod装饰的静态方法不需要传递默认参数。
- @classmethod装饰的类方法需要将调用的类传进去。
什么是装饰器
装饰器是一个闭包函数,可以在不修改原函数的情况下扩展其功能。
Python中常见的异常
Exception、AssertionError、FileNotFoundError、AttributeError等。
Python的内存管理机制
- 引用计数机制
- 垃圾回收机制
- 内存池机制
数据库知识
如何消除数据表中code字段的重复行
使用
SELECT DISTINCT code FROM project
内链接、左链接、右链接、全链接的区别
- INNER JOIN:返回两个表的交集
- LEFT JOIN:返回左表所有行和右表满足条件的行
- RIGHT JOIN:返回右表所有行和左表满足条件的行
- FULL JOIN:返回两个表的所有行,不匹配的用NULL填充
- 索引的使用场景
- WHERE条件查询
- JOIN操作
- MIN()或MAX()函数
- ORDER BY排序
HTTP知识
HTTP协议是否安全
HTTP是不安全的,HTTPS通过SSL/TLS协议确保传输安全。
Cookie和Session的区别
- Cookie存储在客户端,存在安全风险
- Session存储在服务器端,安全性较高但占用内存
什么是Socket
Socket是应用层与TCP/IP协议之间的抽象层,用于网络进程通信。
Git知识
- git pull和git fetch的区别
- git pull:拉取并合并远程分支
- git fetch:只拉取远程分支,不合并
如何进行版本回退
使用
git reset --hard HEAD^
GitLab的分支保护和代码审查
在GitLab中设置Protected Branches,控制谁可以合并代码,并进行代码审查。
测试开发面试题
接口测试设计
需要设计合理的测试用例,覆盖各种边界条件和异常情况。
自动化框架的搭建思路
包括用例模块、发送请求、全局配置文件、数据自动采集、读取数据、接口断言、日志记录、测试报告等模块。
测试数据的分类和存储
- 全局数据:写入配置文件
- 一次性消耗数据:从随机函数生成
- 多次读取数据:参数化,放入Excel、JSON或数据库
影响数据流的接口测试
可以采用最后单独处理或连接数据库操作的方式。
测试脚本数据规划
从简单到复杂,逐步增加数据量和覆盖范围。
常用的自动化测试框架
unittest、pytest、postman、jmeter、Selenium、Appium等。
unittest和pytest的对比
pytest通过fixture机制简化了前置和后置操作的编写。
pytest的参数化装饰器
@pytest.mark.parametrize
可以传入多个参数。Postman和Newman的使用
包括变量使用、断言、参数化、测试报告输出等。
Selenium的定位方法
Id、name、link_text、partial_link_text、tag_name、class_name、css_selector、xpath
GUI测试脚本稳定性提升
使用相对路径、WebDriverWait等技术提高脚本的稳定性和执行效率。
扩展问题
安全测试方面
包括XSS、CSRF、SQL注入、web木马、文件上传、账密暴力破解、验证码缺陷、用户权限、端口扫描、服务检测、中间件安全等。
性能测试相关
- 性能测试:通过自动化工具模拟不同负载条件测试性能指标。
- 负载测试:在保持配置不变的情况下测试不同操作条件下的性能行为。
- 压力测试:测试硬件系统是否达到性能目标。
常用性能指标
响应时间、并发用户数、吞吐量、性能计数器、TPS、HPS等。