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 工作原理
总结
问题:工作有没有用过 Appium 测试框架?对 Appium 的熟悉程序怎么样?Appium 的底层原理了解吗?
- 用过,在工作有编写过 Appium 的自动化测试脚本,参与过移动端 app 测试框架的封装
- 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
答案总结
问题:HTTP 与 HTTPS 的区别是什么?
- HTTPS 比 HTTP 更安全
- HTTP 是超文本传输协议,连接简单无状态,信息明文传输
- HTTPS 通过 SSL/TLS 提供安全方式
- HTTP 和 HTTPS 使用完全不同的连接方式
http使用了tcp连接后就直接进行请求和响应了
https还要经过SSL安全握手的过程 - HTTP 和 HTTPS 用的端口也不一样
- HTTP 是 80 端口
- HTTPS 是 443 端口
- 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 报文,并分配资源
四次挥手
- 假设 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 三次握手与四次挥手
- 三次握手
- 首先 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的区别有哪些
消息队列测试场景
面试题目
面试官通常会问,什么是消息队列。你是怎么测试的?
- 解题思路:
- 什么是消息队列。
- 消息队列应用场景。
- 消息队列测试点列举。
什么是消息队列
消息队列的应用场景
- 异步通信
- 流量削峰
- 应用解耦
- 负载均衡
- 数据同步
消息队列的测试点
所属类型 | 注意点 | 测试点 |
---|---|---|
生产者 | 时序 | 不同时序推送消息,先后顺序是否和预期一致 |
数据正确性 | 内容是否完整 | |
内容是否满足需求 | ||
推送 | 推送失败是否有重试 | |
消费者 | 正确性 | 正常消费信息 |
消息被消费后是否清除 | ||
消费者接收到的信息和生产者一致 | ||
消费者堵塞,如何处理。 | ||
幂等(接收到重复消息) |
#python的高阶函数
filter过滤:
map映射:
sorted函数:
总结:
python的垃圾回收机制:
网络状态响应码: