网页自动化测试
- 自动化测试的问题
- 解决回归测试(项目在发布新版本之后对项目之前的功能进行验证)
- 解决压力测试(多用户同时去操作软件,统计软件服务器处理多用户请求的能力)
- 解决兼容测试(测不同的浏览器)
- 提高测试效率,保证产品质量
- 自动化测试相关知识(手工测试完毕后进行)
手工测试:就是由人一个一个输入用例,然后观察结果
自动化测试的所属分类(代码可显性角度分类):
- 黑盒测试(功能测试)
- 灰盒测试(接口测试)
- 白盒测试(单元测试)
注意:web自动化测试属于黑盒测试、功能测试
优点:
- 较少的时间运行跟多的测试用例
- 自动化脚本可以重复运行
- 减少人为失误
- 测试数据储存
缺点:
- 不能代替手工操作
- 手工测试比自动化测试发现的缺陷更多
- 测试人员技能要求
误区:
- 自动化完全代替手工测试
- 自动化测试一定比手工测试厉害
- 自动化可以发现更多的BUG
自动化测试分类(测试类容分类):
- web-(UI)自动化测试
- 接口—自动化测试
- 移动(app)—自动化测试
- 单元测试—自动化测试
自动化测试概念:让程序认为代替验证web项目功能的过程
适合做自动化测试的web项目:
- 需求变动不频繁
- 项目周期长
- 项目需求回归测试
主流工具:
Web自动化测试:Selenium(硒)、Robot framework
APP端自动化测试:APPIUM、monkeyrunner、UIautomation
pc客户端(win32)自动化测试:QTP
接口自动化测试:jmeter、postman、httpunit、RESTclient
云平台测试:testin、testbird
性能测试:jmeter、loadrunner
- Selenium
特点:
- 开源软件
- 跨平台
- 核心功能
- 多语言
- 成熟稳定
- 功能强大
- Selenium IDE[课堂教学用火狐35版本,插件用的是2.9.1版本]
目的:
- 使用Selenium IDE录制脚本,体验自动化的魅力
- 把录制的脚本转化为代码语言
概念:
是一个firefox插件,用于记录和播放用户与浏览器的交互
安装方式:下载火狐浏览器,工具,添加附件,搜索selenium IDE,
注意:一定要使用火狐35版本和2.9.1的插件,不然效率无比的地下,还垃圾错误
.dmg是mac系统的压缩文件,打开时需要下载haozip或者macdrive.
- 定位调试插件 firebug***重要***[版本需要2.0.19]
作用:是一个火狐的插件,能够调试所有网站语言,同时可以快速定位HTML页面中的元素
作用:定位元素(获取元素的定位,查看元素属性)
基本命令:
1、pause(waitTime)
作用:暂停脚本运行
WaitTime:等待时间,单位为毫秒ms,//Target=1000
- go back()
作用:模拟单机浏览器的后退按钮
提示:由于没有参数,所以Tartget和Value不可填
- refresh()
作用:刷新当前网页
提示:由于没有参数,所以Tartget和Value不可填
- click(locator)
作用:单机一个链接、按钮、复选框或者单选按钮
提示:如果该单机时间导致新的页面加载,命令就会加上后缀“andwait”
即clickandwait,或者waitForpageToload
- type(locator,value)——————必定为两个参数
作用:向指定输入域中输入指定值;也可为下拉框、复选框和单选框按钮赋值
Target:元素的定位表达方式
Value:要输入的值
- close()
作用:模拟用户单击窗口的关闭按钮
提示:由于没有参数,所以Tartget和Value不可填
- webdrive(selenium2.0)[全章的大重点,十颗星星那么的重点]
基础知识:selenium2.0=selenium1.0+webdrive
概念:webdrive(selenium2.0)是一种用于web应用程序的自动化测试软件,它提供了一套友好的API,webdriver完全就是一套类装,不依赖任何测试框架,除了必要的浏览器驱动
支持浏览器的种类:
- firefox(fireDriver)
- IE(internetExploerDriver)
- Oprear(prearDriver)
- Chrome(ChromeDrive)
- Safari(SafarDrive)
- Htmlunit(HtmlunitDrive)
提示:firefox、Chrome:对元素定位和操作有良好的支持,同时对JAVAScrip支持也非常友好 ; IE:只能在windows平台运行,所有浏览器中运行速度最慢;Htmlunit:无GUL(界面)运行,运行速度最快
推荐原因:
- selenum IDE(已学习)
- Firebug(已学习)
- 对webDriver API支持良好
webDriver API支持哪些语言调用:
1、java
2、python
3、c#
为什么要学习webDriver:
- 自动化测试概念
- webDriver -定位元素(8种)
- webDriver -操作元素
基于python环境搭建(不推荐使用离线包):
- windows系统
- Python3.5以上版本(先搭建python开发环境)
- 安装selenium包
- 浏览器
- 安装pycharm
安装:pip install selenium==2.48.0
- pip:通用的python包管理系统,提供了对python包的查找、下载、安装、卸载等功能
- Install:安装命令
- selenium==2.48.0制定了安装的版本(如果不指定本版默认是安装最新版本)
卸载:pip uninstall selenium
查看当前版本:pip show selenium
推荐的浏览器:
- firefox 48版本以上—selenium 3.x+firefox驱动—geckodriver
- firefox 48版本以下—selenium 2.x (内置驱动)
注意:浏览器版本要和驱动版本一致
- webdrive-元素的定位
元素定位方式汇总、分类:
- id、name、class_name:元素属性定位
- Tag_name:标签名称定位
- Link_text、partial_link_text:标签的超链接定位
- Xpath:元素路径定位
- Css:css选择器定位
- 实例操作——ID/name
ID元素属性定位实例需求:
- 打开网站,使用id定位,自动填写(账号:1156779018 密码:wangyitian610)
- 填写完3秒后关闭浏览器窗口
步骤及代码分析:
# 导入selenium包
from selenium import webdriver
from time import sleep
# 实例化浏览器
driver = webdriver.Firefox()
# 打开指定URL
# url = "file:///H:/%E4%BB%A3%E7%A0%81/%E8%A1%A8%E5%8D%95.html"
# 网址也可以写成以下形式
url = "H:代码表单.html"
# 也可以如下形式
# url = r"H:代码表单.html"
# r作用:被r修饰的字符串。其中的转义符不做转义使用
driver.get(url)
# 找到用户名文本框—定位元素(用户)
element = driver.find_element_by_id("ppp")
# 传输指定文本框数值
element.send_keys("1156779018")
# 找到用户名文本框—定位元素(密码)
pwd = driver.find_element_by_id("uuu")
# 传输指定文本框密码
pwd.send_keys("wangyitian610")
#暂停三秒
sleep(3)
# 关闭浏览器
driver.quit()
/:斜杠 数学运算 :目录结构
Class_name元素属性定位:
说明:用法和id、name类似
定位方法:find_element_by_class_name()
tag_name元素属性定位:
说明:html本质就是有不同的tag(标签)组成,而每一个都是指同一类,所以tag定位效率低
一般不建议使用;tag_name定位就是通过标签名字来定位
定位方法:find_element_by_tag_name() 当有多个标签是,只处理第一个标签
link_text定位:
说明:link_text定位与前面四个定位有所不同,专门用来定位超链接文本<a>xxx</a>
实例需求:
- 打开网站,使用id定位,使用link_text定位<a>xxx</a>链接的网站
- 填写完3秒后关闭浏览器窗口
定位方法:find_element_by_link_text()
注意:需要输入<a>xxx</a>内文本的全部
点击————>click
Partial_link_text定位:
说明:需要传入<a>xxx</a>局部文本,能表达唯一性
定位方法:find_element_by_partial_link_text()
find_elements_by_xxx()
作用:
- 查找符合定位的所有元素
- 返回的定位元素格式为列表或者数组
说明:列表数据格式的读取需要下标(从0计数)
例子:driver.find_elements_by_tag(“input”)[1]
- Xpath定位
学习原因:
- 在实际的项目中并没有id、name、class属性
- id、name、class属性值随着动态获取、刷新或加载而变化
绝对路径:单旦斜杠/开头,中间不能跳跃标签元素
相对路径:以双斜杠//开头,后边必须要跟标签名称
- xpath路径内使用属性时,必须要用@修饰
- css定位
常用策略:
- id选择器:driver.find_by_css_selector(“#id的值”)
- Class选择器:driver.find_by_css_selector(“.id的值”)
- 元素选择器:driver.find_by_css_selector(“标签名称”)
- 属性选择器:driver.find_by_css_selector(i=“标签名称”)
- 层级选择器::driver.find_by_css_selector(p[id=”1”]>inoput)
延申:
- input[type^=”p”] :type属性以字母p开头的标签
- input[type^=”$”] :type属性以字母结尾的标签
- input[type*=”w”] :type属性以包含字母w的标签
- css定位
导入包:ctrl+alt+空格
查看类的源代码:ctrl,鼠标选中元素名