web自动化测试

自动化测试:让程序代替人为去验证程序功能的过程

为什么要进行自动化测试?
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定位就是通过标签名来定位 如...
前提:元素标签名在当前页面必须为唯一元素,或定位符合条件的一个元素;
tag_name定位方法:1. find_element_by_tag_name(标签名称)   (返回:符合条件的第一个标签)

link_text定位
说明:link_text只定位超链接文本
标签
注意:必须为全部匹配文本
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语言中