自动化测试方面的基础知识

前言:

蓝色标注主要是方便记忆,勾选出个人感觉的重点

块引用:大部分是便于理解的话,稍微看看就行,主要是和正常的文字进行区分的

1、什么是自动化测试

自动化测试是软件测试活动中一个重要分支和组成部分,随着软件行业发展,市场对软件周期及软件质量要求越来越高,催生出来各种开发模式,比如常见开发模式敏捷开发,同时对我们测试人员提更高的要求,此时,产生自动化测试,即通过工具或者脚本来达到测试的目的,没有人工或者很少人工参与的软件测试活动叫自动化测试

自动化测试就是将测试流程从手工转换为自动化实现形式

自动化测试技术是目前业内特别流行也是特别主流的一个测试技术,是目前测试人员最为核心的能力之一

2、自动化测试框架是什么?

参考文档:  聊聊自动化测试框架 - 老_张 - 博客园

WEBUI最主流的自动化测试框架是基于selenium+wendriver实现的

3、为什么要进行自动化测试?

①、黑盒测试回归效率低

②、手动测试的偶然性和不确定性

③、回归的覆盖率不足

④、交付的产品质量无法保证,全靠评估

⑤、系统越复杂,问题越多

⑥、上线时间长、构件失败率高导致的蝴蝶效应(迭代快,加班多)

4、自动化测试能解决什么问题?

①、提高出现问题后的响应速率

②、降低回归成本

③、提高回归覆盖率

④、提高回归效率

⑤、提高回归的稳定性

5、自动化测试优势

1)更方便对系统进行回归测试,当软件的版本发布比较频繁时,自动化测试的效果就更加明显

2)可以自动处理原本繁琐、复杂的任务,提供更准确测试,提供人员积极性

3)自动化测试具有一致性和复用性,测试脚本可以在不同版本进行重复测试,可以保证测试内容的一致性

这也就是,为什么在软件测试领域,自动化测试已成为趋势的原有,也越来越多互联网企业都把自动化测试作为测试活动重要组成部分,极大解放生产力

6、自动化测试的不足有哪些?

①、无法减少成本投入,而是为了加快测试结果反馈,提升测试质量

②、自动化适用于回归和冒烟,而不是发现BUG

③、录制回放功能是鸡肋,可视化并不是一个很好的做法

ps:主要是appium做AAPUI自动化的时候

④、不是所有所有系统所有功能都适合做自动化测试

7、自动化测试分类

1)web自动化测试

让程序代替人为验证WEB项目功能的过程

测试工具很多

ATP(UFT)付款

Robot framework

Selenium主流:

特点:1)可以支持多语言,java/python/ruby等多语言

 2)免费开源的框架

 3)可以支持多浏览器,比如firefox/chrom/ie

 4) 可以执行多并发测试,selenium可以在多台机器来执行并发测试,从而提高测试效率。增加资源利用

Winrunner

Testcomplete

Waiter…

场景:网页-比如:携程

携程登录中的滑块验证

2)app自动化测试

工具:

Monkeyrunner AndroidSDK自带的测试工具,可以支持自定义数据和事件进行测试,只支持Android4.1版本及以上

Monkey AndroidSDK自带的测试工具,只支持随机数据和事件,一般对软件进行压测

Ui automator Android自带的测试框架,基于java,代码结构比较简单,但是sdk16(Android4.1版本)

Appium  是ios,android测试框架,支持多语言,可以支持多平台,并且可以调用selenium的api

3)接口自动化测试

工具:postman/jmeter/soapui

代码:python+requests

8、自动化测试的应用场景

UI自动化:主要用于回归测试,对系统流程进行校验

rf、airtest、selenium IDE4

功能测试:校验所有的流程所有的功能模块,通过边界值通过等价类通过各种场景来做功能的校验,确保功能是符合需求的

在这个过程中,更多的是做流程的验证,每一次的版本发布新的版本回归,做回归测试

产品从开发环境到测试环境,从测试环境到仿真环境,从仿真环境到生产环境,整个过程中每一次发布到新的环境都要做的是,校验流程是否是正常实现

有了流程的确保实现之后,再看其他的功能的分支是不是正确的

第一步第二步是固定的

接口自动化:主要用于后端接口地逻辑测试,确保系统内不运行是有一定质量保障的

接口测试:在测试中要尽早的不断地进行测试,尽早地发现Bug越早修复成本九月底

9、主流自动化测试技术介绍

主流自动化技术:selenium

代表了测试行业唯一的自动化测试技术

selenium在ui自动化测试领域内,是绝对的技术应用

结构就是基于selenium+webdriver来实现的自动化测试

移动端appium来实现,就是基于selenium来实现的

接口自动化:python+requests来实现的(80%)

UI自动化包含WebUI和AppUI,

目前主流的web自动化实现:

基于Selenium+WebDriver来实现

app自动化实现:基于Appium+driver来实现

10、selenium的自动化测试实现

1、环境部署

搭建编程环境 python

搭建selenium环境 pip install selenium

如果安装失败,一般有两种:

1、升级你的pip指令

黄色警告

2、遇到超时

红色 timeout

 pip install selenium --default-timeout=1000

搭建webdriver环境

浏览器驱动安装,主流的chrome/firefox/safari/ie/

Downloads | Selenium

如果想要下载旧版本

CNPM Binaries Mirror

python要和webdriver版本要一一对应)

将下载的driver文件放到python的安装根路径下即可

Ps:自动化执行,所有的浏览器安装在默认路径

这个只是单纯的省去了配置环境变量的工作

实现测试

安装pycharm作为代码编辑工具,安装的时候用社区版就可以了,专业版与社区版最大的区别就是Django框架的使用

11、使用pycharm新建项目时,怎么选择虚拟环境和本地环境

方便于不同的项目切换,不然一个项目中安装太多库,有些还需要卸载不需要的库,再安装需要的库,比较麻烦,所以就有了虚拟环境,虚拟环境和本地环境的库互不干扰,独立存在的

实体环境和虚拟环境怎么安装库

实体环境安装库直接可以直接使用pip命令安装(也可以在本地环境目录下安装库),

虚拟环境安装第三方库可以再虚拟环境安装目录下用cmd命令行使用pip安装第三方库
要在venv/Scripts下

或者通过项目file-setting安装库

在新建项目时,选择虚拟环境或本地环境,当setting时安装的库就在对应环境中

12、selenium+webdriver工作原理

13、线性代码可以实现的功能为什么要通过框架(selenium+webdriver+关键字驱动+数据驱动)来实现

线性代码没有任何可以被优化被复用的价值的东西

企业:请一个自动化测试开发的目的是研发出公司可复用的自动化测试框架,而不是写一个只有自己可用的测试框架

1、能够复用到各种需要的项目中的

2、能够让其他的测开人员可以一同维护

3、能够以最低的使用成本和学习成本来上手

4、能够方便于后期维护和更新修改

而要实现这样的效果,就需要测试框架的设计和研发。

14、一个简单的selenium+webdriver线性代码

Ps:代码中的find_element_by_xpath/id/name方法已经被禁用了,统一改成find_element()

案例:

fromselenium.webdriver.common.byimportBy

element_agree=driver.find_element(By.CSS_SELECTOR,'div.pop_footer>a.reg_btn.reg_agree')

14、关键字驱动+数据驱动形式下实现的自动化测试框架的设计模式

读取到数据,基于固定格式的数据内容进行拼接,拼接后的内容作为关键字所需要的参数,进行传入,从而执行对应的关键字,再将结果与预期进行对比,从而获得单条测试用例执行是否通过的结果

15、设计理念和设计思路

基于关键字驱动结合数据驱动,然后将主要常用的一些内容把它封装起来,形成一个类对象,然后将这个类对象作为一个工具提供的类,然后结合unitTest或者ddt或者是pyTest来进行测试用例的一个整合,或者通过Excel或者yaml的形式去做这个数据驱动的文件,通过这种文件读写的形式,来结合到关键字的调用,去实现的一系列的流程,再通过一个写入的操作,做断言,那我们就完成了一套基本的测试用例。

16、quit与close的区别:

quit是关闭浏览器,并且关闭ChromeDriver进程

close是关闭当前标签页

17、企业主流po模式的实现 pageObject

po原理讲解

PageObject模式:

PO模式,是目前测试行业公认最佳的自动化设计模式,取自关键字驱动模式来做的一次升级

完全基于页面实现的模型

PO设计原理:

1.提取selenium公用的方法,作为基本对象

2.页面业务流程的关联设计

3.调用业务流程实现自动化测试

优势:

1.将不同的页面封装成不同的页面对象,分别进行管理

2.进一步降低冗余

3.对于代码的阅读性和维护性有进一步提升

4.测开针对公司的系统,结合需求与业务,结合实际项目情况,设计对应的测试框架与测试工具,提供测试人员进行功率提升,并且进行维护

po模式实现

po模式+unitTest实现自动化

18、自动化测试目的:

对系统中存有的流程进行回归和自动执行

19、现阶段测试行业主流的测试框架封装形式:

1.关键字驱动形态

将所有常用的Selenium.Appium.Request的模块的函数进行二次封装,结合数据驱动来实现关键字的调用,从而实现的自动化测试。

web的关键字驱动类:主要用于二次封装Selenium中的常用函数。

Selenium就相当于一个大型超市,二次封装的行为就相当于是去超市购物,将常用的函数全部采购回家,以便于在使用的时候直接从家中调用

常用函数:

1.访问url

2.创建webdriver

3.定位元素

4.输入

5.点击

……

2.页面对象模型

POM.PO,是目前广泛应用在ui层的自动化测试设计模式,基于这种形态来进行的封装框架主要用于单个系统的自动化测试覆盖。

19、你如何将实现的自动化测试框架在公司落地推广?

自动化测试框架的应用对象不是你自己,而是其余的测试执行人员以及研发团队的开发人员进行使用。

1.demo演示会议,用于介绍现有框架的使用规范和情况

2.部署框架,结合到指定的项目进行试点

3.生成规范化文档,将使用流程规范化定义,对所有的需要推行的角色进行学习和培训。

4.基于公司的实际业务需求和项目需求,来不断优化框架。

所有的推广行为一定要拉一个有话语权的领导垫背。

20、了解过哪些数据驱动的形式,分别的优劣是什么?

Yaml:

优点:易于维护,数据轻便。

缺点:学习成本过高,数据编写不直观。

Excel:

优点:维护好,当你的框架成型之后,基本不用再动源码,只需要了解规范格式,就可以零成本使用自动化。

缺点:所有的行为都需要固化内容来进行设定,相对死板且复杂。

Json:-

类:-与yaml类似

Text

……

21、如何优化现有的测试框架?

可以从测试框架的分布式结构设计与多用例并行处理的效率角度来进行优化。

将原有的测试框架运行过程从线性改为并行处理的模式。

22、Selenium三大等待

等待的作用:

为了提升自动化运行的成功率

自动化是由机器来进行操作,将手工测试所执行内容转换为机器执行

在指定的地方,进行等待,以便于系统响应,再继续进行

等待的三大方式:

1.强制等待

所有自动化学习者,最先接触的等待就是强制等待(Sleep)

作用:当代码运行到强制等待这一行的时候,无论出于什么情况,都强制性等待指定的时间

需要通过time模块中的sleep进行导入来使用

From time import sleep    -    sleep(2)

Import time   -   time.sleep(2)

优势:简单入门,调试的一把好手

劣势:只能够对单次生效,无法做有效的判断,会浪费大量的时间

2.隐式等待

直接通过WebDrive对象的implcitly_wait()方法进行设置

implcitly_wait(10)

藏起来的等待,一次设置,终生有效,针对当下的WebDriver对象,进行的等待时长的设置

作用:对WebDriver对象设置全局等待,每一次操作,如遇到页面加载,则默认进入到隐式等待

如遇元素无法找到,则进入隐式等待,当达到等待最大时长,则继续进行后续的代码

优势:设置一次即可,而且不会报错

劣势:必须等待页面加载完成才会进入后续的操作,或者等待超时再进入后续的操作

3.显式等待

光明正大的等,专门用于指定的元素和对象

WebDriverWait(driver,10,0.5)每0.5查找一次dirver对象,直到寻找时间达到10s

通过导入fromselenium.webdriver.support.waitimportWebDriverWait

优势:专门用于对指定的某一个元素进行等待

劣势:必须声明,只对单次生效,复杂程度相对其他等待而言,更高

WebDriverWait(driver,10,0.5).until(条件)查到元素进入筛选条件

WebDriverWait(driver,10,0.5).until_not()查不到元素进入筛选条件

当多个等待一同被调用时,系统的等待时间取决于最长的时间等待

23、自动化过程中应该避免的坑有哪些:

1.元素找不到(考虑是否有iframe和句柄的切换,元素定位技术不熟练,等待添加是否合理)

自动生成的id,复制没用,需要手写

2.代码成功率不高

3.不清楚什么时候该用什么技术

学完主流技术

24、selenium八大元素基本定位

元素定位:

所有的ui层的自动化都是基于元素定位来实现的。

所有的被操作的元素,都是WebElement对象(网络元素对象)

元素=HTML标签

基本格式:

<tagName attribute1="" attribute2="" >text</tagName>

标签:

a: 超链接

img:图片

Input:输入框,文件上传

Button:按钮

通用:div li span …

实际系统中,元素的标签类型不是由表象来决定的,是通过CSS样式表来决定的。

而自动化时,就是基于标签的属性来定位标签。

如何定位精准你需要操作的元素:

八种元素定位

1.id,基于元素属性中id的值来进行定位

id类似于人们身份证上的身份证号,不出意外都不会重复。

2.name,基于元素属性中name的值来进行定位

name类似于人们身份证上的名字,不会重复。

3.link text,主要基于超链接进行定位

4.partial link text,link text 的模糊查询版本,类似于数据库中的like %

当模糊查询匹配到多个符合条件的元素,选取第一个

5.classname,基于元素样式来进行定位,非常容易会遇到重复。

6.tagname,标签名来进行定位,重复度最高,只有在需要定位后进行二次删选的情况

7.cssselector,应用相对较多的一种行为,最初ie浏览器不支持xpath,完全基于class属性来实现的定位

网页f12,选中右键copy selector

8.xpath,目前应用最多的一种行为,基于页面结构来进行的定位

网页f12,选中右键copy xpath

绝对路径:不写

相对路径:基于匹配制度来查找元素,依照xpath语法结构来查找

例如://*[@id="kw"]

//表示从根路径下开始查找

*任意元素

[]表示筛选条件(查找函数)

@表示基于属性来筛选,例如id="kw"表示基于id属性值为kw的条件来进行筛选。

确认xpath路径是否正确:

1.在开发者工具element页面使用crl+f查找,进行判断

2.在console中输入$x()进行校验

如果是基于text来定位元素

在[]中添加text()="文本内容"进行查找,例如://a[text()='登录'

当你定位元素,无法直接定位时,可以通过定位子级元素返回父级来获取元素

//a[text()='登录'/..通过子级定位上一级

Linux返回上一级../

//input[@id="kw"]

函数写法://input[contains(@id,'kw')]

contains表示进一步查找,匹配项模糊查找

//input[contains(text(),'ddddd')]

在input标签中进一步查找文本中包含ddddd

25、Selenium理解

目前业内最核心的技术就是自动化测试。

最为主流的自动化测试技术就是Selenium

Appium是基于Selenium继承实现的。

Selenium核心是基于JS Core来实现的。

在现阶段的测试中,只会使用Selenium+WebDriver来实现自动化测试。

26、环境搭建:

安装Selenium

1.通过Pip install selenium

2.通过Pycharm中的interpreter来进行安装(setting- project-…)

Mac :pip3 install selenium

安装WebDriver

通过百度下载安装

FileFox:geckodrover,适配考虑到Selenium版本与浏览器版本

不管是什么类型的浏览器,一定记得关闭自动更新

27、Python+Selenium的实操讲解:

WebDriver+Selenium运行原理:

WebDriver是一个服务端,启动时就是启动一个服务,由该服务上传下发基于HTTP协议下的指令。

WebDriver是服务端代理,当自动化结束时,需要记得释放资源

Driver.quit()

28、Driver.get()怎么能访问url?

因为get()中封装了一个execute方法

通过Http网络协议,传递一个请求到浏览器驱动,而这个命令是基于selenium中的command指令,名为GET,通过这个GET指令去下发指令到WebDriver,请求时访问url

29、构成框架的组件,应该具备哪些功能?

Log:日志记录和管理功能,针对不同的情况,设置不同的日志级别,方便定位问题;

Report:测试报告生成和管理以及即时通知,测试结果快速响应;

Source:配置文件、静态资源的管理,遵循高内聚低耦合原则;

Common:公共函数、方法以及通用操作的管理,遵循高内聚低耦合原则;

TestCase:测试用例管理功能,一个功能点对应一个或者多个case,尽可能的提高覆盖率;

TestData:测试数据管理功能,数据与脚本分离,降低维护成本,提高可移植性;

TestSuite:测试组件管理功能,针对不同场景不同需求,组装构建不同的测试框架,遵循框架的灵活性和扩展性;

Statistics:测试结果统计管理功能,每次执行测试的结果统计、分析、对比以及反馈,数据驱动,为软件优化和流程改进,提供参考;

Continuous:持续集成环境,即CI环境,包括测试文件提交、扫描编译、执行测试、生成报告及时通知等功能,持续集成是自动化测试的核心

常见框架都拥有共同特性:编程语言+单元测试框架+扫描编译工具+持续集成工具+数据库+项目管理工具

python+selenium+unittest+Git+Jenkins+MySQL+testlink/redmine

编程语言:编写测试脚本、日志记录和输出;python

单元测试框架:提供测试脚本运行、异常校验等一些列的配置;unittest

扫描编译工具:测试文件扫描编译,一般配合持续集成工具使用效果更佳;

持续集成工具:Jenkins,经典的持续集成工具;

数据库:测试数据管理;mysql

项目管理工具:测试结果统计管理;git

30、自动化测试框架的设计?

参考文档: 浅谈自动化测试框架设计 - Andrew213 - 博客园

从架构层面设计,采用java开发常用MVC框架思想,分为逻辑控制层(Controller)、数据持久层(Model)、页面展示层(View)

ps:个人理解的逻辑控制层(Controller)一般处于项目的中间部分,接口层,起到一个承上启下的作用,可以连接到持久层通过持久层里面的sql语句获取到需要的数据,然后将数据经过一些逻辑处理,通过接口传到页面展示

数据持久层(Model)处于项目的底层,连接到数据库,对数据库进行一些简单的增删改查,主要是写一些方法对数据库进行操作

页面展示层(View)从逻辑控制层,也就是我理解的接口层级通过后台传过来的接口获取到数据,在页面上进行样式的输出

MVC框架是在java上,目前python中没有这种说法,python中关键字驱动+数据库驱动和POM架构等理解含义都是一样的

自动化测试领域python使用的比较多,所以我以python为例:

逻辑控制层:Selenium适用于Web自动化,真实模拟用户操作浏览器request应用于接口自动化unittest是一个目前很流行实用的单元测试框架,有完善的用例管理模块

数据持久层:用例测试数据的管理,可以通过csv文件,yaml等文档形式去管理测试数据,可以通过MySQLdb+MySQL的方式管理数据库

#数据库连接
import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB", charset='utf8' )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取一条数据
data = cursor.fetchone()

print "Database version : %s " % data

# 关闭数据库连接
db.close()

  Python 操作 MySQL 数据库参考文档: Python 操作 MySQL 数据库 | 菜鸟教程

操作数据库还有哪些具体的?

页面展示层:主要是测试报告的展示,采用HTMLTestRunner实现测试报告的展示。

ps:HTMLTestRunner是HTMLTestRunner.py文件,不是框架也不算插件

上面只是理解,具体设计?

结合我之前写的文档,自我归纳一下:

python连接mysql(简单代码)_mihxy的博客-CSDN博客_python连接mysql数据库代码

这里要加一个日志的链接,将展示测试报告的流程展出来

再加一个yaml文件的读写

  • 27
    点赞
  • 300
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 自动化测试需要学习软件测试的基本知识和技能,例如:软件测试理论、测试方法、测试技术、测试策略等。此外,还需要学习自动化测试工具和相关技术,例如:自动化测试框架、测试指导文档、自动化测试编程语言、自动化测试报告等。 ### 回答2: 自动化测试是指使用自动化工具和脚本来执行测试任务,以减少手动测试的工作量和提高测试效率。如果要在自动化测试领域取得进展,有几个关键的知识领域是必须要学习的: 1. 软件测试基础知识:了解软件测试的基本原理、方法和流程,掌握测试用例设计、缺陷管理等基本概念,了解各种测试技术和策略。 2. 编程语言和脚本语言:至少掌握一门编程语言(如Python、Java、C#等),了解其语法和基本编程概念。掌握脚本语言(如Shell、VBScript等)也会对自动化测试有帮助。 3. 自动化测试工具:熟悉常用的自动化测试工具,如Selenium、Appium、Robot Framework等。了解这些工具的特点、使用方法和常见问题,并能根据具体需求选择合适的工具。 4. 版本控制工具:学习使用版本控制工具,如Git,可以更好地管理和追踪测试代码的变化。 5. Web开发技术:对于Web应用的自动化测试,了解HTML、CSS、JavaScript等基本的前端开发技术,有助于理解页面结构和操作方式。 6. 数据库和SQL:对于需要与数据库进行交互的测试,了解数据库的基本原理和SQL语言,能够编写查询语句和操作数据库。 7. 性能测试和安全测试:了解性能测试和安全测试的基本概念和常用工具,能够进行基本的性能测试和安全测试。 总之,自动化测试需要综合运用软件测试、编程、工具和技术等多个方面的知识,只有全面了解和掌握这些知识,才能在自动化测试领域中取得成功。 ### 回答3: 自动化测试是一种通过编写脚本和使用工具来执行测试任务的测试方法。为了进行有效的自动化测试,需要掌握以下几个方面的知识: 1. 编程语言:自动化测试通常使用脚本或代码来执行测试任务,因此需要学习一种或多种编程语言,如Java、Python、C#等。对编程语言的掌握可以帮助编写测试脚本、处理测试数据和进行结果分析等。 2. 软件测试基础知识:了解软件测试的基本原理、测试方法和测试技术等,掌握测试用例设计、缺陷管理和测试报告等基本概念和流程。 3. 自动化测试工具:掌握一种或多种自动化测试工具,如Selenium、Appium等。了解工具的基本原理、使用方法和常见的问题解决方案。 4. Web开发技术:如果你需要进行Web应用程序的自动化测试,了解HTML、CSS和JavaScript等Web开发技术是有益的。这可以帮助你理解网页结构、元素定位和交互操作等。 5. 版本控制工具:掌握版本控制工具(如Git)的基本使用方法,以便协作开发和代码管理。 6. 数据库知识:了解基本的数据库知识,包括SQL语句、数据库连接和数据检索等,对于测试数据的准备和验证非常有帮助。 7. 操作系统和网络基础知识:对操作系统(如Windows、Linux)和网络(如HTTP协议、网络请求和响应等)有一定的了解,可以帮助理解和解决在不同环境下测试任务的挑战。 总之,学习自动化测试需要综合掌握编程、软件测试、工具使用、Web开发、数据库、操作系统和网络等多个领域的知识和技能。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值