API 测试

1. 什么是接口

接口是指外部系统与系统之间以及内部各子系统之间的交互点。

包括外部接口、内部接口,内部接口又包括:上层服务与下层服务接口、同级接口。

2. 如果模块请求 http 改为了 https,测试方案应该如何制定,修改?

分别用 http 还有 https 登录试试。如果用 https 可以正常登录,地址栏显示一把锁头,那么这个网站是有部署 SSL 的。如果 http 和 https 都能够正常登录,进一步说明该网站没有设置强制 https 登录, 或者说没有设置 http 链接自动跳转 https 链接;相反如果用 http 登录,结果跳转到 https 页面,说明网站部署了 SSL, 而且设置了 http 自动跳转 https。

3. 常用 HTTP 协议调试代理工具有什么?详细说明抓取 HTTPS 协议的设置过程?

Fiddler 是一个 http 协议调试代理工具

打开 Fiddler,进入 Tools-Options-HTTPS,配置允许抓取 HTTPS 连接和解析 HTTPS 流量然后选择要解释的来源,设置是否忽略服务证书错误(这些操作做完之后,在浏览器方位 IP:8888,安装证书就可以在浏览器抓取 HTTPS 协议了)

进入 Tools-Options-Connections,保证打开启抓取 HTTPS 连接,然后默认端口按需求是或否需要修改, 然后点选允许远程计算机连接选项

4. 描述 TCP/IP 协议的层次结构

物数网传应

5. 接口产生的垃圾数据如何清理

造数据和数据清理,需要连数据库做增删改查的操作

测试用例前置操作,setUp 做数据准备后置操作,tearDown 做数据清理

6. 依赖第三方的接口如何处理

这个需要自己去搭建一个 mock 服务,模拟接口返回数据。如可以采用 moco,moco 是一个开源的框架,moco 服务搭建需要自己能够熟练掌握,面试会问你具体如何搭建 ,如何模拟返回的数据,是用的什么格式,如何请求的

7. 测试的数据你放在哪?

测试数据到底该怎么放,这个是面试官最喜欢问的一个题了,似乎仁者见仁智者见智,没有标准 的答案,有的人说放 excel,也有的说放 .py 脚本,也有的说放 ini 配置文件,

还有放到 json,yaml 文件,txt 文件,甚至有的放数据库,五花八门,一百个做自动化的小伙伴有 100 个放的地方。

这里总结下测试的数据到底该怎么放?

首先测试的数据是分很多种的,有登录的账户数据,也有注册的账户数据,还有接口的参数,还有邮箱配置的数据等等等等,所以这个题不能一概而论给答死了。要不然就是给自己挖坑。

以下两个大忌不能回答:

测试的数据是不能写死到代码里面的,这个是原则问题,也是写代码的大忌(你要是回答写在代码里面,估计就是回去等通知了)

测试数据放到 .py 的开头,这种其实很方便,对于少量的,固定不变的数据其实是可以放的,但是面试时候,千万不能这样说,面试官喜欢装逼的方法

测试数据存放总结:

  1. 对于账号密码,这种管全局的参数,可以用命令行参数,单独抽出来,写的配置文件里(如 ini、text)
  2. 对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机函数生成
  3. 对于一个接口有多组测试的参数,可以参数化,数据放 yaml,text,json,excel 都可以
  4. 对于可以反复使用的数据,比如订单的各种状态需要造数据的情况,可以放到数据库,每次数据 初始化,用完后再清理
  5. 对于邮箱配置的一些参数,可以用 ini 配置文件
  6. 对于全部是独立的接口项目,可以用数据驱动方式,用 excel/csv 管理测试的接口数据
  7. 对于少量的静态数据,比如一个接口的测试数据,也就 2-3 组,可以写到 .py 脚本的开头,十年八年都不会变更的总之不同的测试数据,可以用不同的文件管理

8. 什么是数据驱动,如何参数化?

参数化和数据驱动的概念这个肯定要知道的,参数化的思想是代码用例写好了后,不需要改代码, 只需维护测试数据就可以了,并且根据不同的测试数据生成多个用例 python 里面用 unittest 框架。

9. 下个接口请求参数依赖上个接口的返回数据

这个很容易,不同的接口封装成不同的函数或方法,需要的数据 return 出来,用一个中间变量 a 去接受,后面的接口传 a 就可以了

10. 依赖于登录的接口如何处理

登录接口依赖 token 的,可以先登录后,token 存到一个 yaml 或者 json,或者 ini 的配置文件里面, 后面所有的请求去拿这个数据就可以全局使用了

如果是 cookies 的参数,可以用 session 自动关联

s=requests.session()

后面请求用 s.get() 和 s.post() 就可以自动关联 cookies 了

11. 接口测试的步骤有哪些?

  1. 发送接口请求
  2. 测试接口获取返回值
  3. 断言:判断实际结果是否符合预期

12. 接口测试中依赖登录状态的接口如何测试?

依赖登最状态的接口,本质上是在每次发送请求时需要带上存储有账户有效信息的 Session 或 Cookie 才能发送成功,在构建 POST 请求时添加必要的 Session 或 Cookie

13. 依赖于第三方数据的接口如何进行测试?

可以利用一些 MOCK 工具(如:JSON Server、Easy Mock)来模拟第三方的数据返回,最大限度的降低对第三方数据接口的依赖

14. 解释什么是 SOAP?

SOAP 代表简单对象访问控制,它是一种基于 XML 的协议,用于在计算机之间交换信息。

15. 解释什么是 REST API?

这是开发人员执行请求并接收响应的一组功能。在 REST API 中,通过 HTTP 协议进行交互

REST - 代表状态转移,它正快速成为 API 创建的标准。

16. API 测试发现的 Bug 类型是什么?

缺少或重复的功能

无法正常处理错误条件可靠性

安全

未使用的标志未实现错误

错误处理不一致性能

多线程问题错误不正确

17. 我们测试的接口属于哪一类?

服务器接口(基于 HTTP 协议的接口), 大多数人常说的接口测试,通常是 B/S 架构,由客户端(浏览器)调用,或模拟客户端(浏览器)调用服务器提供的请求接口,由服务器完成处理并返回一个应 答的过程。例如:Webservice 接口,http 接口,jms 接口,hessian 接口。

18. Cookie 保存在哪里?

如果设置了过期时间,Cookie 保存在硬盘中。如果没有设置过期时间,Cookie 保存在内存中。

19. HTTP 有哪些请求方法?

HTTP 共有如下 7 种请求方式,每种都可以发送 Header 和 Body: GET、POST、PUT、DELETE、OPTIONS、HEAD、PATCH

20. 接口自动化测试的流程?

基本的接口功能自动化测试流程为:需求分析 -->用例设计 -->脚本开发 -->测试执行 -->结果分析

21. 接口测试用例的编写要点有哪些?

  1. 必填字段:请求参数必填项、可选项
  2. 合法性:输入输出合法、非法参数
  3. 边界:请求参数边界值等
  4. 容错能力:大容量数据、频繁请求、重复请求(如:订单)、异常网络等的处理
  5. 响应数据校验:断言、数据提取传递到下一级接口。..
  6. 逻辑校验:如两个请求的接口有严格的先后顺序,需要测试调转顺序的情况
  7. 性能:对接口模拟并发测试,逐步加压,分析瓶颈点
  8. 安全性:构造恶意的字符请求,如:SQL 注入、XSS、敏感信息、业务逻辑(如:跳过某些关键步骤; 未经验证操纵敏感数据)
    • 测试每个参数类型不合法的情况(类型不合法容易遗漏 NULL 型)
    • 测试每个参数取值范围不合法的情况
    • 测试参数为空的情况
    • 测试参数前后台定义的一致性
    • 测试每个参数的上下限(这里容易出致命的 BUG,如果程序处理不当,可能导致崩溃)
    • 如果两个请求有严格的先后顺序,需要测试调转顺序的情况

22. 提到 UI 级别测试和 API 测试之间的关键区别?

UI(用户界面)是指测试图形界面,如用户如何与应用程序交互,测试应用程序元素,如字体,图像,布局等。UI 测试基本上侧重于应用程序的外观和感觉。

而 API 可以实现两个独立的软件系统之间的通信。实现 API 的软件系统包含可由另一软件系统执行的功能或子例程。

23. HTTPS 的工作原理

我们都知道 HTTPS 能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或电子邮箱等等安全级别较高的服务都会采用 HTTPS 协议。

客户端在使用 HTTPS 方式与 Web 服务器通信时有以下几个步骤。

  1. 客户使用 https 的 URL 访问 Web 服务器,要求与 Web 服务器建立 SSL 连接。
  2. Web 服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
  3. 客户端的浏览器与 Web 服务器开始协商 SSL 连接的安全等级,也就是信息加密的等级。
  4. 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
  5. Web 服务器利用自己的私钥解密出会话密钥。
  6. Web 服务器利用会话密钥加密与客户端之间的通信。

24. HTTPS 有哪些优点?

尽管 HTTPS 并非绝对安全,掌握根证书的机构、掌握加密算法的组织同样可以进行中间人形式的攻击,但 HTTPS 仍是现行架构下最安全的解决方案,主要有以下几个好处:

  1. 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
  2. HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
  3. HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
  4. 谷歌曾在 2014 年 8 月份调整搜索引擎算法,并称“比起同等 HTTP 网站,采用 HTTPS 加密的网站在搜索结果中的排名将会更高”。

25. HTTPS 的缺点

虽然说 HTTPS 有很大的优势,但其相对来说,还是存在不足之处的:

  1. HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20% 的耗电;
  2. HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;
  3. SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。
  4. SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个消耗。
  5. HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。

26. HTTPS 和 HTTP 的区别主要如下

  1. https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。
  2. http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
  3. http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
  4. http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。

27. POST 和 GET 有什么区别?

GET 在浏览器回退时是无害的,而 POST 会再次提交请求。

GET 产生的 URL 地址可以被保存为书签,而 POST 不可以。

GET 请求会被浏览器主动 cache,而 POST 不会,除非手动设置。

GET 请求只能进行 url 编码,而 POST 支持多种编码方式。

GET 请求参数会被完整保留在浏览器历史记录里,而 POST 中的参数不会被保留。

GET 请求在 URL 中传送的参数是有长度限制的,而 POST 没有。

GET 比 POST 更不安全,因为参数直接暴露在 URL 上,所以不能用来传递敏感信息。

GET 参数通过 URL 传递,POST 放在请求 Body 中。

GET 产生一个 TCP 数据包,POST 产生两个 TCP 数据包。

GET 请求的 URL 传参有长度限制,而 POST 请求没有长度限制

GET 请求的参数只能是 ASCII 码,所以中文需要 URL 编码,而 POST 请求传参没有这个限制;

GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包

28. Session 与 Cookie 有什么区别?

保存位置。SESSION 数据保存在服务器端,Cookie 数据保存在客户端浏览器

保存方式。SESSION 默认被存在在服务器的一个文件里,可以手动设置放在文件、数据库、或内存中;

Cookie 默认保存在客户端内存中,如果设置了过期时间就保存在硬盘中。

依赖关系。SESSION 依赖 Cookie 来识别 session_id,如果浏览器禁用了 Cookie,SESSION 也会失效,此时可以通过 url 传递 session_id。

安全性。因为 SESSION 数据保存在服务端,所以 SESSION 安全性比 Cookie 高。

尺寸大小。SESSION 基本上没有大小限制,COOKIE 保存的内容比较小,具体由浏览器决定。

服务器性能。SESSION 对服务器的压力会更大一些,而 Cookie 放在客户端,所以对服务器基本没影响

29. TCP 和 UDP 有什么区别

TCP 面向连接(如打电话要先拨号建立连接);UDP 是无连接的,即发送数据之前不需要建立连接

TCP 提供可靠的服务。也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP 尽最大努力交付,即不保证可靠交付

TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流;UDP 是面向报文的 UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实时视频会议等)

每一条 TCP 连接只能是点到点的;UDP 支持一对一,一对多,多对一和多对多的交互通信

TCP 首部开销 20 字节;UDP 的首部开销小,只有 8 个字节

TCP 的逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道

30. 什么是 TCP/IP?

TCP/IP,也就是互联网协议套件(英语:Internet Protocol Suite,缩写 IPS)是一个网络通信模型, 以及一整个网络传输协议家族,为网际网络的基础通信架构。

因为该协议家族的两个核心协议:TCP(传输控制协议)和 IP(网际协议)为该家族中最早通过的标准,所以它常被通称为 TCP/IP 协议族,简称 TCP/IP。

由于在网络通讯协议普遍采用分层的结构,当多个层次的协议共同工作时,类似计算机科学中的 堆栈,因此又被称为 TCP/IP 协议栈。

TCP/IP 提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收, 都加以标准化。

它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。

协议族下的各种协议,依其功能不同,被分别归属到这四个层次结构之中,常被视为是简化的七 层 OSI 模型。

31. cookie 有什么作用?

cookie 可以解决 http 的无状态的问题,与服务器进行交互,作为 http 规范存在。它具有极高的简便性、可扩展性和可用性,也可以通过加密和 SSL 技术来提高其安全性。因此推荐使用 cookie 作为标识而不是身份验证的工具。

其中 cookie 的作用就是为了解决 HTTP 协议无状态的缺陷所作出的努力

32. Cookie 测试的测试点

  1. 禁止使用 Cookie

    设置浏览器禁止使用 Cookie,访问网页后,检查存放 Cookie 文件中未生成相关文件;

  2. Cookie 存储路径

    按照操作系统和浏览器对 Cookie 存放路径的设置,检查存放路径是否与设置一致;

  3. Cookie 过期检查

    按照 Cookie 过期时间,检查存放文件该 Cookie 是否被自动删除

  4. 检查浏览器中 Cookie 选项

    通过不同浏览器,设置是否接受 Cookie 文件,如同意接受 Cookie,检查存放路径中是否存在 Cookie 文件

  5. 浏览器删除 Cookie

    通过浏览器的设置,删除 Cookie 文件

  6. Cookie 加密

    提交敏感信息时,数据应加密

  7. Cookie 保存信息

    验证 Cookie 能正常工作

  8. 篡改 Cookie

    修改 Cookie 内容,查看系统功能是否出现异常,或数据错乱

  9. Cookie 的兼容性

    使用不同类型,或同一类型不同版本的浏览器,检查 cookie 文件的兼容性

  10. 刷新操作对 cookie 的影响

    进行刷新操作后,是否重新生成 cookie 文件或是对 cookie 文件进行修改

  11. 检查 cookie 内容存储是否完整正确

    若 cookie 进行了加密,先对 cookie 文件内容进行解密,然后检查是否按照设计要求存储了相关所有的 cookie 记录信息。

  12. 对应硬盘存储空间没有空闲时,是否能进行 cookie 内容的有效存储

  13. 多次做相同的操作或设置,检查是否更新或添加了新的 cookie 文件

    按照设计要求进行判断

  14. 如果使用 cookie 来统计次数,则要检测是否统计正确

    例如通过用户登录次数进行统计,访问网站,每次都需要输入用户名和密码,分第一次登陆还是非第一次登录

33. cookie 的缺点

  1. 大小和数目受限制。浏览器对一个域 cookie 的条目数有上限要求,且每个 cookie 的大小不得超过 4kb。
  2. 存在安全性问题,易被人拦截。
  3. 需要指定域,不可以跨域
  4. 浪费带宽,因为我每次请求一个新的页面,cookie 都会被自动发送过去。
  5. 有的移动端浏览器不支持 cookie 或浏览器禁用 cookie
  6. 有些状态不可能保存在客户端。例如,为了防止重复提交表单,我们需要在服务器端保存一个计 数器。如果我们把这个计数器保存在客户端,那么它起不到任何作用。

34. cookie 与 session 的区别

  1. cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
  2. cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗考虑到安全应当使用 session。
  3. session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用 cookie。
  4. 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

所以个人建议:

  1. 将登陆信息等重要信息存放为 session
  2. 其他信息如果需要保留,可以放在 cookie 中
© 2022 刘士. All rights reserved.

结果匹配 ""

    没有匹配的结果 ""