当前位置:首页>python>Python从入门到精通day57

Python从入门到精通day57

  • 2026-09-07 14:26:12
Python从入门到精通day57

软件测试体系与实战指南

软件测试是通过系统化手段发现并标记产品缺陷的工程过程,其中缺陷定义为产品实际运行结果与预期设计结果之间的偏差。广义层面,软件测试也可理解为:以排查程序错误为核心目的,执行目标软件并验证其行为的全过程。开展规范化测试,旨在推动产品达成以下核心目标:

  1. 1. 贴合用户需求:保障产品功能、性能符合用户预期,提升用户满意度
  2. 2. 优化市场竞争力:以稳定可靠的产品质量,扩大市场占有率
  3. 3. 建立产品公信力:通过严苛测试验证,树立用户对产品的信任度
  4. 4. 降低全周期成本:提前规避线上故障,减少后期开发与运维修复成本

功能测试

功能测试是验证软件单元行为是否完全符合开发设计规范、需求规格说明书的基础测试类型,若软件单元的实际输出、交互逻辑与设计要求完全一致,则视为通过功能测试。根据测试视角与执行主体,可分为两类核心方法:

  • • 白盒测试:由开发人员主导执行,基于代码内部逻辑开展测试,核心覆盖单元测试、集成测试、系统测试三个层级,聚焦代码逻辑、分支覆盖率与内部接口调用合规性。
  • • 黑盒测试:由测试团队、QA工程师等非开发人员执行,测试人员无需关注代码内部实现,将被测系统视为封闭黑盒,仅验证外部功能与交互是否符合需求。Web类应用可借助Selenium等自动化框架,实现黑盒测试的流程化、自动化落地。

性能测试

性能测试是针对软件在高并发、高负载场景下的响应效率、稳定性与健壮性开展的专项测试,核心验证系统在不同压力下的服务能力,常见细分类型如下:

  • • 负载测试:模拟设定业务负载量,验证系统在常规峰值压力下的性能指标,确定系统正常运行的承载上限。
  • • 压力测试:模拟突发流量、极限负载等极端场景,测试系统的性能瓶颈与容错能力,判定系统崩溃临界值。

安全性测试

安全性测试聚焦系统数据安全与访问管控能力,核心验证系统敏感数据、核心接口仅能通过身份认证与权限授权后访问,防范未授权访问、数据泄露、非法篡改等安全风险,保障系统与数据的保密性、完整性、可用性。

其他测试类型

除核心测试类型外,软件质量保障还需覆盖以下专项测试:

  • • 易用性测试:验证产品操作流程、交互体验是否符合用户使用习惯,降低学习与使用成本
  • • 安装测试:验证软件在不同环境、不同配置下的安装、卸载、升级流程是否顺畅
  • • 可访问性测试:保障产品对特殊用户群体(如残障人士)的适配性,符合通用访问标准

单元测试

单元测试是针对程序中最小可测试单元(函数、对象方法、代码模块)开展的白盒测试,通过比对实际输出与预期输出、校验各类断言条件,判定被测单元是否满足设计规范,是开发阶段保障代码质量的核心手段。

核心概念

  • • 测试用例:为特定目标设计的测试输入、执行流程与预期结果集合,是单元测试的基本执行单元
  • • 测试固件:每次测试执行前需初始化、测试结束后需清理的公共资源、配置项与数据,保障测试环境一致性
  • • 测试套件:将多个关联测试用例整合形成的测试集合,实现批量执行、统一管理

单元测试实战示例

import reimport unittest# 被测工具函数defgen_mobile_code():passdefto_md5_hex(content):passclassUtilTest(unittest.TestCase):"""工具类单元测试"""defsetUp(self):"""初始化测试固件,复用正则匹配规则"""self.pattern = re.compile(r'\d{6}')deftest_gen_mobile_code(self):"""测试验证码生成函数"""for _ inrange(100):self.assertIsNotNone(self.pattern.match(gen_mobile_code()))deftest_to_md5_hex(self):"""测试MD5加密函数"""        md5_dict = {'123456': 'e10adc3949ba59abbe56e057f20f883e','123123123': 'f5bb0c8de146c67b44babbf4e6584cc0','1qaz2wsx': '1c63129ae9db9c60c3e8aa94d3e00495',        }for key, value in md5_dict.items():self.assertEqual(value, to_md5_hex(key))

TestCase核心断言方法

unittest.TestCase提供丰富断言方法,用于校验测试结果是否符合预期:

  • • 等值判断:assertEqual、assertNotEqual
  • • 布尔判断:assertTrue、assertFalse、assertIsNot
  • • 异常判断:assertRaise、assertRaiseRegexp
  • • 近似值判断:assertAlmostEqual、assertNotAlmostEqual
  • • 大小判断:assertGreater、assertGreaterEqual、assertLess、assertLessEqual
  • • 正则匹配:assertRegexpMatches、assertNotRegexpMatches
  • • 集合判断:assertListEqual、assertSetEqual、assertTupleEqual、assertDictEqual

单元测试辅助工具与覆盖率评估

可借助nose2、pytest等工具简化单元测试执行流程,提升测试效率;通过cov-core、pytest-cov评估测试覆盖率,覆盖率以百分比呈现,反映测试代码对业务代码的覆盖程度,是衡量测试完整性的核心指标。

覆盖率仅统计代码行是否被执行,不校验测试逻辑的合理性;100%覆盖率可大幅降低线上突发运行故障,但无法完全杜绝逻辑缺陷,需结合业务场景设计测试用例。

pip install nose2 pytest cov-core pytest-cov

Web自动化测试(Selenium)

Selenium是主流的Web自动化测试工具,支持浏览器行为模拟、动态页面数据抓取、自动化用例执行,除测试外,也可用于爬虫动态数据采集。Selenium生态包含三大核心组件:

  • • Selenium IDE:浏览器插件,支持测试脚本录制、回放,快速生成基础测试用例
  • • Selenium WebDriver:多语言支持的浏览器操控API,实现浏览器行为的程序化控制
  • • Selenium Standalone Server:支持Selenium Grid、远程控制与分布式测试部署

环境安装与实战示例

pip install selenium
from selenium import webdriverimport pytestimport contextlib@pytest.fixture(scope='session')defchrome():"""初始化无头Chrome浏览器,测试会话结束后关闭资源"""    options = webdriver.ChromeOptions()    options.add_argument('--headless')    driver = webdriver.Chrome(options=options)yield driver    driver.quit()deftest_baidu_index(chrome):"""测试百度首页访问与标题校验"""    chrome.get('https://www.baidu.com')assert chrome.title == '百度一下,你就知道'

除Selenium外,Robot Framework也是常用的Web自动化测试框架,支持关键字驱动,降低自动化用例编写门槛。

测试执行与覆盖率查看命令

# nose2执行测试并生成覆盖率报告nose2 -v -C# pytest执行测试并生成覆盖率报告pytest --cov

覆盖率报告示例

Ran 7 tests in 0.002sOKName                       Stmts   Miss  Cover----------------------------------------------example01.py                  15      0   100%example02.py                  49     49     0%example03.py                  22     22     0%example04.py                  61     61     0%example05.py                  29     29     0%example06.py                  39     39     0%example07.py                  19     19     0%example08.py                  27     27     0%example09.py                  18     18     0%example10.py                  19     19     0%example11.py                  22     22     0%example12.py                  28     28     0%example13.py                  28     28     0%test_ddt_example.py           18      0   100%test_pytest_example.py        11      6    45%test_unittest_example.py      22      0   100%----------------------------------------------TOTAL                        427    367    14%

测试依赖隔离方案

测试过程中需隔离数据库、外部接口、时间等外部依赖,避免环境因素干扰测试结果,核心分为两类隔离方式:

  1. 1. 数据源隔离:采用本地化内存数据、测试专用数据库,测试完成后执行数据回滚,不污染生产/开发环境
  2. 2. 资源虚拟化:通过替身对象模拟外部依赖,核心分为三类:
    • • Stub(存根):为测试提供固定响应的函数替代品,屏蔽复杂逻辑
    • • Mock(模拟):替代实际业务对象及其API,模拟指定行为与返回结果
    • • Fake(伪造):轻量级替代对象,具备基础功能但未达到生产级别标准

集成测试

集成测试是将多个独立单元、模块组合后,验证组件间接口调用、数据传输、协同工作能力的测试,聚焦模块互操作性、需求变更兼容性、外部依赖对接稳定性,同时可排查硬件适配问题、代码路径异常等隐性缺陷。

系统测试

系统测试是针对完整产品成品的全量验证,核心校验产品是否满足所有需求规格、业务场景与用户预期,属于验收前的最终测试,通常在客户项目验收阶段执行,覆盖全功能、全流程、全场景验证。

数据驱动测试

数据驱动测试是将测试输入值与预期结果外置化(如CSV、Excel、数据库),实现测试逻辑与测试数据分离,避免硬编码,提升用例复用性与维护效率,通过批量加载数据集执行自动化测试。

实战示例

被测函数

defadd(x, y):return x + y

测试数据集(data.csv)

3,1,20,1,-1100,50,50100,1,9915,7,8

测试代码

import csvfrom unittest import TestCasefrom ddt import ddt, data, unpackdefload_data_from_csv(filename):"""从CSV文件加载测试数据"""    data_items = []withopen(filename, 'r', newline='') as fs:        reader = csv.reader(fs)for row in reader:            data_items.append(list(map(int, row)))return data_items@ddtclassTestAdd(TestCase):"""加法函数数据驱动测试"""    @data(*load_data_from_csv('data.csv'))    @unpackdeftest_add(self, result, param1, param2):self.assertEqual(result, add(param1, param2))

Django项目测试

1. Django视图测试

Django内置TestCase扩展了原生unittest能力,内置client属性可模拟浏览器发起GET、POST、PUT、DELETE等请求,验证视图响应状态、返回数据与上下文。

from django.test import TestCasefrom django.urls import reverseclassSomeViewTest(TestCase):"""Django视图单元测试"""deftest_example_view(self):# 模拟GET请求        resp = self.client.get(reverse('index'))# 校验响应状态码self.assertEqual(200, resp.status_code)# 校验上下文数据self.assertEqual(5, resp.context['num'])

2. 测试数据库配置

Django测试会自动创建专用测试数据库,避免污染业务数据库,需在配置文件中声明测试库参数:

DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': 'localhost','PORT': 3306,'NAME': 'DbName','USER': os.environ['DB_USER'],'PASSWORD': os.environ['DB_PASS'],'TEST': {'NAME': 'DbName_for_testing','CHARSET': 'utf8',        },    }}

3. Django测试执行命令

# 执行全项目测试python manage.py test# 执行指定应用测试python manage.py test common# 执行指定测试类python manage.py test common.tests.UtilsTest# 执行指定测试方法python manage.py test common.tests.UtilsTest.test_to_md5_hex

4. Django测试覆盖率评估

# 安装覆盖率工具pip install coverage# 执行测试并统计覆盖率coverage run --source=<path1> --omit=<path2> manage.py test common# 生成覆盖率报告coverage report

Django覆盖率报告示例

Name                            Stmts   Miss  Cover---------------------------------------------------common/__init__.py                  0      0   100%common/admin.py                     1      0   100%common/apps.py                      3      3     0%common/forms.py                    16     16     0%common/helper.py                   32     32     0%common/middlewares.py              19     19     0%common/migrations/__init__.py       0      0   100%common/models.py                   71      2    97%common/serializers.py              14     14     0%common/tests.py                    14      8    43%common/urls_api.py                  3      3     0%common/urls_user.py                 3      3     0%common/utils.py                    22      7    68%common/views.py                    69     69     0%---------------------------------------------------TOTAL                             267    176    34%

性能测试常用工具

1. Apache Benchmark(ab)

Apache自带的Web服务压力测试工具,快速验证HTTP服务并发性能,同类工具还包括webbench、httpperf。

yum -y install httpd   ab -c 10 -n 1000 http://www.baidu.com/   ...   Benchmarking www.baidu.com (be patient).....done   Server Software:        BWS/1.1   Server Hostname:        www.baidu.com   Server Port:            80   Document Path:          /   Document Length:        118005 bytes   Concurrency Level:      10   Time taken for tests:   0.397 seconds   Complete requests:      100   Failed requests:        98      (Connect: 0, Receive: 0, Length: 98, Exceptions: 0)   Write errors:           0   Total transferred:      11918306 bytes   HTML transferred:       11823480 bytes   Requests per second:    252.05 [#/sec] (mean)   Time per request:       39.675 [ms] (mean)   Time per request:       3.967 [ms] (mean, across all concurrent requests)   Transfer rate:          29335.93 [Kbytes/sec] received   Connection Times (ms)                 min  mean[+/-sd] median   max   Connect:        6    7   0.6      7       9   Processing:    20   27  22.7     24     250   Waiting:        8   11  21.7      9     226   Total:         26   34  22.8     32     258   Percentage of the requests served within a certain time (ms)     50%     32     66%     34     75%     34     80%     34     90%     36     95%     39     98%     51     99%    258    100%    258 (longest request)

2. mysqlslap

MySQL官方自带的数据库压力测试工具,模拟并发查询、读写混合场景,验证数据库性能瓶颈。

# 基础并发压测mysqlslap -a -c 100 -h 1.2.3.4 -u root -p# 只读模式压测mysqlslap -a -c 100 --number-of-queries=1000 --auto-generate-sql-load-type=read -h <IP> -u root -p# 混合负载、多并发压测mysqlslap -a --concurrency=50,100 --number-of-queries=1000 --debug-info --auto-generate-sql-load-type=mixed -h 1.2.3.4 -u root -p

3. sysbench

开源多线程性能测试工具,支持系统线程、内存、IO、数据库等多维度性能压测。

# 线程性能压测sysbench --test=threads --num-threads=64 --thread-yields=100 --thread-locks=2 run# 内存性能压测sysbench --test=memory --num-threads=512 --memory-block-size=256M --memory-total-size=32G run

4. 其他专业性能测试工具

  • • JMeter:开源Java性能测试工具,支持Web、数据库、接口等多场景压测,详情参考《使用JMeter进行性能测试》
  • • LoadRunner / QTP:企业级性能与功能测试工具,适用于大型项目复杂场景压测与自动化测试

国内直接使用顶级AI工具

谷歌浏览器访问:

https://www.nezhasoft.cloud/r/vMPJZr

最新文章

随机文章