目录
自动化测试:测试机按照预先设定好的条件运行,设定的条件包括(正常/异常条件),不需要人为手工干涉去进行测试。【通过脚本去设定】
自动化测试金字塔:UI测试、接口测试、单元测试
- 单元测试【Java、Junit框架】对程序组成的最小单元进行测试,效率最高
- 接口测试【robotframework框架,jmeter,postman,Django,soupUI】测试用例维护量少,适合接口变动小的项目
- UI测试【selenium,junitest框架】根据界面操作元素,模拟用户的使用,编写自动化脚本进行测试
自动化测试工具:jmeter、testNG、Django、Appium、Macaca
UI自动化测试
通过操作前端页面的元素调用后台接口,看实际值和预期值是否一致。
特点:用例维护量大;项目后期(前后端开发完成)进行;适合界面比较稳定的项目
优点:
- 可复用,解放双手提高效率,节省资源
- 进行大量反复的回归测试和兼容性测试
- 可以进行手工测试无法完成的测试(如:精准计时)
- 建立一个稳定可靠的测试过程,减少人为错误
- 进行繁琐的测试(数据驱动ddt)
Webdriver(浏览器驱动)API
Anaconda环境下安装配置ChromeDriver的方法:Anaconda环境下 安装配置ChromeDriver、GeckoDriver - 简书 (jianshu.com)
工作原理:
- selnium-webdriver启动浏览器,把浏览器绑定到特定端口,浏览器成为一个 remote server
- 客户端(脚本)通过 commandExecutor ,用HTTP协议向 remote server 发送请求
- 把 web service 指令解析成浏览器的 native 指令,操纵浏览器
Python中基本用法
# coding = utf -8
# 设置编码模式,防止乱码
# 导入需要的工具包
from selenium import webdriver
from selenium.webdriver.common.by import By
import time
# 获得浏览器的驱动
driver = webdriver.Chrome()
# 打开需要访问的web页面
driver.get("https://www.baidu.com/")
# 最大化窗口
driver.maximize_window()
# 定位页面的元素,对元素进行操作(用id定位)
driver.find_element(By.ID,'kw').send_keys("我在他乡挺好的")
driver.find_element(By.ID,"su").click()
# 等待 3s
time.sleep(3)
# 退出浏览器,并清理缓存垃圾
driver.quit()
⭐定位元素
- id
- name
- classname
- xpath
- link text 适用于可点击的链接
- partial link text 用部分链接的内容去定位元素
- tag name 唯一时可以定位到
- css selector
⭐操作测试对象
- click 点击对象
- send_keys 在对象上模拟按键输入
- clear 清除对象输入的文本内容
- submit 提交
- text 获取元素的文本信息
⭐添加等待
- time.sleep() 固定等待
- drive.implicitly.wait() 智能等待
⭐打印信息
- driver.title
- driver.current_url
⭐浏览器操作
- driver.maximize_window() 最大化窗口
- driver.set_window_size(宽, 高) 设置浏览器的宽和高
- driver.back() 浏览器后退
- driver.forward() 浏览器前进
- driver.execute_script("var q=document.documentElement.scrollTop=离页首距离") 滑滚动条
⭐键盘事件
导包:from selenium.webdriver.common.keys import Keys
通过send_keys()调用按键:
- send_keys(Keys.TAB) #TAB键
- send_keys(Keys.ENTER) #回车
- send_keys(Keys.SPACE) #空格
- send_keys(Keys.ESCAPE) #ESC键
- send_keys(Keys.CONTROL, 'a') #Ctrl+A
⭐鼠标事件
导包:from selenium.webdriver.common.action_chains import ActionChains
ActionChains(driver).move_to_element(元素).perform()
- perform() xuan'z
- context_click() 右击
- double_click() 双击
- drag_and_drop() 拖动
- move_to_element() 移动
本地html自测
import os
# 拼接 URL
url = "file:///" + os.path.abspath("文件的绝对路径")
driver.get(url)
常见问题解决方案
① 定位一组元素
#coding=utf-8
from selenium import webdriver
import time
import os
dr = webdriver.Chrome()
file_path = 'file:///' + os.path.abspath('xxxxxx.html')
dr.get(file_path)
# 选择页面上所有的input,然后从中过滤出所有的checkbox 并勾选之
inputs = dr.find_elements_by_tag_name('input')
for input in inputs:
if input.get_attribute('type') == 'checkbox':
input.click()
time.sleep(2)
dr.quit()
② 层级定位、下拉框的选择、div框的处理方法
- xpath
- 通过tag_name定位一组元素,遍历找到对应的值点击
- 通过tag_name定位一组元素,找到数组位置
③ alert框的处理
# 获得弹框的操作句柄
alert = driver.switch_to.alert
time.sleep(3) # 确保弹框出现
# 接收弹框(调用accept方法关闭弹框)
alert.accept()