ui自动化测试
Selenium的UI自动化面试中常见的问题包括:
1. Selenium的工作原理是什么?
了解Selenium内部是如何工作的,通过WebDriver API控制浏览器。
2. Selenium定位元素的方法有哪些?
id、name、class、xpath、css等,要对比优缺点。
3. 如何处理动态id、动态xpath的元素定位?
通过包含特定文本、父元素、兄弟元素等相关属性定位。
4. Page Object Model的优势是什么?
提高代码复用,减少重复,使框架可维护。
5. 如何处理alert/iframes弹出框?
使用alert/switch_to方法。
6. 如何处理下拉菜单、多选框等元素?
使用Select类的方法。
7. 浏览器驱动ChromerDriver和Chromedriver的关系?
chromedriver实现驱动浏览器。
8. 如何实现跨浏览器测试?
通过WebDriver的子类化实现,配合浏览器驱动。
9. 怎么进行元素等待?
显示等待和隐式等待的区别及应用。
10. 自动化框架设计的思想和原则?
数据驱动、关键字驱动、业务关键词拆分等。
11. 如何监控自动化运行结果?
可以使用ReportNG/alure/htmltestreuuer生成测试报告。
12. 自动化测试的优势和使用场景?
回归测试,重复测试用例,稳定性验证等。
13. 如何测试含有拖拽功能的页面,例如图片组件的拖拽?
可以利用ActionChains的drag_and_drop方法实现拖拽效果的自动化。指定源元素和目标元素进行拖拽。
14. 如何处理上传文件功能的自动化?
使用send_keys方法,通过文件路径设置输入框内的值,达到上传文件的效果。
15. 如何获取元素的属性、文本、位置等信息?可以利用Selenium的方法如get_attribute、text、location等获取元素相关信息。
16. 测试下拉菜单时,如何判断选中了哪一项?
通过获取下拉菜单的selected元素信息来判断被选中的option。
17. 如何测试键盘操作、鼠标操作等自动化场景?
使用keyboard、mouse相关的API发送虚拟输入事件。
18. 测试弹窗时,如果alert无法切换,该如何处理?
可以通过执行JavaScript代码的方式来关闭弹窗。
19. 测试浏览器跳转时,如何获取新打开的窗口或标签页?
调用switch_to_window切换句柄定位新的浏览器窗口。
接口自动化:
1. pytest的优势有哪些?
简单易用,无需类和方法,可通过函数和模块组织测试
支持参数化,可以参数化fixture实现数据驱动
丰富的第三方插件生态系统
详细的断言和日志,方便调试定位
2. 如何编写parametrized参数化fixtures?
使用@pytest.mark.parametrize装饰器,传入不同的参数组合
加载测试数据文件,根据数据行驱动不同的参数
3. 如何实现pytest fixtures的前置后置和作用域?
使用yield语句实现 teardown
通过scope参数控制作用域:function, class, module
4. pytest中assert和unittest中的assert区别?
pytest的assert本身是一个函数,更简洁
unittest的assert需要导入模块并以Assert开头
5. 如何加载和读取配置文件中的配置?
使用pytest.config.getoption方法
也可以用yaml、ini等模块加载配置文件
6. pytest Marks标记的用法是什么?
用于标记测试用例,通过标记过滤用例
@pytest.mark.标记名 标记用例
- -m 选项运行指定标记的用例
7. 如何自定义和调用pytest fixtures?
用@pytest.fixture装饰器
测试用例中以参数形式接收fixtures
8. pytest生成测试报告的方法有哪些?
pytest-html:生成HTML格式报告
allure-pytest:功能丰富的测试报告框架
9. mock的使用场景有哪些?如何使用mock模拟requests请求?
模拟方法、API的返回结果
使用mock模块的patch方法模拟requests的行为
10. 如何进行接口测试结果的断言?-
使用assert语句进行断言
检查响应代码、响应内容等是否符合预期
11. pytest如何跳过测试用例或者标记条件跳过?
使用@pytest.mark.skip装饰器跳过用例
根据标记条件跳过用例,如 -m 'not 标记名'
12. JSON、YAML等测试数据的加载方式?
可以使用json、yaml模块加载json、yaml文件
- 解析后传递给参数化的测试用例使用
13. pytest如何获取测试报告相关metadata?
在pytest.ini定义 markers,自定义标记
测试用例使用标记,报告中会显示标记的metadata
14. pytest如何重复执行失败的测试用例?
reruns:设置失败重跑次数
- --lf, --last-failed 只重跑失败用例
15. 如何基于pytest实现接口自动化框架设计?
conftest.py 中定义fixture
测试文件按模块组织用例,调用fixture
hook函数可扩展用例执行流程
16. pytest的插件机制是如何扩展的?、
实现对应的hook函数
通过entry_points注册扩展点
插件通过钩子挂载到pytest生命周期
17. 测试用例如何参数化?
@pytest.mark.parametrize装饰器
参数可以来源于函数、文件等
18. hook函数的作用是什么?
用于插入额外的逻辑到pytest的执行流程
如添加 setup, teardown, 生成报告等
19. 如何基于fixture进行前后置处理?
fixture可返回对象,在测试用例中使用
yield前为setup, yield后为teardown
20. pytest运行测试用例的顺序规则是什么?-
默认按文件名排序,再按函数名排序
可以通过标记按特定顺序运行