面试题准备-可乔

Selenium 原理

问题

面试官可能会问:做 web 测试用过 Selenium 吗?说一下 Selenium 的工作原理。

考察点分析

面试官主要目的:

  • 了解是否使用过 selenium 进行 web 自动化测试
  • 为什么 Selenium 支持多浏览器
  • 是否了解 Selenium 工作原理

技术点

  • selenium 有哪几部分组成
  • 源码角度分析 selenium 工作原理
  • 使用了 WebDriver Wire Protocol 协议

Selenium 介绍

  • 官网:https://www.selenium.dev/
  • WebDriver 用于操作浏览器
  • Selenium IDE: 是用来录制回放测试用例的工具
  • Selenium Grid: 分布式并发执行用例

Selenium 自动化测试

  • Selenium 用于 Web 应用程序的 UI 自动化测试工具
  • 可以跨平台(Mac/Linux/Windows)
  • 支持所有主流浏览器,包括(Chrome/Chromium、 Firefox、 Internet Explorer、 Edge、 Opera 和 Safari)

为什么能够支持这么多种浏览器?

  • Selenium WebDriver 是典型的 Server-Client 模式
  • 浏览器厂商会提供驱动浏览器操作的中间件(WebDriver), 通过这个中间件可以直接驱动浏览器执行各种操作,比如点击,滑动, 输入,下拉等等

Selenium 工作原理

总结

问题:做 web 测试用过 Selenium 吗?说一下 Selenium 的工作原理。
用过,Selenium的工作原理是:selenium 之所以支持多浏览器,是因为不同的浏览器厂商会提供不同版本的驱动程序,来驱动浏览器模拟各种操作(比如滑动,点击,下拉等)。Selenium 在给中间件发送请求时,会遵循一个特定的协议(WebDriver Wire Protocol)进行通讯。

Appium 原理

问题

面试官问:工作有没有用过 Appium 测试框架?对 Appium 的熟悉程序怎么样?Appium 的底层原理了解吗?

考察点分析

面试官主要的目的:

  • 想了解你有没有用过 Appium 测试框架
  • 常用的 API 是否熟悉,移动端的特殊组件,特殊操作是否能处理
  • 是否看过源码
  • 是否了解 Appium 框架底层工作原理

技术点

这个问题涉及到的技术点:

  • 常用的 appium api
  • 底层通讯协议
  • Appium 底层框架原理

Appium 介绍

  • 官网:http://appium.io/
  • 跨语言:Java、Python、nodejs 等
  • 跨平台
    • 移动端:Android、iOS
    • PC 端:Windows、Mac
  • 底层多引擎可切换
  • 生态丰富,社区强大

Appium 工作原理

image

总结

问题:工作有没有用过 Appium 测试框架?对 Appium 的熟悉程序怎么样?Appium 的底层原理了解吗?

  1. 用过,在工作有编写过 Appium 的自动化测试脚本,参与过移动端 app 测试框架的封装
  2. Appium 的原理:Appium 是典型的 C/S 架构模式的框架。第一次运行 Appium 测试代码,向 Appium Server 发送请求时,会传递一个 DesireCapability 对象,告诉 AppiumServer,被测试设备的一些信息,第一次请求完成,会创建一个 session 对象,随后会使用这个 session 对象完成对设备的操作(比如点击,输入等)。

经典面试题-显式等待与隐式等待

相关面试题

  • 显式等待与隐式等待的区别
  • 三种等待方式分别是什么,有什么区别

考察点

在写自动化测试脚本的过程中,是否熟练掌握了三种等待的使用方式与使用场景?何时用显式等待?何时用隐式等待?什么时候用强制等待?

关联技术点

  • 《强制等待与隐式等待》:三种等待的基本使用与原理。
  • 《显式等待高级使用》:显式等待的条件封装

答案总结

三种等待方式分别是什么,有什么区别?显式等待与隐式等待的区别?
答案:分别从使用方式、原理、适用场景进行总结

经典面试题-定位不到元素

学习目标

  • 了解常见问题
  • 了解每个问题对应的知识点/解决方案
  • 回顾录播课内容

元素定位常见的面试相关问题

  • Selenium/Appium定位方法有几种?分别是?
  • 定位不到元素是什么原因导致的?
  • selenium 中隐藏元素如何定位?
  • 如何定位动态元素
  • 如何通过子元素定位父元素
  • 如何判断一个页面上元素是否存在?
  • 有的元素就加载页面上,但是你却定位不到,怎么解决
  • 一个元素明明定位到了,点击无效(也没报错),如何解决?

技术点分析

元素是否在页面存在

  • 问题:如何判断一个页面上元素是否存在?
  • 解决方案:通过查看当前页面dom,搜索该元素是否存在。如果是脚本自动化运行过程中,应该通过打印page_source,即可了解到该元素在运行过程中是否存在
  • 对应知识点:《自动化关键数据记录》

元素定位

面试问题 答案 对应录播
Selenium定位方法有几种?分别是? 八种定位方式,常用的为id、name、css、xpath 《常见控件定位方法》
如何通过子元素定位父元素? 编写xpath定位 《高级定位-xpath》

元素操作

面试问题 原因 解决方案
一个元素明明定位到了,点击无效(也没报错),如何解决? 异步加载js导致点击不到 循环点击该按钮,直到生效为止
app突然出现弹框,导致元素遮挡 通过添加黑名单异常处理解决
selenium 中隐藏元素如何定位,操作? 隐藏元素可以直接定位,但是无法直接点击或者交互 使用js执行交互操作
如何获取app中的toast消息提示? toast闪过太快,不好定位

元素定位不到

原因 解决方案 对应知识点
定位不正确 在console先测试定位是否正确 定位
页面还没有加载完成 添加死等验证,使用显示等待或隐式等待进行优化 隐式等待、显式等待
存在动态ID 定位方式使用css或者xpath的相对定位 高级定位之css、xpath
页面有iframe 切换到iframe后定位 网页 frame 与多窗口处理
页面切换window 切换到对应窗口后定位 网页 frame 与多窗口处理

演示环境

HTTP 与 HTTPS 的区别

经典面试题

  • HTTP 与 HTTPS 的区别是什么?

考察点

  • 《计算机网络》相关知识
  • 了解 HTTP 与 HTTPS 协议的特点
  • 理解 HTTP 与 HTTPS 的通信过程

技术点

  • HTTP 与 HTTPS 的概念
  • HTTP 通信过程
  • HTTPS 通信过程

HTTP 与 HTTPS 的概念

  • HTTP
    • 超文本传输协议
    • 是一个基于请求与响应,无状态的,应用层的协议
    • 常基于 TCP/IP 协议传输数据
    • 以明文方式发送内容
  • HTTPS
    • 安全套接字层超文本传输协议
    • 通过计算机网络进行安全通信的传输协议
    • 在 HTTP 的基础上加入了 SSL/TLS 协议
    • HTTP + 加密 + 认证 + 完整性保护 = HTTPS

image

答案总结

问题:HTTP 与 HTTPS 的区别是什么?

  1. HTTPS 比 HTTP 更安全
  • HTTP 是超文本传输协议,连接简单无状态,信息明文传输
  • HTTPS 通过 SSL/TLS 提供安全方式
  1. HTTP 和 HTTPS 使用完全不同的连接方式
    http使用了tcp连接后就直接进行请求和响应了
    https还要经过SSL安全握手的过程
  2. HTTP 和 HTTPS 用的端口也不一样
  • HTTP 是 80 端口
  • HTTPS 是 443 端口
  1. HTTPS 协议需要到 CA 申请证书,可能需要一定费用

http不适合传递敏感信息

GET、POST 区别

经典面试题

  • 说出 GET 与 POST 的几个重要的区别

GET 与 POST 区别

GET 与 POST 区别

GET POST
请求资源 从指定的资源请求数据 向指定的资源提交要被处理的数据
可见性 数据在 URL 中对所有可见 数据不会显示在 URL 中
安全性 安全性差 安全性好
对数据类型的限制 只允许 ASCII 字符 没有限制也允许二进制数据
长度限制 长度受浏览器限制 无限制
参数 保留在浏览器 参数不会保存在浏览器
编码类型 application/x-www-form-urlencoded application/x-www-form-urlencoded or multipart/form-data。为二进制数据使用多重编码。
缓存 能被缓存 不能缓存
书签 可被保存 不可收藏为书签
后退按钮/刷新 不影响 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

总结

说一下 GET 与 POST 的区别

  • HTTP 的 method 字段不同
  • POST 可以附加 body,可以支持 form、json、xml、binary 等各种数据格式
  • 行业通用的规范
    • 无状态变化的建议使用 GET 请求
    • 数据的写入与状态修改建议用 POST
  • 传送数据量不同
  • 安全性不同

Session Cookie Token 区别

Session Cookie Token 区别

  • Session:数据存储到服务端,只把关联数据的一个加密串放到 Cookie 中标记
  • Cookie:浏览器接受服务器的 Set-Cookie 指令,并把 cookie 保存到电脑上,每个网站保存的 cookie 只作用于自己的网站
  • Token:是一个用户请求时附带的请求字段,用于验证身份与权限

Session 实现机制

服务器创建 Session 出来后,会把 Session id,以 Cookie 的形式回写给客户端 浏览器,这样,只要客户端的浏览器不关,再去访问服务器时,都会带着 Session id ,服务器发现客户机浏览器带 Session id 过来了,就会使用内存中与之对应的 Session 为之服务。(Session 会存在服务器)

cookie 实现机制

  • Cookie 通过在客户端记录信息确定用户身份,
  • Cookie 由服务器生成,发送给浏览器,浏览器把 Cookie 以 kv 形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该 Cookie 发送给服务器。

Token 的原理

  • 基于 Token 的身份验证是无状态的,我们不将用户信息存在服务器或 Session 中。这解决了在服务端存储信息时的许多问题 NoSession 意味着你的程序可以根据需要去增减机器,而不用去担心用户是否登录。
  • 基于 Token 的身份验证的过程如下:
    • 用户发送数据请求
    • 程序验证
    • 程序返回一个签名的 token 给客户端
    • 客户端储存 token,并且每次用于每次发送请求。
    • 服务端验证 token 并返回数据。
  • token 通常在 HTTP 的头部发送给服务端

说一下 Session,Cookie,Token 的工作原理

Cookie Session Token
存储位置 客户端 服务器 客户端
安全性 较差 较高 相对最高
占用服务器资源 占用服务器资源消耗少 当访问多时消耗服务器的资源 不占用服务器资源
作用 记录用户状态,辩认身份(传话管理,个性化,追踪) 同cookie 减轻服务端查询数据库的压力,提供授权和认证功能
优点 易于使用和实现,不需要服务器资源,透明性,持久性 信息非常的安全,都是存储在服务器端的 无状态,可扩展和解耦,更好的跨域(跨域资源共享)
缺点 安全性差 服务器压力大,,扩展性不强,分布式,跨系统实现困难 最小的token也比cookie更大,占带宽,性能问题(需要验证两次),无法在服务端注销,很难解决劫持问题
适用范围 在线定货系统、网站个人化和网站跟踪 session 更适用于客户端代码和服务端代码运行在同一台服务器上 token 更适用于项目级的前后端分离(前后端代码运行在不同的服务器下)

TCP 三次握手四次挥手

三次握手

  • 首先 Client 端发送连接请求报文
  • Server 端接受连接后回复 ACK 报文,并为这次连接分配资源
  • Client 端接收到 ACK 报文后也向 Server 端发生 ACK 报文,并分配资源
    image

四次挥手

  • 假设 Client 端发起中断连接请求,也就是发送 FIN 报文。
  • Server 端接到 FIN 报文后,先发送 ACK,这个时候 Client 端就进入 FIN_WAIT 状态,继续等待 Server 端的 FIN 报文。
  • 当 Server 端确定数据已发送完成,则向 Client 端发送 FIN 报文
  • Client 端收到 FIN 报文后, 发送 ACK 后进入 TIME_WAIT 状态,如果 Server 端没有收到 ACK 则可以重传。Client 端等待了 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭
  • Client 端关闭连接
    image

总结 说一下 tcp 三次握手与四次挥手

  • 三次握手
    • 首先 Client 端发送连接请求报文
    • Server 段接受连接后回复 ACK 报文,并为这次连接分配资源
    • Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源
  • 四次挥手
    • Client 端发起中断连接请求(发送 FIN 报文)
    • Server 端接到 FIN 报文后,先发送 ACK,Client 端进入 FIN_WAIT 状态,继续等待 Server 端的 FIN 报文。
    • 当 Server 端确定数据已发送完成,则向 Client 端发送 FIN 报文
    • Client 端收到 FIN 报文后, 发送 ACK 后进入 TIME_WAIT 状态,如果 Server 端没有收到 ACK 则可以重传。Client 端等待了 2MSL 后依然没有收到回复,则证明 Server 端已正常关闭
    • Client 端关闭连接

TCP 与 UDP 的区别

语音、视频大部分是使用的UDP

  • TCP:面向连接、错误重传、拥塞控制,适用于可靠性高的场景
  • UDP:不需要提前建立连接,实现简单,适用于实时性高的场景

UDP 无连接,TCP 面向连接

  • 使用 UDP 不需要提前建立连接
  • 使用 TCP 协议的双方在发送数据之前必须使用
  • UDP 支持一对一,一对多,一对全的通信
  • TCP 仅支持一对一

传输方式

  • UDP 是无连接的不可靠的传输
  • TCP 是有连接的可靠传输

数据报首部

  • UDP 首部是 4 个字段,每个字段两个字节,共 8 个字节
  • TCP 首部最小长度为 20 字节,最大长度为 60 字节

问题:说一下TCP与UDP的区别有哪些
image

消息队列测试场景

面试题目

面试官通常会问,什么是消息队列。你是怎么测试的?

  • 解题思路:
    • 什么是消息队列。
    • 消息队列应用场景。
    • 消息队列测试点列举。

什么是消息队列

消息队列的应用场景

  1. 异步通信
  2. 流量削峰
  3. 应用解耦
  4. 负载均衡
  5. 数据同步

消息队列的测试点

所属类型 注意点 测试点
生产者 时序 不同时序推送消息,先后顺序是否和预期一致
数据正确性 内容是否完整
内容是否满足需求
推送 推送失败是否有重试
消费者 正确性 正常消费信息
消息被消费后是否清除
消费者接收到的信息和生产者一致
消费者堵塞,如何处理。
幂等(接收到重复消息)

#python的高阶函数

filter过滤:

map映射:

sorted函数:

image

总结:

python的垃圾回收机制:

网络状态响应码: