自动化测试:让程序代替人为去验证程序功能的过程
为什么要进行自动化测试?
1. 解决-回归测试
2. 解决-压力测试
3. 解决-兼容性测试
4. 提高测试效率,保证产品质量
回归测试:项目在发新版本之后对项目之前的功能进行验证;
压力测试:可以理解多用户同时去操作软件,统计软件服务器处理多用户请求的能力
兼容性测试:不同浏览器(IE、Firefox、Chrome)等等
自动化测试所属分类:
1 黑盒测试(功能测试)
2 灰盒测试(接口测试)
3 白盒测试(单元测试)
web自动化测试属于黑盒测试(功能测试)
优点:较少的时间内运行更多的测试用例;自动化脚本可重复运行;减少人为的错误;测试数据存储;
缺点:不能取代手工测试;手工测试比自动化测试发现的缺陷更多;测试人员的技能要求
自动化测试分类:
web-(UI)自动化测试;接口-自动化测试;移动(app)-自动化测试;单元测试-自动化测试
web自动化测试:让程序代替人为自动验证web项目功能的过程
什么web项目适合做自动化测试:1需求变动不频繁 2项目周期长 3项目需要回归测试
如何进行web自动化测试?(主流测试-工具)
1 QTP(收费),QTP是商业的功能测试工具 收费 支持web 桌面自动化测试
2 Selenium(开源), 免费 主要做功能测试
3 Jmeter(开源、web、接口、性能)
4 Loadruuner(收费 web 性能)
5 Robot frameword基于python可扩展的测试自动化框架
主流工具-汇总:
Web自动化测试:selenium、robot framework
App端自动化测试:Appium、Monkeyrunner、UIautomation
PC客户端(win32)自动化测试:QTP
接口自动化测试:Jmeter、Postman、httpUnit、RESTClient
云测平台:Testin Testbird
性能测试:Jmeter、LoadRunner
Selenium是一个用于Web应用程序测试的工具;中文的意思(硒)
Selenium的特点
1. 开源软件:源代码开放可以根据需要来增加工具的某些功能
2. 跨平台:linux 、windows 、mac
3. 核心功能:就是可以在多个浏览器上进行自动化测试
4. 多语言:Java、Python、C#、JavaScript、Ruby等
5. 成熟稳定:目前已经被google , 百度, 腾讯等公司广泛使用
6. 功能强大:能够实现类似商业工具的大部分功能,因为开源性,可实现定制化功能
Selenium IDE:是一个Firefox插件,用于记录和播放用户与浏览器的交互。 (录制Web操作脚本)
为什么要学习Selenium IDE?
1. 使用Selenium IDE录制脚本,体验自动化脚本魅力
2. 使用Selenium IDE录制的脚本转换为代码语言
Selenium IDE运行 1. Ctrl+Alt+S 2. 工具栏——>Selenium IDE
Selenium IDE运行
1. 文件:创建、打开和保存测试案例和测试案例集。编辑:复制、粘贴、删除、撤销和选择测试案例中的所有命令。Options : 用于设置seleniunm IDE。
2. 用来填写被测网站的地址。
3. 速度控制:控制案例的运行速度。
4. 运行所有:运行一个测试案例集中的所有案例。
5. 运行:运行当前选定的测试案例。
6. 暂停/恢复:暂停和恢复测试案例执行。
7. 单步:可以运行一个案例中的一行命令。
8. 录制:点击之后,开始记录你对浏览器的操作。
9. 案例集列表。
10. 测试脚本;table标签:用表格形式展现命令及参数。source标签:用原始方式展现,默认是HTML语言格式,也可以用其他语言展示。
11. 查看脚本运行通过/失败的个数。
12. 当选中前命令对应参数。
13. 日志/参考/UI元素/Rollup
定位调试插件
FireBug插件是火狐浏览器一款插件,能够调试所有网站语言,同时也可以快速定位HTML页面中的元素; 作用:定位元素(获取元素定位和查看元素属性);
Selenium IDE脚本编辑与操作 【了解】 (目的:手动修改或编写脚本)
1、编辑一行命令:在Table标签下选中某一行命令,命令由command、Target、value三部分组成。可以对这三部分内容那进行编辑。
2、插入命令:在某一条命令上右击,选择“insert new command”命令,就可以插入一个空白,然后对空白行进程编辑
3、插入注释:鼠标右击选择“insert new comment”命令插入注解空白行,本行内容不被执行,可以帮助我们更好的理解脚本,插入的内容以紫色字体显示
4、 移动命令:有时我们需要移动某行命令的顺序,我们只需要左击鼠标拖动到相应的位置即可。
5、 删除命令:选择单个或多个命令,然后点击鼠标右键选择“Delete”
6、命令执行:选定要执行的命令点击单个执行按钮即可,注意:有一些命令必须依赖于前面命令的运行结果才能成功执行,否则会导致执行失败。
Selenium IDE常用命令
1、open(url)命令:作用:打开指定的URL,URL可以为相对或是绝对URL
2、pause(waitTime) 作用:暂停脚本运行 waitTime:等待时间,单位为ms;//Target=1000
3、 goBack() 作用:模拟单击浏览器的后退按钮; 提示:由于没有参数,所以Target和Value可不填
4、refresh() 作用:刷新当前页; 提示:由于没有参数,所以Target和Value可不填;
5、click(locator) 作用:单击一个链接、按钮、复选框或单选按钮; 提示:如果该单击事件导致新的页面加载,命令将会加上后缀“AndWait”,即“clickAnd Wait”,或“waitForPageToLoad”命令
6、type(locator,value) 作用:向指定输入域中输入指定值;也可为下拉框、复选框和单选框按钮赋值. Target:元素的定位表达式; Value:要输入的值
7、close() 作用:模拟用户单击窗口上的关闭按钮; 提示:由于没有参数,所以Target和Value可不填
WebDriver基础篇
什么是WebDriver?(下面是三种解释)
1. Webdriver (Selenium2)是一种用于Web应用程序的自动测试工具;
2. 它提供了一套友好的API;
3. Webdriver完全就是一套类库,不依赖于任何测试框架,除了必要的浏览器驱动
WebDriverAPI 支持的浏览器
1. Firefox (FirefoxDriver)【推荐-本阶段学习使用】
2. IE(InternetExplorerDriver)
3. Opera(OperaDriver)
4. Chrome (ChromeDriver)
5. safari(SafariDriver)
6. HtmlUnit (HtmlUnit Driver)
提示:
Firefox、Chrome:对元素定位和操作有良好的支持,同时对JavaScript支持也非常好。
IE:只能在windows平台运行,所有浏览器中运行速度最慢
HtmlUnit:无GUI(界面)运行,运行速度最快;
WebDriverAPI 支持的开发语言:1. Java 2. Python 3. PHP 4. JavaScript 5. Perl 6. Ruby 7. C#
环境搭建、 为什么要环境搭建、 为什么要环境搭建、 selenium安装、 selenium 安装 卸载 查看命令
1. WebDriver是什么?(测试web项目自动化测试工具、一套友好的API、不依赖任何测试框架 只需要浏览器驱动)
2. 为什么要搭建环境?(工具包、解释器)
3. selenium 安装、卸载、查看命令(安装pip install selenium==2.48.0 查看pip show selenium 卸载pip uninstall selenium)
4. 为什么推荐火狐浏览器和火狐48版本以下(selenium IDE;firebug定位元素;对WebDriver有良好的支持)
WebDriver-元素定位
WebDriver 元素定位方式:id、name、class_name、tag_name、link_text、partial_link_text 需要掌握
定位方式分类-汇总:
1). id、name、class_name:为元素属性定位
2). tag_name:为元素标签名称
3). link_text、partial_link_text:为超链接定位(a标签)
4). Xpath:为元素路径定位
5). Css:为CSS选择器定位
id定位
说明:HTML规定id属性在整个HTML文档中必须是唯一的,id定位就是通过元素的id属性来定位元素; 前提:元素有id属性
方法driver.find_element_by_id(id值)
id定位实现 步骤分析
1. 导入selenium包 --> from selenium import webdriver
2. 导入time包 --> from time import sleep
3. 实例化火狐浏览器 --> driver=webdriver.Firefox()
4. 打开注册A.html --> driver.get(url)
5. 调用id定位方法 --> driver.find_element_by_id("")
6. 使用send_keys()方法发送数据 --> .send_keys("admin")
7. 暂停3秒 --> sleep(3)
8. 关闭浏览器 --> quit()
案例实施步骤思路分析:1 导包 2 制定浏览器(实例化浏览器对象) 3 打开项目 4找到元素(定位元素) 5 操作元素 6 暂停 7关闭
id定位-总结:1. 导包 2. url中\\转义 3. id定位方法 3. 发送内容方法 4. 暂停方法 5. 关闭浏览器
name定位
说明:HTML规定name属性来指定元素名称,因此它的作用更像人名,name的属性值在当前文档中可以不是唯一的,name定位就是根据元素name属性来定位
前提:元素有name属性
name定位方法:driver.find_element_by_name(name值)
class_name定位
说明:HTML规定了class来指定元素的类名,用法和name、id类似;通过元素的class属性定位
前提:元素有class属性
class_name定位方法:find_element_by_class_name()
tag_name定位
说明:HTML本质就是由不同的tag(标签)组成,而每个tag都是指同一类,所以tag定位效率低,
一般不建议使用;tag_name定位就是通过标签名来定位 如<input><a>...
前提:元素标签名在当前页面必须为唯一元素,或定位符合条件的一个元素;
tag_name定位方法:1. find_element_by_tag_name(标签名称) (返回:符合条件的第一个标签)
link_text定位
说明:link_text只定位超链接文本(<a>标签</a>)
注意:必须为全部匹配文本
link_text定位方法:1. 方法:find_element_by_link_text(全部文本值) 2. 说明:需要传入a标签全部文本(访问 新浪 网站)
partial_link_text定位
说明:partial_link_text定位是对link_text定位的补充说明,partial_like_text为模糊匹配;link_text全部匹配
partial_link_text定位方法:1. 方法:find_element_by_partial_link_text(局部文本) 2. 说明:需要传入a标签局部文本-能表达唯一性(访问 新浪 网站)
find_element[s]_by_XXX()
作用:1). 查找定位所有符合条件的元素 2). 返回的定位元素格式为数组(列表)格式;
elements:返回所有符合条件的元素 说明:返回的格式为列表,所以访问的时候必须指定下标,下标从零开始
Xpath
1. XPath即为XML Path 的简称,用来确定XML文档中某部分位置的语言。
2. HTML可以看做是XML的一种实现,所以Selenium用户可以使用这种强大的语言在Web应用中定位元素。
XML:一种标记语言,用于数据的存储和传递。 后缀.xml结尾
Xpath定位策略(方式):
1路径-定位 1). 绝对路径 2). 相对路径
2. 利用元素属性-定位
3. 层级与属性结合-定位
4. 属性与逻辑结合-定位
Xpath定位 方法:driver.find_element_by_xpath()
绝对路径:从最外层元素到指定元素之间所有经过元素层级路径 ;如:/html/body/div/p[2]
提示:
1). 绝对路径以/开始,中间不能跳跃元素
2). 使用Firebug可以快速生成,元素XPath绝对路径
相对路径:从第一个符合条件元素开始(一般配合属性来区分);如://input[@id='userA']
提示:
1). 相对路径以//开始,后边必须跟标签名称或*
2). 使用Friebug扩展插件FirePaht可快速生成,元素相对路径
Xpath路径内使用属性时,必须要使用@属性
利用元素属性: 说明:快速定位元素,利用元素唯一属性; 示例://*[@id='userA']
层级与属性结合 说明:要找的元素没有属性,但是它的父级有; 示例://*[@id='p1']/input
属性与逻辑结合 说明:解决元素之间个相同属性重名问题 示例://*[@id='telA' and @class='telA']
Xpath定位:
1、如何通过Firebug快速生成绝对路径(1保证在HTML选项,使用快速定位工具定位要生成路径的元素 2选中代码(蓝色)当前行右击鼠标选择复制xpath)
2、如何通过Firebug快速生成相对路径(1保证在HTML选项,使用快速定位工具定位要生成路径的元素 2选中代码(蓝色)当前行右击鼠标选择复制最简xpath)
3、Xpath策略有哪些:1)路径(绝对路径,以单斜杠开头 相对路径,以双斜杠开头,后边必须跟标签名称或*) 2)属性(所有属性必须以@修饰 如://*[@id="id"]) 3)层级与属性(层级:父子标签) 4)属性与逻辑(两个属性以上时使用,使用逻辑符号and连接)
CSS(Cascading Style Sheets)
CSS是一种语言,它用来描述HTML和XML的元素显示样式;
(css语言书写两个格式:1. 写在HTML语言中<style type="text/css">... 2. 写在单独文件中 后缀.css)
CSS定位 方法: driver.find_element_by_css_selector()
CSS定位常用策略 (方式): 1.id选择器 2 .class选择器 3.元素选择器 4.属性选择器 5.层级选择器
id选择器:id选择器必须以#修饰 方法:driver.find_element_by_css_selector()
class选择器:以.修饰 必须有class属性 方法:同上
元素选择器:直接输入元素名称名称(标签名称)如element;input
属性选择器:格式:input[id="userA"] [id="userA"]
层级选择器:格式:element>element;element element(p>input p input)
CSS延伸
1. input[type^='p'] 说明:type属性以p字母开头的元素
2. input[type$='d'] 说明:type属性以d字母结束的元素
3. input[type*='w'] 说明:type属性包含w字母的元素