一、自动化测试简介
1、传统自动化测试:基于产品UI层的自动化测试,它是将黑盒功能测试转化为由程序或工具执行得一种自动化测试
2、分层自动化测试:应该有更多低级别的单元测试,而不仅仅是基于产品UI层的测试(倡导从黑盒(UI)单层到黑白盒多层自动化测试体系,从全面黑盒自动化测试到对系统的不同层次进行自动化测试)
3、单元自动化测试:指对软件中的最小可测试单元进行检查和验证。规范的进行单元测试需要借助单元测试框架,如Java语言的Junit、TestNG,Python语言的unittest、pytest等
4、接口自动化测试:模块接口测试:主要测试模块之间的调用与返回;Web接口测试:主要分为服务器接口测试与外部接口测试
5、UI自动化测试:UI层是用户使用产品的入口,所有功能都通过UI层展示并提供给用户,所以测试工作大都集中在这一层进行。
二、什么项目适合自动化
1、需求变动不频繁 2、项目周期较长 3、自动化测试脚本可复用
三、自动化测试工具
1、UFT(Unified Functional Testing)HP公司开发,由QTP和ST合并而来,是一个企业级的自动化测试工具,提供了强大的录制回放功能,同时兼容对象识别模式与图像识别模式,支持B/S与C/S架构软件的自动化测试。
2、RF(Robot Framework)RF是一款基于Python语言编写的自动化测试框架,具备良好的可扩展性,支持关键字驱动,可以同时测试多种客户端和接口,可以进行分布式测试。
3、Watir(Web Application Testing in Ruby):Watir是一款基于Web的自动化测试工具,使用Ruby语言开发。
4、Selenium:selenium是一款Web的自动化测试工具,支持多平台、多浏览器、多语言实现自动化测试。目前在web自动化领域应用越来越广泛
四、Selenium介绍
1、selenium 的特点:
开源,免费
多浏览器支持:FireFox、Chrome、IE、Opera
多平台支持:linux 、windows、MAC
多语言支持:java、python、ruby、php、C#、JavaScript
对 web 页面有良好的支持
简单(API 简单) 、灵活(用开发语言驱动)
支持分布式测试用例执行
2、selenium IDE:selenium IDE 是嵌入到 Firefox 浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。快速的创建 bug 重现脚本,在测试人员的测试过程中,发现bug之后可以通过 IDE 将重现的步骤录制下来,以帮助开发人员更容易的重现 bug。
IDE 录制的脚本可以可以转换成多种语言,从而帮助我们快速的开发脚本,关于这个功能后而用到时再详细介绍。
3、selenium Grid:Selenium Grid 是一种自动化的测试辅助工具,Grid 通过利用现有的计算机基础设施,能加快 Web-app的功能测试。利用 Grid,可以很方便地同时在多台机器上和异构环境中并行运行多个测试事例;其特点为:
并行执行、通过一个主机统一控制用例在不同环境,不同浏览器下运行、灵活添加变动测试机
4、selenium RC:selenium RC 是 selenium 家族的核心工具,selenium RC 支持多种不同的语言编写自动化测试脚本,通过 selenium RC 的服务器作为代理服务器去访问应用从而达到测试的目的。
selenium RC 使用分 Client Libraries 和 selenium Server,Client Libraries 库主要主要用于编写测试脚本,用来控制 seleniumServer 的库
5、Selenium Server 负责控制浏览器行为,总的来说,Selenium Server 主要包括 3 个部分:Launcher、Http Proxy、Core。
其中 Selenium Core 是被 Selenium Server 嵌入到浏览器页面中的。其实 Selenium Core就是一堆 JS 函数的集合,就是通过这些 JS函数,我们才可以实现用程序对浏览器进行操作。Launcher 用于启动浏览器,把 selnium Core 加载到浏览器页面当中,并把浏览器的代理设置为 Selenium Server 的Http Proxy。
搞清了 selenium 1.0 的家族关系,selenium 2.0 是把 WebDriver 加入到了这个家族中;
简单用公式表示为:selenium 2.0 = selenium 1.0 + WebDriver
五、前端技术介绍
1、HTML简介:HTML(Hyper Text Markup Language)中文为超文本标记语言,HTML 是网页的基础,它并不是一种编程语言,而是一种标记语言(一套标记标签) ,但我们可以在 HTML 标签中嵌入各种前端脚本语言,如VBScript、JavaScript 等。例:
JavaScript 简介:一种由 Netscape 公司的 LiveScript 发展而来的前端脚本语言(脚本语言是一个种轻量级的语言) ,是一种解释性语言(代码执行不需要预编译) ;被设计用来向 HTML 页面添加交互行为,通常被直接嵌入到 HTML 页面。
如果要在 HTML 页面中使用 JavaScript ,我们需要使用<script>标签,同时使用 type 属性来定义脚本语言。
<html>
<body>
<script type="text/javascript">
document.write("Hello World!");
</script>
</body>
</html>
XML 是指扩展标记语言,是标准通用标记语言的一个子集;与 HTML 类似,但它并非 HTML 的替代品,它们为不同的目的而设计;
HTML 被设计用来显示数据,其焦点是数据的外观。XML 被设计为传输和存储数据,其焦点是数据的内容
<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
六、前端工具介绍
1、FireBug 2、FirePath
3、Chrome开发人员工具 4、IE开发人员工具
七、webdriver环境搭建
2.1 环境搭建
安装Python 安装selenium: pip install selenium pip show selenium --查看已安装的包的版本信息
2.2 第一个自动化脚本
2.3 安装浏览器驱动
WebDriver支持的浏览器包括:Firefox、Chrome、IE、Opera、Android和IOS移动应用测试驱动安装方法:将各浏览器驱动放入Python安装目录即可
八、元素定位:
id find_element_by_id() name find_element_by_name()
trgname find_element_by_trg_name() classname find_element_by_class_name()
linktext find_element_by_link_text() partialinktext find_element_by_partial_link_text()
CSS find_element_by_css_selector() Xpath find_element_by_xpath()
九、元素操作:
WebElement 接口常用方法 clear() 清除元素的内容
send_keys() 在元素上模拟按键输入 click() 单击元素
submit() 提交表单(对文字链接不适用) size 返回元素的尺寸
text 获取元素的文本 get_attribute(name) 获得属性值
十、鼠标事件
ActionChains 类鼠标操作的常用方法:
context_click() 右击 double_click() 双击 drag_and_drop()拖动
move_to_element()鼠标悬停在一个元素上 click_and_hold() 按下鼠标左键在一个元素上
11、键盘事件
Keys类键盘操作的常用方法:
send_keys(Keys.BACK_SPACE) 删除键�send_keys(Keys.SPACE) 空格键�send_keys(Keys.TAB) 制表键�send_keys(Keys.ESCAPE) 回退键�send_keys(Keys.ENTER) 回车键�send_keys(Keys.CONTROL,'a') 全选�send_keys(Keys.CONTROL,'c') 复制�send_keys(Keys.CONTROL,'x') 剪切�send_keys(Keys.CONTROL,'v') 粘贴�send_keys(Keys.PAGE_DOWN) 向下滚动 send_keys(Keys.PAGE_UP) 向上滚动 send_keys(Keys.HOME)到顶部 send_keys(Keys.END)到底部
12、打印信息
title 返回当前页面标题 current_url 获取当前页面url
13、定位一组对象
webdriver 可以很方便的使用 find_element 方法来定位某个特定的对象,不过有时候我们却需要定位一组对象,WebElement 接口同样提供了定位一组元素的方法 find_elements定位一组对象一般用于以下场景:
批量操作对象,比如将页面上所有的 checkbox 都勾上先获取一组对象,再在这组对象中过滤出需要具体定位的一些对象
14、对话处理框:使用二级定位的方式处理常见的弹出对话框
15、浏览器多窗口处理
有时候我们在测试一个 web 应用时会出现多个浏览器窗口的情况,webdriver 提供了相关相方法可以很轻松的在多个窗口之间切换并操作不同窗口上的元素。
current_window_handle 获取当前窗口句柄 window_handles获取所有窗口句柄
switch_to_window()多窗口间切换 close()关闭当前窗口
16、alert/confirm/prompt 处理:
使用switch_to_alert()方法定位alert/confirm/prompt text 返回alert/confirm/prompt 中的文字信息
accept() 接受现有警告框 dismiss() 解散现有警告框 send_keys() 发送内容到警告框
上传文件:webdriver未提供专门用于上传文件的方法,通用的做法是使用AutoIt上传文件
使用AutoIt上传文件
ControlFocus() 识别Windows窗口 WinWait() 设置等待时间 ControlSetText() 设置上传文件路径
ControlClick()点击按钮 sleep() 设置休眠时间
17、操作浏览器滚动条:
WebDriver未提供操作浏览器滚动条的方法,可以借助JavaScript代码和物理按键来控制滚动条。WebDriver提供了execute_script()方法来执行JavaScript代码
18、截图:
自动化测试用例是由程序去执行的,因此有时候打印的错误信息不是十分准确。如果在脚本执行出错的时候能对当前窗口截图保存,那么通过图片可以很直观的看出出错的原因WebDriver提供了get_sreenshot_as_file( )函数来对当前窗口截图
19、 验证码:
对于测试来说,不管是性能测试还是自动化测试,验证码都是一个比较棘手的问题。在WebDriver中没有提供相应的方法来处理验证码。再次提供处理验证码的几种常见方法
1、关闭验证码(最简单)
2、设置万能码
3、Python-tesserct识别图片验证码(准确率不能达到100%)
4、编辑cookie信息绕过验证码