Advertisement

10、自动化测试技术

阅读量:

目录

自动化测试

特点

通常情况下,引入自动化测试需要满足以下条件:

自动化测试的适用范围

自动化测试的局限

自动化测试的原理

自动化测试的流程

测试用例模板

自动化测试的关键技术

对象识别;

脚本技术;

自动比较技术;

自动化测试框架。

实验

Web自动化测试

1. 主流的Web自动化测试工具

Selenium家族史

基于Python环境搭建

页面元素定位

2. 元素定位方式

元素常用操作方法

Unitest单元测试框架

为什么使用UnitTest框架

UnitTest核心要素

Unitest断言方法(直接在测试类中使用即可)

生成HTML测试报告

HTML测试报告生成步骤


自动化测试

借助测试工具及相关测试脚本等工具,在依据预先制定的测试方案下进行自动化测试,在此过程中可确保软件能够满足用户需求。

特点

可重复性

可操作系统

高效率

通常情况下,引入自动化测试需要满足以下条件:

项目需求变动不频繁

项目周期足够长

自动化测试脚本可重复使用

自动化测试的适用范围

对涉及关键性的测试项目以及涵盖面广的综合测试进行评估。例如:从组件性能到功能完整性再到移动平台兼容性等方面进行系统验证;同时特别关注内部系统的交互点与数据流处理能力

期望测试结果完全可以预料,测试的复用性要求较强的情形。

要求加快软件开发周期, 期望通过自动化测试缩短测试周期, 并通过自动化测试希望增加软件信度的测试. 如安全性测试等

执行某些手工测试困难或不可能进行的测试。如性能测试的负载测试等。

对频繁的测试,或在较少时间内需更多测试。

对于实施全面的测试管理而言,必须具备全方位、精确且即时反馈的能力。例如,在整个测试管理流程中进行系统性评估与优化工作。

自动化测试的局限

自动化测试不能代替手工测试,有其局限性,具体表现在:

预期结果不确定时;

缺乏自动化测试经验时;

文档较少或文档不一致时;

发现缺陷能力不足;

测试成本较高。

以用户登录功能为例,如何使用自动化测试技术对其进行测试?

执行测试前,应完成测试用例设计

自动化测试的原理

录制/回放技术

测试过程

自动录制手工操作,转化为测试脚本;

通过在脚本中插入指令来设置校验点;

自动化测试平台能够解析配置文件并生成所需操作指令。该平台按照预先定义的参数组合运行预设测试序列,并在设定的时间间隔内完成周期性任务模式下的操作。

自动化测试的流程

测试用例模板

自动化测试的关键技术

对象识别;

Windows对象; App对象; Web对象;

脚本技术;

  1. 线性脚本:是指通过人工操作运行并记录下来的测试指令序列。这种指令序列包含了所有的击键操作、移动操作以及输入的数据等,并且所有录制完成的测试指令都能完整地进行回放。
  2. 结构化脚本:类似于典型的程序结构设计方法,在其中包含各种逻辑分支和函数调用等功能。
  3. 数据驱动脚本:它将预先准备好的测试输入存储在一个独立的数据文件中,并非直接嵌入到脚本代码中。
  4. 关键字驱动:"填表格"式的关键字驱动方式实际上封装了许多底层的操作功能。当测试人员进行自动化测试时,则只需要关注三个问题即可:
    • 做什么
    • 对谁做
    • 怎么做

自动比较技术;

  • 静态分析与动态分析,
  • 基本对比与深入对比,
  • 敏感度评估与鲁棒性评估
  • 比较筛选机制
验证点命令 对象
verifyTitle My Page
verifyValue nameField John Smith
verifySelected dorpdown2 value=js*123
verifyTextPresent You are now logged in
verifyAttribute txt1@class bigAndBlod
verfyVisible postcode

自动化测试框架。

Selenium自动化测试工具

作为专业的Web应用程序自动化测试工具,Selenium其测试功能模拟了真实用户对网站的操作流程.该工具支持广泛主流浏览器如IE系列版本从7到11号 Mozilla Firefox Safari Google Chrome以及 Opera等.Selenium该工具的主要功能体现在以下几个方面:

测试与浏览器的兼容性 、测试系统功能

在普遍的经验中,一般会对具有下列特征的项目开展UI自动化测试:

软件需求变动不频繁

项目周期较长

Selenium Web Development Environment:作为内置工具,在Firefox浏览器中集成使用。该工具旨在支持在Firefox环境中生成并执行相应的测试脚本演示。

接下来创建第一款Selenium Python自动化测试工具

不同的浏览器版本需要下载匹配其版本的驱动程序

谷歌:http://npm.taobao.org/mirrors/chromedriver/

火狐:https://github.com/mozilla/geckodriver/releases

该Edge版本工具包:官方文档开发人员可访问https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/

访问个人设置-设备管理器-系统属性-高级选项卡中找到对应的设备类型

Selenium WebDriver:用于操作浏览器的一套API,可以支持多种编程语言。

它是测试团队编写的一组供测试人员使用的代码库;然而这些代码无法直接操控browser;而WebDriver(亦即对应于browser的驱动程序)在selenium脚本与browser之间扮演了中介角色;实际上它是selenium客户端向webdriver发送请求,并由webdriver通过调用browser内置组件来完成对browser的操作。

WebDirver通过一些方法来实现与浏览器窗口、网页和页面元素的交互。

Selenium WebDriver的功能

示例:定位一组元素

此示例用于在百度首页找到所有的链接,并输出链接文字

WebElement接口

Selenium Grid 兼容多个节点环境,在每个节点上同时运行多个测试,并且这些节点能够使用不同的浏览器和操作系统。

========================================================================

实验

Web自动化测试

1. 主流的Web自动化测试工具

(1) QTP QTP是一个商业化的功能测试工具,收费,支持web,桌面自动化测试。

(2)Selenium(本课程) Selenium是一个免费的开源web自动化测试工具,并主要用于功能测试。

该框架以Python语言为基础,并通过关键字驱动实现了一种高效的测试自动化方案。

Selenium家族史

基于Python环境搭建

1. Python 开发环境

2. 安装selenium包

pip install selenium

3. 安装浏览器

配置浏览器运行环境 -- 确保可以通过程序控制浏览器完成自动化测试流程,并且可以选择将该配置文件放置在Python的主安装目录或项目所在的目录位置

示例:通过程序启动浏览器,并打开百度首页,暂停3秒,关闭浏览器

复制代码
 1. 导包

    
  from selenium import webdriver
    
  import time
    
 2. 创建浏览器驱动对象
    
  Firefox浏览器:driver = webdriver.Firefox()
    
  Chrome浏览器:driver = webdriver.Chrome()
    
  Edge浏览器:driver = webdriver.Edge()
    
 3. 打开Web页面
    
  driver.get("http://www.baidu.com/")
    
 4. 暂停
    
  time.sleep(3)
    
 5. 关闭驱动对象
    
  driver.quit()
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/r9KZ0OfX1VB3p72DUjdoCiJysAQM.png)

页面元素定位

1. 如何进行元素定位?

复制代码
 html页面由标签构成,标签的基本格式如下:

    
  <标签名 属性名1="属性值1" 属性名2="属性值2">文本</标签名>
    
 示例:
    
  <input id="username" type="text" name="username" placeholder="用户名" />
    
  <div id="my_cart">
    
  <span>我的购物车</span>
    
  </div>
    
    
    
    
    python

元素定位就是通过元素的信息或元素层级结构来定位元素的。

2. 元素定位方式

Selenium提供了八种定位元素方式

id element = driver.find_element_by_id(id)

name element = driver.find_element_by_name(name)

class_name element = driver.find_element_by_class_name(class_name)

tag_name element = driver.find_element_by_tag_name(tag_name)

link_text element = driver.find_element_by_link_text(link_text)

variable partialLinkText = driver.findElementUsingPartialLinkText(partialLinkText)

XPath element = driver.find_element_by_xpath(xpath)

CSS element = driver.find_element_by_css_selector(css_selector)

例:id定位方式

通过查询元素的唯一ID属性来确定元素位置即为ID定位法,在HTML标准中要求每个元素的ID属性必须唯一以确保正确解析。前提条件是目标元素需具备唯一的ID属性具体操作步骤如下:使用WebDriver实例查找所需元素并调用其find_element_by_id方法即可实现目标

复制代码
 1. 导入selenium包 --> from selenium import webdriver

    
 2. 导入time包 --> import time
    
 3. 实例化浏览器驱动对象 --> driver = webdriver.Firefox()
    
 4. 打开登录页A.html --> driver.get(url)
    
 5. 调用id定位方法 --> element = driver.find_element_by_id("")
    
 6. 使用send_keys()方法输入内容 --> element.send_keys("admin")
    
 7. 暂停3秒 --> time.sleep(3)
    
 8. 关闭浏览器驱动对象 --> driver.quit()
    
 说明:为了更好的学习体验,我们先暂时使用下send_keys()方法来输入内容
    
    
    
    
    python

元素常用操作方法

通过获取元素的ID属性值来确定元素的位置即为ID定位法;基于HTML标准的规定每个元素的ID必须唯一以确保正确引用与定位;先决条件是该元素具有唯一的ID标识;具体操作步骤如下:使用WebDriver实例调用find_element_by_id方法获取目标元素

复制代码
 1. 导入selenium包 --> from selenium import webdriver

    
 2. 导入time包 --> import time
    
 3. 实例化浏览器驱动对象 --> driver = webdriver.Firefox()
    
 4. 打开登录页A.html --> driver.get(url)
    
 5. 调用id定位方法 --> element = driver.find_element_by_id("")
    
 6. 使用send_keys()方法输入内容 --> element.send_keys("admin")
    
 7. 暂停3秒 --> time.sleep(3)
    
 8. 关闭浏览器驱动对象 --> driver.quit()
    
 说明:为了更好的学习体验,我们先暂时使用下send_keys()方法来输入内容
    
    
    
    
    python

Unitest单元测试框架

UnitTest是Python自带的一个单元测试框架,用它来做单元测试

为什么使用UnitTest框架

1. 能够组织多个用例去执行

2. 提供丰富的断言方法

3. 能够生成测试报告

UnitTest核心要素

1. TestCase

2. TestSuite

3. TestRunner

4. Fixture

案例:蛋糕商城购物系统登录功能自动化测试

实现思路

1. 导包:import unittest

2. 定义测试类:新建测试类必须继承unittest.TestCase

3. 定义测试方法:测试方法名称命名必须以test开头

Unitest断言方法(直接在测试类中使用即可)

序号 断言方法 断言描述
1 assertTrue(expr, msg=None) 验证expr是true,如果为false,则fail
2 assertFalse(expr, msg=None) 验证expr是false,如果为true,则fail
3 assertEqual(expected, actual,msg=None) 验证expected==actual,不等则fail 【掌握】
4 assertNotEqual(first, second,msg=None) 验证first != second, 相等则fail
5 assertIsNone(obj, msg=None) 验证obj是None,不是则fail
6 assertIsNotNone(obj, msg=None) 验证obj不是None,是则fail
7 assertIn(member, container, msg=None) 验证是否member in container【掌握】
8 assertNotIn(member, container,msg=None) 验证是否member not in container

生成HTML测试报告

HTMLTestReport

UnitTest框架本身不支持生成HTML格式的测试报告

在网上的资源库中存在多种工具能够实现类似的功能。这些工具的基本操作流程大致相同但它们输出的结果可能会因为HTML格式的不同而有所差异。

本课程中使用 HTMLTestReport 类库来生成测试报告

HTML测试报告生成步骤

1. 导包: from htmltestreport import HTMLTestReport

2. 封装测试套件

3. 实例化HTMLTestReport对象

4. 执行测试套件: report.run(suite)

该文章介绍了37个UnitTest框架中的一种方法用于生成基于HTML的测试报告,并详细说明了其实现过程及具体应用案例

=========================================================================

访问蛋糕商城的线上购物系统主页,并利用Python+Selenium自动化测试工具开发自动化测试脚本以实现相应的功能测试。

① 通过链接文本定位登录链接,并单击登录链接。

打开登录页面后

③ 通过xpath相对路径定位密码,并输入正确的密码”admin”。

④ 通过CSS定位方式中属性选择器定位登录按钮并单击。

⑤ 停留5秒后关闭浏览器。

我在jupyter上写的

复制代码
 from selenium import  webdriver

    
 import time
    
  
    
 #实例化浏览器对象
    
 driver=webdriver.Chrome()
    
 #打开系统页面
    
 driver.get("http://localhost:8080/")
    
 driver.find_element_by_link_text("登录").click()
    
 driver.find_element_by_name("ue").send_keys("admin")
    
 driver.find_element_by_xpath("//input[@type='password']").send_keys("admin")
    
 driver.find_element_by_xpath("//input[@type='submit']").click()
    
  
    
 #强制等待
    
 time.sleep(3)
    
 driver.quit()
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/I09COmKqDSBF7h2AgnLrlW8jbfVw.png)

请基于所给定的测试用例模板,在针对登录功能制定相应的步骤,并依据制定的步骤编写自动化测试脚本;同时采用Unitest框架管理所有必要的数据,并输出相应的HTML格式报告

复制代码
    **测试脚本**
复制代码
 # 测试脚本

    
 import unittest
    
 import time
    
 from selenium import webdriver
    
 from htmltestreport import HTMLTestReport
    
  
    
 class LoginTestCase(unittest.TestCase):
    
     def setUp(self):
    
     self.driver = webdriver.Chrome()
    
     self.driver.maximize_window()
    
     self.driver.implicitly_wait(5)
    
     self.driver.get("http://localhost:8080/user_login.jsp")
    
     login_link = self.driver.find_element_by_link_text("登录")
    
     print(login_link.text)
    
     login_link.click()
    
     self.driver.switch_to.window(self.driver.current_window_handle)
    
     #测试方法,一个测试方法执行一条测试用例
    
     def test_login(self):
    
     # 定位用户名输入框
    
     username = self.driver.find_element_by_name("ue")
    
     username.send_keys("admin")
    
     # 定位密码输入框
    
     password = self.driver.find_element_by_xpath("//input[@type='password']")
    
     password.send_keys("123")
    
     # 定位登录按钮
    
     login_btn = self.driver.find_element_by_xpath("//input[@type='submit']")
    
     login_btn.click()
    
  
    
     msg = self.driver.find_element_by_xpath("/html/body/div[2]/div/div/div[1]").text
    
     self.assertIn("用户名、邮箱或者密码错误,请重新登录!", msg)
    
     def tearDown(self):
    
     time.sleep(3)
    
     self.driver.quit()
    
  
    
  
    
  
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/p9KkIYSDi1hBxVwm3zjb48uPyAgF.png)

测试文件

复制代码
 import unittest

    
 from htmltestreport import HTMLTestReport
    
 from lab10_2 import LoginTestCase
    
  
    
 # 生成测试套件
    
 suite = unittest.TestSuite()
    
 suite.addTest(unittest.makeSuite(LoginTestCase))
    
  
    
 # 实例化HTMLTestReport对象
    
 report_path = "./report.html"
    
 report = HTMLTestReport(report_path,title='登录测试报告',description='LoginTestCase函数测试报告V1.0')
    
  
    
 # 执行测试套件
    
 report.run(suite)
    
    
    
    
    python
    
    
![](https://ad.itadn.com/c/weblog/blog-img/images/2025-08-18/4HAgX20RMQBbeLIzYdWrKlEpVSwi.png)

效果图

全部评论 (0)

还没有任何评论哟~