由程序代替人工进行系统校验的过程就是是自动化测试。常见的自动化测试有:web自动化测试丶移动app自动化测试丶单元自动化测试等等....
自动化测试能解决的问题
- 回归测试 (冒烟测试) :针对之前老的功能进行测试 通过自动化的代码来实现丶针对上一个版本的问题的回归
- 兼容性测试: web实例化不同的浏览器驱动相当于对不同的浏览器进行操作,从而解决浏览器的兼容性测试问题
- 性能测试: 通过一些工具来模拟多个用户实现并发操作 ,提高工作效率,保障产品质量
自动化测试的优点
- 能在较少的时间内执行更多的测试用例
- 能够减少人为的错误
- 能够克服手工的局限性,
- 自动化测试可以重复执行
自动化则试的误区
- 自动化测试可以完全代替手工测试,错误。理解: 针针某些功能(图片、页 面架构)也是没有办法通过自动化来实现
- 自动化测试一定比手工测试厉害,错误。理解:在某些行业,比如金融行业更看重业务的积累
- 自动化测试可以发现更多的BUG ,错误。理解:因为自动化测试主要用来做回归测试
- 自动化测试适用于所有的功能 ,错误。理解 :页面的架构、图片、文字,用 户体验等等一些是无法使用自动化实现的。
UI(user interface)通过对web应用以及app应用进行自动化 测试的过程就是UI自动化测试
什么项目适合做 ui 自动化测试- 需求变动不频繁 前端代码变更维护不方便
- 项目周期长 项目短,上线之后不需要再去测试
- 项目需要回归测试 不用回归测试的也不需要写自动化
UI自动化测试在什么阶段开始
手工测试完成之后才做自动化测试,我们通过手工测试能够清楚的知道自动化测试的步骤以及结果才能编写自动化测试代码。UI自动化测试所属分类为黑盒测试。例如:
- V1 通过手工测试完成之后,有十个功能。
- 针对V1版本的十个功能,进行自动化的代码编写
- V2 增加了十个功能(总共有20个功能), v2版本的测试过程 当,新增的10个功能手工测试。针对老的10个功能就可以通过自动 化来进行回归测试。
- QTP 由惠普公司开发的一款自动化工具,支持web、桌面的 自动化测试。 收费的商用工具。
- selenium 主要用来做web自动化测试的,开源的免费的工 具。
- root framework 自动化测试平台。通过它可以实现web自动 化测试、接口自动化测试、桌面的自动化测试。
为什么要学习selenium?
- 开源软件: 源代码开放,但是不一定免费
- 跨平台: 平台指操作系统。 linux、windows、 mac操作系统
- 支持多种浏览器:fifirefox、chrome、 ie、edge、opera、 safari
- 支持多语言:python\java\C#\js\Ruby\PHP
- 成熟稳定功能强大:被大公司使用。google、华为、百度、腾 讯
selenium环境搭建
selenium 工作原理如下图所示: 步骤如下:- 安装python解释器和pycharm
- 浏览器安装及浏览器驱动安装:需要注意浏览器与浏览器驱动的版本, 不同的浏览器有不同的浏览器驱动,而且不同的版本也有不同的浏览器驱动。
- 在线安装方式: 在dos命令行中输入: pip install selenium
- 如何确认selenium 安装完成:可以通过 pip show selenium 进 行查看
浏览器驱动安装细说:
- 安装浏览器驱动之前,一定要知道自己浏览器的版本。
- 通过https://npm.taobao.org/mirrors/chromedriver/ 获取对应的浏览器驱动
- 解压浏览器驱动文件,并将驱动文件复制到python的根目录就 行了。
元素定位
html页面由标签构成,标签的基本格式如下:
什么是元素?
- 元素: 由标签头+标签尾+标签头和标签尾包括的文本内容
- 元素的信息就是指元素的标签名以及元素的属性
- 元素的层级结构就是指元素之间相互嵌套的层级结构
元素定位最终就是通过元素的信息或者元素的层级结构来进行元素定位。
浏览器开发者工具
浏览器开发者工具就是给专业的web应用和网站开发人员使用的工具。 包含了对HTML查看和编 辑、Javascript控制台、网络状况监视等功能,是开发JavaScript、CSS、HTML和Ajax的得力助 手。作用:快速定位元素,查看元素信息。浏览器开发者工作不需要安装,浏览器自带.。浏览器开发者工具的启动:
- 直接按F12 不区分浏览器
- 通过右键的方式来启动浏览器开发者工具
点击浏览器开发者工具左上角的元素查看器按钮,再点击想要查看的元素。
元素定位方式 Selenium 提供了八种定位元素方式 :id 丶name 丶class_name 丶tag_name 丶link_text 丶partial_link_text 丶XPath 丶CSS。ID定位
- 前提:元素要有ID属性
- 通过元素的ID属性值来进行元素定位 ,在html标准规范中 ID值 是唯一的。
- 定位方法:find_element_by_id(id) , id参数表示的是id的属 性值
案例演示:
打开注册A.html页面,完成以下操作
- 使用id定位,输入用户名:admin
- 使用id定位,输入密码:123456
- 3秒后关闭浏览器窗口
代码实现
# 导入selenium包 和 time包
from selenium import webdriver
import time
# 实例化浏览器驱动对象
driver = webdriver.Chrome()
# 打开测试网站,get参数是要测试的url
driver.get("https://ssl.zc.qq.com/v3/index-chs.html")
# 通过ID定位到用户名输入框并在用户名输入框中输入admin
driver.find_element_by_id("nickname").send_keys("admin")
# 通过ID定位到密码输入框并在密码输入框中输入wrg123456
driver.find_element_by_id("password").send_keys("wrg123456")
# 等待3s
time.sleep(3)
# 退出浏览器
driver.quit()
name定位
- 前提:元素要有name属性
- 通过元素的name属性值为进行元素定位 name属性值 在 HTML页面中,是可以重复的。如果重复,则定位到第一个。
- 定位方法:find_element_by_name(name) # name 参数表示 的是name的属性值
# 导入selenium包 和 time包
from selenium import webdriver
import time
# 实例化浏览器驱动对象
driver = webdriver.Chrome()
# 打开测试网站,get参数是要测试的url
driver.get("file:///C:/Users/Administrator/PycharmProjects/Day01selenium/Test.html")
# 通过name定位到用户名输入框并在用户名输入框中输入admin
driver.find_element_by_name("email").send_keys("admin")
# 通过ID定位到密码输入框并在密码输入框中输入wrg123456
driver.find_element_by_name("password").send_keys(123456)
# 等待3s
time.sleep(3)
# 退出浏览器
driver.quit()
class_name
定位
- 前提:元素必须要有class属性
- 通过元素的class属性值进行元素定位 class属性值是可重复的。如果重复,则定位到第一个。
- 定位方法: find_element_by_class_name(class_name) # class_name参数表示的是class的其中一个属性值
# 导入selenium包 和 time包
from selenium import webdriver
import time
# 实例化浏览器驱动对象
driver = webdriver.Chrome()
# 打开测试网站,get参数是要测试的url
driver.get("file:///C:/Users/Administrator/PycharmProjects/Day01selenium/Test.html")
# 通过name定位到用户名输入框并在用户名输入框中输入admin
driver.find_element_by_class_name("demo01").send_keys("admin")
# 通过ID定位到密码输入框并在密码输入框中输入123456
driver.find_element_by_class_name("demo02").send_keys(123456)
# 等待3s
time.sleep(3)
# 退出浏览器
driver.quit()
tag_name定位
- 通过元素的标签名称进行定位, 在同一个html页面当中,相同 标签元素会有很多。 这种定位元素的方式不建议大家在工作当中使用。
- 定位方法: find_element_by_tag_name(tag_name) # tag_name表示的是元素的标签名称。 如果有重复的元素,定位到的元素默认都是第一个元素
ink_text定位
- 通过超链接的全部文本信息进行元素定位 ,主要用来定位a标签
- 定位方法: find_element_by_link_text(link_text) # link_text参数代表的是a标签的全部文本内容。
partial_link_text定位
- 通过超链接的局部文本信息进行元素定位,主要用来定位a标签
- 定位方法:find_element_by_partial_link_text(partial_link_text) # partial_link_text表示的是a标签 的局部文本内容
- 对于上面6种定位方法都有定位一组元素的方法,例如:find_elements_by_tag_name(tag_name) 获取所有标签名称为tag_name的元素
- 定位一组元素返回的值是一个列表
- 可以通过下标来使用列表中的元素
- 下标是从0开始。
# 导入selenium包 和 time包
from selenium import webdriver
import time
# 实例化浏览器驱动对象
driver = webdriver.Chrome()
# 打开测试网站,get参数是要测试的url
driver.get("file:///C:/Users/Administrator/PycharmProjects/Day01selenium/Test.html")
# 通过name定位到用户名输入框并在用户名输入框中输入admin
elements = driver.find_elements_by_tag_name("input")
# 第3个元素 输入123456
elements[2].send_keys("123456")
# 等待3s
time.sleep(3)
# 退出浏览器
driver.quit()