news 2026/2/17 13:29:24

如何使用Python进行自动化测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何使用Python进行自动化测试

写测试代码其实一点都不难!说来可笑,我刚开始写代码的时候总觉得测试代码特别麻烦,能运行就完事了。直到有一天,我改了一个小功能,结果不知道改出了什么问题,整个系统都崩溃了。从那以后,我就明白了自动化测试的重要性。

自动化测试入门

自动化测试本质上就是用代码检查另一段代码是否正常工作。打个比方,就像你买了个新手机,肯定要试试各种功能对不对?看看电话能不能打通,微信能不能正常聊天,照相机清不清晰。自动化测试也是这个道理,只不过是用代码来做这些检查。

我记得有次做一个计算器程序,要是按照老方法,得一个功能一个功能手动试,加法、减法、乘法、除法,还得试试负数、小数…光想想就头大。用了自动化测试后,写好测试代码,一键运行就能知道所有功能是否正常,省时省力还不容易出错。

def add(a, b): return a + b # 测试代码 def test_add(): assert add(1, 1) == 2 assert add(-1, 1) == 0 assert add(0.1, 0.2) == 0.3

温馨提示: assert 是Python中用来断言的关键字,可以理解为"断定某事一定是对的"。如果断言的结果是False,Python会立即抛出异常,告诉我们哪里出问题了。

pytest框架快速上手

说实话,光用assert来测试还是太原始了。记得我刚开始写测试的时候,就感觉缺了点什么。后来发现了pytest这个框架,简直就是给测试工作开了外挂!它不仅能自动找到并执行测试代码,还能生成清晰的测试报告,告诉你具体哪些测试通过了,哪些失败了,失败的原因是什么。

import pytest def test_string_match(): # 检查字符串是否包含特定内容 text = "hello world" assert "hello" in text @pytest.mark.parametrize("test_input,expected", [ ("3+5", 8), ("2+4", 6), ("6+5", 11), ]) def test_eval(test_input, expected): # 参数化测试,一次测试多组数据 assert eval(test_input) == expected

pytest的参数化测试真是太好用了!不用复制粘贴同样的代码,就能测试多组数据。还有个神奇的地方,它能自动发现文件中所有以test开头的函数,统一执行测试。

模拟真实场景

在实际工作中,经常会遇到需要连接数据库或者调用外部接口的情况。总不能为了测试去真实操作数据库吧?万一测试数据把生产环境搞崩了那就惨了。这时候就需要用到mock技术了,它就像是个替身演员,能模仿真实对象的行为。

from unittest.mock import Mock, patch def get_user_data(user_id): # 假设这是个查询数据库的函数 pass def test_get_user(): # 模拟数据库返回结果 mock_db = Mock() mock_db.query.return_value = {"name": "小明", "age": 18} with patch('__main__.get_user_data', mock_db): result = get_user_data(1) assert result["name"] == "小明"

温馨提示: 使用mock不仅能避免测试对实际环境的影响,还能模拟各种异常情况,比如网络超时、数据库连接失败等,这在真实环境中可能很难触发。

测试用例组织

随着项目越来越大,测试代码也会越来越多。要是不好好组织,过段时间自己都看不懂写的是啥了。我现在习惯用类来组织相关的测试用例,每个类就像一个小专题,专门测试某个模块的功能。

class TestUserModule: def setup_method(self): # 每个测试方法前都会执行 self.test_data = {"id": 1, "name": "小明"} def test_create_user(self): # 测试创建用户 pass def test_delete_user(self): # 测试删除用户 pass

setup_method这个方法特别实用,它会在每个测试方法执行前自动运行,可以用来准备测试数据。这样就不用在每个测试方法里都写一遍准备数据的代码了。

Selenium自动化测试

说到Web应用测试,不得不提Selenium。它就像是个机器人,能帮你自动操作网页,点击按钮、填写表单、获取页面内容,啥都能干。

fr

om selenium import webdriver driver = webdriver.Chrome() driver.get("http://www.example.com") # 查找输入框并输入内容 search_box = driver.find_element_by_id("search") search_box.send_keys("测试内容") # 点击搜索按钮 search_button = driver.find_element_by_id("submit") search_button.click() # 检查结果 results = driver.find_elements_by_class_name("result") assert len(results) > 0

用Selenium写的测试就像是请了个不知疲倦的助手,24小时都能帮你测试网页功能。特别是在做回归测试的时候,几百个页面的功能,手工测试哪里比得上自动化效率高。

现在回想起来,以前总觉得写测试代码是在浪费时间,现在才发现这完全是一种误解。好的测试用例就像是项目的守护神,能在代码变更时及时发现问题,避免bug溜进生产环境。而且自动化测试还能作为代码的文档,新来的同事看看测试用例,就知道每个功能该怎么用了。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

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

直接上干货!今天咱们聊聊怎么用MATLAB把机械臂玩出花。这玩意儿可不是只能画个三维模型装逼,从底层运动学计算到实时控制都能给你整明白了

Matlab机械臂综合仿真平台,包含运动学、动力学和控制。 MATLAB机器人仿真正逆运动学simulink轨迹规划 机械臂动力学控制等 gui控制仿真平台PUMA机器人 robotics toolbox 先甩个正运动学的代码镇楼: robot seriallink([...Revolute(d, 0.67, a, 0, alp…

作者头像 李华
网站建设 2026/2/13 22:41:21

基于集成模型的Bagging数据回归预测

基于集成模型的Bagging的数据回归预测 matlab代码 大家好!今天我想和大家分享一下关于基于集成模型的Bagging方法在回归预测中的应用。虽然这个主题可能听起来有点专业,但我会尽量用通俗易懂的方式和大家交流,同时穿插一些代码和实际案例&…

作者头像 李华
网站建设 2026/2/14 6:02:29

直接看代码最实在。先来搞个简单的BP神经网络结构

PSO粒子群优化算法优化BP神经网络做MIMO多输入多输出系统的预测,预测精度非常高class BPNN:def __init__(self, input_size, hidden_size, output_size):self.w1 np.random.randn(input_size, hidden_size)self.b1 np.zeros((1, hidden_size))self.w2 np.random.…

作者头像 李华
网站建设 2026/2/7 21:03:22

PLC电路在备用自动投入中 的研究

第2章 可编程控制器控制系统 PLC是由继电器逻辑控制系统发展而来,它在数字处理、程序控制方面具有优势,PLC是为间歇生产和机械加工而一种专用计算机。PLC可采用BSDLC语言、C语言、符合逻辑流程和梯形图编程,具有复杂的数学运算、数据处理、统…

作者头像 李华
网站建设 2026/2/12 4:07:40

【课程设计/毕业设计】基于Spring Boot的体育购物商城系统基于springboot的运动用品商城系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/2/5 14:02:05

python146- 建筑工程项目任务分配管理系统vue3

目录 建筑工程项目任务分配管理系统(Vue3)摘要核心功能技术栈扩展性 开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 建筑工程项目任务分配管理系统(Vue3…

作者头像 李华