本文3124字,阅读约需7分钟
Hi,大家好,新的一年,你有什么Flag呢?想必加薪搞钱必定是其中一项,新年伊始,给大家分享一波自动化面试题。祝2022年加薪成功~
一 什么是PO模式,为什么要使用它?
PO是page Object 模式的简称,它是一种设计思想,意思是把一个页面,当作一个对象,页面的元素和元素之间的操作方法就是页面对象的属性和行为,PO模式一般使用三层架构,分别为基础封装层BasePage,PO页面对象层,TestCase测试用例层。
Page Object是一种程序设计模式,将面向过程转变为面向对象(页面对象),将测试对象(按钮、输入框、标题等)及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。
这样,在Selenium测试页面中可以通过调用页面类来获取页面元素,从而巧妙的避免了当页面元素id或者位置变化时,需要改测试页面代码的情况。当页面元素id变化时,只需要更改测试Class中页面的属性即可。可以代码复用,降低维护成本,提高程序可读性可编辑效率。
PO模式优点:
- 以页面为单位,集中管理元素和方法。当页面元素或流程变动时只需要修改相关页面方法即可,可不需要修改相应的脚本;
- 编写脚本简单,顺着业务逻辑写脚本。page object模式以业务逻辑上的每一步操作作为分区点,页面方法代表了此页面的业务操作并严格控制此操作的后续流程;
- 后期维护方便。
二 在Python中如何进行数据驱动测试?
① 在unittest中,没有自带的数据驱动,我们得借助ddt来实现。
1)安装ddt
2)ddt常用方法
② pytest框架,自带数据驱动实现,是通过@pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。
③ 也可以根据自己需求用python实现数据的读取和驱动。
三 自动化使用的测试框架是什么?
测试框架:python unittest requests ddt openpyxl pymysql logging。
python:编程语言,入门简单。
unittest :定义一个测试用例类,具体的方法来维护测试用例的生命周期,测试场景行为,测试用例 前置场景,行为,期望结果,实际结果,断言方法,Setup、 teardown方法。
requests:接口调用 ,支持http请求的库,API 简洁,提供不同的http请求方法,支持session,cookies。
ddt :数据驱动,ddt 类装饰器,data 测试方法装饰器, unpack解包可迭代的数据类型。
openpyxl:数据管理 excel管理数据,使用openpyxl模块来进行excel数据的读和写(excle,csv, json, yaml, txt都可以管理测试数据)。
pymysql:数据库交互,数据校验。
eval,json:数据格式的转换 eval将python支持的格式转换成对应的格式。
logging:日志处理, 统一日志输出格式,渠道,级别,执行结果的记录,便于定位问题。
jenkins:持续集成。
四 selenium自动化中quit和close的区别?
close是关闭你当前的tab页面;
quit是关闭全部浏览器tab页面,并退出浏览器session。
应用场景:
close用在执行用例过程中关闭某一个页面的操作。
quit一般用在结束测试之前的操作。
五 你们公司业务中,自动化和手工分别占多少?
各公司自动化和手工的占比取决于对自动化测试的投入,这个问题的回答建议先做好数据,比如我们的功能测试用例总计1000,从中分析出要实现的自动化用例300条,那么自动化的占比就出来了。那么哪些测试用例会被用来做自动化,稳定模块的用例、更能优先级高的用例。手工测试一般用来做新功能测试业务,自动化一般用来做旧的功能用来回归业务。
六 如何提高selenium脚本的执行速度?
1.优化测试用例。设置等待时间的时候,少用sleep,尽量不用implicitly_wait,多用显式等待方法;
2.减少不必要的操作步骤。如经过三四步才能打开要测试的页面的话,可以直接通过网址来打开;
3.中断页面加载。如果加载的内容不影响我们测试,就设置超时时间,中断页面加载; 4.使用Selenium grid,通过testNG实现并发执行。在编写测试用例的时候,实现松耦合,然后再服务器允许的情况下,尽量设置多线程实现并发运行。
七 你平常做接口测试的过程中发现过哪些bug?
发现的Bug可总结如下:
- 常规错误,接口没实现,没按约定返回结果,边界值处理出错等。
- 输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理;
- 输入错误的参数、多输入、少输入参数,接口可能出现的错误;
- 安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请求拦截等;
- 性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;
八 Python中dict和json格式怎么转换?
① dict转json
使用json.dumps,python对象编码成json对象。
示例代码如下:
输出结果如下:
② json转dict
使用json.loads,将json对象解码成python对象。
示例代码如下:
输出结果如下:
九 Python将如何2个元组合并成字典?
示例代码如下所示:
输出结果如下:
代码语言:javascript复制{'name': '公众号:ITester软件测试小栈', 'author': 'coco'}
十 Selenium有几种常见定位方式?
id:根据id来获取元素,返回单个元素,id值一般是唯一的;
name:根据元素的name属性定位;
tagName:根据元素的标签名定位;
className:根据元素的样式class值定位;
linkText:根据超链接的文本值定位;
partiaLinkText:根据超链接的部分文本值定位;
cssSelector:css选择器定位;
xpath:通过元素的路径、属性定位。
其中xpath和css定位都比较强大,在自动化中使用较多。