🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 一、自动化测试基础知识 ### 1.1 为什么要进行自动化测试? 1. 解决-回归测试 2. 解决-压力测试 3. 解决-兼容性测试 4. 提高测试效率,保证产品质量 回归测试:项目在发新版本之后对项目之前的功能进行验证; 压力测试:可以理解多用户同时去操作软件,统计软件服务器处理多用户请求的能力 兼容性测试:(1.浏览器 2.分辨率 3.操作系统) <br /> ### 1.2 自动化测试相关知识 优点 ~~~ 1. 较少的时间内运行更多的测试用例; 2. 自动化脚本可重复运行; 3. 减少人为的错误; 4. 测试数据存储 ~~~ 误区 ~~~ 1.自动化测试可以完全替代手工测试 2.自动化测试一定比手工测试厉害 3.自动化测试可以发掘更多的BUG 4.自动化测试适用于所有功能 ~~~ 自动化测试分类 ~~~ 1.Web-自动化测试(本阶段学习) 2.移动-自动化测试 3.接口-自动化测试 4.单元测试-自动化测试 ~~~ ### 1.3 自动化测试分类 1. Web自动化测试【本阶段学习】 ​ 2. 移动自动化测试(app自动化) ​ 3. 接口自动化(工具、代码) ​ 4. 单元测试 <br /> ### 1.4 web自动化测试 概念:让程序代替人为对web项目进功能验证过程 什么web项目适合自动化? ​ 1. 需求变动不频繁 ​ 2. 需要回归测试项目 ​ 3. 项目周期长 ​ web自动化开始进行阶段? ​ 功能测试完毕(手工测试) web自动化所属分类 1. 黑盒测试(功能测试) 2. 白盒测试(单元测试) 3. 灰盒测试(接口测试) 提示: 1. 以上分类为站在代码可见度上划分 2. web自动化测试属于黑盒 <br /> ## 二、web自动化测试工具选择 ### 2.1 主流的Web自动化测试工具 ~~~ 1.QTP QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试。 ​ 2. Selenium(本阶段学习) Selenium是一个开源的web自动化测试工具,免费,主要做功能测试。 ​ 3. Robot framework(2014年停止更新) Robot framework是一个基于 Python可扩展地关键字驱动的测试自动化框架。 ~~~ <br /> ### 2.2 什么是Selenium? 概念: Selenium是一个用于Web应用程序测试的工具;中文的意思(硒) <br /> ### 2.3 Selenium特点 ~~~ 1. 开源软件:源代码开放可以根据需要来增加工具的某些功能 2. 跨平台:linux 、windows 、mac 3. 支持多种浏览器:谷歌、火狐、IE等等 4. 支持多语言:Java、Python、C#、JavaScript、Ruby等 5. 成熟稳定:目前已经被google,百度,腾讯等公司广泛使用 6. 功能强大:能够实现类似商业工具的大部分功能,因为开源性,可实现定制化功能 ~~~ <br /> ### 2.4 Selenium家族(发展史) ~~~ 版本: selenium1.0 1.gelenium IDE(录制自动化代码工具) 2.gelenium Grid(分布式工具:同时启动多个浏览器) 3.gelenium RC(通过JS模拟浏览器,实现自动化方式) ​ selenium2.0(稳定推荐版) selenium2.0 = selenium1.0+webdriver ​ selenium3.0 2.0升级版,支持JAVA8、windows10 Edge浏览器、safa浏览器 ​ 提示:无论是通过2.0还是3.0编写的自动化脚本,API方法是不变的,唯一不同就是环境不同。 ~~~ <br /> ## 三、环境搭建 1.环境搭建 基于 Python环境搭建 ~~~ 1.Python开发环境 2.安装 selenium包 3.安装浏览器 4.安装浏览器驱动 -- 保证能够用程序驱动浏览器,实现自动化测试 ~~~ ### 3.1 安装selenium包 1)通过pip包管理工具去安装(前提: Python3安装完毕且能正常运行) ~~~ 安装:pip3 install selenium 卸载:pip3 uninstall selenium 查看版本:pip3 show selenium ​ 扩展: 1.安装指定版本 pip install selenium==版本号 如:pip install selenium==2.48.0 2.如何查看可安装按本?指定版本号为错误版本号 3.pip是 python中包管理工具(可以安装、卸载、查看 python工具) 4.pip list查看通过pip包管理工具安装的插件或工具 提示: 1.使用pip必须联网 2.默认安装python3.5版本以上工具,自带pip包管理具,默认会自动安装并且添加path环境变量 ~~~ 2) 通过pycharm去安装【推荐】 ~~~ 推荐原因:安装到当前工程环境内。 操作: Fi1e(文件菜单)--setting--> Project:当前工程名称-> Project Interpreter--点击+号安装相应包和版本 提示:如果使用 pip insta11 插件名 安装过后,打开pycharm,导包操作时,提示找不到此包, 那就说明pip insta11默认安装的路径和当前工程所有的环境路径不是同一个环境, 进行以上处理可以解决问题。 ~~~ ### 3.2 浏览器及驱动安装 火狐浏览器 ~~~ 1. Firefox48以上版本 selenium3.x+ Firefox驱动(geckodriver) 驱动下载地址:https://github.com/mozilla/geckodriver/releases ​ 2. Firefox3以下版本 selenium2.x+内置驱动 ~~~ 谷歌浏览器 ~~~ selenium2.x/3.x+ Chrome驱动( chromedriver) 驱动下载地址:https://sites.google.com/a/chromium.org/chromedriver/downloads ~~~ **应用:** 1. 将浏览器驱动放到指定文件夹 2. 将浏览器驱动所在目录添加到系统path环境变量中 (选中我的电脑/此电脑-右键->属性-->高级系統设置-->高级(环境变量)-->path(如果是win7,路径与路径之间需要添加分号)) **注意:** 1. 浏览器驱动必须和浏览器版本对应(查看下载驱动时,有告知响应的浏览器版本) 2. 获取浏览器48版本以下,内置驱动。 <br /> ### 3.3 科普path 说明: 指定系统搜索的目录 dos命令默认搜素顺序 1. 检测是否为内部命令 2. 检测是否为当前目录下可执行文件 3. 检测path环境变量指定的目录 **提示:** 1. 如果以上搜素目录都检测不到输入的命令或可执行文件,系统会抛出不是内部或外部命令 2. 在web环境中,如果不将浏览器驱动添加到path中, selenium在运行的时侯会提示浏览器驱动有误。 <br /> ### 3.4 第一个案例 ~~~ 通过程序启动浏览器,并打开百度首页,暂停3秒,关闭浏览器 ~~~ 实现步骤: ~~~ # 导包 from selenium import webdriver from time import time ​ # 创建浏览器驱动对象 driver= webdriver.Firefox()  # Firefox浏览器 driver= webdriver. Chrome()  #Chrome浏览器 # 打开web页面 driver.get("http://www.baidu.com/") # 暂停3秒 sleep(3) ​ # 关闭浏览器驱动 driver.quit() ~~~ <br /> ## 四、元素定位 **如何进行元素定位?** ~~~ html页面由标签构成,标签的基本格式如下: <标签名 属性名1=“属性值1” 属性名2="属性值2">文本</标签名> 示例: <input id="username" type="text" name="username" placeholder="用户名" /> <div id="my_cart"> <span>我的购物车</span> </div> ~~~ 元素定位就是通过元素的信息或元素层级结构来定位元素的。 <br /> **浏览器开发者工具** ~~~ 浏览器开发者工具就是给专业的web应用和网站开发人员使用的工具。包含了对HTML查看和编辑、Javascript控制台、网络状况监视等功能,是开发JavaScript、CSS、HTML和Ajax的得力助手。 ​ 作用:快速定位元素,查看元素信息 ~~~ ### 4.1 为什么要使用元素定位? 要使用web自动化操作元素,必须首先找到此元素。 ### 4.2 定位工具 火狐: Firebug(F12获取直接点击 Friebug图标) 谷歌:F12键(开发者工具) ### 4.3 定位元素时依赖于什么? 标签名 属性 层级 路径 ### 4.4 定位方式 ~~~ Selenium提供了八种定位元素方式 1. id 2. name 3. c1ass_name(使用元素的c1ass属性定位) 4. tag_name(标签名称<标签名.../>) 5. 1ink_text(定位超链接a标签) 6. partial_link_text(定位超链接a标签 模糊) 7. xpath(基于元素路径) 8. css(元素选择器) ​ 汇总: 1.基于元素属性特有走位方式(id\name\class_name) 2.基于元素标签名称定位: tag_name 3.定位超链接文本(1ink_text、 partia1_1ink_text) 4.基于元素路径定位(xpath) 5.基于选择器(css) ~~~ **id定位** 说明: ​ 1.通过元素的id属性定位,id一般情况下在当前页面中是唯一。 ​ 方法: ​ driver. find\_element\_by\_id(id) ​ 提示: ​ 元素必须要有id属性。 案例: ~~~ from selenium import webdriver from time import sleep ​ driver = webdriver.Chrome() ​ # 注意:\反斜杠在 python是转义字符 r:修饰的字符,如果字符中有转义字符,不进行转义使用 ur1=r"E:\课堂\北京\北京十期\Day01\02其他资料\浏览器\课堂素材\注册A.htm1" driver.get(url) ​ # 使用双反斜杠进行转义操作 url="E:\\课堂\\北京\北京十期\Day01\\02_其他资料\\浏览器\课堂素材\\注册A.html" ​ #查找元素 用户名并输入admin driver.find_element_by_id("userA").send_keys("admin") ​ #查找元素 密码框并输入123456 driver.find_element_by_id("passwordA").send_keys("123456") ​ sleep(3) driver.quit() ~~~ **name定位** 说明: 1.通过元素的name属性来定位,name一般名称为重复。 方法: drivr.find\_element\_by\_name(name) 提示: 元素必须要有name属性 案例: ~~~ from selenium import webdriver from time import sleep ​ driver = webdriver.Chrome() ​ # 使用双反斜杠进行转义操作 url="E:\\课堂\\北京\北京十期\Day01\\02_其他资料\\浏览器\课堂素材\\注册A.html" driver.get(url) ​ #查找元素 用户名并输入admin driver.find_element_by_name("userA").send_keys("admin") ​ #查找元素 密码框并输入123456 driver.find_element_by_name("passwordA").send_keys("123456") ​ sleep(3) driver.quit() ~~~ **class_name定位:** ``` 说明: 1.通过元素的class属性来定位,class属性一般为多个值。 方法: driver.find_element_by_class_name() 提示: 元素必须要有class属性 提示: id:一般为唯一标识符。 name:可以重名 class:多个命名 ```