2026/1/12 9:13:25
网站建设
项目流程
网站做多个镜像,织梦网站文章发布信息模板下载,谷歌seo建站,广州做网站好的公司在网络爬虫的开发与维护过程中#xff0c;自动化测试是保障爬虫稳定性、可靠性的核心环节。而一份清晰、美观的测试报告#xff0c;能帮助开发者快速定位问题、分析测试覆盖度。Pytest 作为 Python 生态中最流行的测试框架#xff0c;以其简洁的语法和强大的扩展性著称…在网络爬虫的开发与维护过程中自动化测试是保障爬虫稳定性、可靠性的核心环节。而一份清晰、美观的测试报告能帮助开发者快速定位问题、分析测试覆盖度。Pytest作为 Python 生态中最流行的测试框架以其简洁的语法和强大的扩展性著称Allure则是一款轻量级的开源测试报告工具支持生成可视化、交互式的 HTML 报告。本文将详细介绍如何结合 Pytest 与 Allure实现爬虫自动化测试的报告生成。一、环境准备1.1 核心依赖安装首先需要安装 Pytest、Allure-Pytest 适配器以及 Allure 命令行工具具体步骤如下安装 Python 依赖包打开终端执行以下命令安装 Pytest 和 Allure-Pytestbash运行pip install pytest allure-pytestpytest提供测试用例的编写、执行和管理功能。allure-pytestPytest 与 Allure 的桥梁用于收集测试结果并生成 Allure 兼容的测试数据。安装 Allure 命令行工具Allure 命令行工具用于将测试数据转换为 HTML 报告不同系统的安装方式如下Windows 系统访问 Allure 官方 GitHub 仓库 下载最新版本的 zip 包。解压 zip 包到指定目录如D:\allure-2.24.0。将解压目录下的bin文件夹路径添加到系统环境变量Path中。Linux/Mac 系统可以通过包管理器直接安装以 Ubuntu 为例bash运行sudo apt-add-repository ppa:qameta/allure sudo apt-get update sudo apt-get install allure验证安装在终端执行以下命令若能输出对应版本号则说明安装成功bash运行pytest --version allure --version1.2 其他依赖由于本文聚焦于爬虫测试还需要安装常用的爬虫库如requests处理 HTTP 请求、BeautifulSoup4解析 HTML等bash运行pip install requests beautifulsoup4二、编写爬虫测试用例以一个简单的豆瓣电影 Top250 爬虫为例编写测试用例。测试目标包括请求是否成功、响应数据格式是否正确、核心字段是否存在等。2.1 爬虫代码实现新建douban_spider.py文件编写爬虫核心逻辑python运行import requests from bs4 import BeautifulSoup class DoubanSpider: def __init__(self): self.base_url https://movie.douban.com/top250 self.headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 } def get_movie_list(self, page1): 获取指定页码的电影列表 params {start: (page - 1) * 25, filter: } try: response requests.get(self.base_url, headersself.headers, paramsparams, timeout10) response.raise_for_status() # 抛出HTTP错误异常 soup BeautifulSoup(response.text, html.parser) movie_items soup.find_all(div, class_item) movie_list [] for item in movie_items: title item.find(span, class_title).text rating item.find(span, class_rating_num).text movie_list.append({title: title, rating: rating}) return movie_list except Exception as e: print(f爬取失败{e}) return []2.2 Pytest 测试用例编写新建test_douban_spider.py文件编写测试用例。Pytest 的测试用例遵循约定优于配置原则测试文件以test_开头。测试类以Test开头。测试方法以test_开头。同时结合 Allure 的装饰器为测试用例添加描述、分类等信息让报告更易读python运行import pytest import allure from douban_spider import DoubanSpider allure.feature(豆瓣电影Top250爬虫测试) # 测试模块大分类 class TestDoubanSpider: def setup_class(self): 所有测试方法执行前执行一次初始化爬虫对象 self.spider DoubanSpider() allure.story(正常页码爬取测试) # 测试场景小分类 allure.title(测试第1页电影列表爬取) # 测试用例标题 allure.severity(allure.severity_level.CRITICAL) # 用例优先级CRITICAL HIGH MEDIUM LOW TRIVIAL def test_get_movie_list_page1(self): movie_list self.spider.get_movie_list(page1) # 断言返回结果非空 assert len(movie_list) 0, 第1页电影列表为空 # 断言每条数据包含title和rating字段 for movie in movie_list: assert title in movie, 电影数据缺少title字段 assert rating in movie, 电影数据缺少rating字段 assert movie[rating].replace(., ).isdigit(), 评分格式错误 allure.story(异常页码爬取测试) allure.title(测试第0页电影列表爬取) allure.severity(allure.severity_level.NORMAL) def test_get_movie_list_page0(self): movie_list self.spider.get_movie_list(page0) # 断言异常页码返回空列表 assert len(movie_list) 0, 异常页码未返回空列表 allure.story(请求超时测试) allure.title(测试爬虫超时处理) allure.severity(allure.severity_level.HIGH) def test_request_timeout(self): # 模拟超时修改超时时间为0.001秒 import requests with pytest.raises(requests.exceptions.Timeout): response requests.get( self.spider.base_url, headersself.spider.headers, params{start: 0}, timeout0.001 )Allure 核心装饰器说明装饰器作用allure.feature定义测试模块如 “爬虫功能测试”“接口性能测试”allure.story定义测试场景属于 feature 的子集如 “正常请求测试”“异常请求测试”allure.title定义测试用例的标题支持参数化allure.severity定义用例优先级影响报告中用例的展示排序allure.step定义测试步骤用于细化测试过程下文会详细介绍三、生成 Allure 测试报告Allure 生成报告分为两步执行测试用例生成测试数据→将测试数据转换为 HTML 报告。3.1 执行测试用例生成测试数据在终端中切换到测试文件所在目录执行以下命令bash运行pytest test_douban_spider.py --alluredir./allure-results--alluredir./allure-results指定测试数据的输出目录为当前目录下的allure-results文件夹。执行完成后会在当前目录生成allure-results文件夹里面包含 JSON 格式的测试结果数据。3.2 生成 HTML 报告执行以下命令将allure-results中的数据转换为 HTML 报告bash运行allure serve ./allure-resultsallure serve启动一个临时的 Web 服务器自动在浏览器中打开生成的 HTML 报告。若需要生成静态 HTML 文件便于分享可执行以下命令bash运行allure generate ./allure-results -o ./allure-report --clean-o ./allure-report指定静态报告的输出目录。--clean清空输出目录中的旧报告。生成的静态报告可以直接通过浏览器打开allure-report文件夹中的index.html文件查看。四、Allure 报告核心功能解析Allure 报告提供了丰富的可视化功能帮助开发者全面分析测试结果核心模块如下4.1 概览页面Overview报告首页展示测试的整体统计信息包括测试用例总数总用例数、通过数、失败数、跳过数等。优先级分布按severity分类展示不同优先级用例的执行情况。时间趋势测试执行的耗时分布。4.2 用例页面Behaviors/SuitesBehaviors按feature和story分类展示测试用例与我们编写的测试结构一一对应便于按业务场景查看。Suites按测试文件和测试类分类展示用例适合技术视角的分析。4.3 测试详情页面点击任意测试用例可查看详细的执行日志包括用例的标题、优先级、所属模块。测试步骤的执行情况若使用allure.step。断言失败的详细信息帮助快速定位问题。4.4 自定义测试步骤为了让报告更清晰我们可以使用allure.step装饰器定义测试步骤。修改test_douban_spider.py中的测试用例python运行allure.story(正常页码爬取测试) allure.title(测试第1页电影列表爬取) allure.severity(allure.severity_level.CRITICAL) def test_get_movie_list_page1(self): with allure.step(1. 调用爬虫获取第1页电影列表): movie_list self.spider.get_movie_list(page1) with allure.step(2. 断言电影列表非空): assert len(movie_list) 0, 第1页电影列表为空 with allure.step(3. 断言电影数据字段完整性和格式正确性): for movie in movie_list: assert title in movie, 电影数据缺少title字段 assert rating in movie, 电影数据缺少rating字段 assert movie[rating].replace(., ).isdigit(), 评分格式错误重新执行测试并生成报告后在测试详情中可以看到清晰的步骤划分。五、高级技巧参数化测试与报告优化5.1 参数化测试Pytest 的pytest.mark.parametrize装饰器支持参数化测试可同时测试多个页码的爬取情况结合 Allure 的标题参数化让报告更直观python运行allure.story(正常页码爬取测试) allure.severity(allure.severity_level.CRITICAL) pytest.mark.parametrize(page, [1, 2, 3]) allure.title(测试第{page}页电影列表爬取) def test_get_movie_list_param(self, page): movie_list self.spider.get_movie_list(pagepage) assert len(movie_list) 0, f第{page}页电影列表为空5.2 报告中添加附件在爬虫测试中可将响应的 HTML 页面、截图等作为附件添加到报告中方便问题排查。例如在测试失败时保存响应内容python运行allure.story(异常请求测试) allure.title(测试无效URL爬取) def test_invalid_url(self): invalid_url https://movie.douban.com/top250/invalid try: response requests.get(invalid_url, headersself.spider.headers, timeout10) response.raise_for_status() except Exception as e: allure.attach(str(e), name异常信息, attachment_typeallure.attachment_type.TEXT) allure.attach(response.text, name响应内容, attachment_typeallure.attachment_type.HTML) raise六、总结本文通过豆瓣电影爬虫的实例详细介绍了Pytest Allure在爬虫自动化测试中的应用流程从环境搭建、测试用例编写到报告生成与分析再到高级技巧的优化。借助这套组合开发者可以快速构建稳定的爬虫测试体系生成美观、实用的测试报告从而提升爬虫的开发效率和维护质量。在实际项目中还可以结合 CI/CD 工具如 Jenkins、GitHub Actions实现测试报告的自动生成与发布进一步提升自动化测试的价值。