当前位置:网站首页>第十九章 自动化理论

第十九章 自动化理论

2022-08-06 08:01:45黎扶澈

目录

一、概述

自动化测试特点

测试自动化误区

自动化测试的优势 

自动化测试的局限性

自动化测试的内容

自动化脚本技术

自动化测试范围分析

自动化测试的类型

自动化测试需要的条件

使用自动化的一些典型场景

实施自动化测试的流程

WEB 自动化测试的基本原理

数据驱动

关键字驱动keyword_driven

测试框架

二、selenium

安装

使用

XPath

选取节点

谓语(Predicates)

选取未知节点

选取若干路径

XPath运算符

XPath轴(Axes)


一、概述

  • 概念:用工具代替/辅助人工完成软件测试活动的过程
  • 自动化测试特点

    • 可以对程序的新版本自动执行回归测试
    • 可以执行一些手工测试困难或不可能进行的测试
    • 可以更好地利用资源
    • 测试具有一致性和可重复性
  • 测试自动化误区

    • 期望自动测试发现大量新故障
    • 安全性错觉
    • 自动测试的维护开销
  • 自动化测试的优势 

  • 自动化测试的局限性

    • 手工测试比自动测试发现的故障要多,自动化只能发现约
    • 15%的bug
    • 自动化测试不能提高测试的有效性,只能用于提高测试的效率 
    • 自动化测试不具有想象力,没人聪明
    • 自动化测试不能取代手工测试。下列情况不适合于自动化测试:
      • 测试频度很低
      • 软件不稳定
      • 结果很容易通过人验证的测试(人工实施较为高效)
      • 涉及物理硬件设备交互的测试
  • 自动化测试的内容

    • 测试数据自动生成
    • 自动化输入
    • 测试结果自动比较
    • 测试自动执行
    • 自动化测试用例的管理
    • 在线监控
  • 自动化脚本技术

    • 线性脚本
      • 录制、回放
    • 结构化脚本
      • 含有控制脚本执行的指令,支持顺序、选择和循环
    • 共享脚本
      • 可以被多个测试用例使用,脚本之间可以相互调用
    • 数据驱动脚本
      • 数据驱动脚本是将测试输入存储在独立的文件中,脚本中只存放控制信息
    • 关键字驱动脚本
      • 关键词驱动脚本实际上是较复杂的数据驱动技术的逻辑扩展
  • 自动化测试范围分析

  • 自动化测试的类型

    • 单元测试-执行速度最快
    • 接口测试-执行速度较快
    • UI测试-执行速度最慢
  • 自动化测试需要的条件

    • 软件需求变动不频繁
    • 项目周期足够长
    • 自动化测试脚本可重复使用
    • 有编程和设计能力的测试开发人员
    • 研发团队的支持
  • 使用自动化的一些典型场景

    • 验证原有功能是否依旧可以使用,适合进行大量回归测试的场景
    • 使用自动化测试技术注入测试数据
    • 敏捷开发的TDD模式,行为驱动开发模式
    • 机械并频繁的测试。每次需要输入相同、大量的一些数据,并且在一个项目中运行的周期比较长
    • 做业务运行状态监控
  • 实施自动化测试的流程

    1. 获取信息和测试需求分析:总体把握系统架构和设计,分析出系统的测试需求
    2. 设计:设计测试用例,并且挑选出需要自动化实现的测试用例
    3. 实现:编写、调试和实现测试脚本
    4. 执行:执行脚本的过程,需要不断分析执行过程中的异常
    5. 测试结果分析:分析哪些是bug,哪些是测试框架本身的问题
    6. 维护:自动化测试脚本的维护是一个难以解决但又必须要解决的问题
    7. 总结:在自动化测试过程中总结自动化实践的投入产出比
  • WEB 自动化测试的基本原理

  • 数据驱动

基于数据驱动的自动化测试框架是指测试驱动引擎从数据源获取测试数据,然后将数据以参数的形式传递给测试脚本,最后通过执行测试脚本,验证测试结果,并将测试结果输出。一般数据源与测试结果存储在Excel文件、 Csv文件等。
数据驱动主要优点是:
  • 测试脚本与测试数据的分离,
  • 当应用功能变更时,只需要修改该功能部分的脚本;
  • 执行测试用例的人员不需要了解测试脚本的实现,只关注测试数据表与测试报告表。而且测试脚本的执行是离散的,即非线性的,测试人员可以有选择的执行测试用例。
  • 关键字驱动keyword_driven

关键字驱动测试是数据驱动测试的一种改进类型,它将测试逻辑按照关键字进行分解,形成数据文件,关键字对应封装的业务逻辑
主要关键字包括三类:被操作对象(Item) 、操作(Operation)和值(value) ,用面向对象形式可将其表现为 Item.Operation(Value)。
关键字驱动的主要思想是:脚本与数据分离、界面元素名与测试内部对象名分离、测试描述与具体实现细节分离。

  • 测试框架

什么是框架framework ?

  • 整个或部分系统的可重用设计,表现为一组抽象构件以及构件实例间交互的方法;
  • 可被开发者定制的应用骨架。

测试框架出现的最终目的是花少量的资源来完成尽可能多的测试任务,所以测试框架的建立以及框架的重用性方面是最值得测试人员深入探究的地方。

二、selenium

安装

py -3 -m pip install selenium

使用

from selenium import webdriver
from selenium.webdriver.common.by import By


driver = webdriver.Chrome(executable_path="E:\Programs\Driver\chromedriver")
driver.get("http://www.baidu.com")#使用百度搜索
driver.find_element(By.ID, 'kw').send_keys("光荣之路")
driver.find_element(By.ID, 'su').click()
driver.get("http://www.sogo.com")#使用搜狗搜索
driver.find_element(By.ID, 'query').send_keys("光荣之路")
driver.find_element(By.ID, 'stb').click()

XPath

XPath 使用路径表达式来选取 XML、HTML文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点
XML文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

选取节点

表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
.选取当前节点
..选取当前节点的父节点
@选取属性

实战网址:http://www.w3school.com.cn/example/xmle/books.xml

<bookstore>
	<book category="children">
		<title lang="en">Harry Potter</title>
		<author>J K. Rowling</author>
		<year>2005</year>
		<price>29.99</price>
	</book>
	<book category="cooking">
		<title lang="en">Everyday Italian</title>
		<author>Giada De Laurentiis</author>
		<year>2005</year>
		<price>30.00</price>
	</book>
		<book category="web" cover="paperback">
		<title lang="en">Learning XML</title>
		<author>Erik T. Ray</author>
		<year>2003</year>
		<price>39.95</price>
	</book>
	<book category="web">
		<title lang="en">XQuery Kick Start</title>
		<author>James McGovern</author>
		<author>Per Bothner</author>
		<author>Kurt Cagle</author>
		<author>James Linn</author>
		<author>Vaidyanathan Nagarajan</author>
		<year>2003</year>
		<price>49.99</price>
	</book>
</bookstore>
路径表达式结果
//*选取文档中的所有元素
bookstore选取 bookstore 元素的所有子节点
/bookstore选取根元素 bookstore。
注释:假如路径起始于正斜杠( / ),则此路径始终代表到某元素的绝对路径!
bookstore/book选取属于 bookstore 的子元素的所有 book 元素。
//book选取所有 book 子元素,而不管它们在文档中的位置。
bookstore//book

选择属于 bookstore 元素的后代的所有 book 元素,

而不管它们位于 bookstore 之下的什么位置。

//@lang选取属性名为 lang 的所有元素

谓语(Predicates)

谓语用来查找某个特定的节点或者包含某个指定的值的节点。

谓语被嵌在方括号中

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()<3]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang='en']选取所有 title 元素,且这些元素拥有值为 en 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。
//book[@category and @ cover]选取同时拥有category属性和cover属性的book元素
//book[@category or @ cover]选取拥有category属性或cover属性的book元素
//book[@*]选取有任意属性的book元素。
//author[not (@*)]选取没有属性的author元素

选取未知节点

XPath 通配符可用来选取未知的 XML 元素。

通配符描述
*匹配任何元素节点。
@*匹配任何属性节点。
node()匹配任何类型的节点

实例:

路径表达式结果
/bookstore/*选取 bookstore 元素的所有子元素。
//*选取文档中的所有元素。
//title[@*]选取所有带有属性的 title 元素。

选取若干路径

通过在路径表达式中使用“|”运算符,您可以选取若干个路径。

路径表达式结果
//book/title | //book/price选取 book 元素的所有 title 和 price 元素。
//title | //price选取文档中的所有 title 和 price 元素。
/bookstore/book/title | //price选取属于 bookstore 元素的 book 元素的所有 title 元素,以及文档中所有的 price 元素。

XPath运算符

实例: 

路径表达式结果
//book/price[text()=29.99]选取book元素,其中price元素的值须等于29.99
//book/price[.=29.99]选取book元素,其中price元素的值须等于29.99
//book/price[text()>30]选取book元素,其中price元素的值须大于30
//book/price[contains(.,29)]选取book元素,其中price元素的值须包含29
//book/title[contains(@lang,"e")]选取book元素,其中title元素的lang属性值须包含'e'

XPath轴(Axes)

轴可定义相对于当前节点的节点集。

  • parent::* 表示当前节点的父节点元素
  • ancestor::* 表示当前节点的祖先节点元素
  • child::* 表示当前节点的子元素 /A/descendant::* 表示A的所有后代元素
  • self::* 表示当前节点的自身元素
  • ancestor-or-self::* 表示当前节点的及它的祖先节点元素
  • descendant-or-self::* 表示当前节点的及它们的后代元素
  • following-sibling::* 表示当前节点的后序所有兄弟节点元素
  • preceding-sibling::* 表示当前节点的前面所有兄弟节点元素
  • following::* 表示当前节点的后序所有元素
  • preceding::* 表示当前节点的所有元素

实例:

路径表达式结果
//*[.=29.99]/preceding-sibling::*选取文档中元素值等于29.99的当前节点前面的所有兄弟元素
//*[.=29.99]/preceding-sibling::year选取文档中元素值等于29.99的当前节点前面的所有兄弟year元素
//*[.="J K. Rowling"]/following-sibling::price选取文档中元素值等于J K. Rowling的当前节点后面的所有兄弟price元素

原网站

版权声明
本文为[黎扶澈]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_22895113/article/details/126152297

随机推荐