一. 概述
1.1 自动化测试演变
萌芽期:
代码代替手工
覆盖性、时效性、重复性
发展期:
线性测试
模块化驱动测试
数据驱动测试
关键字驱动测试
爆发期:
CI/CD
未来:
AI-测试终结者
1.2 自动化测试特点
核心目的:提高测试效率,而不是发现BUG。
自动化的劣势:
1.无法进行主观判断,如界面布局是够好看
2.需求频繁变更时,维护成本会很高
1.3 自动化测试流程
切入点:功能相对稳定的版本开始切入
1.4 自动化测试用例
- 自动化测试用例来源于手工测试用例
- 不是所有手工用例都要自动化
1.4.1 自动化用例编写原则
1.5 自动化测试脚本开发
线性测试:一个主方法,调用测试用例
缺点:代码冗余、可维护性差
模块驱动测试:封装功能模块
优点:提高代码复用性、可维护性
数据驱动测试:
字典、txt、csv、excel、数据库
关键字驱动测试:
target、command、value
二. Python+Selenium+UnitTest(关键字驱动测试框架)
2.1 脚本录制工具
2.1.1 Selenium IDE
关键字驱动
- Target:对谁操作?(如文本框可以根据属性定位)
- Command:找到之后要干嘛?
- Value:键入什么?
安装:使用FireFox添加组件
2.1.2 katalon
安装:使用FireFox添加组件
2.2 Selenium脚本开发
2.2.1 Selenium 环境搭建
1.
准备python开发环境,配置python环境变量
2.pip3 install selenium
3.将驱动放到python环境变量根目录
CMD : where python
各版本chromedriver下载
2.2.2 Demo
from selenium import webdriver
# 创建浏览器对象
driver = webdriver.Chrome()
# 测试用例
driver.get("http://www.baidu.com")
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
# 关闭浏览器
driver.quit()
2.2.3 常用操作
2.2.3.1 页面元素定位、操作
定位
操作
2.3.3.2 浏览器操作
2.3.3.3 鼠标、键盘操作
ActionChains动作封装
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
# 创建浏览器对象
driver = webdriver.Chrome()
# 测试用例
driver.get("https://www.baidu.com")
driver.maximize_window()
time.sleep(2)
setUp = driver.find_element_by_link_text("新闻")
ActionChains(driver).move_to_element(setUp).perform()
# 关闭浏览器
# driver.quit()
2.3.3.4 警告窗口处理
2.3.3.5 多窗口、多表单处理
句柄操作:句柄:浏览器窗口的标识
from selenium import webdriver
# 创建浏览器对象
driver = webdriver.Chrome()
# 测试用例
driver.get("https://www.taobao.com/")
driver.find_element_by_link_text("女装").click()
handlers = driver.window_handles
print(handlers)
driver.switch_to_window(handlers[0])
# 关闭浏览器
# driver.quit()
多表单:一个页面可以嵌套另一个页面,如frame/iframe技术,需要将driver对象给内层页面才能进行操作
2.3.3.6 同步点(设置元素等待)
# 强制等待
time.sleep(5)
# 隐式等待:浏览器会在设定时间内不断的刷新页面去寻找我们需要的元素,若超时,抛出异常(全局的)
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://mail.qq.com/")
# 显式等待:针对某一元素设置等待条件(同时设置时,隐式等待优先级高)
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "kw")))
element.send_keys("selenium")
2.3. UnitTest测试框架
优点:
- 提供用例组织与执行
- 提供丰富的断言方法
- 提供丰富的日志和报告
TestCase:测试用例,setup、test、teardown
TestSuit:测试套,多条测试用例
TestLoader:批量加载用例