news 2026/8/27 16:33:51

Web自动化测试之数据驱动实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Web自动化测试之数据驱动实战

🍅点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快

在Web自动化测试中,我们需要把测试使用到的数据分离到文件中,如果单纯的写在我们的测试模块里面,不是一个好的设计,所以不管是什么类型的自动化测试,都是需要把数据分离出来的。

当然分离到具体的文件里面,文件的形式其实有很多的,这里主要说明JSON的文件和YAML的文件在UI自动化测试中的应用。

JSON文件

JSON库主要应用于序列化以及反序列化中,特别是在API的自动化测试中,序列化以及反序列化是知识体系里面必须需要掌握的技术栈的体系。

当然我们也是可以针对文件进行序列话和反序列化的处理,针对文件的序列化可以简单的理解为就是把第三方的数据写到文件里面,使用JSON库里面的方法是dump() 方法。

那么针对文件的反对序列化可以理解为是从文件中读取数据,使用到的JSON库里面的load()的方法,下面主要是针对UI自动化测试的数据进行分离。

具体代码为:

import unittest from parameterized import parameterized,param from selenium import webdriver import time as t #parameterized是参数化库 class AddTest(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.driver.get('https://mail.sina.com.cn/#') def tearDown(self) -> None: self.driver.quit() @parameterized.expand([ param('','','请输入邮箱名'), param('srtSA','saert','您输入的邮箱名格式不正确'), param('aserSDAsd@sina.com','asdfrty','登录名或密码错误') ]) def test_sina_email(self,username,password,result): t.sleep(2) self.driver.find_element_by_id('freename').send_keys(username) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(password) t.sleep(2) self.driver.find_element_by_link_text('登录').click() t.sleep(3) div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') assert div.text==result if __name__ == '__main__': unittest.main(verbosity=2)

在如上的文件中可以看到,我们可以把测试的数据分离到JSON文件中,分离的数据具体为:

{ "data": [ {"username": "","password": "","text": "请输入邮箱名"}, {"username": "srtSA","password": "saert","text": "您输入的邮箱名格式不正确"}, {"username": "aserSDAsd@sina.com","password": "asdfrty","text": "登录名或密码错误"} ] }

完善后的测试脚本为:

import unittest from parameterized import parameterized,param from selenium import webdriver import time as t import json def readJson(): return json.load(open('sina.json'))['data'] class AddTest(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.driver.get('https://mail.sina.com.cn/#') def tearDown(self) -> None: self.driver.quit() @parameterized.expand([ param(readJson()[0]['username'],readJson()[0]['password'],readJson()[0]['text']), param(readJson()[1]['username'],readJson()[1]['password'],readJson()[1]['text']), param(readJson()[2]['username'],readJson()[2]['password'],readJson()[2]['text']) ]) def test_sina_email(self,username,password,result): t.sleep(2) self.driver.find_element_by_id('freename').send_keys(username) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(password) t.sleep(2) self.driver.find_element_by_link_text('登录').click() t.sleep(3) div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') assert div.text==result if __name__ == '__main__': unittest.main(verbosity=2)

YAML文件

下面演示把测试数据存储到YAML文件里面,分离出来的文件内容为:

username: "" password: "" text: "请输入邮箱名" --- username: "srtSA" password: "saert" text: "您输入的邮箱名格式不正确" --- username: "aserSDAsd@sina.com" password: "asdfrty" text: "登录名或密码错误"

完善后的测试脚本为:

import unittest from parameterized import parameterized,param from selenium import webdriver import time as t import json import yaml def readJson(): return json.load(open('sina.json'))['data'] def readYaml(): with open('sina.yaml') as f: return list(yaml.unsafe_load_all(f)) class AddTest(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.implicitly_wait(30) self.driver.get('https://mail.sina.com.cn/#') def tearDown(self) -> None: self.driver.quit() @parameterized.expand([ param(readYaml()[0]['username'],readYaml()[0]['password'],readYaml()[0]['text']), param(readYaml()[1]['username'],readYaml()[1]['password'],readYaml()[1]['text']), param(readYaml()[2]['username'],readYaml()[2]['password'],readYaml()[2]['text']) ]) def test_sina_email(self,username,password,result): t.sleep(2) self.driver.find_element_by_id('freename').send_keys(username) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(password) t.sleep(2) self.driver.find_element_by_link_text('登录').click() t.sleep(3) div=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') assert div.text==result if __name__ == '__main__': unittest.main(verbosity=2)

上文详细的总结了Web自动化测试中,我们可以把使用到的测试数据分离到JSON文件和YAML的文件,这样达到了数据的分离,目的是让测试更加简单和高效。

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

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 7:50:06

水文监测站:水资源管理的“千里眼”与“顺风耳”

水文监测站是对江、河、湖泊、水库、渠道和地下水等水文要素进行实时监测的专业站点,在水资源管理、防洪减灾、水利工程建设与运行、生态环境保护等诸多方面都发挥着极为重要的作用。一、定义与功能水文监测站又称雷达水位监测站、自动水文监测设备,是一…

作者头像 李华
网站建设 2026/8/27 10:38:29

白银波动幅度大于黄金的原因:市场规模与属性差异深度解析

想象一下,你正站在2025年的码头上,面前停着两艘船。一艘是排水量十万吨的超级豪华邮轮,上面写着“黄金号”;另一艘是动力强劲的快艇,船身印着“白银号”。这时候,海上突然刮起了一阵名为“美联储降息”的巨…

作者头像 李华
网站建设 2026/8/27 13:48:23

【2026版】Spring Boot面试题

这篇文章涵盖了Spring Boot的核心概念和高级主题,包括自动配置、多数据源、Actuator、缓存、AOP、异步编程、事务管理、安全性、消息队列和微服务架构。这些问题可以帮助您评估候选人的技能和经验,同时也是提高自己Spring Boot技能的好方法。 1. Spring …

作者头像 李华
网站建设 2026/8/27 9:14:40

办公小程序开发----提高工作效率

文章目录 前言一、批量html文件转化为pdf1. 问题描述2.代码3.程序下载链接 总结 前言 办公过程中,总是会遇到一些大量重复做的事情,通过生成一些小程序,提高办公效率。 一、批量html文件转化为pdf 1. 问题描述 我需要将若干的html文件转换…

作者头像 李华
网站建设 2026/8/27 4:28:57

Jmeter 命令行压测生成HTML测试报告

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快通常Jmeter的 GUI 模式仅用于调试,在实际的压测项目中,为了让压测机有更好的性能,多用 Jmeter 命令行来进行压测。同时&#xff…

作者头像 李华
网站建设 2026/8/27 12:24:24

AI编程系列——mcp与skill

mcp是啥 Model Context Protocol MCP:AI Agent 工具托管协议及应用 简单来说 就是让ai可以调用外部服务,比如你们公司的cicd功能、让你部署的deepseek连上A股实时行情 变成你的ai炒股小助理 抓取网页爬虫…… MCP 协议概述定义: MCP (Model Context Pro…

作者头像 李华