给准备年后跳槽的小伙伴,安排一期面试题
一
平常用什么工具测接口?
主流接口测试工具:Jmeter、PostMan、RESTClient、Fiddler、Requests库,不同测试环境不同需求,选择不同工具。
1).Jmeter:Java开发一款开源免费工具,适合接口功能测试、接口自动化测试、接口压力测试;
2).PostMan:谷歌公司开发的一款工具,分为浏览器插件版和客户端版。适合开发自测接口、测试调试接口;
3).RESTClient:一款国人开发的火狐浏览器插件,界面简单,支持高亮显示,调试、自测;
4).Fiddler:强大的抓包工具,支持接口请求、响应;
5).Requests库:python语言中一个第三方请求库,使用代码测试接口不二选择。
二
测试的数据你放在哪儿?
测试的数据分很多种,千万不能说写在代码里,因为数据是不能写死在代码里的。
测试数据放到.py文件的开头,对于少量的,固定不变的数据是可以的。
测试数据存放总结:
① 对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成
② 对于一个接口有多组测试的参数,可以参数化,数据放yaml,text,json,execl等都可以
③ 对于反复使用的数据,如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,用完后再清理
④ 对于邮箱配置的一些参数,可以用ini配置文件
⑤ 对于全部是独立的接口项目,可以用数据驱动方式,用execl/csv管理测试的接口数据
⑥ 对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,卸载i配置里(如ini)
⑦ 对于少量的静态数据,比如一个接口的测试数据,也就2-3组,可以写到python脚本的开头,十年八年都不会变更的。
三
HTTP与WebSocket的区别?
WebSocket
是一种基于在单个 TCP 连接上进行全双工通信的协议,是从HTML5开始提供的一种浏览器与服务器之间进行全双工通讯的网络技术,解决了HTTP协议不适用于实时通信的缺点,相较于 HTTP 协议,WebSocket 协议实现了持久化网络通信,可以实现客户端和服务端的长连接,能够进行双向实时通信,协议名为"ws"。
- 两者都是基于TCP协议进行数据传输,具有可靠的传输能力,而且都是应用层协议;
- HTTP是单向的通信,只能由客户端向服务端发送请求,服务端无法主动向客户端发送消息;
- WebSocket是双向通信,客户端和服务端是通过握手建立连接,可实现全双工通信,双方可以同时主动向对方发送消息;
- WebSocket在建立连接时数据是通过HTTP协议传输的,但是建立之后,真正传输数据时使用的是更加可靠的TCP协议。
四
get和post的区别?
GET与POST是两种常见的HTTP请求方法,它们在使用方式和特性上有一些主要的区别:
- 请求方式:GET请求参数包含在URL中,数据可见,而POST通过HTTP头将数据发送到服务器。
- 安全性: 由于GET请求数据暴露在URL中,故其安全性较低,适合发送非敏感数据。而POST请求数据不显示在URL中,相对安全性较高。
- 数据大小:GET请求因为受URL长度限制,所以发送数据大小有限制。而POST请求的数据长度理论上没有限制。
- 用途:GET主要被用于请求数据,而POST主要被用于提交数据。
- 缓存:GET请求的结果会被浏览器默认缓存,而POST不会。
- 影响:GET产生一个TCP数据包,而POST产生两个。对于GET方式的请求,浏览器会把HTTP header和data一并发送出去,服务器响应200 (return URI),客户端收到响应HTTP报文以后,把报文中的其他部分扔掉,只把最重要的HTML的部分显示出来。而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok (header和data一并发送)。
上述内容是对GET和POST的基本区别,不过实际使用中,这两种请求方式都可以发送和接收数据,使用哪种方式取决于具体的应用场景和数据安全性需求。
五
不可逆的操作,如何处理,比如删除一个订单这种接口如何测试?
不可逆操作的测试确实相对较复杂,需要在保护产品数据的同时进行有效的验证。以下是一些可以采用的策略:
- 使用测试数据: 为了避免影响生产数据,测试应在单独的测试环境中进行。可以创建一个独立的订单,专门用于删除操作。这样即使订单被删除,也不会影响实际的业务。
- 操作前后对比: 在删除订单之前,可以先获取订单详情,然后再进行删除操作,在删除后再次获取订单详情,此时应返回订单不存在的错误,证明删除成功。
- 数据库恢复: 如果测试环境可以操作数据库,可以先备份数据库,然后进行删除操作,验证后再恢复数据库。
- 接口模拟: 使用工具或框架模拟接口行为,可以预设"删除订单"的接口请求和响应,以产生可预见的效果。
其中,第一个和第二个方法可能最为常见和实用。总的来说,关键在于你能够提供充足的证据证明删除操作已经成功,同时对实际业务造成的影响尽可能小。
六
接口产生的垃圾数据如何清理?
测试过程中产生的垃圾数据清理是一个重要的部分。下面提供几种常见的清理方法:
- 测试环境隔离: 在单独的测试环境下进行测试。测试完成后,可以直接重置或重新部署测试环境。这样所有的垃圾数据将被清理。
- 脚本自动化: 编写脚本在测试完成后清理垃圾数据。这需要你能够识别出哪些数据是由测试过程产生的。
- 数据库操作: 如果你有权限操作数据库,可以通过执行SQL命令来删除垃圾数据。这种方法需要谨慎使用,以防意外删除重要数据。
- 接口清理: 如果应用程序提供了清理或删除数据的API,可以在测试结束后使用这些API清理垃圾数据。
每种方法有其适用的场景,也有可能需要结合使用。需要注意的是,清理垃圾数据时应避免影响到重要的业务数据,所以在采取任何清理行动之前,都应该先对数据做好备份
七
在做自动化过程中遇到的技术难点有哪些?
在进行自动化测试的过程中,可能会遇到很多技术难点。下面列出了一些常见的问题:
- 选择合适的自动化工具: 要找到一个符合项目需求且易于使用的自动化工具可能是第一个主要的难点。你需要评估各种工具的功能、学习曲线、社区支持等方面。
- 定位元素: 很多时候,自动化测试脚本无法正确地定位页面元素,比如动态变化的元素ID、复杂的iframe结构等。
- 处理异步操作: 对于含有Ajax请求的网页,如何正确处理页面中的异步元素有时也是一个挑战。
- 测试数据管理: 如何创建、管理和清理测试数据也是一个问题。
- 维护自动化脚本: 当应用程序的UI或业务逻辑发生改变时,需要更新相关的自动化脚本,这也是相当耗时的一个环节。
- 环境问题: 测试环境的稳定性与可靠性对自动化测试非常重要。不稳定的网络连接、服务器故障等问题会切实影响到测试的效果。
- 跨浏览器测试: 不同的浏览器、操作系统之间的兼容性问题也是自动化测试需要面临的挑战之一。