css
自动化测试:由程序代替人为去验证程序功能的过程html
为何要进行自动化测试?linux
解决-回归测试web
压力测试编程
兼容性测试数组
提升测试效率,保证产品质量浏览器
什么阶段开始自动化测试?并发
功能测试完毕(手工测试)app
手工测试:就是由人去一个个输入测试用例,而后观察结果;框架
自动化测试所属分类(代码可见度)
黑盒测试
灰盒测试
白盒测试
提示: Web 自动化测试属于黑盒测试(功能测试)
优势:
较少时间内运行更多的测试用例
自动化脚本可重复运行
减小人为的错误
测试数据存储
缺点:
不能取代手工测试
手工测试比自动化测试发现的缺陷更多
测试人员技能要求
Web(UI)自动化测试
接口-自动化测试
移动(app)-自动化测试
单元测试-自动化测试
什么Web 项目适合作自动化测试?
需求变更不频繁
项目周期长
项目须要回归测试
如何进行 Web 自动化测试?
QTP(收费)
Selenium (开源)
Jmeter(开源,Web,接口,性能)
LoadRunner(收费.Web,性能)
Robot framework 基于Python 可扩展的( 关键字驱动) 自动化测试框架
主流工具-汇结:
Web 自动化测试:selenium,robot framework
App端:Appium MonkeyRunner,UIautomation
PC(win32):QTP
接口:Jemeter,Postman,HttpUnit,RESTClient
云平台:Testin Testbird
性能测试: Jemeter,LoadRunner
开源
跨屏图
多个浏览器测试
多语言
成熟稳定 google 百度 腾讯 都在用
功能强大
Selenium Grid 分布式测试,超大规模测试
重点:
Selenium IDE
Selenium2.0(WebDriver)
Selenium IDE :是一个 Firefox 插件,用于记录和播放用户与浏览器的交互.(录制 Web 操做脚本)
为社么要学习?
安装地址:
Version: 2.9.1.1
https://addons.mozilla.org/en-GB/firefox/addon/selenium-ide/versions/
火狐浏览器地址:
下载地址:
运行: Ctrl+Alt+S
35 版本兼容性最好
FireBug 差价事火狐一款插件,可以调试全部网站语言,同时也能够快速定位HTML 页面中的元素;
做用:定位元素
Selenium IDE 提示
录制脚本时候是录制鼠标和键盘的全部再浏览器操做,那么脚本会出现多余的步骤,有时候咱们须要手动填写脚本或修改脚本,全部咱们有必要对Selenium IDE 脚本编辑与操做有所了解;
目的:手动修改或编写脚本(采用录制方式很容易记录出多余的操做)
单机click 是没有值
右键鼠标 “insert new command” 插入一条新的命令
右键“insert new comment” 插入注释,紫色字体
选定要执行的命令点击单个执行按钮便可,注意:有一些命令必须依赖于前面命令的运行结果才能成功执行,不然会致使执行失败
做用:打开指定的URL ,URL 能够为相对或是绝对URL
Target:要打开的URL;value 值为空
当Target 为空,将打开Base URL 中填写的页面
当Target 不为空且值为相对路径,将打开Base URL +Target 页面.如,假设 Base URL 为 http://www.zhi97.com, 而Taget为/about.aspx,则执行open命令时,将打开http://www.zhi97.com/about.aspx
当Target以http://卡头是,将忽略Base URL,直接打开Target的网址;
做用:暂停脚本运行
waitTime:等待时间,单位为ms;//Target=1000
做用:模拟单机浏览器的后退按钮;
提示:因为没有参数,因此Target和Value可不填
做用:刷新当前页;
提示:因为没有参数,因此Target和Value可不填;
做用:单击一个连接,按钮,复选框或单选按钮;
提示:若是该单击事件致使新的页面加载,命令将会加上后缀"AndWait",即"clickAndWait",或"waitForPageToLoad"
做用:向指定输入域中输入指定值;也可为下拉框,复选框和单选框按钮赋值
Target:元素的定位表达式;
Value:要输入的值;
做用:模拟用户单击窗口上的关闭按钮
提示:因为没有参数,因此Target和Value可不填
须要关注的
1.Selenium2.0(WebDeiver)
提示:
Selenium2.0=Selenium1.0+WebDriver
Selenium1.0 和WebDeiver 原属于两个不一样的东西,因为某种缘由已合并
Selenium2.0之后咱们简称WebDriver
什么是WebDriver
WebDriver 是一种用于web应用程序的自动测试工具;
它提供了一套友好的API
WebDriver 彻底就是一套类库,不依赖任何测试框架,除了必要的浏览器驱动
说明:
API:应用编程接口说明(WebDriver类库内封装很是多的方法,要使用这些方法,旧须要友好的调用命名规则)
Firefox(FirefoxDriver) 推荐
IE(InternetExplorerDriver)
Opera(OperaDriver)
Chrome(ChromeDriver)
safari(SafariDriver)
HtmlUnit(HtmlUnit Driver)
Firefox,Chrome:对元素定位和操做有良好的支持,同时对JavaScript支持也很是好.
IE:只能再Windows平台运行,全部浏览器中运行速度最慢
HtmlUnit:无GUI(界面),运行速度最快
推荐缘由
Selenium IDE
FireBug
对WebDriver API 支持良好
自动化测试概念
WebDriver-定位元素
WebDriver-操做元素
安装: pip install selenium == 2.48.0
通用的Python包管理工具.提供了对Python包的查找下载,安装,卸载的功能
install: 安装命令
elenium==2.48.0:指定安装selenium2.48.0 版本(若是不指定版本默认为最新版本)
卸载:pip uninstall selenium
查看:pip show selenium
FireFox 48 以上版本
Selenium3.X+ FireFix 驱动-geckodriver
Firefox 48 如下版本
Selenium2.X 内置驱动
Selenium2.x/3.x+Chrome 驱动
每一个浏览的驱动版和其余浏览器的不一致
但要与对应的一致
各个驱动下载地址:http://www.seleniumhq.org/download/
浏览器的版本和驱动版本要一致
(若是是32bit浏览器而Driver 是64bit则会致使脚本运行失败)
浏览器驱动下载好后须要添加Path 环境变量中,或者直接放到Python 安装目录,由于Python以添加到Path 中
推荐使用火狐浏览器(24,35)版本
目标了解元素各类定位方法
掌握 id,name,class_name,tag_name,link_text,partial_link_text 定位的使用
为何要学习元素定位方式
让程序操做指定元素,旧必须先找到此元素
程序不像人类用眼睛直接定位到元素
WebDriver 提供了八种定位元素方式
id
name
class_name
tag_name
link_text
partial_link_text
Xpath
css
定位方式分类-汇总
id,name,class_name:元素属性定位
tag_name:元素标签名称
link_text,partial_link_text:超连接定位(a标签)
Xpath:元素路径定位
css:css选择器定位
导入selenium 包->from selenium import webdriver
导入time 包->from time import sleep
实例化火狐浏览器->driver=webdriver.Firefox()
打开注册A.html->driver.get(url)
调用id 定位方法->driver.find_element_by_id("")
使用send_keys()方法发送数据-<.send_keys("admin")
暂停3秒->sleep(3)
关闭浏览器->quit()
说明:为了接下来更好而学习体验,咱们先暂时使用send_keys()和quit()方法.再2.4节元素操做详解
driver.find_element_by_name(名称).send_key(赋值)
driver.find_element_by_class_name()
说明:HTML 规定了class 来指定元素的类名,用法和name,id 相似
前提:元素有class 属性
经过class_name定位电话号码A,并发送1861111111
说明:HTML本质就是由不一样的tag(标签)组成,而每一个tage 都是指同一类,因此tag 定位效率低.通常不建议使用;tag_name 定位就是经过标签名来定位
find_element_by_tag_name()
返回:符合条件的第一个标签
如何获取第二个元素?稍后(2.8节)讲解
说明:link_text定位于前面4个定位有所不一样,它专门用来定位超连接文本(<a"> 标签 </a">)
方法:find_element_by_link_text()
说明:须要传入a 标签所有文本
参考id定位
点击->click()
说明:partial_link_text 定位是对 link_text 定位的补充,partial_like_text 为模糊匹配; link_text所有匹配
做用:
查找定位全部符合条件的元素
返回的定位元素格式为数组(列表)格式
说明:
列表数据格式的读取须要指定下标(下标从0开始)
操做(2.4 tag_name)
说明:使用tag_name 获取第二个元素(密码框)
代码: driver.find_elements_by_tag_name("input")[1].send_keys("123456")
Xpath 即为XML Path 的简称,它是一种用来肯定XML文档中某部分位置的语言.
HTML 能够看作是 XML 的一种实现,因此 Selenium 用户可使用这种强大的语言在Web 应用中定位元素.
XML: 一种标记语言,用于数据的存储和传递.后缀.xml
提示:Xpath 为强大的语言,那是由于它有很是灵活定位策略;
Xpath 有哪些策略呢?
路径-定位
绝对路径
相对路径
利用元素属性-定位
层级于属性结合-定位
属性于逻辑结合-定位
driver.find_element_by_xpath()
1. 绝对路径:从最外层元素到指定元素之间全部通过元素层级路径;如:/html/body/div/p[2]
提示:
1.1. 绝对路径以/开始
1.2. 使用Firebug能够快速生成,元素Xpath绝对路径
2. 相对路径: 从第一个符合条件元素开始(通常配合属性来区分);
2.1. 相对路径以//开始,后边必须跟标签名称或*
2.2. 使用FireBug扩展插件FirePath 可快速生成,元素相对路径
3.Xpath 路径内使用属性时,必需要使用@修饰
提示:为了方便练习Xpath,能够在FireBug内安装扩展插件-FireFinder 插件;
3. 火狐浏览器->组件管理器->搜索FireFinder
说明:快速定位元素,利用元素惟一属性;
示例://*[@id='userA']
说明:要找的元素,没有属性,但它的父级有
示例://*[@id='p1']/input
说明:解决元素之间个数相同属性重名问题
示例://*[@id='telA' and @class='telA']
//*[text()='xxx'] #文本内容是xxx的元素
//*[starts-with(@attribute,'xxx')] #属性以xxx开头的元素
//*[contains(@attribute,'xxx')] #属性中含有xxx的元素
https://ftp.mozilla.org/pub/firefox/releases/
CSS(Cascading Style Sheets)是一种语言,它用来描述HTML 和XML 的元素显示样式;
css语言书写两个格式:
卸载HTML语言中.卸载单独文件中 后缀.css
而在CSS语言中有CSS选择器(不一样的策略选择元素),在Selenium 中也可使用这种选择器;
提示:
在selenium 中极力推荐CSS 定位,由于它比XPath 定位速度要快
CSS 选择器语法很是强大,在这里咱们只学习在测试中经常使用的几个
driver.find_element_by_css_selector()
id选择器
class选择器
元素选择器
属性选择器
层级选择器
说明:根据元素id 属性来选择
格式:#id 如: #userA<选择id属性值为userA的全部元素>
根据元素class属性来选择
格式:
.class 如: .telA <选择class属性值为telA的全部元素>
根据元素的标签名选择
格式:
element 如:input<选择全部input元素>
根据元素的属性名和值来选择
格式:
[attribute=value]如:[type='password']<选择全部type属性值为password的值>
根据元素的父子关系来选择
格式:
element>element 如:p>input .返回全部p元素下全部的input元素
提示:
">" 能够用空格代替 如:p input 或者 p [type='password']
1.input[type^='p'] type属性以p字母开头的元素
2.input[type$='d'] type属性以d字母结束的元素
3.input[type*='w'] type属性包含w字母的元素
说明:调用find_element()方法,经过By来声明定位的方法,而且传入对应的方法和参数(了解)
导包:from selenium.webdriver.common.by import By
driver.find_element(By.XPATH,...)
原find的底层