测试面试题 - 接口测试相关

接口测试流程

1、首先是从开发那里拿到API接口文档,了解接口业务、包括接口地址、请求方式,入参、出参,token鉴权,返回格式等信息。
2、然后使用Postman或Jmeter工具执行接口测试,一般使用Jmeter的步骤是这样的:
 a、首先新建一个线程组。
 b、然后就是新建一个HTTP请求默认值。(输入接口服务器IP和端口)
 c、再新建很多HTTP请求,一个请求一个用例。(输入接口路径,访问方式,参数等)
 d、然后创建断言和查看结果树。
3、最后调试并执行用例,最后编写接口测试报告
4、其实我们做接口的时候也碰到了蛮多的问题,都是自己独立解决的,比如返回值乱码(修改jmeter的配置文件为UTF-8编码方式),比如需要登录后才能取得token鉴权码并且这个鉴权码在下面的请求中需要用到(使用正则表达式提取器提取token的值等。

1、请简述一下cookie、session以及token的区别:

(1)cookie数据存放在客户的浏览器上,session数据放在服务器上。而token是接口测试时的鉴权码,一般情况下登陆后才可以获取到token,然后在每次请求接口时需要带上token参数。
(2)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session,session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面应当使用cookie
(3)可以将登陆信息等重要信息存放为session;其他信息需要保存,可以放在cookie

2、接口测试如何设计测试用例

接口测试一般考虑入参形式的变化和接口的业务逻辑,一般设计接口测试用例采用等价类、边界值、场景法居多!
接口测试设计测试用例的思路如下:
1、接口业务逻辑测试?(正例)
接口逻辑测试是指根据业务逻辑、输入参数、输出值的描述,对正常输入情况下所得的输出值
是否正确的测试,也就是测试对外提供的接口服务是否正常工作。
2、模块接口测试?(反例)
模块接口测试是为了保证数据的安全及程序在异常情况下的逻辑的正确性而进行的测试。
模块接口测试的主要包括以下几个方面:?
1)鉴权码token异常(鉴权码为空<没有鉴权码>,错误的鉴权码,过期的鉴权码)。
2)其他参数异常:
a、必填项检查
b、参数的长度、类型、格式异常:
常规参数:(数字、字符串、日期)
参数长度:6-18位。或身份证、电话的长度。
参数类型:数字(精度),字母,中文,带空格的参数,特殊字符。
日期格式:日期:年月日,年月日时分秒,日期格式(包括/,-,:等)。
3)错误码异常覆盖。
4)接口测试其他的关注点
接口有翻页时,页码与页数的异常值测试
数据库的增删改查,比如一个post接口操作完成后,通过列表页接口看下新的数据是否和刚才的post一致
接口返回的图片地址能否打开,图片尺寸是否符合需求
当输出参数有联动性时,需要校验返回两参数的实际结果是否都符合需求。
所有列表页接口必须考虑排序值
所有功能都要考虑兼容旧版本

4、接口测试执行中比对数据库吗?

需要,因为接口返回值的数据来源于数据库,接口对数据的操作还要进行深层次的数据库检查!

5、为什么开展接口测试?

a、接口测试属于集成测试、测试介入越早、就越能在项目早期发现问题,其修复问题的成本越低
b、接口测试非常快速、UI自动化执行一个测试用例10S左右、接口测试用例执行的话,需要的时间是毫秒级的

7、之前用过抓包工具没有?如何使用的?

之前在项目中用过fiddler抓包工具进行HTTP协议请求的抓取
打开fiddler之后,默认浏览器配置了127.0.0.1 8888端口的代理,在fiddler设置好过滤策略后,打开需要进行抓包的网站进行操作,就可以进行抓包

8、json数据是什么,你平时如何解析json数据?

一种开发常用的数据报文格式,由键值对和数组两种格式构成。可以通过工具bejson网站等

9、postman参数化有哪几种方式?

内建变量、pre-scripts编写js脚本、批量运行时导入csv或json格式的文件

10、在接口测试中关联是什么含义?如何用postman设置关联?

关联就是把上一个接口返回值的部分截取出来,作为下一个接口的参数,能让接口串联运行
在postman中设置关联的步骤如下:

先通过正则表达式提取的方式或json取值的方式把下一个接口需要的信息从上一个接口截取出来
使用设置全局变量的代码把取出来的值保存到全局变量
在下一个接口中,使用{{全局变量}}代替要替换的静态值

三次握手四次挥手

四次挥手过程:
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

JMeter

1、解释什么是jmeter?

jmeter是一款java开源工具,用于性能负载测试。它旨在分析和衡量web应用程序和各种服务的性能和负载功能行为。

2.说明jmeter的工作原理?

jmeter就像一群将请求发送到目标服务器的用户一样。它收集来自目标服务器的响应以及其他统计数据,这些统计数据通过图形或表格显示应用程序或服务器的性能。

3.明可以在哪里使用函数和变量?

变量和函数可以写入任何测试组件的任何字段。

4.提到jmeter中的正则表达式是什么?

根据模式(patterns),使用正则表达式搜索和操作文本。jmeter可用于解释在整个jmeter测试计划中使用的正则表达式或模式的形式。

5.解释什么是采样器(Samplers)和线程组(Thread group)?

线程组:对于任何测试计划,线程组元件都是JMeter的开始部分。这是JMeter的重要元件,你可以在其中设置多个用户和时间来加载线程组中给出的所有用户。
  采样器:采样器生成一个或多个采样结果;这些采样结果具有许多属性,例如经过时间、数据大小等。采样器允许JMeter通过采样器将特定类型的请求发送到服务器,线程组决定需要发出的请求类型。一些有用的采样器包括HTTP请求、FTP请求、JDBC请求等等。

6、使用JMeter构建的测试计划是否依赖于操作系统?

通常,测试计划以XML格式保存,因此与任何特定的操作系统都没有关系。它可以在JMeter可以运行的任何操作系统上运行。

7、提到JMeter中处理器的类型是什么?

JMeter中的处理器类型为:①预处理器;②后处理器。

8、解释什么是预置处理器元件?列出一些预处理器元件?

预置处理器是在采样器执行之前发生的事情。为了在执行采样请求之前对其进行配置,或者用于更新未从响应文本中提取的变量,需要使用预处理器元件。
  一些预处理器元件是:
  - HTTP URL重写修饰符
  - HTTP用户参数修饰符
  - HTML链接解析器
  - BeanShell PreProcessor

9、是否提到测试元件的执行顺序?

测试计划元件的执行顺序为:
  配置元件 -> 前置处理器 -> 计时器 -> 取样器 -> 后置处理器 -> 断言 -> 监听器

10、正则表达式中的“包含”和“匹配”表示什么?

在正则表达式中,contains表示正则表达式与目标的至少一部分匹配。匹配表示正则表达式匹配整个目标。如“alphabet”与“al.*t”匹配。

11、解释什么是配置元件?

配置元件与采样器并行工作。要设置默认值和变量以供采样器以后使用,可以使用配置元件。在合并范围的开始,将先处理这些元件,然后再处理同一合并范围中的任何采样器。

12、说明JMeter中的计时器是什么,计时器的类型是什么?

默认情况下,JMeter线程将连续发送请求而不会暂停。为了在请求之间暂停,使用了计时器。使用的一些计时器包括恒定计时器,高斯随机计时器,同步计时器,均匀随机计时器等。

13、解释什么是测试片段?

测试片段也是一种元件,例如“线程组”元件。唯一的区别是,除非模块控制器或包含控制器引用了测试片段,否则不会实现测试片段。

14、解释什么是JMeter中的断言?断言的类型有哪些?

断言有助于验证被测服务器是否返回了预期结果。
  JMeter中一些常用的断言是:
  - 响应断言
  - 持续时间断言
  - 大小断言(Size Assertion)
  - XML断言
  - HTML断言

15、说明如何减少JMeter中的资源需求?

①使用非GUI模式执行测试,如 jmeter –n –t test.jmx –l test.jtl
②在加载期间,测试不使用“查看结果树”或“查看表中的结果”监听器,仅在脚本编写阶段使用它们;
③不要使用功能模式;
④与其使用大量相似的采样器,不如在循环中使用相同的采样器,并使用变量来改变采样;

16、解释如何在JMeter中执行尖峰测试(Spike testing)?

通过同步,可以实现计时器JMeter尖峰测试。同步计时器将阻塞线程,直到阻塞了特定数量的线程,然后将它们全部释放,从而产生了巨大的瞬时负载。
尖峰测试 也可以称为冲击测试,反复冲击服务器。指的是在某一瞬间或者多个频次下用户数和压力陡然增加的场景。

17、解释如何在JMeter中捕获身份验证窗口的脚本?

通常,可以通过录制来捕获脚本:
  首先,必须在Testplan(测试计划)中使用 Threadgroup,然后在 Workbench(工作台) 中使用HTTP代理服务器;
  之后,在“全局设置”框中设置端口号(如8911),然后在 IE高级选项>连接>局域网设置中 开启 代理设置,并将地址修改为localhost,端口改为8911。
然后,HTTP代理服务器中选择 目标控制器 Testplan>Threadgroup,然后启动HTTP代理服务器并运行应用进行登录。

18、 列出几个JMeter监听器?

一些JMeter监听器是:集合报告、汇总报告、查看结果树、用表格查看结果、图形结果、BeanShell Listener、摘要报告等

19、什么是分布式负载测试?如何实现?

分布式负载测试是整个系统可以用来模拟大量用户负载的过程。通过使用主从配置,JMeter可以进行分布式负载测试。

20、在JMeter中是否有必要显式调用嵌入式资源?

你可以消除所有嵌入式资源的显式调用。请求底部有一个复选框,显示“检索嵌入式资源(retrieve embedded resources.)”。它会捕获所有CSS、JPG等。这是在Web应用中查找资源和断开链接的绝妙方法。

21、解释计时器(Timer)在JMeter中的作用是什么?

在计时器的帮助下,JMeter可以延迟线程发出的每个请求之间的时间。它可以解决服务器的过载问题。

22、解释什么是后置处理器?

要在发出请求后执行任何操作,则使用后处理器。例如,如果JMeter向Web服务器发送HTTP请求,并且如果你希望JMeter在Web服务器显示错误时停止发送请求,那么你将使用后处理器执行此操作。

23、JMeter为性能测试提供什么好处?

JMeter提供性能测试方面的优势,例如:
  用于测试静态资源和动态资源的性能;
  可用于测试网站最大并发用户数,从而分析定位网站瓶颈;
  提供了性能报告的图形化分析;

24、jmeter参数化的方式有哪几种可以实现?

  1. 配置元件—用户定义的变量元件可以设置全局变量
  2. 用户参数
  3. 函数助手对话框中可以选择比如随机字符串、随机日期、随机数字作为参数化
  4. 可以使用csv文件作为参数化,通过配置元件中的csv data set config元件进行设置即可
  5. jdbc数据驱动

    25、性能测试你们公司是如何做的

    上级领导会给到我们具体的测试场景,以及对应的压测量。我主要习惯使用 JMeter工具来压测。在压测之前我会先把具体的场景做到Jmeter中,Web端压测的时候如果不是调用现成的api,需要抓包,使用Charles, 浏览器开发者工具抓都可以。抓包完成之后,将包导入到Jmeter中就可以直接运行了。(为了让数据更真实,我们也会使用函数助手生成一些数据)如果是直接调用API, 使用JMeter 做下API,接口有关联,使用上下游传参,CSV也可以做参数化,添加对应的断言,文本断言,json断言,jmespath 断言。这些在JMeter中做完之后,设置线程组,添加聚合报告,开始压测。压测过程中可以使用htop或者top命令监控服务器,也可使用netdata 监控服务器。压完之后看聚合报告,以及对应的服务器状态。主要看聚合报告中并发数,响应时间,异常率,吞吐量。服务器CPU,内存,磁盘IO,网络流量这些。如果不达标,会让开发进行一些程序优化,再压。最后出一份测试报告。

    26、

    单接口 (数据驱动,csv参数化)-- 需要整理 接口的正常场景和异常场景。将测试数据整理到csv文件中,在接口测试工具中上传csv文件,通过读取csv文件来进行接口测试。
    ii.多接口(上下游传参,接口关联)-- 梳理接口之间的关联关系,根据业务确定上游接口和下游接口,上游接口提取变量 (Postman使用Tests 从服务器返回结果中提取变量),下游接口中引用变量。
    a.接口做完之后,针对每个接口添加对应的断言,断言是根据具体的业务来设置断言,主要
    i.状态码断言
    ii.响应文本断言
    iii.json 值断言 使用最多。
    a.执行的时候,批量执行。在 postman的运行界面中, 运行完成之后通过查看运行结果。
    1.上下游传参的接口怎么做?
    a.根据业务需求,先确定对应的上游接口
    b.在上游接口的 Tests 中编写代码 提取变量, 将传递的参数设置为变量。
    c.在下游接口中 通过 {{}} 方式引用变量。

    弱网测试

    简介

    由于处在移动互联网盛行的时代,网络形态除了有线连接外,还有2G/3G/4G/Wifi/5G等多种手机网络连接方式。首先额外补充一些5G的知识;2分钟了解什么是5G。
    在前不久结束的 MWC 2018 上,5G 成了全球的一个热门话题,而国内对 5G 的关注度也是异常地高。实际上,与 2G、3G、4G 相比,我国在 5G 方面的布局并不晚于其他国家;而且中国三大运营商在中国 5G 发展中的角色至关重要,因此它们在 5G 上的节奏基本上决定了整个中国 5G 的迈进步伐。
    身为一个合格的测试人员,需要额外关注的场景就远不止断网、网络故障等情况了。还要对于弱网的数据定义,不同的应用所界定的含义是不一样且不清晰的,不仅要考虑各类型网络最低速率,还要结合业务场景和应用类型去划分。按照移动的特性来说,一般应用低于2G速率的都属于弱网,也可以将3G划分为弱网。除此之外,弱信号的Wifi通常也会被纳入到弱网测试场景中。

    那么为什么要进行弱网测试?

    确实有这种情况,就拿一款适配于低资源环境的医疗IT系统项目来说,而它的使用场景主要是在一些2G网络环境下,3G网都很少,并且稳定性也是比较差。因此,这款AP应用要想完成交付,就一定要在弱网状态甚至在没有网络状态下运行。

    如何做弱网测试?

    首先,只要搭建出来弱网环境,模拟一个弱网环境即可。可以通过软硬件方式两种。软件方式利用模拟网络参数来配置弱网环境,就可以达到目的。你也可以选择第三方,比如,Charles , Network link Conditioner 。 在各类网络软件中,主要就是对带宽、丢包、延时等进行模拟弱网环境。但是方式是由一定的弊端的,不是非常接近弱网络环境,想要更接近弱网环境,例如大多数专项测试,会更倾向于通过硬件方式来协助测试,但这种方式又会变得很麻烦,都是通过「树莓派」网维协助搭建!如果出现有些无法模拟的情况,只能靠人工移动到电梯、地铁等信号比较弱的地方。补充一点,软件方式的成本低且实施起来容易操作。

    弱网测试的思路

    弱网功能测试:2G/3G/4G、高延时、高丢包
    无网状态测试:断网功能测试、本地数据存储
    用户体验关注:响应时间、页面呈现&超时文案&超时重连、安全及大流量风险
    网络切换测试:Wifi----4G/3G/2G-----无网多状态切换

    弱网功能测试

    这一部分主要是在各种非wifi网络环境下进行的功能测试,同时模拟高延时和高丢包的异常网络环境进行健壮性测试。关注网页的响应时间、页面呈现是否完整一致等。高延迟和高丢包的网络环境需要借助工具来模拟,在windows环境下可以使用fiddler和network emulator for windows toolkit来模拟,在mac环境下则可以使用Charles和Xcode自带的开发环境网络异常模拟工具进行。工具的使用在工具篇具体介绍。
    弱网功能测试建议将整体的功能测试用例在弱网环境下进行一轮测试,相同模块下的功能可以分多个网络条件进行测试。这部分发现的问题可能会有:页面图片在弱网环境下加载不出来(图片加载逻辑需优化)、需要模板的页面板式结构混乱(模板文件在弱网环境的加载需优化)、页面响应时间较长没有任何显示(页面显示逻辑优化、重试机制加入)等。

    网络切换测试

    这部分主要是进行几个不同网络场景的切换,包括wifi-2G/3G/4G、wifi-无网、2G/3G/4G-wifi、2G/3G/4G-无网、无网-2G/3G/4G、无网-wifi等。主要关注页面的显示与交互,尤其是弱网到wifi,wifi到弱网的情况,是否会有页面的crash以及显示的错乱、session是否一致、请求堆积处理等。

    用户体验关注

    弱网测试的目的就是尽可能保证用户体验,关注的关键点包括:
    1)页面响应时间是否可以接受,关注包括热启动、冷启动时间、页面切换、前后台切换、首字时间,首屏时间等。
    2)页面呈现是否完成一致。
    3)超时文案是否符合定义,异常信息是否显示正常。
    4)是否有超时重连。
    5)安全角度:是否会发生dns劫持、登陆ip更换频繁、单点登陆异常等。
    6)大流量事件风险:是否会在弱网下进行更新apk包、下载文件等大流量动作