说白了,就是"机器"去帮我们执行了.他按照预先设定好的条件去运行,设定的条件包括正常条件
和异常条件
,不需要人为手工干涉去进行测试过程,就通过脚本去设定.
对程序组成的最小单位进行测试,效率很高,我们测试/开发要把大部分精力放在单元测试阶段.(Java 中的 Junit 框架就是单元测试)
接口测试就是 API 测试,相对于 UI 自动化 API 自动化更加容易实现,执行起来也更稳定. 在项目前期,接口开发完成之后就进行测试.他的测试用例维护量少,适合接口变动小的项目
(接口自动化工具: robotframework 框架 , jmeter , postman , Django , soupUI 语言 : Java/Python)
根据界面元素,对元素进行操作,模拟用户的使用,编写自动化脚本,进行测试. 缺点就是用例维护量大
,优点就是可以支持繁琐复杂,手工不易操作,反复执行的功能测试.
需要在项目后期,界面功能和界面元素稳定的时候进行,适合界面比较稳定的项目
UI 自动化的好处:
首先,自动化测试工具是有很多的,像: jmeter , testNG , Django , Appium , Macaca 都是.看自己.
selenium 特点: 轻量级 , 安装方便 , 免费 , 支持多种语言 (Java , Python , ruby , C# , JavaScript) , 支持多个平台 , 支持操作系统 (Linux , Windows , Mac) , 支持多浏览器 (Firefox , Chrome , Opera , Safari)
产品型的项目(一些回归测试) , 产品需要不停迭代 , 周期很长 , 项目稳定 , 界面不频繁变动
而不适合的:
Selenium IDE一个用于Selenium测试的完成集成开发环境,可以直接录制在浏览器的用户操作,并且能回放,编辑和调试测试脚本。调试过程中可以逐步进行或调整执行的速度,并且可以在底部浏览日志出错信息。
录制的测试脚本可以以多种语言导出,比如java,C#,Python,Ruby等,方便掌握不同语言的测试人员操作。
webdriver 解决了 selenium RC 的环境沙箱问题
webdriver 运行原理:
# coding = utf-8
from selenium import webdriver
import time
browser = webdriver.Firefox()
time.sleep(3)
browser.get("http://www.baidu.com")
time.sleep(3)
browser.find_element_by_id("kw").send_keys("selenium")
time.sleep(3)
browser.find_element_by_id("su").click()
browser.quit()
常用的几种:
xpath
(一定可以定位到该元素,每一个元素的 xpath 都是唯一的)
像这些只要打开页面开发者工具都是可以获取到这些属性的
click
(点击操作对象)send_keys
(给操作对象输入文本信息)submit
(提交订单)clear
(清除操作对象的内容)time.sleep()
(固定等待)driver.implicity_wait()
(智能等待 , 等待并非一个固定的等待时间,当脚本执行到某个元素定位时,如果元素可以定位,则继续执行;如果元素定位不到,则它以轮询的方式不断的判断元素是否被定位到。直到超出设置的时长)driver.title
(获得title)driver.url
(获得 URL)maximize_window()
(浏览器的放大,最大化)set_window_size()
(设置浏览器的宽和高)driver.forward()
(浏览器的前进)driver.back()
(浏览器的后退)document.documentElement.scrollTop=10000
(将浏览器滚动条滑到最底端)document.documentElement.scrollTop=0
(将浏览器滚动条滑到最顶端)必须引入工具包: from selenium.webdriver.common.keys import Keys
通过send_keys()调用按键:
send_keys(Keys.TAB)
# TABsend_keys(Keys.ENTER)
# 回车send_keys(Keys.SPACE)
#空格键send_keys(Keys.ESCAPE)
#回退键(Esc)键盘组合键用法:
5. send_keys(Keys.CONTROL,‘a’) #全选(Ctrl+A)
6. send_keys(Keys.CONTROL,‘c’) #复制(Ctrl+C)
7. send_keys(Keys.CONTROL,‘x’) #剪贴(Ctrl+X)
8. send_keys(Keys.CONTROL,‘v’) #粘贴(Ctrl+V)
要使用鼠标事件需要导入工具包:
from selenium.webdriver.common.action_chains import ActionChains
#鼠标拖动事件
ActionChains(driver).move_to_element(element).perform()
ActionChains(driver)
生成用户的行为。所有的行动都存储在actionchains 对象。通过perform()存储的行为。
move_to_element(element)
移动鼠标到一个元素中,menu 上面已经定义了他所指向的哪一个元素
perform()
执行所有存储的行为
ActionChains 类
- context_click() 右击
- double_click() 双击
- drag_and_drop() 拖动
- move_to_element() 移动
就相当于鼠标放到位置后有一些选项,要定位就要先打开这个页面的层级