前言(conda基础命令)
conda info --envs :查看当前所有的虚拟环境
conda list :查看当前虚拟环境安装的包
conda remove -n selenium --all :删除虚拟环境
conda create -n selenium python=3.7 :创建虚拟环境
conda activate selenium :激活环境
conda deactivate :退出环境
1、Selenium是什么?
**Selenium测试
直接运行在浏览器中
,就像真正的用户在操作一样。**
Selenium经历了三个大的版本。
主流的自动化测试工具是
QTP
,现在已经淘汰。2014年左右selenium开始兴起。
**自动化
功能测试
主要是用于提升测试人员工作效率**,70%的工作时间都是在进行UI测试。全部都是
基于前端界面来实现的交互性操作
。尽可能实现前端的交互,用于
模拟用户的实际行为
。推出了基于JScore的selenium1.0版本。
Selenium ide,已经被淘汰。用于录制Firefox浏览器下的web系统脚本。
Selenium2.0 webDriver+IDE。已经被淘汰。
Selenium3.0 webDriver的时代。
APP自动化是基于Appium来实现的。Appium是selenium孩子。
**Selenium是目前最主流的
自动化测试技术
,因为
跨平台
和
开源
。**
跨平台:python,Java,js,c#,PHP等语言的使用。
2、selenium应用场景(
自动化功能测试
应用场景)
(1)web UI——selenium主要实现
web UI自动化测试
。
**一般 UI 自动化都是在
回归测试
阶段**来进行的。主要用于
验证流程
的正确性,
特定功能
的正确性。
(2)APP UI
(3)接口自动化
3、RobotFramework环境部署
RobotFramework
简称RF
,是**目前
市面应用
相对比较主流的
一个测试框架
**,
全部基于Python实现
的一款
开源跨平台的测试框架
。
支持
OS与windows系统
的运行。
支持
WebUI、APPUI、接口
的自动化测试(基于不同的模块来实现不同的业务)。
目前而言
仅有的一个具备有GUI界面的框架
。
RF不需要懂python编程就可以操作。具备有独有的
表格编程格式
。
环境搭建:
1.安装python。——支持最高版本python3.7?
2.安装RF组件:
pip install robotframework
、
pip install robotframework-ride
3.启动方式:在python37/Scripts/
ride.py
启动。——选择python.exe的方式打开(启动)
4.安装自动化测试相关组件:
pip install robotframework-seleniumlibrary
5.下载webdriver到python的安装路径下。
PS:如果安装时出现read timeout异常,就添加
--default-timeout=1000
。
一、web自动化测试
1、自动化基础
测试流程,从手工转换为自动化实现形式。
自动化在实际执行的时候,不会考虑整个流程是否流畅,只会依照原有的动作进行
机械化执行
。
2、目前主流的自动化实现
基于selenium+web Driver来实现的。
3、环境搭建——基于python的selenium实现
(1)安装python
(2)安装Pycharm
(3)安装Selenium+WebDriver
pip直接安装Selenium
;
WebDriver的安装:
例如安装chromDriver,首先直接百度chromDriver,点击
chromDriver Mirror
会得到所有chromDriver版本。
根据
自己的chrom
浏览器版本
下载对应的chromDriver。
如果没有对应的chromDriver版本,就随便点击一个chromDriver版本(比如2.46版本的),得到其中的
notes.txt
,根据其中的所支持浏览器版本找到对应的chromDriver版本。然后下载chromDriver。
下载完成后,会得到
chromDriver.exe
文件,将其放到python安装的根目录下。
4、应用实列
(1)导环境:工程项目点击File下的Settings,点击里面的Project的Project Interpreter进行配置。
(2)建包(New->Python Package)、建python文件(New->Python File)
5、场景
(1)面试自动化测试岗位,一定会问及的内容:
测试框架的设计
。
(2)学习自动化的目的:设计一款独属于自己的测试框架。现阶段测试框架的核心内容一定是
基于关键字驱动
的。
1、解决代码冗余
2、解决可读性
3、解决维护性
4、解决代码的复用性
最根本的解决方式:关键字驱动(selenium的二次封装)
——关键字驱动最大的劣势:没有办法结合到一个系统完全100%的契合一个系统的自动化测试。只能做
通用性
的项目自动化,类似于研发一个iframe工具,只能对一个系统进行泛泛的自动化测试,没有办法做精。
——PO模式
完全契合一个系统
,本身的业务和实际存在的流程来进行自动化测试的设计和管理。100%契合。
6、数据驱动
**将
代码与数据进行分离
**,单纯
由数据组成文件
,再
由文件来驱动关键字
,最终实现整个自动化的流程。
**在unittest中,通过
ddt
来实现**。ddt全称叫做
data driver test
,安装ddt通过
pip install ddt
。
**可以直接读取
yaml文件
**。通过
pip install pyyaml
安装。
**
xlrd模块
——excel读取(.xlsx文件)**
7、关键字驱动
(1)当调用一个特定的关键词的时候,就可以执行一个操作?
(2)关键字驱动已经非常大程度降低了冗余,提高了代码的可阅读性。
8、关键字驱动+数据驱动形式下实现的自动化测试框架的设计模式:
读取到数据,**基于固定格式的数据内容进行
拼接
,拼接后的内容作为关键字所需要的参数**,进行传入。从而执行对应的关键字。再将结果与预期结果进行对比,从而获得单条测试用例执行是否通过的结果。
9、UnitTest
Python安装时就已经默认封装好了UnitTest框架,调用框架的时候只需要通过直接导入
(import)unittest
包即可实现;
主要用于
管理测试用例
和
实现数据驱动
。
UnitTest的基本用法:
Python中相对比较流行的自动化测试框架
UnitTest,PyUnit
,在Java中有一个叫做
JUnit
的测试框架,早期主要是用于做单元测试,随着自动化更新,能够完整的结合Selenium、Appium、Requests等实现UI自动化与接口自动化。
四大特点:
1、TestCase:测试用例,所有的用例都是
直接继承于unittest.TestCase类
。
2、TestFixture:
setUp
和
Teardown
,作为前置条件和后置条件。
3、TestSuite:测试套件。
4、TestRunner:测试运行器。一般与TestSuite一起使用。
5、断言(assert):在UnitTest中封装好了成熟断言,可以直接被调用。断言:自动化测试主要用于
对流程来进行的测试
,
断言就是自动化测试中的预期结果与实际结果的对比,其本身就是if else
。
UnitTest语法规则:
1、UnitTest中,测试用例定义都是
以test开头
2、用例排序
与写的顺序无关
,排序是遵循A-Z,a-z,0-9
注意执行顺序!1-9,a-z。
Skip操作:
跳过测试用例的执行,是通过
装饰器
来执行的。
# 无条件跳过本条用例的执行
@unittest.skip('因为我比较帅,所以不想执行')# 有条件跳过本条用例执行1 =false
@unittest.skipUnless(1>2,'这是unless的理由')# 有条件跳过本条用例执行2 = true
@unittest.skipIf(1<2,'这是if的理由')
@unittest.expectedFailure # 不记录用例失败当中
以上三种都会跳过本次用例的执行!
UnitTest套件:
必须新建一个类对象存放套件
。
直接在unittest类中运行无法生效
。
HTMLTestRunner:
参考地址:https://www.jb51.net/article/194926.htm。
(1)导入环境:下载HTMLTestRunner.py,注意右击另存为python中的Lib文件夹中(eg.Anaconda3\envs\selenium\Lib)。修改部分源码,应用于python3中。
(2)导包:直接import即可。
from HTMLTestRunner import HTMLTestRunner
10、基于UnitTest+关键字驱动实现自动化测试
(1)UnitTest是python中的测试专用的一个框架,初期是用于做单元测试,是随系统默认集成的框架,不需要额外安装。
(2)UnitTest在使用的时候,有明确的规范定义,setUP,tearDown,testCase,前两个在unittest中默认有,但需要自己声明。
11、quit和close的区别
quit:关闭浏览器,并且关闭ChromeDriver进程。
close:关闭当前的标签页,不会关闭进程。
课后作业:基于所讲,将常用关键字进行封装,并基于UnitTest来实现一个基本的自动化测试流程。
12、PageObject模式(PO模式)
是目前测试行业公认
最佳的自动化模式
,取自关键字驱动模式来做的一次升级(selenium二次封装)。是完全基于页面来实现的模型。
PageObject,从最初自动化是基于QTP来实现的,通过录制的形式,自动生成脚本,通过定义对象库来实现对页面的元素的收集,升级到关键字驱动的形式来实现自动化(通过封装对元素的操作,来实现关键字驱动),再升级到pageObject,将系统以页面来进行区分,针对不同的页面,基于页面的元素及当前页面所实现的业务,将其定义为一个完整的页面对象。然后对这个页面对象进行操作。在PO中,通过分层的形式,来定义出不同页面的操作内容:
1、BasePage:
基础层
,用于提供
最为底层的功能
,让
其他页面对象可以直接进行继承
的。
2、page:
页面层
,用于提供
元素的获取
,各个元素的操作方法的封装。
3、
业务层
:通过这一层的调用,
传入参数
,进行自动化的运行。
优点:针对于
指定的被测业务系统
的流程,执行自动化时非常
简便
。
缺点:对于
多个系统的复用性
相对较
差
。
13、PO设计原理
(1)
提取
selenium中
公用的方法
,作
为基本对象
。
(2)
页面业务流程的关联设计
。
(3)
调用业务流程
实现自动化测试。
优势:
(1)将不同的页面封装成不同的页面对象,分别进行管理;
(2)进一步降低冗余;
(3)对于代码的阅读性和维护性有进一步提升。例如:在维护的时候,如果元素或者文本内容发生变化,只需要修改一处即可全部生效;
(4)测开针对公司的系统,结合需求与业务,结合实际项目情况,设计对应的测试框架与测试工具,提供给测试人员进行功率提升,并且进行维护。
14、PO的实现是如何来做的?
注:*表示基于
元组的形式
进行处理,**表示字典,基于
键值对的形式
去获取。
15、自动化测试目的
对系统中
存有的流程
进行
回归
和
自动执行
。
16、在面试时,自动化测试技术的相关点的内容
(1)自动化测试相关的设计模式以及应用的技术点。
为什么不知道如何回答面试官有关自动化测试技术的点?
课后作业:基于PO模式实现一套自动化测试内容的编写。
17、注意事项
(1)当自动化运行时,出现新的标签页,需要切换句柄(
每一个标签页就是一个单独的句柄
)。为了防止标签页过多,导致句柄过多,所以每次切换的时候,如果不需要保存,则优先关闭旧的页面。
handles=driver.window_handles # 数组类型
print(handles)
driver.close()
driver.switch_to.window(handles[1])# 旧标签页为handles[0]
18、框架设计思路
编程语言:python
框架:Selenium、Appium、Requests
设计模式:POM(PO)、关键字
数据:Excel、yaml
用例:UnitTest、PyTest
测试报告:HTMLTestRunner、Allure
持续集成:邮件发送、自动部署、自动化执行、自动化测试
19、ActionChains类
ActionChains是selenium给我们提供了一个类来
处理鼠标键盘类事件
,比如单击、双击、点击鼠标右键、拖拽等事件。
导入python文件中:
from selenium.webdriver.common.action_chains import ActionChains
基本方法的调用:
ActionChains(driver).drag_and_drop_by_offset(element_hk, x_location, y_location).perform()
driver:驱动。
drag_and_drop_by_offset:鼠标操作事件。
element_hk, x_location, y_location:元素,被操作的元素。开始移动的元素——原始元素,鼠标对元素拖到另外一个元素的x坐标,鼠标对元素拖到另外一个元素的y坐标。
perform:要提交的操作。
版权归原作者 墨墨无闻小菜鸟 所有, 如有侵权,请联系我们删除。