目前最主流的自动化测试技术selenium

前言(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 robotframeworkpip 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:setUpTeardown,作为前置条件和后置条件。
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:要提交的操作。
在这里插入图片描述

  • 3
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值