第一课
为什么要学习Selenium?
Selenium简称SE,是web自动化领域的事实标准,是一个开源的软件,没有操作系统和浏览器的限制,支持多种多编程语言,与其他工具轻松集成(包括 unittest pytest Junit TestNG ,Maven jenkins等),并行和分布式测试(通过 Selenium Grid实现分布式的并行测试)
学习SE的关键点和难点?
关键是掌握运行原理和编程的API,如何将SE测试方法运用到项目中也是关键的一部分;难点是理解SE的WebDriver运行原理、多环境配置SE(包括浏览器驱动以及操作系统)、SE与其他软件的配合使用(日志、数据库)、理解和掌握数据驱动测试(POM设计模式)、如何将SE集成到Jenkins中实现持续集成和交付
第三课
什么是测试
通俗的来讲,程序测试就是运行程序,并发现程序错误;
专业一点讲就是,验证软件的正确性、完整性、安全性的质量的过程;
用程序员的话就是找bug。
软件测试是一个过程。
测试的分类
一、按开发的阶段划分
单元测试:模块测试,是对软件组成单位进行测试,目的就是检测软件的组成单位的正确性;
集成测试:也叫组装测试,是将程序的模块按照适当的组装策略组装在一起,对程序的接口和组装后的功能进行正确性检验;
系统测试:将软件系统看成一个整体进行测试,包含 功能、性能,以及软硬件环境进行测试;
验收测试:也叫交付测试,项目部署前的最后一个测试。
二、按是否查看代码划分
白盒测试:结构性的、逻辑性的、或者透明性的一个测试,基于代码的方式测试,将被测软件当作一个打开的盒子,研究里面的源代码和程序的结果是否正确;
黑盒测试:即功能测试,不查看代码,将被测软件当做一个黑盒子,并不关心盒子的内部的结构,只关心软件的输入数据和输出数据;
灰盒测试:介于白盒测试和黑盒测试之间的叫做灰盒测试,既有功能测试也有代码测试,用于最后的集成阶段。
三、按是否运行划分
静态测试:不运行程序,通过分析检测源码的方式来检查程序是否正确,对规格说明书或者软件设计说明书、程序代码做一些结构的分析,程序流程图的分析,符号排错等等;
动态测试:运行程序,检查程序运行的结果和预期结果是否有差异,并分析运行效率
四、按测试对象划分
性能测试:是否满足规格说明书的一个性能;
安全测试:需要掌握相关专业的知识,熟悉网络协议、TCP还是UDP、HTTP还是HTTPS、是否有防火墙、CDN等等,熟悉各种操作系统的漏洞,熟悉路由器等等;
兼容性测试:指软件之间相互协作,能不能良好的运行,会不会影响其他软件或硬件的使用,以及是否导致系统崩溃等等;
文档测试:开发文档、用户文档、管理文档是否完整;
用户体验测试:指的是应用性,从用户角度来设计软件,交互性、应用性、功能性、有效性,从界面的角度测试;
业务测试:测试人员将系统整体串联起来运行模拟真实用户的实际工作流程,满足用户需求;
界面测试:包含界面整体布局是否合理、整体风格是否一致,界面操作的便捷性、界面元素的可用性,导航是否简易;
安装测试:安装是否可以进行正常的安装,卸载是否可以正常卸载,针对于app的测试点;
内存泄漏测试:需要专业的人员、工具进行测试,检查内存是否泄漏。
五、按测试实施的组织
Alpha(阿尔法)测试:在开发环境下进行的测试,也可以是在公司内部模拟用户在实际操作环境下进行测试,主要目的是为了评价软件、产品的功能、可用性、可靠性、性能等的测试;在初期程序员自己测试一下,能发跑通,是否有重大bug;
Beta(贝塔)测试:指的是一种验收测试,交给最终用户测试;
第三方测试:介于开发者和用户之间的第三方来测试一下系统是否有用;
六、按是否手工执行划分
手工测试:由人手动的输入用例来观察结果,是前期比较简单的测试方式;
自动化测试;由机器参与的,预先设置预期值通过执行程序验证预期结果。
七、其他测试
冒烟测试:在正式测试之前进行简单的验证测试(自测)
回归测试:修改了代码之后是否引起其他问题
第四课
selenium三剑客
- SE的WebDriver
指的的是网络驱动器,浏览器的一些驱动 - SE的IDE
是Chrome或FireFox的一个插件 - SE的Grid
可以做分布式测试
selenium介绍
Selenium是一个用户web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就行真正的用户在操作一样
主要功能:
- 测试与浏览器的兼容性–测试你的应用程序是否能够很好的工作在不同浏览器和操作系统之上;
- 测试系统功能–创建回归测试检验软件功能和用户需求。
Selenium WebDriver
- 是客户端API接口,测试人员通过调用这些接口,来访问浏览器驱动,浏览器驱动再访问浏览器。
不同浏览器会有不同的驱动。
过程如下图:
- 与浏览器的通信也可以是通过Selenium Server 或者RemoteWeb Driver的远程通信。RemoteWebDriver与驱动程序和浏览器在统一系统上运行。
通过IP和端口远程的方式来访问驱动浏览器
过程如下图:
- 除此之外,还可以使用Selenium Server或Selenium Grid进行分布式测试
过程如下图:
Selenium IDE
是一个浏览器插件,支持Chrome浏览器和Firefox浏览器,可以将手动测试过程记录下来,并生成自动化测试脚本,可以实现回放。
Chrome添加selenium ide:浏览器右侧三个点-更多设置-扩展程序-左侧扩展程序-打开Chrome网上应用商店-搜索selenium ide 点击安装即可
打开后界面:
功能界面如图:
Selenium Grid
如果想通过在多台计算机上进行分布式来扩容,并从一个中心点管理多个环境,从而轻松地对多种浏览器/操作系统组合运行测试,那么可以使用Selenium Grid
结构图:
Selenium 的特点
- 开源、免费
- 多浏览器支持:Chrome 、FireFox、IE、Opera、Edge
- 多平台支持:Linux、Windows、Mac
- 多语言支持:Java、Python、Ruby、C#、JavaScript、C++
- 支持分布式测试(使用Selenium Grid)
- 支持录制、回放和脚本生成(使用Selenium IDE)
第五课
安装python
官网下载安装程序,双击下载文件下载
需要注意的点
- 选择自定义安装以及将python直接配置到环境变量中
- 存放路径要自定义一个好找的
- 配置环境变量,使得python在哪个路径下都可以执行
- pip执行文件也需要配置环境变量
安装selenium
python控制台执行以下代码安装
pip install selenium
查看是否安装成功以及版本号
pip list
安装pycharm开发工具
区分专业版和社区版
安装时候一步一步即可
使用的话需要配置python的运行环境,方式如下图
第六课 下载安装浏览器驱动–解决最麻烦的版本匹配问题
Selenium需要安装对应的浏览器驱动,才能驱动浏览器自动测试。下载安装驱动需要如下几个步骤:
- 检查浏览器版本
- 下载对应版本驱动
- 设置驱动环境变量
- 测试驱动
检查浏览器版本
- 查看chrome浏览器版本,可以在url地址栏输入【chrome://version/】进行查看;也可以点击菜单栏->帮助->关于Google Chrome 查看
- 查看FireFox浏览器版本,选择菜单栏Help->About Firefox,查看
下载对应版本驱动
- 打开selenium官网,
https://www.selenium.dev/
- 选择文档Documentation
- 选择安装WebDriver,
https://www.selenium.dev/zh-cn/documentation/getting_started/installing_browser_drivers/
例如,点击Chrome后面的下载,然后选择浏览器对应的版本,然后点击进入下载界面,选择所需要的运行环境
设置驱动环境变量
同样,需要将驱动放到环境变量中。
mac配置环境变量:到chromedriver目录下打开terminal,将chromedriver移动到系统执行bin目录下,sudo cp -r chromedriver /usr/local/bin/
,即可直接使用chromedriver
第七课
一个简单的驱动浏览器执行的例子
from selenium import webdriver
from time import sleep
driver = webdriver.Chrome() #这里直接调用的是环境变量中的执行文件chromedirver.exe
driver.get('https://www.baidu.com/')
driver.find_element_by_id('kw').send_keys('selenium')
driver.find_element_by_id('su').click()
sleep(3)
driver.quit()
将上述代码封装一下
class testCase(object):
def __init__(self):
self.driver = webdriver.Chrome() #关键命名是self.driver,在下面代码中可以直接使用
def test(self):
self.driver.get('https://www.baidu.com/')
sleep(3)
self.driver.find_element_by_id('kw').send_keys('selenium')
sleep(3)
self.driver.find_element_by_id('su').click()
sleep(3)
self.driver.quit()
if __name__ == '__main__':
testCase().test()