当前位置: 首页 > news >正文

从实践角度深入探究数据驱动和关键字驱动测试方法!

数据驱动

数据驱动,指在软件测试领域当中的数据驱动测试(Data-Driven Testing,简称DDT)是⼀种软件测试⽅法,在不同的数据下重复执⾏相同顺序的测试步骤,测试脚本从数据源读取测试数据,⽽不使⽤硬编码将测试数据写死在代码

测试数据源存放位置:

  • • 直接写在py文件里面

  • • 写在 Json、Excel、CSV、Yaml等文件里面

  • • 存在数据库

  • • 造数脚本

  • • 调用接口获取数据

常见测试框架里面应用:

  • • Pytest:使用装饰器 @pytest.mark.parametrize("xx")

  • • TestNG:使用注解@DataProvider

  • • Junit5:使用注解 @ParameterizedTest+@ValueSource(其中一种,还有其他方式)

示例:

import pytest
from utils.logger import log
from common.config import ini
from PageObject.searchpage import SearchPageclass TestSearch:@pytest.fixture(scope='class', autouse=True)def open_baidu(self, drivers):"""打开百度"""search = SearchPage(drivers, ini.url)search.open_home_page()@pytest.mark.parametrize("input_text, expected", [("selenium","selenium_百度搜索"), ("自动化测试","自动化测试_百度搜索"), ("UI自动化","UI自动化_百度搜索")])def test_search_selenium(self, drivers):"""搜索"""search = SearchPage(drivers)search.input_search_text(input_text)search.click_search_btn()browser_title =  driver.titlelog.info(browser_title)assert browser_title == expected,"浏览器的标题与预期不一致!"if __name__ == '__main__':pytest.main(['TestCase/test_search.py'])

关键字驱动

关键字驱动是指将所有用例依赖的公共步骤,进⾏再次封装,形成关键字,调⽤不同的关键字组合实现不同的业务逻辑,从⽽驱动测试⽤例执⾏

关键字驱动的实现方法一般有两种:

  • • 第一种:自己手动实现关键字,进行公共步骤的二次封装

  • • 第二种:自动化测试框架已经自带关键字功能,可直接使用或者扩展自定义关键字,例如基于Python语言Robot Framework关键字驱动框架

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

自己封装关键字:

POM里面修改:

页面类:

from selenium.webdriver.common.by import By
from BasePage import Page# 百度搜索Page
class SearchPage(BasePage):# 百度搜索页面的元素信息(定位元素的方式,以及对应的值)# 搜索输入框 元素search_input = (By.ID, 'kw')# 百度一下按钮 元素search_button = (By.ID, 'su')def __init__(self, driver, base_url="https://www.baidu.com"):Page.__init__(self, driver, base_url)def open_home_page(self):self.driver.get(self.base_url)def input_search_text(self, text="seleium"):self.input_text(self.search_input, text)def click_search_btn(self):self.click(self.search_button)def search_keyword(self, text):self.open_home_page()self.input_search_text(text)self.click_search_btn()

用例修改:

import pytest
from utils.logger import log
from common.config import ini
from PageObject.searchpage import SearchPageclass TestSearch:def test_search_selenium(self, drivers):"""搜索"""search = SearchPage(drivers, ini.url)search.search_keyword('selenium')browser_title =  driver.titlelog.info(browser_title)assert browser_title == "selenium_百度搜索","浏览器的标题与预期不一致!"if __name__ == '__main__':pytest.main(['TestCase/test_search.py'])

总结:

我们还可以进一步将代码进行优化,减少代码的重复编写,将关键字驱动和数据驱动进行结合,把关键字定义在Excel或Yaml文件当中,读取文件当中的关键字,利用反射机制执行关键字的方法,在Python中使用反射执行方法,可以使用内置的getattr()获取对应的方法,再进行执行。

Excel里面内容:

ps: 具体框架改造逻辑,可以自己思考一下

方法有多种,在适当的时候选择合适的方法才是最重要、满足业务需求才是第一位。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述

相关文章:

从实践角度深入探究数据驱动和关键字驱动测试方法!

数据驱动 数据驱动,指在软件测试领域当中的数据驱动测试(Data-Driven Testing,简称DDT)是⼀种软件测试⽅法,在不同的数据下重复执⾏相同顺序的测试步骤,测试脚本从数据源读取测试数据,⽽不使⽤…...

Unity收费对谁影响最大

Unity的收费政策对以下几类人群影响最大: 游戏开发商:Unity收费政策中最直接的影响对象就是游戏开发商。对于那些使用Unity引擎制作游戏的开发商来说,他们将需要考虑新的许可证费用和服务费用,这可能会对他们的盈利和发展产生影响…...

信号收尾.

sigaction 信号捕捉 它也是信号捕捉,不仅能处理普通信号还能处理实时信号,但我们不管实时信号 我们发现函数名和形参中结构体名一样都是sigaction,这在c/c中允许吗? 不建议,但是可以 signo你要捕捉几号信号 输入型参…...

maven 常用命令解析

目录 maven 是什么 Maven 目录结构 maven 常用命令解析 mvn clean mvn validate mvn compile mvn test mvn package mvn verify mvn install mvn site mvn deploy maven 是什么 Maven 是一个流行的项目管理和构建工具,用于帮助开发人员管理 Java 项目的…...

ESP32-Web-Server编程-JS 基础 1

ESP32-Web-Server编程-JS 基础 1 概述 前述分别在 HTML 基础 和 CSS 基础 中介绍了 HTML、CSS 的基本内容。HTML 定义了网页中包含哪些对象,CSS 定义了对象的显示样式。JavaScript(LiveScript)是一种运行于客户端的解释性脚本语言,使 HTML 页面更具动态…...

代码随想录算法训练营第23天|● 669. 修剪二叉搜索树 ● 108.将有序数组转换为二叉搜索树 ● 538.把二叉搜索树转换为累加树 ● 总结篇

108. 将有序数组转换为二叉搜索树 简单 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1: …...

UniApp 中的 u-input 属性讲解

在 UniApp 中,u-input 是一个常用的组件,用于接收用户的输入。它具有多种属性,用于控制输入框的样式和行为。下面我将为您讲解一些常用的 u-input 属性。 基本属性 value:表示输入框的初始值,可以使用 v-model 进行双…...

解决方案:新版WPS-右键粘贴值到可见单元格没有了

WPS筛序后复制,并且粘贴到可见单元格 (如果直接粘贴数据会乱掉) 旧版WPS,右键就能出现 但是新版WPS不是在这里(方法1) 新版WPS(方法2) 视频详细教程链接:解决方案&…...

pat模拟题—7-11 两个序列的中位数

一个长度为n(n⩾1)的升序序列S,处在第2n​个位置的数称为序列S的中位数(median number),例如,序列S1{10,13,14,16,18,19}的中位数是14。两个序列的中位数是它们所有元素的升序序列的中位数,例如,S2{2,4,8,9,20,21},则S1和S2的中位数是13。现有…...

Java中的i++是原子操作吗?

我们都知道i分为三步进行,分别是1:取到当前i的值,2:,3:将最终结果赋值 因此我们可通过创建两个线程,对同一个变量count,一个线程对count进行递增操作,另一个线程对count进行递减操作。每个线程…...

git commit message 书写规范

在使用 Git 提交时&#xff0c;遵循良好的提交消息规范可以提高代码的可读性和可维护性。以下是一些常见的 Git 提交消息书写规范&#xff1a; 提交消息格式&#xff1a;一个提交消息通常包含三个部分&#xff1a;标题、空行和正文。它们之间使用空行分隔。 复制 <标题>&…...

sql 注入 ctf wiki

部分转载ctf-wiki 判闭合形式&#xff1a; 哪个报错就是哪种 1,1’,1’‘,1’,1’&#xff08;双引号带括号&#xff09; 万能密码&#xff1a; admin’ – admin’ # admin’/* ’ or 11– ’ or 11# ’ or 11/* ) or ‘1’1– ) or (‘1’1– 数据库名&#xff1a; SEL…...

Flutter创建TabBar

使用TabBar和TabBarView来创建一个包含"首页"、"分类"和"我的"的TabBar。每个Tab对应一个Tab控件&#xff0c;TabBarView中的每个页面对应一个Widget。 1.Tab使用自定义图标和颜色 一般UI设计的图会带渐变色之类的&#xff0c;应该保持图片的原…...

双流网络论文精读笔记

精读视频&#xff1a;双流网络论文逐段精读【论文精读】_哔哩哔哩_bilibili Two-Stream Convolutional Networks for Action Recognition in Videos 传统的神经网络难以学习到物体的运动信息&#xff0c;双流网络则通过光流将物体运动信息抽取出来再传递给神经网络 给模型提供…...

机器人与3D视觉 Robotics Toolbox Python 一 安装 Robotics Toolbox Python

一 安装python 库 前置条件需要 Python > 3.6&#xff0c;使用pip 安装 pip install roboticstoolbox-python测试安装是否成功 import roboticstoolbox as rtb print(rtb.__version__)输出结果 二 Robotics Toolbox Python样例程序 加载机器人模型 加载由URDF文件定义…...

JS之Object.defineProperty方法

给对象添加属性的方法有许多&#xff0c;这次让我为大家介绍一种给对象添加属性的静态方法吧&#xff01; 语法&#xff1a;Objcet.defineProperty(对象的名称&#xff0c;“添加的键名”&#xff0c;{value&#xff1a;键值}) const obj {name:"张三",age:18}// 我…...

卷积神经网络(CNN)注意力检测

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据 二、数据预处理1.加载数据2. 可视化数据4. 配置数据集 三、调用官方网络模型四、设置动态学习率五、编译六、训练模型七、模型评估1. Accuracy与Loss图2. …...

4. 权限,特权

对数据段特权检查对直接转移的代码段特权检查栈段的检查调用门的检查 权限问题: 由于CPL,DPL 无法完整表达权限的问题. 例如用户程序(CPL3)通过调用门(将调用到内核过程,从低权限到高权限)执行,此时CPL0,此时可以为所欲为.因此加入RPL.此参数由操作系统来保证,CPU仅使用 RPL:…...

云原生系列Go语言篇-泛型Part 2

类型推导和泛型 就像在使用​​:​​时支持类型推导一样&#xff0c;在调用泛型函数时Go同样支持类型推导。可在上面对​​Map​​、​​Filter​​和​​Reduce​​调用中看出。有些场景无法进行类型推导&#xff08;如类型参数仅用作返回值&#xff09;。这时&#xff0c;必…...

借助ETL快速查询金蝶云星空表单信息

随着数字化转型的加速&#xff0c;企业信息化程度越来越高&#xff0c;大量的数据产生并存储在云端&#xff0c;需要进行有效的数据管理和查询。金蝶云星空是金蝶云旗下的一款云ERP产品&#xff0c;为企业提供了完整的业务流程和数据管理功能&#xff0c;因此需要进行有效的数据…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外&#xff0c;K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案&#xff0c;全安装在K8S群集中。 具体可参…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类&#xff1a;块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...