1、你会封装自动化测试框架吗?
这个问得最多,甚至有很多公司直接写在招聘要求中!
当然可以,自动化框架主要的核心框架就是分层+PO 模式:分别为:
基础封装层 BasePage,PO 页面对象层,TestCase 测试用例层。然后
再加上日志处理模块,ini 配置文件读取模块,unittest+ddt 数据驱动
模块,jenkins 持续集成模式组成。
2、自动化测试用例如何编写?以下答案二选一即可:
1.用例是自动化测试工程师自己设计的,一般刚开始已基本业务流程为
主(登录--完成一个业务--退出)
2.从系统测试用例中进行筛选或由业务工程师提供
3、自动化测试过程中,你遇到了哪些问题,是如何
解决的?
1.频繁地变更页面,经常要修改页面对象类里面的代码
2.自动化测试偶尔出现过误报
3.自动化测试结果出现覆盖的情况:Jenkins 根据时间建立文件夹
3.1 如何降低自动化维护成本
在选取将用例自动化时就要注意,尽可能的选取比较稳定的接口/
内容做自动化测试;
.
测试人员在编写测试脚本时对脚本质量的要求,重用性,复用性,
搭建高质量的测试框架;
.
测试工具的选取使用(比如选取专业的/商业话的测试软件工具),
以及硬件服务的配套使用;
.
加强提高测试人员的编码开发实力,这样能够创造出更多有用的
测试工具
3.2 如何保证脚本的有效性?
使用分层结构实现业务逻辑、脚本、数据分离。
使用 PO 设计模式,将一个页面用到的元素和操作步骤封装在一
个页面类中。如果一个元素定位发生了改变,我们只用修改这个页面的
元素属性。
对于页面类的方法,我们尽量从客户的正向逻辑去分析,方法中
是一个独立场景,例如:登录到退出,而且不要想着把所有的步骤都封
装在一个方法中。
测试用例设计中,减少测试用例之间的耦合度。
元素定位时,使用稳定的相对路径来定位,优先选择 id,避免使
用绝对路径。
4、在上一家公司做自动化测试用的什么框架?
可以说出以下自己擅长的一种:
1.python+selenium+unittest+htmltestrunner
2.python+selenium+pytest+allure
3.python+requests+pytest+allure
4.python+Appium+pytest+allure
5、如果一个元素无法定位,你一般会考虑哪些方面
的原因?
1.页面加载元素过慢,加等待时间
2.页面有 frame 框架页,需要先跳转入 frame 框架再定位
3.可能该元素是动态元素,定位方式要优化,可以使用部分元素定位或
通过父节点或兄弟节点定位。
4.可能识别了元素,但是不能操作,比如元素不可用,不可写等。需要
使用 js 先把前置的操作完成,
6、遇到 frame 框架页面怎么处理?
先用 driver.switch_to.frame()跳转进去 frame,
然后再操作页面元素,
操作完后使用 driver.swith_to.default_content()跳转出来
7、遇到 alert 弹出窗如何处理?
使用 driver.switch_to.alert 方法先跳转到 alert 弹出窗口
然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()
获得弹出窗口的文本。
8、如何处理多窗口?
这个多窗口之间跳转处理,我们在项目中也经常遇到。就是,当你点击
一个链接,这个链接会在一个新的 tab 打开,然后你接下来要在新 tab
打开的页面查找元素,
1.我们在点击链接前
使用 driver.current_window_handle 获得新窗
口句柄
。
2.再点击链接。点击后
通过 driver.window_handles 获得所有窗口的
句柄,
3.然后
再循环找到新窗口的句柄,然后再通过
driver.switch_to.window()方法跳转到新的窗口。
9、怎么验证元素是 enable/disabled/checked 状
态?
定位元素后:分别通过 isEnabled(),isSelected(),isDisplayed()三个
方法进行判断。
10、在日历这种 web 表单你是如何处理的?
首先要分析当前网页试用日历插件的前端代码,看看能不能通过元素定
位,点击日期实现,如果不能,可能需要借助 javascript。还有些日历
控件一个文本输入框,可以直接 sendKeys()方法来实现传入一个时间
的数据。
11、举例一下说明一下你遇到过那些异常
常见的 selenium 异常有这些:
NoSuchElementException:没有该元素异常
TimeoutException : 超时异常
ElementNotVisibleException :元素不可见异常
NoSuchAttributeException :没有这样属性异常
NoSuchFrameException :没有该 frame 异常
12、自动化中有哪三类等待?他们有什么特点?
1.线程等待(强制等待)如 time.sleep(2):线程强制休眠 2 秒钟,2 秒
过后,再执行后续的代码。建议少用。
2.imlicitlyWait(隐式等待)会在指定的时间范围内不断的查找元素,
直到找到元素或超时,特点是必须等待整个页面加载完成。
3.WebDriverWait(显式等待)通常是我们自定义的一个函数代码,这
段代码用来等待某个元素加载完成,再继续执行后续的代码
13、你写的测试脚本能在不同浏览器上运行吗
当然可以,我写的用例可以在在 IE,火狐和谷歌这三种浏览器上运行。
实现的思路是封装一个方法,分别传入一个浏览器的字符串,如果传入
IE 就使用 IE,如果传入 FireFox 就使用 FireFox,如果传入 Chrome 就
使用 Chrome 浏览器,并且使用什么浏览器可以在总的 ini 配置文件中
进行配置。需要注意的是每个浏览器使用的驱动不一样。
14、什么是 PO 模式,为什么要使用它
PO 是 Page Object 模式的简称,它是一种设计思想,意思是,把一个
页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的
属性和行为,PO 模式一般使用三层架构,分别为:基础封装层
BasePage,PO 页面对象层,TestCase 测试用例层。
15、什么是进程、线程、协程?
进程
是一个具有一定独立功能的程序在一个数据集上的一次动态执行
的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序
运行的载体。
线程
是程序执行中一个单一的顺序控制流程,是程序执行流的最小单
元,是处理器调度和分派的基本单位。
协程
是一种基于线程之上,但又比线程更加轻量级的存在,这种由程序
员自己写程序来管理的轻量级线程叫做『用户空间线程』,具有对内核
来说不可见的特性。
进程与线程的区别
:
线程是程序执行的最小单位,而进程是操作系统分配资源的最小
单位;
一个进程由一个或多个线程组成,线程是一个进程中代码的不同
执行路线;
进程之间相互独立,但同一进程下的各个线程之间共享程序的内
存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和
信号),某进程内的线程在其它进程不可见;
调度和切换:线程上下文切换比进程上下文切换要快得多。
协程的特点
:
线程的切换由操作系统负责调度,协程由用户自己进行调度,因
此减少了上下文切换,提高了效率。
线程的默认 Stack 大小是 1M,而协程更轻量,接近 1K。因此可
以在相同的内存中开启更多的协程。
由于在同一个线程上,因此可以避免竞争关系而使用锁。
适用于被阻塞的,且需要大量并发的场景。但不适用于大量计算
的多线程,遇到此种情况,更好是用线程去解决。
16、如何把自动化测试在公司中实施并推广起来的?
1.项目组调研选择自动化工具并开会演示 demo 案例,我们主要是演示
selenium 和 robotframework 两种。
2.搭建自动化测试框架,在项目中逐步开展自动化。
3.把该项目的自动化流程、框架固化成文档
4.推广到公司的其它项目组应用
17、请描述一下自动化测试流程?
1.编写自动化测试计划
2.设计自动化测试用例
3.编写自动化测试框架和脚本
4.调试并维护脚本
5.无人值守测试
6.后期脚本维护(添加用例、开发更新版本)
18、上一个项目中自动化测试的执行策略?
上一个项目中是定时执行的,设置的执行时间是晚上 12 点,执行完毕
后会自动发送邮件通知
19、自动化测试发现 BUG 多吗?
不多,因为之前项目组是把已经测试通过的基本功能再进行自动化脚本
编写和在后续版本执行自动化测试,它主要是保证已经测试通过的功能
在新版本更新后没有问题。
20、你觉得自动化测试的价值在哪里?你们公司为什
么要做自动化测试?
引用自动化测试之后,能代替大量繁琐的回归测试工作,把业务测试人
员解放出来,既而让业务测试人员把精力集中在复杂的业务功能模块
上,自动化测试一般是对稳定下来的功能进行自动化,保证不会因为产
品的更新导致之前稳定下来的功能出现 BUG
21、自动化测试有误报过 bug 吗?产生误报怎么办?
有误报过,有时候自动化测试报告中显示发现了 bug,实际去通过手工
测试去确认又不存在该 bug。
误报原因一般是:1.元素定位不稳定,需要尽量提
高脚本的稳定性;
2.开发更新了页面但是测试没有及时更新维护!
22、在 selenium 自动化测试中,你一般完成什么类型的测
试?自动化覆盖率?
主要是冒烟测试和回归测试。回归测试主要写一些功能稳定的场景,通
过自动化手段去实现,节约测试时间。因为自动化测试用例也是在不断
的更新和迭代,没有刻意去统计,大概在 30%-40%左右!
23、在执行脚本过程,如何实现当前元素高亮显示?
这个其实就是利用 javaScript 去修改当前元素的边框样式来到达高亮
显示的效果,
24、元素定位方法你熟悉的有哪些?
id name classname link_text css xpath
25、如何处理下拉菜单?
在 Selenium 中有一个叫 Select 的类,这个类支持对下拉菜单进行操
作。使用方法如下:
1.定位元素
2.把定位的元素转化成 Select 对象。
sel = Select(定位的元素对象)
3.通过下标或者值或者文本选中下拉框。
sel.select_by_index(index);
sel.select_by_value(value);
sel.select_by_visible_text(text);
26、关闭浏览器中 quit 和 close 的区别
简单来说,两个都可以实现退出浏览器 session 功能,close 是关闭你
当前聚焦的 tab 页面,而 quit 是关闭全部浏览器 tab 页面,并退出浏
览器 session。知道这两个区别,我们就知道 quit 一般用在结束测试之
前的操作,close 用在执行用例过程中关闭某一个页面的操作。
27、在 Selenium 中如何实现截图,如何实现用例执行失败
才截图
在 Selenium 中提供了一个 get_screenshot_as_file()的方法来截图的,
一般结合 try/except 捕获异常时使用,进行错误截图。
28、如何实现文件上传?
定位元素后,直接使用 send_keys()方法设置就行,参数为需要上传的
文件的路径。
29、 如何分层自动化测试?
UI 自动化回归
接口自动化
单元测试-白盒测试