自动化测试中的常见测试方法

自动化测试中的常见测试方法

在自动化测试中,除了数据驱动(Data-Driven Testing),还有多种主流方法,每种方法适用于不同场景和需求。以下是常见的自动化测试方法分类及详解:

一、关键字驱动测试(Keyword-Driven Testing)

核心思想

将测试步骤封装为关键字(如 “打开浏览器”“输入文本”),通过关键字组合实现测试逻辑,与具体数据分离。

特点
  • 关键字:可复用的最小操作单元(如 Open Browser Click Element),由工具或自定义实现。
  • 测试用例:通过表格或脚本组合关键字,不涉及代码逻辑。
  • 适用场景:UI 自动化、重复步骤较多的测试(如表单提交、登录流程)。
工具与示例
  • 代表工具Robot Framework(天然支持关键字驱动)、QTP/UFT。
  • 示例:在 Robot Framework 中通过关键字组合实现登录测试:

*** Test Cases ***

用户登录测试

    Open Browser    ${URL}    Chrome

    Input Text      id=username    ${USERNAME}    # 关键字+数据

    Input Text      id=password    ${PASSWORD}

    Click Button    id=submit

    Page Should Contain    登录成功

二、行为驱动测试(Behavior-Driven Development/Testing, BDD)

核心思想

通过自然语言描述测试场景(如 Gherkin 语法),让技术与非技术人员共同参与测试设计,聚焦 “软件应如何行为”。

特点
  • 场景描述:用 Given-When-Then 结构描述业务场景(如 “当用户输入无效密码时,应显示错误提示”)。
  • 跨团队协作:产品、开发、测试用统一语言沟通,减少理解偏差。
  • 适用场景:功能测试、业务逻辑复杂的场景(如电商下单流程)。
工具与示例
  • 代表工具:Cucumber、Behave(Python)、SpecFlow(.NET)。
  • 示例(Gherkin 语法):

Feature: 用户登录功能

  Scenario: 输入错误密码登录

    Given 打开登录页面

    When 输入用户名 "testuser" 和密码 "wrongpass"

    And 点击登录按钮

    Then 页面应显示 "密码错误" 提示

三、模块化测试(Modular Testing)

核心思想

将测试系统拆分为独立模块(如 “登录模块”“支付模块”),每个模块单独设计自动化脚本,通过模块组合实现复杂场景。

特点
  • 模块独立性:每个模块可单独维护、复用,修改不影响其他模块。
  • 分层设计:通常分为基础层(元素定位)、业务层(模块逻辑)、场景层(用例组合)。
  • 适用场景:大型系统测试(如 ERP、电商平台)、需频繁迭代的项目。
示例
  • 分层结构
    1. 基础层:封装元素定位(如 get_username_input())。
    2. 业务层:实现模块逻辑(如 login(username, password) 函数)。
    3. 场景层:组合模块(如 “登录→添加购物车→结算”)。

四、线性脚本测试(Linear Scripting)

核心思想

实际操作步骤逐行编写脚本,无复用逻辑,类似 “宏录制” 后的代码。

特点
  • 简单直接:新手易上手,脚本与操作步骤一一对应。
  • 维护成本高:步骤修改需逐个更新脚本,复用性差。
  • 适用场景:临时测试、简单场景(如单个页面跳转验证)。
示例

# Selenium 线性脚本示例

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com/login")

driver.find_element("id", "username").send_keys("test")  # 硬编码步骤

driver.find_element("id", "password").send_keys("123")

driver.find_element("id", "submit").click()

driver.quit()

五、模型驱动测试(Model-Based Testing, MBT)

核心思想

通过建立系统模型(如状态机、流程图)描述系统行为,由工具自动生成测试用例,验证模型与实际系统的一致性。

特点
  • 模型抽象:用图形或数学模型表示系统输入、输出和状态转换。
  • 自动化生成:工具根据模型自动生成测试用例,覆盖更多场景。
  • 适用场景:复杂状态系统(如通信协议、嵌入式软件)、回归测试。
工具
  • 代表工具:Selenium IDE(简单模型)、GraphWalker、IBM Rational Rhapsody。

六、探索性测试自动化(Exploratory Testing Automation)

核心思想

结合探索性测试(边测试边设计用例)与自动化,通过脚本快速验证临时想法,无需预先设计完整用例。

特点
  • 灵活性高:针对测试中发现的疑点,用自动化脚本快速复现和验证。
  • 轻量脚本:脚本简洁,聚焦单次验证(如接口异常场景测试)。
  • 适用场景:漏洞验证、边界条件测试、临时场景验证。
示例

# 临时验证接口超时场景

import requests

def test_api_timeout():

    try:

        response = requests.get("https://api.example.com", timeout=1)

        assert response.status_code == 200

    except requests.exceptions.Timeout:

        print("接口超时验证通过")

七、关键字 - 数据混合驱动(Hybrid Testing)

核心思想

结合关键字驱动数据驱动的优势,用关键字封装逻辑,用数据文件动态传入测试数据,兼顾复用性和灵活性。

特点
  • 逻辑与数据分离:关键字定义 “怎么做”,数据文件定义 “测试什么数据”。
  • 高复用性:一套关键字可搭配多组数据,覆盖不同场景。
示例
  • Robot Framework 中结合关键字与外部数据文件(CSV/Excel):

*** Test Cases ***

多用户登录测试

    [Template]    执行登录测试    # 模板关键字

    user1    pass1    登录成功      # 数据行1

    user2    wrong    密码错误      # 数据行2

*** Keywords ***

执行登录测试

    [Arguments]    ${user}    ${pwd}    ${expected}

    Open Browser    ${URL}    Chrome

    Input Text      id=username    ${user}

    Input Text      id=password    ${pwd}

    Click Button    id=submit

    Page Should Contain    ${expected}

八、按测试对象划分的专项自动化

除了上述方法论,自动化测试还可按测试对象分类,每种对象对应特定技术:

  1. UI 自动化:模拟用户操作界面元素(Selenium、Appium)。
  2. 接口自动化:直接调用 API 验证数据交互(Postman、REST Assured)。
  3. 单元自动化:测试代码单元(如函数、类,JUnit、pytest)。
  4. 性能自动化:模拟高并发场景(JMeter、Locust)。

不同方法的选择建议

测试方法

核心优势

适用场景

推荐工具

数据驱动

用数据覆盖多场景

输入输出明确的场景(如表单验证)

TestNG DataProvider

关键字驱动

步骤复用、低代码

UI 自动化、重复流程测试

Robot Framework

行为驱动

跨团队协作、业务聚焦

功能测试、复杂业务场景

Cucumber、Behave

模块化测试

分层维护、高扩展性

大型系统、频繁迭代项目

Selenium + 自定义框架

模型驱动

自动生成用例、覆盖全状态

状态复杂系统、回归测试

GraphWalker

选择时需结合项目规模、团队技术栈和测试目标:小型项目可从线性或关键字驱动入手,大型复杂项目建议采用模块化或混合驱动,业务导向项目优先考虑 BDD。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/90466.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/90466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

口语01-don‘t judge a book by its cover

Dont judge a book by its cover 不要以貌取人1 the most advanced thing2 stack3 right4 frantically5 be annoyed with sb6 Get your stuff off my desk7 But today I came to class and was running a few minutes late.8 take my seat:占我座位 / 坐我的位置9 s…

《Uniapp-Vue 3-TS 实战开发》自定义预约时间段组件

这个组件可以直接在 uniapp 项目中使用,提供了 24 小时时段选择功能,支持单选 / 多选、预设时段选择、随机选择等功能。 html版本: <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="vi…

《Uniapp-Vue 3-TS 实战开发》自定义环形进度条组件

引言 在UniApp中使用Vue3和TypeScript开发环形进度条组件,我们可以考虑三种技术:Canvas、SVG和纯HTML(利用CSS)。考虑到兼容性、实现难度和效果,SVG是较好的选择。它可以轻松实现环形进度条,支持渐变色,并且可以通过属性精确控制进度,同时在不同分辨率屏幕上清晰显示…

MybatisPlus-17.扩展功能-JSON处理器

一.JSON处理器数据库中有的字段会以JSON格式来进行存储。类型为json类型。但是在java中我们没有这样的数据类型&#xff0c;一般会以字符串接收&#xff0c;这样就会导致如果想要从数据库中获取json格式中的key和value的话会比较麻烦&#xff0c;还要进行字符串操作。那么有没有…

【Web】DASCTF 2025上半年赛 wp

目录 phpms 再短一点点 泽西岛 phpms dirsearch请求太快会报429&#xff0c;要设置一手--delay&#xff0c;扫出来.git 跑一下githacker git stash list git stash show -p 注释的绕过参考&#xff1a;从国赛想到的一些php绕过注释符trick 发现很多函数都被disable了 这…

STM32-USART串口配置教程和printf函数实现(寄存器版)

本章概述思维导图通信介绍通信介绍概况通信&#xff0c;至少是需要两个对象&#xff0c;一个收一个发数据。根据数据通信的传输时序协调方式&#xff0c;可分为&#xff1a;同步通信和异步通信&#xff1b;根据数据通信的传输线路可分为&#xff1a;串行通信和并行通信&#xf…

4种灵活的方法从POCO手机中删除联系人

许多POCO用户经常需要清理联系人列表&#xff0c;删除重复或过时的条目&#xff0c;或者在出售或赠送手机之前删除个人或敏感联系人。无论是为了隐私、组织管理&#xff0c;还是仅仅是为了管理存储空间&#xff0c;高效地删除POCO手机中的联系人是至关重要的。本文将介绍4种智能…

航段导航计算机 (Segment_Navigator) 设计与实现

航段导航计算机 (Segment_Navigator) 设计与实现 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 引言 航段导航计算机是现代航空电子系统中的关键组件&a…

input.1是onnx输入的名称,但是依然警告不是

导出动态轴的时候发现&#xff0c;明明input.1就是onnx的名字&#xff0c;但是依然有警告说不是&#xff1b;/miniconda3/envs/py38/lib/python3.8/site-packages/torch/onnx/utils.py:2078: UserWarning: Provided key input.1 for dynamic axes is not a valid input/output …

生成式人工智能展望报告-欧盟-02-技术方面

原文地址 摘要 本章的重点是GenAI的技术层面&#xff0c;首先是对其能力和局限性的评估。它强调了部署GenAI系统所带来的网络安全挑战。会议讨论了新出现的技术趋势&#xff0c;为决策者和利益攸关方提供了前瞻性的视角。关键问题包括确保GenAI应用程序的安全性和可靠性所需的…

人工智能与云计算双轮驱动:元宇宙如何重构全球产业生态

一、人工智能在元宇宙中的核心应用1. 内容生成与虚拟世界构建生成式AI&#xff08;AIGC&#xff09;&#xff1a;通过AI算法自动生成3D模型、虚拟场景和角色&#xff0c;显著降低内容制作成本和时间。例如&#xff1a;联想晨星元宇宙平台&#xff1a;利用AIGC技术实现低成本、高…

企业信息管理系统开发实战:基于 Spring Boot+MyBatis+Thymeleaf

引言&#xff1a;企业信息管理系统的核心价值在企业日常运营中&#xff0c;高效的信息管理是提升效率的关键。本文将手把手教你开发一套企业信息管理系统&#xff0c;涵盖用户登录、信息增删改查、权限控制等核心功能。系统采用 Spring Boot 作为后端框架&#xff0c;MyBatis 处…

NLP自然语言处理的一些疑点整理

PyTorch评估模式&#xff08;torch.no_grad和model.eval&#xff09;差异在PyTorch中&#xff0c;model.eval()和torch.no_grad()是模型评估和推理阶段的两个关键工具&#xff0c;它们各自扮演着不同的角色&#xff0c;但常常被一起使用以确保模型行为的正确性和计算效率。理解…

物流仓储自动化升级:Modbus TCP与DeviceNet的协议融合实践

一、项目背景在我们物流厂的日常运营中&#xff0c;分拣效率和仓储精准度一直是瓶颈。传统人工分拣不仅速度慢&#xff0c;还容易因疲劳出错&#xff1b;仓储区域的货物定位全靠人工记录&#xff0c;时常出现找货难、盘点耗时的问题。生产线的核心控制依赖施耐德PLC&#xff0c…

产品动态 | 同创永益IStorM Chaos 混沌工程平台V4.0震撼发布:智能驱动,筑牢系统稳定性防线

当混沌工程从试点走向企业级大规模推广&#xff0c;标准化缺失、专家依赖高、实施效率低等痛点成为阻碍系统稳定性升级的 “拦路虎”。此刻&#xff0c;同创永益重磅推出IStorM Chaos 混沌工程平台 V4.0&#xff0c;以智能技术为核心驱动力&#xff0c;为企业构建更高效、更灵活…

C++中的反向迭代器

C中的反向迭代器 为啥反向迭代器的讲解要单独拎出来讲&#xff0c;没有在讲各个容器的时候顺手讲了呢&#xff1f; 主要是因为c中的反向迭代器和正向迭代器的实现不太一样。 它思想不复杂&#xff0c;主要是巧。来&#xff0c;我们按照我们刚刚的想法把代码写出来 #pragma once…

【一步步ai】数据增强与预处理

提升NL2SQL系统性能是一个复杂的多维度优化问题&#xff0c;涉及数据工程、模型架构、训练策略和评估方法等多个层面。以下是一些有效的提升方向和具体方法&#xff1a; 一、数据增强与预处理 多样化数据生成 模板扩展&#xff1a;基于SQL语法模板自动生成多样化的NL-SQL对&am…

站在哪个肩膀上开始学习卡尔曼滤波

站在哪个肩膀上开始学习卡尔曼滤波前言从自适应滤波的角度正交性原理到维纳解kalman滤波的提出innovation process新息过程kalman滤波算法Kalman 自适应滤波器算法初始条件输入观测向量过程已知参数计算&#xff1a;n1&#xff0c;2&#xff0c;3&#xff0c;..参考前言 不知道…

什么是FCR,如何提升FCR?

‌ FCR&#xff08;First Call Resolution&#xff0c;首次呼叫解决率&#xff09;&#xff0c;意思是指客户首次联系客服时&#xff0c;问题在单次交互中被完全解决的比率。‌ ‌FCR &#xff08;首次解决的通话量 / 总首次通话量&#xff09; 100%一、关键要点&…

【浏览器插件冲突】Edge浏览器加载不出来CSDN创作者中心

【浏览器插件冲突】Edge浏览器加载不出来CSDN创作者中心写在最前面报错GPT的全部回复&#xff0c;可以参考&#x1f50d; 具体错误解释&#xff1a;1. **CORS错误**2. **XHR 请求失败**3. **ReaderArticleFinder / Readability**&#x1f6e0;️ 为什么页面没有内容显示&#x…