[收集] python自动化测试问题总结
1. super的作用? 为什么要使用super?
- super用于继承父类方法, 属性
- super在python3中不用写, 可以直接使用(python3是新式类)
- 使用super可以提高代码的复用性, 可维护性, 修改代码时, 只需修改一处
- (我自己的理解) 调用父类之后代码重写
2. python中列表和字典的区别?
- 获取元素的方式不同: 列表通过索引值获取, 字典通过键值对获取
- 数据结构和算法不同: 列表类似于矢量, 而字典使用的是hash算法, 搜索速度快
- 占用的内存不同:
- list
- 对象和指针数组是分开分配的, 数组是在堆上, 指针数组的大小是动态分配的, 分配的内存多于实际
- 由于是动态分配, realloc调整大小就会移动数据, 复制数据
- 大量数据的使用建议使用链表
- dict
- 字典本身默认有元素容量, 不够的才去堆上匹配, 需要扩容或者收缩, 就会动态重新分配内存, 重新hash,
- dict的keys()等调用生成list如果很大, 建议使用迭代器
- list
3. 如何结束一个进程?
- 调用terminate方法
- 使用subProcess模块的Popen方法
4. 进程, 线程有什么区别? 什么情况下用进程? 什么情况下使用线程?
- 区别
- 地址空间和其他资源(如: 打开文件): 进程之间相互独立, 同一进程各线程之间共享, 一个进程内的线程其他进程不可见
- 通信: 进程间通信IPC, 线程间可以直接读写进程数据段(如: 全局变量来通信), 需要进程同步和互斥手段的辅助, 以保证数据的一致性
- 调度和切换: 线程上下文切换比进程上下文切换要快的多
- 在多线程操作系统中, 进程不是一个可执行的实体
- 使用场景: 同时操作同一个对象是时候, 使用线程, 全局变量线程共享
5. 接口测试的流程, request有哪些内容?
- 流程:
(1) 获取接口文档
(2) 依据文档设计接口参数
(3) 获取响应
(4) 解析响应
(5) 校验结果
(6) 判断测试是否通过 - request内容:
(1) 封装了各种请求类型get, post等
(2) 以关键字的方式, 封装了各种请求参数, params, data, headers, token等
(3) 封装了响应内容, status_code, json, cookies, url等
(4) session 会话对象, 可以跨请求
6. UI自动化, 如何做集群?
selenium Grid
7. 如何封装自动化框架?
自动化框架主要的核心框架就是分层+PO模式: 分别为:
- 基础封装层: BasePage
- PO页面对象层
- TestCase测试用例层
- 日志处理模块
- ini文件处理模块
- unittest+ddt数据驱动模块
- jenkins持续集成模式组成
8. 如何把自动化测试在公司中实施推广?
- 项目组调研选择自动化工具并开会演示demo案例, 主要是selenium和robotframework两种
- 搭建自动化框架, 在项目中逐步开展自动化
- 把该项目的自动化流程, 框架固化成文档
- 推广到公司的其他项目应用
9. 请描述下自动化测试流程
- 编写自动化测试计划
- 设计自动化测试用例
- 表邪自动化测试框架和脚本
- 调试并维护脚本
- 无人值守测试
- 后期脚本维护(添加用例, 开发更新版本)
10. 自动化测试用例如何编写
- 自己设计, 一般刚开始以基本业务为主(登录–完成一个业务–退出)
- 从系统测试用例中进行塞选或由业务工程师提供
11. 上一个项目中自动化执行策略?
定时执行, 设置执行时间为晚上12点, 执行完毕后会自动发送通知
12. 自动化测试发现的BUG多吗?
不多, 之前项目组是把已经测试通过的基本功能再进行自动化脚本和在后续版本执行自动化测试, 它主要保证已经测试通过的功能在新版本更新后没有问题
13. 自动化测试过程中, 遇到的问题, 如何解决?
- 频繁的变更页面, 经常要修改页面对象类例的代码
- 自动化测试偶尔出现误报
- 自动化测试结果出现覆盖情况: Jenkins根据时间建立文件夹
- 自动化测试代码维护比较麻烦
- 自动化测试进行数据库对比数据
如果一个元素无法定位, 你一般会考虑哪些方面的原因?
- 页面加载元素过慢, 等待时间
- 页面有frame框架页, 需要先跳转入frame框架再定位
- 可能该元素是动态元素, 定位方式要优化, 可以使用部分元素定位或父节点和兄弟结点定位
- 可能识别了元素, 但不能进行操作, 比如元素不可用, 不可写等, 需要用js先把前置的操作完成