1. 封装自动化测试框架
po页面对象层,用例层,元素定位层,测试数据层。 ----PO页面对象层(用例层从页面层调用操作方法,写成用例)
其他的是:日志处理模块,ini配置文件读取模块,unittest+ddt数据驱动模块,jenkins持续集成
---
PO是Page Object 模式的简称,它是一种设计思想,意思是,把一个页面,当做一个对象,页面的元素和元素之间操作方法就是页面对象的属性和行为,
PO模式一般使用三层架构,分别为:基础封装层BasePage,PO页面对象层,TestCase测试用例层。
basepage封装常用的操作:1.等待元素可见 2.查找元素 3.点击 输入 4.获取文本,获取属性
2. 降低自动化维护成本
选择比较稳定的接口和内容做自动化测试
接口不写死参数,调用页面获取参数,实现各个环境版本都能执行
3. 保证脚本的有效性
把一个 页面要用到的元素和操作,封装到一个页面类中,如果一个元素定位发生改变,只要修改这个页面的元素属性
场景独立,所有的步骤不封装在一起
测试用例之间,减少耦合度
python+selenium+pytest+allure
4. 如果一个元素无法定位,思考点 页面加载元素过慢,加等待时间 页面有frame框架,需要先跳入框架再定位,-----先用driver.switch_to.frame()跳转进去frame,然后再操作页面元素,操作完后使用driver.swith_to.default_content()跳转出来 如果是动态元素,要通过父节点兄弟节点来定位 可能识别的元素,但是不可用不能编辑,需要完成元素的前置操作或条件 5. 获得alert弹出窗口的文本 driver.switch_to.alert方法先跳转到alert弹出窗口,然后再通过accept点击确定按钮,通过dismiss点击取消难,通过text()获得弹出窗口的文本。 6. 处理多窗口 多窗口:当你点击一个链接,这个链接会在一个新的tab打开,然后你接下来要在新tab打开的页面查找元素,1.我们在点击链接前使用driver.current_window_handle获得新窗口句柄。
2.再点击链接。点击后通过driver.window_handles获得所有窗口的句柄,
3.然后再循环找到新窗口的句柄,然后再通过driver.switch_to.window()方法跳转到新的窗口。
7、怎么验证元素是enable/disabled/checked状态?
定位元素后:分别通过isEnabled(),isSelected(),isDisplayed()三个方法进行判断。
8、在日历这种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,如果传入FireFox就使用FireFox,如果传入Chrome就使用Chrome浏览器,
并且使用什么浏览器可以在总的ini配置文件中进行配置。需要注意的是每个浏览器使用的驱动不一样。
15、什么是进程、线程、协程?
进程是独立的程序执行的过程
线程是程序执行中一个顺序控制流程,是程序执行流的最小单元
协程是比线程更加轻量级的存在,
进程与线程的区别:
· 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
· 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线;
· 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段、数据集、堆等)及一些进程级的资源(如打开文件和信号),某进程内的线程在其它进程不可见;
· 调度和切换:线程上下文切换比进程上下文切换要快得多。
协程的特点:
· 线程的切换由操作系统负责调度,协程由用户自己进行调度,因此减少了上下文切换,提高了效率。
· 线程的默认Stack大小是1M,而协程更轻量,接近1K。因此可以在相同的内存中开启更多的协程。
· 由于在同一个线程上,因此可以避免竞争关系而使用锁。
· 适用于被阻塞的,且需要大量并发的场景。但不适用于大量计算的多线程,遇到此种情况,更好是用线程去解决。
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自动化回归
· 接口自动化
· 单元测试-白盒测试