移*面试
1.python基础知识,可选参数,文件读取,json等一些常用库和方法使用
可选参数:也称为默认参数,是指调用函数时可以省略的参数。如果在调用时不提供这些参数,函数会使用预先定义的默认值,可选参数能让你的代码更灵活、更易用。
注意项:1、必需参数必须写在可选参数之前;2、对于可变默认值,总是使用None;3、强制使用关键字参数提高可读性
文件读取:open() 函数,使用完需要close()
file_object= open('test.txt', mode='r', encoding='utf-8')
# r-read w-read a-add(末尾追加) +读写模式
# 最节省内存的方式,迭代器方式读取(推荐)
with open('test.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line, end='')
read() - 读取所有内容
readline() - 读取一行
readlines() - 读取所有行到列表
write() - 写入字符串
writelines() - 写入字符串列表
tell() - 获取当前位置
seek() - 移动位置
truncate() - 截断文件
json等一些常用库和方法使用:
json.dumps(): 对数据进行编码。
json.loads(): 对数据进行解码。
2.selenium/appium基本原理,操作流程
selenium的基本原理及操作流程:核心是WebDriver,操作流程则围绕着启动浏览器、定位元素、执行操作和关闭浏览器这几个核心步骤展开。
Appium 的基本原理:一个典型的C/S架构工具,脚本通过Appium提供的客户端库,将操作指令(如“点击登录按钮”)转换成符合WebDriver协议的HTTP请求,并发送给Appium服务器,经由Appium服务器解析出要执行的操作,动态转换为目标平台的原生自动化指令(如Android的UiAutomator2或iOS的XCUITest),进而转发给设备上相应的代理程序,从而实现对移动应用的跨平台自动化测试。
3.自动化框架的搭建,工程结构怎么样的,如何设计的。
自动化框架:核心在于清晰的工程结构和分层设计。一个优秀的框架,除了分层,还离不开松耦合与高内聚(数据与脚本分离、配置与代码分离)、可扩展性、与CI/CD的无缝集成等设计思想
第一层:核心层 (Core Layer) / 公共方法层
第二层:业务层 (Business Layer) / 页面对象层
第三层:用例层 (Test Case Layer)
your_project/ # 项目根目录
├── config/ # 配置模块
│ ├── config.ini # 环境、浏览器、超时等全局配置
│ └── init.py
├── data/ # 测试数据模块
│ ├── test_data.json # 或 .yaml, .csv 文件
│ └── init.py
├── core/ # 核心模块 (框架底层能力)
│ ├── base_page.py # 所有页面类的基类,封装Selenium/Appium等通用操作
│ ├── driver.py # 驱动管理 (浏览器、App启动)
│ ├── logger.py # 日志封装
│ └── utils.py # 通用工具类 (时间处理、文件读写等)
├── pages/ # 页面对象模块 (PO模型层) [citation:3]
│ ├── login_page.py # 登录页面的元素定位和操作方法
│ └── home_page.py # 首页的元素定位和操作方法
├── testcases/ # 测试用例模块 (业务逻辑层) [citation:1][citation:3]
│ ├── test_login.py # 登录相关的测试用例
│ ├── conftest.py # Pytest的测试固件 (fixture)
│ └── init.py
├── reports/ # 测试报告
│ └── allure-results/
├── logs/ # 运行日志
├── requirements.txt # 项目依赖
└── pytest.ini # Pytest 配置文件
4.自动化测试相关知识点,关键字驱动,数据驱动,元素定位,接口调用。
5.给你一个验证码的登录界面,如何设计自动化测试
验证码的登录界面的自动化测试:
1、绕过验证码:万能验证码、验证码屏蔽开关、
2、验证码识别技术:简单图形验证码(OCR识别)、云端识别服务(使用打码平台API,如超级鹰、打码兔等)
3、验证码无法绕过的处理策略:重试机制、手动干预
6.allure生成报告,怎么配置,怎么集成到jekins实现
allure报告配置集成到jekins实现:
1、配置测试项目以生成 Allure 所需的原始数据
测试框架在运行时产生 allure-results 目录,里面包含用于生成报告的 JSON、txt、png 等原始数据。配置方式取决于你使用的测试框架和构建工具
2、在 Jenkins 中集成 Allure
安装 Allure 插件:Allure Jenkins Plugin ->全局配置 Allure 命令行工具:Add Allure Commandline ->在 Jenkins Job 中配置报告:点击 Add post-build action,在 Path 字段中,填写包含 Allure 结果文件的目录路径 ->
7.自动化用例维护
自动化用例维护的本质,是和软件的变更速度赛跑。核心思路不是"保证永远正确",而是"在频繁变更中,用最小成本快速定位并修复失效的用例"。
- 遵循测试金字塔,合理分层,这是降低维护成本最根本的思路
整体思路:把主要精力放在接口测试,用少量UI测试验证关键流程 - 将用例视为代码,纳入版本控制
A、用例设计层面:稳定与解耦
减少用例间的依赖:每个用例都应该是独立的,能单独运行
避免硬编码,使用数据驱动:把测试数据(账号、商品名、URL等)从代码中抽离出来,放到配置文件、Excel或YAML文件中。这样业务参数变化时,只需要改数据文件,无需修改用例代码
抽象页面对象(针对UI测试):将页面元素定位和操作封装成页面类。业务逻辑变化时,只改页面类;UI元素变化时,也只改页面类。用例脚本本身只关心业务步骤,不关心具体元素
B、代码实现层面:健壮与清晰
合理等待,避免线程休眠,推荐使用显式等待,即等待某个条件成立(如元素可见、状态码返回)后再继续
利用重试机制
添加详细日志和截图
总结:维护自动化用例的6条军规
分层:多写接口测试,少写UI测试。
独立:用例之间不互相依赖。
解耦:数据和业务逻辑分离,页面元素和业务流程分离。
可观测:失败时有日志、截图、响应报文可以追溯。
自清理:用完数据要销毁,不给下次执行留垃圾。
及时修复:失败用例当天或次日修复,不容忍持续失败的用例
8.git相关使用:
Git:把你整个项目看作一系列快照。每次提交,Git都会对所有文件拍一张“照片”,如果文件没变,它就只是链接到之前的相同文件
git status # 查看当前状态:随时检查哪些文件被修改了
git add . # 添加当前目录所有变更到暂存区(新增、修改)
git add
git commit -m "这里写清晰的提交说明" # 提交变更到本地仓库:将暂存区的快照永久保存到本地仓库,并附上一段清晰的说明
git pull origin
git push origin
git branch # 查看本地分支,当前分支前会有 * 号
git switch -c feature/login # 创建并切换到新分支
git merge feature/login # 将功能分支合并到主分支
9.mysql底层的一些知识
mysql底层原理:InnoDB 存储引擎、索引结构、事务实现、日志系统和锁机制
当你把一条 SQL 语句发给 MySQL 时,它经历的过程可以分为两大块:Server 层(负责连接、分析、优化)和存储引擎层(负责读写数据)
以一条 update 语句为例,它需要经过连接器、分析器、优化器,然后通过执行器调用 InnoDB 接口。InnoDB 通过 B+ 树索引找到数据,利用 redo log 和 binlog 的两阶段提交保证数据一致性,同时通过 undo log 和 MVCC 实现事务的隔离性。
优化器 (核心考点)
执行计划 (Explain):
type:访问类型,从好到坏依次是 system > const > eq_ref > ref > range > index > ALL。ALL 是全表扫描,是需要优化的信号。
key:实际使用的索引。
rows:预估需要扫描的行数。
Extra:额外信息,出现 Using filesort(需要额外排序)或 Using temporary(使用了临时表)通常意味着需要优化。
索引失效的场景(高频):
对索引列做了函数操作或计算(如 where left(name, 3) = 'abc')。
隐式类型转换(如字段是字符串,但传参是数字)。
使用 != 或 <> 操作符(有时会导致失效,取决于数据分布)。
like 语句以 % 开头
InnoDB 引擎的索引结构:B+ 树(矮胖:非叶子节点只存索引,不存数据,能存放更多索引。千万级数据,树的高度依然维持在 3-4 层,磁盘 IO 次数极少)
事务 ACID:原子性、持久性、隔离性、一致性
10.数据结构相关的
二叉树:为了让数据拥有“二分查找”的能力而设计的
同时做到“查找快”和“插入快”,靠的就是两条规则:左小右大、递归定义(它的每一个子树,本身又是一棵符合“左小右大”规则的二叉树)
列表[List ] :有序可变可重复 “有序的购物车”-需要保持顺序、随时增删改的数据集。
元组(Tuple):有序、不可修改、可重复 - “封印的文物”-数据不需要改变,或者希望作为字典的键(因为不可变)
字典{Dict }:无序可变、键值对存储、键唯一- “新华字典/电话簿”-需要快速通过一个唯一标识(如ID、姓名)查找对应数据
集合{ Set} :无序可变、元素唯一(自动去重)- “大乱炖的碗”-去重、数学集合运算(交集、并集)
11.流水线无人看管持续集成:提交代码--构建--自动化测试执行--生成报告--邮件/办公应用推送测试结果全流程自动化
流水线应该由代码事件自动触发,而不是手动点击。最常见的是配置 GitHub/GitLab Webhook,当开发者推送代码或发起合并请求时,自动触发 Jenkins 任务,从代码拉取、依赖安装、代码扫描、单元测试、构建打包,到部署到测试环境,再到执行自动化测试(接口、UI),最后生成报告并归档,整个过程完全自动化,不需要人工介入。
中间要设置质量门禁 (Quality Gate),如编译关卡、单元测试关卡、自动化测试关卡、代码扫描关卡,低于设定的阈值则流水线直接失败,并通过邮件、钉钉等方式通知相关人员。
浙公网安备 33010602011771号