经常被问到的接口测试高频面试题(上)
发布时间:2023-02-27

经常被问到的接口测试高频面试题(下)



1、json和字典的区别?


Json是轻量级的数据交互格式,以key-value的键值对形式来保存数据,结构清晰,可以说是目前互联网项目开发中最常用的一种数据交互格式。字典,同样是以key-value的键值对来保存数据,是python中的一种数据类型。


○ json是一个字符串格式,不是字典格式。

○ json中true、false、null,需要双引号;字典中是True、False、None,单引号/双引号都可以。

○ json.loads()是json转字典;

json.dumps( ),是字典转json。



2、做接口自动化测试时,测试数据放哪里?


对于一些基础配置比如数据库配置可以放到properties文件(yaml文件,没用过就别拓展了)。接口测试需要用到的数据可以放数据库表,也可以放到excel中。



3、什么是数据驱动?


数据驱动就是通过excel,或者xml,数据库等数据结构来维护测试数据,通过相应的技术去处理,拿到测试数据用于测试,从而实现测试数据与代码的解耦,数据驱动测试的本质是高级的参数化。


将测试用例放在excel中,使用数据驱动(如ddt)遍历每一条用例, 然后传递给被装饰的方法的一个参数,有几条数据 就执行几次用例。


○ 代码复用率高。同一测试逻辑编写一次,可以被多条测试数据复用,提高了测试代码的复用率,同时可以提高测试脚本的编写效率。

○ 异常排查效率高。测试框架依据测试数据,每条数据生成一条测试用例,用例执行过程相互隔离,在其中一条失败的情况下,不会影响其他的测试用例。

○ 代码的可维护性高。清晰的测试框架,利于其他测试工程师阅读,提高了代码的可维护性。



4、excel中如何设计你的用例?


○ 所有的接口信息维护在一个表单。

○ 关于接口的用例数据维护在一个表单。

○ 接口传参一列来传,通过构造json格式的字符串即可解决传多个参数的问题,同时提升了用例的可维护性。


「用例内容:」




5、excel中的数据怎么拿出来?


通过第三方库openpyxl来完成,项目只需要引入openpyxl库,通过它提供的api即可完成对于excel的操作,甚至于我们自己也可以做一些二次封装,使得操作更方便。一行数据就是一个用例。



6、如果有些接口做了鉴权(需要鉴定权限),怎么实现这些接口的自动化测试?


在测试其他接口的时候需要先登录,并获取token,将token放在测试接口的请求头中一同传递。


首先需要明确接口是通过什么机制来实现的鉴权。


1.如果是通过会话id(JSESSIONID)来实现鉴权的,那么先调用完登录接口--》拿到它返回的这个数据--》存储起来--》后面再调用其他接口的时候直接带上这个数据过去就可以了。


2.如果是通过token来实现鉴权的,那么同样只需要在调用完登录接口--》拿到它返回的这个数据--》存储起来,后面操作同上。先回答上面的一个基本实现步骤,然后再补充以下一些实现细节:


「a. 怎么取到这个JSESSIONID或者token」

这个信息怎么取首先得明白它是怎么返回来的,可能为以下两种方式:

○ 登录接口的响应头

○ 登录接口的响应报文 需要找开发确认,不同方式不同取法。


「b. 怎么存储这个JSESSIONID或者token」

○ 文件中(excel、properties文件都可以)

○ 数据库

○ 代码里面自己定义的公共静态变量,作为一个共享的数据


「c. 请求其他需要鉴权的接口时,怎么带过去这个数据」

先找开发人员确认,再调用需要鉴权的这些接口怎么携带这个鉴权的信息(票)。一般不外乎这么几种:

○ 拼接在url上传过去用于服务器验证

○ 设置到请求体中

○ 通过请求头带过去


弄明白怎么传过去以后,就设法从保存了这个鉴权信息的地方取出来--》传过去。



7、什么是会话?


所谓会话就是session,而session是一种服务器的缓存技术,由服务器端创建,用户登录了系统,一般就会把登录用户的信息保存到这个session对象中,然后把此会话对应的id(JSESSIONID)返回,因此大部分系统都会用到session机制来实现鉴权。Session保存数据方式也是以key-value的形式。



8、什么是token?


所谓token其实就是服务器端返回的一个字符串(有点类似于:xys73494954sdhcdr83435这么一串),这个数据是基于什么算法生成的需要找开发确认,一般这个数据是唯一的,服务器每次返回的token都会不一样。Token之所以可以用来做鉴权,原理如下:用户a调用了登录接口–》登录了系统b–》服务器端生成了一个唯一的token信息(假设为c),然后会拿用户的编号id(假设为d)做了一个映射:c-d,然后将这样的映射关系存到数据库或redis等缓存中,然后再返回这个token给客户端–》客户端再调用其他需要鉴权的接口时,只需要将缓存起来的这个token带过去验证–》服务器根据此token检查是否有登录用户信息来判断此请求是否是一个已登录授权的用户。



9、某个接口请求,参数依赖上个接口的返回数据,怎么处理(接口关联)?


「场景:」 b接口在调用的时候参数依赖于a接口的返回数据。

「处理方案:」 a接口调用完–》从响应中取出b依赖的这个参数–》保存起来–》b调用的时候,取出这个信息–》当做参数传过去即可。



10、接口调用依赖第三方的接口b,而b接口还未提供给你,如何处理?


通过mock框架搭建自己的mock系统/平台(其实就是自己开发接口),模拟这个第三方接口mock一个出来即可,这样就解决了这个依赖。



11、接口测试的垃圾数据如何清理?


可以自己准备单独的环境(独立的数据库),这样接口调用产生的数据可以在整个套件执行完后(@AfterSuite)通过执行sql脚本,来完成数据删除。

 


更多软件测试相关推荐:

软件测试更多干货文章

软件测试就业培训


文章来源:网络  版权归原作者所有

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8103),我们将立即处理

相关阅读
/