从开发到测试,你需要掌握哪些必备测试技能?

一、为什么从开发转测试

我从2019年5月开始从一名java开发女程序猿正式转为测试开发工程师,原因除了机缘凑巧之外,当然是因为这个行业对测试工程师的要求已经越来越高,简单做些UI脚本录制和回放的自动化,参考度娘写出框架demo却不知道问题出在哪里的测试人员,已经不能满足企业快速迭代产品,保证产品质量的需求。

当一个产品越来越庞大、用例越来越多,用例如何设置、脚本如何规划、代码结构如何优化,当需求变动时又如何做到高可维护、高健壮性的问题会接踵而来。所以,一名优秀的测试开发工程师是必须具备优秀的代码能力,甚至知识面是需要比普通的开发人员更广的,比如他需要熟悉自动化测试、服务器部署、网络架构、软件性能、软件安全等等方面的知识。

所以开发工程师转测试之后可做的内容非常的多,测试这块领域也需要更多有开发背景的人员加入。

二、前言

背景唠嗑完,我们来说说面试题,由于是开发转测试,首先开发的进阶基础知识是必须要掌握的,面试官也肯定会问(说不定直接是开发组的人面的),接着会问一些功能测试的知识点,但是一般不会多,然后是比较重要的自动化测试部分,做自动化测试框架有很多,每个公司用的也不一样,如果没用过面试官说的,就说自己用过那套的逻辑就好。

如果没有在工作中实践过,非常有必要的告诉大家,在面试之前也一定要多百度熟悉多动手写demo,不要让面试官问的工具和术语你都没听说过,那么还没开始就结束了的面试只会剩下尬聊(哭晕)。

最后前面聊得愉快的话,面试官一般还会继续考察你的其他能力,比如性能、安全、Linux、数据库、软件架构等。下述内容为大家准备了每个知识点比较常见的面试题,大家可以参考并且发散准备,最后记得准备必问题目:为什么从开发转测试?参考我第一章的答案?

三、开发基础面试题

自动化常用的语言是java和python,参考面试题:

(1)JAVA知识

Q1:List、Set、Map 之间的区别

List 是一个有序并且允许元素重复的集合,它的底层数据结构是数组,数组的优缺点都很明显,就是查询速度很快,但是要做数据移动,比如增加、删除速度就会很慢。

Set 是一个无序且不允许元素重复的集合,它的底层数据结构是哈希表,它的优缺点是跟数组完全相反的,既查询速度慢,但是增加、删速度很快。

Map也是集合的一部分,它最大的特点是key-value形的,并且key不能重复出现,但是value可以重复出现,这对我们某些业务,如用户重复处理能起到重要作用。

Q2:ArrayList 与 LinkedList 的区别?

ArrrayList说白了就是个数组,所以自然也是有数据的优缺点的,比如支持随机访问,查询速度快。而LinkedList 的底层数据结构是链表,所以是不支持随机访问的,在代码中用下标访问一个元素时,ArrayList 的time complexity是 O(1),而 LinkedList 是O(n)。

Q3:Hashtable 与 HashMap 有什么不同之处?

Hashtable 是过时了的遗留下来的类,后面新增的是HashMap。Hashtable 的方法是同步的,所以时间上比较慢,但HashMap 没有同步策略,虽然时间更快了但是也导致它另外一个问题:HashMap是线程不安全的。因为是异步的,在线程并发时可能会导致数据错乱。

Q4:Java 中 ++ 操作符是线程安全的吗?

当然不是线程安全的操作,因为这个过程涉及到多个指令,比如先读取变量值,然后进行增加操作,最后存储回内存,整个过程可能会出现多个线程交差。所以说它不是线程安全的。

Q5:int 和 Integer 哪个会占用更多的内存?

由于Integer 是一个对象,不仅需要存储指向对象的指针,还要存储对象值,所以会占用更多的内存。但是 int 是八种数据类型之一,不需要实例化才能使用,所以占用的空间更少一些。

Q6:Java 中 sleep 方法和 wait 方法的区别?

这两个方法是继承自不同的类的,所以虽然都可以用来暂停当前运行的线程,但sleep() 只是短暂停顿,并不会释放锁,而 wait() 是条件等待,使用了该方法之后,还要释放锁,不然其他等待的线程就不能在满足条件时获取到该锁。而且sleep必须捕获异常的,但wait不需要捕获异常

Q7:解释 Java 堆空间及 GC?

当通过 Java 命令启动 Java 进程的时候,会为它分配内存。内存的一部分用于创建堆空间,当程序中创建对象的时候,就从对空间中分配内存。GC 是 JVM 内部的一个进程,回收无效对象的内存用于将来的分配。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:310357728【暗号:csdn888】

(2)Python知识

Q1:python的八大基本数据类型是?

int、str、float、list、bool、tuple元组、dict字典、set集合

Q2:python中可变数据类型和不可变数据类型有哪些?

不可变数据类型:数值型、字符串string、元组tuple,这类数据类型改变了变量的值相当于是新建了一个对象,也就是如果值是是相同,那么只用一个内存地址保存

可变数据类型:列表list、字典dict:允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化

Q3:python字典和json字符串相互转化方法是?

字典转json使用:json.dumps()

json转字典使用:json.loads()

Q4:Python中@staticmethod和@classmethod的区别

首先说一下什么是普通方法,普通方法需要传递参数,类调用的时默认会将类的实例对象传进去。

@staticmethod装饰的静态方法与普通函数相同:实例和类均可调用,但是不需要传递默认的参数进去

@classmethod装饰的类方法:也需要参数,使用时需要将调用的类传进去

Q5:什么是装饰器?

装饰器的本质是一个闭包函数,实现的功能是在不修改原函数及调用方式的情况下对原函数进行功能扩展的,是开放封闭原则的典型代表,我们在业务中有编程场景可以用上装饰器,比如用户登陆后的权限校验、执行函数前的预备处理、执行后的功能清理、以及更高级的事务处理等等。

Q6:python中常见的异常举例

Exception 所有异常类的基类

AssertionError assert语句失败

FileNotfoundError 文件打开失败

AttributeError 试图访问对象没有属性

Q7:Python是如何进行内存管理的?

Python一个高效语言的原因之一是因为它有非常完善的内存管理机制,在python中万物皆对象,所以围绕对象的内存管理是整个的核心。第一:对象的引用计数机制,python是使用引用计数来保持追踪内存中的对象。第二:垃圾回收机制,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉,保证对象可回收。第三:内存池机,Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统制

(3)数据库知识

Q1:数据表project有code字段,其中code中的编码名有重复,如何消除重复行?

select distinct code from project

Q2:什么是内链接、左链接、右链接、全链接?

(1)INNER JOIN产生的结果集中,是左和右的交集 (2)LEFT JOIN返回左表的全部行和右表满足ON条件的行,其他null替代 (3)RIGHT JOIN返回右表的全部行和左表满足ON条件的行,其他null替代 (4)FULL JOIN 会从左表 和右表 那里返回所有的行,如果其中一个表的数据行在另一个表中没有匹配的行,那么对面的数据用NULL代替。这个问题基本是问数据库问题必问的,大家还可以深入准备下哪些业务场景用到哪种链接。

Q3:某个字段被建立索引后,数据的什么操作会使用到该索引?

(1)对建立了索引的字段做where条件查询时

(2)多表做join操作时会使用索引

(3)对建立了索引的字段做min()或max()时

(4)对建立了索引的字段做sort排序操作时

其中我们用索引最多的时候在查询场景,但同时索引查询也会增加内存消耗,所以索引查询该如何优化是一个更大的问题,此类问题也是数据库常见面试题之一,有兴趣的小伙伴可以自行查阅资料。

(4)http知识

Q1:http协议是不是安全的?如果不是,如何确保传输安全?

HTTP的连接很简单,是无状态的,所以不安全,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,是HTTP的安全版。(SSL协议的对称密钥加密、非对称密钥加密Google查资料)

Q2: 简述cookie和session的区别

session 在服务器端,而cookie 在客户端(浏览器)

cookie 由于是放在客户端的,存在不安全性,容易被黑客利用

session 放在服务端的,安全相对较高,但是如果网站访问量较大的时候,session的存储机制会占用服务器较多内存,所以同时需要考虑性能优化的问题

Q3: 什么是socket?

网络中的进程一般是通过socket通信的,socket是在应用层和TCP/IP协议通信之间的抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,供应用层调用以实现进程在网络中通信,socket函数的本质是操作文件,如读写I/O、打开进程、关闭进程。

(5)Git 知识

Q1: git pull和git fetch之间有什么区别?

简单来说,git pull 是 git fetch + git merge。

1.git pull 会拉取所有的提交并且合并到当前处理的分支中,如果没有细心管理分支,可能会频繁遇到冲突。

2.git fetch 会拉取目标分支中所有本地不存在的提交,将这些远程提交存储到本地仓库中,但不会把这些提交合并到当前分支中,如果跟小伙伴的代码存在较大可能心时,建议先用git fetch拉取代码,后用 git merge合并代码

Q2: git如何进行版本回退

git reset --hard HEAD^

Q3: gitlab如何进行分支保护和代码审查

Gitlab是部署在自己服务器的一套git代码版本管理系统,部署完毕后让自己的成员在该网址上注册好账号,管理员建立对应的项目组并且拉相关成员进组,需要给对应的成员设置好角色,因为角色不同决定了对整个项目的操作权限不同。代码分支管理在设置中的Protected Branches,在Allowed to merge下选择对应角色的成员既有权利管理master分支,并且在其他成员将自己分支合并到master分支之前做好代码审查工作。

四、测试开发面试题

Q1: 接口测试如例如何设计

Q2: 自动化框架的搭建思路,分别有什么模块,作用是什么?

用例模块、发送请求、全局配置文件、数据自动采集、读取数据、接口断言、日志记录、测试报告

Q3: 测试数据有几种,分别放哪里?

全局数据:写入配置文件 一次性消耗数据:从随机函数生成 需要被接口多次读取数据:参数化,放入excel、json、或者从数据库读取 接口数据文件:数据驱动、使用excel管理测试接口

Q4: 影响数据流的接口如何处理,比如删除这种接口如何测试

方法一:最后单独处理这个接口,单独造独立的数据去删除,丰富数据

方法二:连接到数据库中操作

Q5: 测试脚本数据如何规划设计

V1.0:跑通一个流程的接口(约10个),常量数据脚本

V2.0:跑通一个流程的接口(约10个),数据参数化,数据与脚本分离

V3.0:跑通所有接口,数据参数化,数据与脚本分离

V4.0:多组有效数据,保证所有接口能全部跑通且提高覆盖率

V5.0:多组无效数据,加强测试覆盖率

Q6: 使用什么框架完成自动化?讲述使用过程

unittest、pytest、postman、jmeter、Selenium、Appnium等

Q7: unittest、pytest框架对比

pytest 相较于 unittest 最为跳跃的一点应该就是 fixture 机制。对于unittest来说,每个用例的类中都需要去写入setUp和tearDown。也就是我们所说的前置和后置,而不可避免的,很多用例的前置和后置都是一样,重复的复制粘贴致工作量增加,代码量也增加。

Q8:pytest的@pytest.mark.parametrize 装饰器作用是什么?

@pytest.mark.parametrize 装饰器可以让我们每次参数化fixture的时候传入多个项目。回忆上一节,我们参数化的时候只能传入1个字符串或者是其他的数据对象,parametrize每次多个参数,更加灵活。

Q9:postman + Newman相关问题

是否会使用postman完成接口的基本调试?

变量有几种,作用域分别是什么?

如何使用变量?

sandbox如何使用,如何实现断言

如何实现接口参数化,以及接口传递

Newman的作用是什么,如何使用

如何输出html格式的测试报告

Newman是否可以改造

Q10:selenium常用的八大定位法

Id、name、link_text、partial_link_text、tag_name、class_name、css_selector、xpath

Q11:GUI测试如何提高脚本的稳定性

不要右键复制xpath(十万八千里那种路径,肯定不稳定),自己写相对路径,多用name定位,sleep等待尽量少用(影响执行时间)、使用WebDriverWait,结合WebDriverWait和expected_conditions判断元素方法,自己封装一套定位元素方法

五、扩展问题

Q1: 安全测试有哪些方面?

XSS、CSRF攻击、SQL注入攻击、web木马攻击、文件上传攻击、账密暴力破解、验证码缺陷、用户权限、端口扫描、服务检测、中间件安全。对这块有要求的小伙伴找本书看看,推荐《web安全防护指南基础篇》

Q2: 简述性能测试、负载测试、压力测试

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

负载测试- 核实在保持配置不变的情况下,测试对象在不同操作条件(如不同用户数、事务数等)下性能行为的可接受性

压力测试:压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。

Q3: 常用的性能指标的名称与具体含义。

响应时间、并发用户数,吞吐量,性能计数器,TPS,HPS

END今天的分享就到此结束了,点赞关注不迷路~! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/219939.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

二叉树求叶子节点

以这个图展示叶子节点的求取 项目结构 项目代码截图&#xff1a;使用递归的方式求取二叉树的叶子节点&#xff08;递归指的是函数自己调用自己的过程&#xff09; 具体代码展示 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #includ…

全网最新最全的Appium自动化:Appium常用操作之等待操作

等待机制&#xff1a; 为了保证脚本的稳定性&#xff0c;有时候需要引入等待时间&#xff0c;等待页面加载元素后再进行操作&#xff0c;主要有三种等待时间设置方式。 方式一&#xff1a; sleep()&#xff1a;固定等待时间设置&#xff0c;python的time包里提供了休眠方法sle…

Clion自定义管理和配置软件构建过程的工具(代替CMake)构建程序

在公司由于需要x86环境和其他arm环境&#xff0c;同时需要使用公司自定义的mine_x86或者mine_orin对代码进行编译。 编译命令如下mine_x86 build -Dlocal1 -j8,为使用Clion对程序进行调试&#xff0c;需要对程序进行设置。方便调试代码时能够断点查看变量。尝试了很多次&#…

什么是网络爬虫?有什么用?怎么爬?

嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 【导读】 网络爬虫也叫做网络机器人&#xff0c;可以代替人们自动地在互联网中进行数据信息的采集与整理。 在大数据时代&#xff0c;信息的采集是一项重要的工作&#xff0c;如果单纯靠人力进行信息采集&#xff0c;不仅低…

作业12.5

1.定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std; class Animal { private:int weight; public:Animal(){}Animal(int weight):weight(weight){}virtual …

temu最近数据:拼多多旗下跨境电商平台的业绩持续增长

据最近的报道和数据显示&#xff0c;拼多多旗下的跨境电商平台Temu在2023年第三季度取得了显著的业绩增长。销售额突破50亿美元&#xff0c;市场份额不断扩大&#xff0c;用户数量迅速增长。本文将深入探讨Temu的业绩增长、市场份额、用户增长以及其营销策略。 先给大家推荐一款…

批量给文件名加相同后缀的两个方法

如何批量给文件名加相同后缀&#xff1f;文件处理是每个上班族需要面对的工作&#xff0c;并且文件处理能力的高低也体现了我们工作能力的高低&#xff0c;文件处理中就包含文件名称的修改&#xff0c;修改文件名是非常简单的&#xff0c;通过点击软件重命名就可以进行操作&…

应用案例 | 基于三维视觉的汽车零件自动化拧紧解决方案

​Part.1 引言 随着人们生活水平的提高&#xff0c;汽车作为理想的代步工具&#xff0c;逐渐成为人们生活中不可或缺的一部分。汽车的广泛应用&#xff0c;大大增加了汽车制造业的负荷。因此&#xff0c;如何提高生产效率和汽车性能&#xff0c;成为汽车制造业的首要关注话题。…

AI之火是如何燎原的?始于马斯克与佩奇的一场激辩

丨划重点 ①在2015年, 马斯克44岁生日派对上&#xff0c;他与谷歌联合创始人佩奇曾就AI产生严重分歧&#xff0c;甚至终结了十多年的友谊。佩奇认为人类最终将与AI机器融合&#xff0c;将会有许多种智能争夺资源, 马斯克则担心机器可能会毁灭人类。 ②在收购AI创企DeepMind时…

智慧电力在线监测系统

智慧电力在线监测系统是一种基于物联网、云计算、大数据和人工智能等技术的智能化监控系统&#xff0c;用于实时监测电力设备的运行状态和电能质量&#xff0c;及时发现和处理电力系统中存在的问题&#xff0c;提高电力系统的安全性和可靠性。依托电易云-智慧电力物联网&#x…

Linux系统编程:并发与信号总结

并发 并发是指两个或多个同时独立进行的活动。在计算机系统中&#xff0c;并发指的是同一个系统中多个独立活动同时进行&#xff0c;而非依次进行。 并发在计算机系统中的表现&#xff1a; 一个时间段中有几个程序都处于已启动运行到运行完毕之间&#xff0c;且这几个程序都是…

spring boot 2 升级到 spring boot 3 后文件上传失败

背景 项目需要&#xff0c;要求升级 spring boot 2.7 到 spring boot 3.2&#xff0c;升级过程中发现很多不兼容问题&#xff0c;下面说明文件上传失败的解决方案。 问题 spring boot 2 中不需要额外的配置&#xff0c;直接在 Controller 中配置 MultipartFile 接收页面传的…

创建 Python Docker 镜像的完整指南

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python和Docker是两个极其流行的技术&#xff0c;结合它们可以创建强大的应用程序。Docker允许将应用程序及其依赖项打包到一个独立的容器中&#xff0c;而Python则提供了丰富的库和工具来开发应用程序。本文将提…

C++ 12.5作业

以下是一个简单的比喻&#xff0c;将多态概念与生活中的实际情况相联系&#xff1a; 比喻&#xff1a;动物园的讲解员和动物表演 想象一下你去了一家动物园&#xff0c;看到了许多不同种类的动物&#xff0c;如狮子、大象、猴子等。现在&#xff0c;动物园里有一位讲解员&…

国产接口测试工具APIpost

说实话&#xff0c;了解APIpost是因为&#xff0c;我的所有接口相关的文章下&#xff0c;都有该APIpost水军的评论&#xff0c;无非就是APIpost是中文版的postman&#xff0c;有多么多么好用&#xff0c;虽然咱也还不是什么啥网红&#xff0c;但是不知会一声就乱在评论区打广告…

docker 手工redis7.x cluster

IP端口192.168.0.816379/6380192.168.0.826379/6380192.168.0.1146379/6380 mdkir /data/{6379,6380}cat <<END> /data/6379.conf # 端口号 port 6379# 设置客户端连接后进行任何其他指定前需要使用的密码 #requirepass 123456 ## 当master服务设置了密码保护时(用re…

SQL错题集2

1.插入记录 用户1001在2021年9月1日晚上10点11分12秒开始作答试卷9001&#xff0c;并在50分钟后提交&#xff0c;得了90分&#xff1b; 用户1002在2021年9月4日上午7点1分2秒开始作答试卷9002&#xff0c;并在10分钟后退出了平台。 2.请把exam_record表中2021年9月1日之前开始作…

windows下DSS界面本地集成linkis管理台

说明&#xff1a;当前开发环境为windows&#xff0c;node版本使用16.15.1。启动web时&#xff0c;确保后端服务已准备就绪。 1.linkis web编译 #进入项目WEB根目录 $ cd linkis/linkis-web #安装项目所需依赖 $ npm install参考官方编译说明&#xff0c;windows下编译一直异常…

Golang 并发 — 流水线

并发模式 我们可以将流水线理解为一组由通道连接并由 goroutine 处理的阶段。每个阶段都被定义为执行特定的任务&#xff0c;并按顺序执行&#xff0c;下一个阶段在前一个阶段完成后开始执行。 流水线的另一个重要特性是&#xff0c;除了连接在一起&#xff0c;每个阶段都使用…

LeetCode 2477. 到达首都的最少油耗:深度优先搜索(DFS)

【LetMeFly】2477.到达首都的最少油耗&#xff1a;深度优先搜索(DFS) 力扣题目链接&#xff1a;https://leetcode.cn/problems/minimum-fuel-cost-to-report-to-the-capital/ 给你一棵 n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一…