一文轻松教会你基于Excel+关键字驱动的自动化测试框架封装

news2025/1/19 8:08:11

目录

一、概述

二、框架设计

测试用例管理

关键字库封装

数据驱动设计

日志记录和报告生成

三、框架实现

测试用例管理

关键字库封装

数据驱动设计

日志记录和报告生成

四、框架使用

编写测试用例

编写关键字库

执行测试

五、总结


一、概述

在软件开发过程中,对产品进行有效的测试是非常重要的。为了提高测试效率和质量,多数企业采用自动化测试来代替人工测试。其中,关键字驱动的自动化测试框架成为了自动化测试领域的主流。

本文将介绍一种基于EXCEL+关键字驱动的自动化测试框架封装方案,并分别从框架设计、实现、使用等角度进行详细阐述。

二、框架设计

测试用例管理

测试用例编写是自动化测试的核心工作之一。因此,在框架设计时,需要考虑如何管理测试用例。这里我们采用 EXCEL 作为测试用例的存储载体,每个测试用例以一行数据的形式保存。同时,可以建立不同的 Sheet 来区分不同的测试模块,方便管理。

关键字库封装

关键字库是实现自动化测试的核心部分。我们可以将关键字库中定义的操作拆分成不同的函数,并将其封装到类库中。这样,测试人员在编写测试用例时只需调用这些函数即可,大大提高了测试用例的编写效率。

数据驱动设计

在测试过程中,需要使用一些测试数据来完成测试。我们可以将这些数据存储在 EXCEL 文件中,并通过关键字库中定义的读取 EXCEL 的函数来获取数据。这样,可以方便地对测试用例进行数据驱动测试。

日志记录和报告生成

当测试执行完毕后,需要对测试结果进行分析和统计,并生成测试报告。因此,在框架设计时需要考虑如何记录测试日志和生成测试报告。可以将测试过程中产生的信息记录到日志文件中,并通过关键字库中定义的生成测试报告函数生成测试报告。      2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1AF411T7qJ/?spm_id_from=333.999.0.0&vd_source=6e2d6c374fd551babe1ac6a5e60c5a75

                           

三、框架实现

测试用例管理

首先,我们需要准备一个模板 EXCEL 文件,模板文件中包含了测试用例所需的 Sheet 和具体的测试用例数据。测试用例数据由测试用例名称、操作关键字、操作定位符、输入值等信息组成。其中,操作关键字是调用关键字库中函数的标识符。

关键字库封装

关键字库是自动化测试的核心部分,包括了所有的测试操作方法。我们可以将关键字库中定义的操作拆分成不同的函数,并将其封装到类库中。这里,我们采用 Python 语言进行开发,并使用 Selenium WebDriver 作为浏览器驱动。

以登录操作为例,代码如下:

class LoginPage():

    def __init__(self, driver):
        self.driver = driver

    def open(self):
        """打开登录页面"""
        self.driver.get("https://www.example.com/login")

    def input_username(self, username):
        """输入用户名"""
        input_username = self.driver.find_element_by_id("username")
        input_username.clear()
        input_username.send_keys(username)

    def input_password(self, password):
        """输入密码"""
        input_password = self.driver.find_element_by_id("password")
        input_password.clear()
        input_password.send_keys(password)

    def click_login_button(self):
        """点击登录按钮"""
        login_button = self.driver.find_element_by_id("login-button")
        login_button.click()

上述代码中定义了一个 LoginPage 类,包括了测试登录操作的所有方法。其中,open() 方法用于打开登录页面,input_username()、input_password() 和 click_login_button() 三个方法分别用于输入用户名、密码和点击登录按钮。

数据驱动设计

在测试过程在框架实现中,需要使用测试用例中的数据来完成测试。我们可以通过 xlrd 库来读取 EXCEL 文件中的数据,如下所示:

import xlrd

class ExcelUtils():

    def __init__(self, file_path):
        self.file_path = file_path

    def get_case_data(self, sheet_name, case_name):
        """获取指定测试用例的数据"""
        workbook = xlrd.open_workbook(self.file_path)
        worksheet = workbook.sheet_by_name(sheet_name)

        for i in range(1, worksheet.nrows):
            row_values = worksheet.row_values(i)
            if row_values[0] == case_name:
                return row_values[1:]

        raise ValueError(f"找不到测试用例 {case_name}")

上述代码中定义了一个 ExcelUtils 类,包含了读取 EXCEL 中指定测试用例数据的方法。在该方法中,首先打开 EXCEL 文件,并获取指定 Sheet 中的数据。然后遍历每一行数据,查找指定测试用例,并返回其对应的数据。如果没有找到指定的测试用例,则抛出异常。

日志记录和报告生成

在测试执行过程中,我们需要记录测试日志和生成测试报告。这里我们可以使用 Python 的 logging 模块来记录测试日志,同时可以使用 HTMLTestRunner 模块来生成测试报告。具体实现代码如下:

import logging
import time
import unittest
from HTMLTestRunner import HTMLTestRunner

class TestLogin(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.logger = logging.getLogger(__name__)
        cls.logger.setLevel(logging.INFO)
        file_handler = logging.FileHandler("test.log")
        formatter = logging.Formatter("[%(asctime)s] [%(levelname)s] %(message)s")
        file_handler.setFormatter(formatter)
        cls.logger.addHandler(file_handler)

    def setUp(self):
        self.logger.info("测试用例开始执行")

    def tearDown(self):
        self.logger.info("测试用例执行完毕")

    @classmethod
    def tearDownClass(cls):
        report_path = f"report_{time.strftime('%Y%m%d%H%M%S')}.html"
        with open(report_path, "wb") as f:
            runner = HTMLTestRunner(stream=f, title="测试报告", description="测试结果详细信息:")
            runner.run(unittest.TestLoader().loadTestsFromTestCase(TestLogin))

上述代码中,我们定义了一个 TestLogin 类,继承自 unittest.TestCase。在 setUp() 方法中记录测试日志,tearDown() 方法中记录测试结束日志。在 tearDownClass() 方法中生成测试报告,并将其保存到本地。

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1AF411T7qJ/?spm_id_from=333.999.0.0&vd_source=6e2d6c374fd551babe1ac6a5e60c5a75

                    

 

四、框架使用

编写测试用例

首先,在 EXCEL 文件中编写测试用例,如下所示:

测试用例名称操作关键字操作定位符输入值
登录测试open_browserChrome
open
input_usernameid=usernametest_user
input_passwordid=passwordtest_pass
click_login_buttonid=login-button

编写关键字库

根据测试用例的操作关键字,编写相应的关键字库。例如,实现登录操作后,可以在关键字库中添加如下函数:

class KeywordLibrary():

    def login(self, username, password):
        """登录"""
        login_page = LoginPage(self.driver)
        login_page.open()
        login_page.input_username(username)
        login_page.input_password(password)
        login_page.click_login_button()

其中,login() 函数用于执行登录操作,参数包括用户名和密码。

执行测试

使用 unittest 模块执行测试用例,如下所示:

其中,login() 函数用于执行登录操作,参数包括用户名和密码。

import unittest
from selenium import webdriver
from keyword_utils import KeywordLibrary
from excel_utils import ExcelUtils

class TestLogin(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.driver = webdriver.Chrome()
        cls.keyword_lib = KeywordLibrary(cls.driver)
        cls.excel_utils = ExcelUtils("test_case.xlsx")

    def test_login(self):
        case_data = self.excel_utils.get_case_data("login", "登录测试")
        self.keyword_lib.login(case_data

上述代码中,我们定义了一个 TestLogin 类,继承自 unittest.TestCase。在 setUpClass() 方法中初始化 WebDriver、关键字库和 EXCEL 文件,以便后续调用。在 test_login() 方法中读取测试用例数据,并调用关键字库中的 login() 方法执行登录操作。在 tearDownClass() 方法中关闭 WebDriver 实例。

在主函数中使用 unittest.main() 执行测试。

五、总结

本文介绍了一种基于 EXCEL+关键字驱动的自动化测试框架封装方案,并从框架设计、实现和使用三个角度进行详细阐述。采用该框架可以大大提高自动化测试的效率和精度,同时也为自动化测试的进一步发展提供了思路。

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibiliicon-default.png?t=N2N8https://www.bilibili.com/video/BV1AF411T7qJ/?spm_id_from=333.999.0.0&vd_source=6e2d6c374fd551babe1ac6a5e60c5a75

 

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

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

相关文章

【Spring Security】| 从0到1编写一个权限认证 | 学会了吗?

目录一. 🦁 认证前的工作1. 添加依赖2. 创建数据库表(数据自行添加)3. 编写用户实体类4. 编写Dao接口5. 在启动类中添加 MapperScan 注解6. 继续添加各种包二. 🦁 自定义逻辑认证原理—UserDetailsService三. 🦁 数据库…

Android Studio Flamingo | 2022.2.1 发布,快来看看有什么更新吧

原文链接 https://developer.android.com/studio/releases 新的 Android Studio 版本 Flamingo (火烈鸟) 已经发布,本次更改最有意思的点在于: Flamingo 自带的 JDK 是 JDK 17 而不再是 JDK 11,另外还有如 IDE 支持应用主题图标和动态颜色&am…

TikTok和国产抖音的发展路径和趋势

鑫优尚电子商务:以历史为镜子,我们可以知道变化。 纵观TikTok和国产抖音,我们会发现TikTok目前的发展路径和趋势与国产抖音的主线十分相似,直播也是如此。鑫优尚电子商务 国内抖音直播一般经历过四个时代:直播1.0时代…

AIGC周报|清华、北邮新研究:让文生图AI更懂你

AIGC通过借鉴现有的、人类创造的内容来快速完成内容创作。ChatGPT、Bard等AI聊天机器人以及DallE 2、Stable Diffusion等文生图模型都属于AIGC的典型案例。「AIGC技术周报」将为你带来最新的paper、博客等前瞻性研究。 OpenAGI:当大模型遇见领域专家 “愿原力与大型…

分子生物学 第五章 DNA损伤修复和突变

文章目录第五章 DNA损伤修复和突变第一节第二节 DNA损伤的类型1 造成DNA损伤的因素2 DNA损伤的类型3 DNA损伤修复机制3.1 直接修复3.2 切除修复3.3 双链断裂修复3.4 重组修复3.5 跨越合成第五章 DNA损伤修复和突变 第一节 损伤:比如碱基,甲基化 突变&…

JavaSE学习进阶day04_04 正则表达式和Lambda表达式

第六章 正则表达式(超级重要) 开发心得:看着正确数据,从左到右书写正则表达式 6.1 正则表达式的概念及演示 在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位…

爬虫日常练习-协程方式爬取图片

文章目录前言代码设计前言 hello朋友们,欢迎回来。这里是无聊的网友。今天给大家分享另一种处理多任务的方法–协程 那么在开始之前我们首先要了解什么是协程。协程是在一个线程内:多个任务出现阻塞时,由envet_loop轮转查看阻塞状态&#…

Zeppelin0.9.0 连接 Hive 3.1.2(踩坑,亲测有效)

一、前提 已经安装好Hadoop、Hive(可以启动hiveserver2)、Zeppelin 1.启动Hadoop [roothurys24 ~]# start-all.sh 2.启动hiveserver2 [roothurys24 ~]# cd /opt/soft/hive312/conf/ [roothurys24 conf]# nohup ../bin/hive --service hiveserver2 &a…

kubernetes之Ingress介绍

Ingress 组成 ingress controller将新加入的Ingress转化成Nginx的配置文件并使之生效 ingress服务将Nginx的配置抽象成一个Ingress对象,每添加一个新的服务只需写一个新的Ingress的yaml文件即可工作原理 1.ingress controller通过和kubernetes api交互&#xff0…

【机器学习(五)】基于KNN模型对高炉发电量进行回归预测分析

文章目录专栏导读1、KNN简介2、KNN回归模型介绍3、KNN模型应用-高炉发电量预测3.1数据集信息:3.2属性信息3.3数据准备3.4数据标准化和划分数据集3.5寻找最佳K值3.6建立KNN模型预测4、完整代码专栏导读 ✍ 作者简介:i阿极,CSDN Python领域新星…

利用74373芯片进行单片机IO口扩展的方法介绍-成都控制设备订做

本文介绍用74373芯片进行微处理器IO口扩展的方法。 1.为什么要进行IO口扩展? 在电路设计的某些时候,微处理器(如单片机)IO口不够用了,此时该怎么办呢?利用辅助芯片进行IO口扩展是个简单直接的方法&#xff…

开源社与 Dev.Together 2022

思否与开源社携手11>2在 2023 年的春天,开源社走进了 Dev.Together 2022 的会场,一时间有种时空错觉。2022 年本该举办的开源聚会因为不可抗力的因素被延期,感谢思否一直坚持的理念:Dev.Together Summit 只做线下,将…

debian 10 安装神州通用数据库 V7.0

debian 10 安装神州通用数据库 V7.01、官方下载链接2、windows客户端下载链接3、官方安装手册4、安装前准备3.1、创建安装用户3.2、以root 用户修改神通数据库安装包的所有者为shentong 用户3.3、以root 用户创建神通数据库主目录并修改所有者为shentong 用户3.4、以root 用户临…

c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句

c/c:顺序结构,if else分支语句,do while循环语句,switch case break语句 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c的话, 我所知道的周边的会c的同学&#xff…

一文读懂域名注册

本文深入浅出讲解域名的注册、建站和管理,通过文章可以了解以下问题: 域名注册及建站流程;域名注册的技术原理;域名管理(修改 DNS 服务器、转入转出、自定义 DNSHost、whois 信息)。 众所周知,…

【MYSQL】表的增删改查(基础)

文章目录🌷 1. 新增(Create)⭐️ 1.1 单行行数据 指定列插入⭐️ 1.2 多行数据 指定列插入🌷 2. 查询(Retrieve)⭐️ 2.1 全列查询⭐️ 2.2 指定列查询⭐️ 2.3 查询字段为表达式⭐️ 2.4 别名⭐️ 2.5 去…

十五、市场活动:excel导入

功能需求 ①用户在市场活动主页面,点击"导入"按钮,弹出导入市场活动的模态窗口; ②用户在导入市场活动的模态窗口选择要上传的文件,点击"导入"按钮,完成导入市场活动的功能. *只支持.xls *文件大小不超过5MB ③导入成功之后,提示成功导入记录条数,关闭…

(只需三步)如何用chatgpt自动生成思维导图

目录 chatgpt是可以生成思维导图的!只需三步,非常简单! 第一步:打开chatgpt,告诉它主题 第二步,完善思维导图 第三步:查看思维导图的效果 chatgpt是可以生成思维导图的!只需三步&am…

21天学会C++:Day1----C++的发展史

CSDN的uu们,大家好。这里是C入门的第一讲。 座右铭:前路坎坷,披荆斩棘,扶摇直上。 博客主页: 姬如祎 收录专栏:C专题 目录 1. 什么是C 2. C的发展史 3. C的重要性 4. 如何学好C 4.1 别人如何学C 4…

海睿思分享 | 制造业数字化转型之业务场景驱动

在开始谈业务场景驱动之前,我们先介绍一下流程驱动和数据驱动的概念。 首先数据和流程在现代制造业相辅相成,流程中有数据,数据往往通过流程传递,而“驱动”是通过建立一定的驱动机制,改变以往人为的业务推进模式&…