python自动化测试实战 —— CSDN的Web页面自动化测试

本文涉及的产品
性能测试 PTS,5000VUM额度
简介: python自动化测试实战 —— CSDN的Web页面自动化测试

软件测试专栏


1. 测试页面的介绍

     CSDN(China Software Developer Network)是中国最大的IT社区和知识分享平台,提供了丰富的技术文章、博客、问答等内容,吸引了大量的开发者和技术爱好者。测试的目标是针对CSDN的Web页面进行功能和性能测试。

  • CSDN首页页面:CSDN的首页是用户访问CSDN网站的入口页面,展示了最新的技术文章、博客、问答等内容。测试目标是验证CSDN首页页面是否成功加载,包括页面元素是否正确显示、数据是否正常加载等。
  • CSDN登录功能:CSDN网站提供了用户登录功能,用户可以通过手机扫码进行登录,以便享受更多的个性化服务和参与社区互动。测试目标是验证登录功能是否正常,包括是否正确验证、登录后是否跳转到用户个人页面等。
  • 页面顶部导航链接:CSDN网站的页面顶部包含了一系列导航链接,用于用户浏览和切换不同的内容板块。测试目标是验证顶部导航链接是否正常跳转,包括点击链接后页面是否正确切换到对应板块的内容。
  • 搜索功能:CSDN网站提供了搜索功能,用户可以通过输入关键词进行搜索,以查找相关的技术文章、博客或问答。测试目标是验证搜索功能是否正常,包括搜索结果是否准确、搜索框是否响应等。
  • 页面的文章链接:CSDN的页面中展示了大量的技术文章和博客,用户可以点击文章链接进行阅读和查看详情。测试目标是验证页面的文章链接是否正常跳转,包括点击链接后是否成功打开文章页面、文章内容是否正确显示等。
  • 页面加载性能:页面加载性能是指页面打开所需的时间和资源消耗情况。测试目标是验证页面加载性能是否在合理范围内,包括页面打开时间是否在预期范围、资源请求和加载是否高效等。

     通过对以上测试目标的测试,可以确保CSDN的Web页面在功能和性能方面的稳定和优化,提供良好的用户体验和可靠的技术内容。同时,测试也有助于发现和解决潜在的问题和改进空间,提高网站的质量和可靠性。

2. 测试用例设计

用例ID 用例等级 用例标题 前置条件 操作步骤 预期结果
test_CSDNPageLoad L1 页面加载 1. 打开网页 页面成功加载,无错误提示
2. 检查页面是否成功加载
test_UserLoginTest L2 登录 打开网页 1. 打开网页 成功跳转到用户个人主页,显示用户相关信息
2. 点击页面顶部的“登录”链接
3. 手机扫码登录
4. 再次点击登录按钮(成功登录后变成用户的头像)
5. 检查是否成功跳转到用户个人主页
test_CSDNNavigation L3 点击页面顶部导航链接跳转 打开网页 1. 打开网页 成功跳转到对应的页面
2. 点击页面顶部导航栏中的每个链接(例如:博客、下载、学习等)
3. 检查是否成功跳转到对应的页面
test_CSDNSearch L3 搜索 打开网页 1. 打开网页 搜索结果页面正确显示包含关键词 “自动化测试” 的搜索结果
2. 在搜索框中输入关键词 “自动化测试”
3. 点击搜索按钮
4. 检查搜索结果页面是否正确显示搜索关键词
test_CSDNArticleView L3 点击页面的文章的链接跳转 打开网页 1. 打开网页 成功跳转到对应的页面
2. 点击页面的第一个文章的链接
3. 检查是否成功跳转到对应的页面
test_CSDNPageLoadPerformance L2 页面加载性能 打开网页 1. 打开网页,记录开始时间 页面加载时间在合理范围内(例如,小于10秒)
2. 等待页面加载完成
3. 记录结束时间
4. 检查页面加载时间是否在合理范围内

显示详细信息

3. 测试框架介绍

图1:项目框架

难易程度

  该框架相对来说有一定的复杂性,因为使用了多个不同的工具和库,包括但不限于:

  1. expected_conditions:用于定义不同的预期条件,例如等待元素可见、等待元素存在等,配合WebDriverWait使用。
  2. WebDriverWait:提供了等待机制,用于等待页面元素的出现或特定条件的满足,以增加测试的稳定性和可靠性。
  3. By:用于指定元素的定位方式,例如通过ID、XPath、CSS选择器等来定位页面元素。
  4. time:提供了与时间相关的功能,例如等待指定时间间隔、延时执行等,用于控制测试执行过程中的时间。
  5. unittest:Python的标准单元测试框架,用于编写和执行测试用例,并提供了断言方法和测试报告生成等功能。
  6. pytest:一种Python的第三方测试框架,提供了更丰富的测试功能和灵活的测试用例组织方式,例如参数化测试、测试夹具等。
  7. CSDNActions:自定义的页面操作类,封装了与CSDN网站交互的动作方法,例如打开网页、点击按钮、切换窗口等。
  8. CSDNElements:自定义的页面元素类,封装了与CSDN网站相关的元素定位信息,例如按钮、链接、输入框等。
         这些工具、库和自定义类的使用使得测试框架具备了更丰富的功能和更高的封装程度,能够进行元素定位、等待条件满足、执行页面操作、编写和执行测试用例等操作,提供了丰富的功能和灵活性,使得测试框架具备了较强的扩展能力和适应性。同时,框架中还涉及到一些如条件等待、参数化测试等知识。

封装程度

  1. PageObject包:其中的csdn_actions.py和csdn_elements.py文件提供了对CSDN网站的页面操作和元素定位的封装。通过封装页面操作和元素定位,可以在测试用例中使用简洁的代码来执行复杂的页面操作,提高了代码的可读性和可维护性。
  2. Scenario包:其中包含了多个场景文件,如SearchScenario.py、PageLoadScenario.py等,每个场景文件对应于一类测试场景,封装了执行该类测试场景所需的操作和断言。通过将测试场景进行封装,可以更好地组织和管理测试用例,提高代码的可复用性。
  3. TestCase包:其中包含了多个测试用例文件,如test_CSDNArticleView.py、test_CSDNNavigation.py等,每个测试用例文件对应于一个具体的测试案例。通过编写测试用例文件,可以实现对不同功能和场景的测试覆盖,同时利用框架提供的断言方法进行结果验证。

4. 具体的自动化测试脚本

PageObject包

  • 封装页面操作(csdn_actions.py):
         定义了一个基础页面类(BasePage)和 CSDN 页面操作类(CSDNActions),通过封装常用的页面操作方法和等待条件,提供了便于编写自动化测试的接口和功能。
         BasePage类作为所有页面类的基类,初始化时接受一个驱动对象,用于与浏览器进行交互。
         CSDNActions类继承自BasePage类,封装了对CSDN网页的各种操作方法,例如打开 CSDN 首页、点击登录按钮、点击博客链接、输入搜索关键字、点击搜索按钮等。
         其中使用了WebDriverWait 类和expected_conditions 模块,用于等待页面元素的出现或特定条件的满足,以增加测试的稳定性和可靠性。
         通过这些封装的方法,可以在测试用例中以简洁的方式执行各种页面操作,并且提供了一些辅助方法如等待页面标题、等待元素文本、测量页面加载时间等。

图2:封装页面操作(csdn_actions.py)代码

  • 封装元素定位(csdn_elements.py):
         定义了一个CSDNElements类,用于存储CSDN页面中各个元素的定位方式和表达式。
         这样的设计可以使代码更加模块化和可维护,当页面元素发生变化时,只需修改CSDNElements类中对应元素的定位方式和表达式,而不需要修改具体的页面操作方法。

图3:封装元素定位(csdn_elements.py)代码


Scenario包

     每个场景封装成一个类,使测试脚本更加模块化和可读性高,方便扩展和维护。

  • 页面加载的场景脚本(PageLoadScenario.py):
         将页面加载的场景封装成一个类,通过调用方法来执行场景,并返回结果。

图4:页面加载的场景脚本(PageLoadScenario.py)代码

  • 用户登录的场景脚本(LoginScenario.py):
         将用户登录的场景封装成一个类,通过调用方法来执行场景,并返回结果。

图5:用户登录的场景脚本(LoginScenario.py)代码

  • 页面导航链接跳转的场景脚本(NavigationScenario.py):
         将页面导航链接跳转的场景封装成一个类,通过调用方法来执行场景,并返回结果。

图6:页面导航链接跳转的场景脚本(NavigationScenario.py)代码

  • 正确显示搜索关键词页面的场景脚本(SearchScenario.py):
         将搜索关键词页面正确显示的场景封装成一个类,通过调用方法来执行场景,并返回结果。

    图7:正确显示搜索关键词页面的场景脚本(SearchScenario.py)代码
  • 跳转到页面第一个文章页面的场景脚本(ArticleViewScenario.py):
         将跳转到页面第一个文章页面的场景封装成一个类,通过调用方法来执行场景,并返回结果。

图8:跳转到对应页面的场景脚本(ArticleViewScenario.py)代码

  • 页面加载时间测试的场景脚本(PageLoadPerformanceScenario.py):
         通过封装页面加载时间是否在合理范围内的场景到一个类中,可以方便地进行性能测试,并根据加载时间的结果判断页面加载性能是否符合预期。

图9:页面加载时间测试的场景脚本(PageLoadPerformanceScenario.py)代码


TestCase包

     通过编写测试类和测试方法,可以对测试用例进行自动化测试,并使用 pytest执行测试,生成测试报告,方便查看测试结果和问题定位。

  • CSDN页面加载测试(test_CSDNPageLoad.py):

图10:CSDN页面加载测试(test_CSDNPageLoad.py)代码

  • CSDN用户登录测试(test_CSDNUserLogin.py):

图11:CSDN用户登录测试(test_CSDNUserLogin.py)代码

  • 点击页面顶部导航链接跳转(test_CSDNNavigation.py):

图12:点击页面顶部导航链接跳转(test_CSDNNavigation.py)代码

  • 搜索测试(test_CSDNSearch.py):

图13:搜索测试(test_CSDNSearch.py)代码

  • 点击页面的文章的链接跳转测试(test_CSDNArticleView.py):

图14:点击页面的文章的链接跳转测试(test_CSDNArticleView.py)代码

  • 页面加载性能测试(test_CSDNPageLoadPerformance.py):

图15:页面加载性能测试(test_CSDNPageLoadPerformance.py)代码

5. 测试结果以及测试报告

     使用pytest对TestCase包的所有测试用例进行自动化测试,生成测试报告,将测试结果生成为 HTML 格式的报告方便查看测试结果和问题定位。

图16:所有测试都成功生成测试报告

  • 页面加载测试报告:

图17:页面加载测试报告

图18:页面加载

  • 登录测试报告:

图19:登录测试报告

  • 点击页面顶部导航链接跳转报告:

图20:点击页面顶部导航链接跳转报告

图21:登录成功

  • 搜索测试报告:

图22:搜索测试报告

图23:搜索自动化测试

  • 点击页面的文章的链接跳转测试报告:

图24:点击页面的文章的链接跳转测试报告

图25:页面第一个文章为“为什么说 AI 将拯救整个世界?”

图26:成功打开第一个文章

  • 页面加载性能测试报告:

图27:页面加载性能测试报告

6. 总结

     CSDN作为中国最大的IT社区和知识分享平台,承载着大量的技术内容和用户交流。为了确保CSDN网站的质量和稳定性,本次实验旨在对其Web页面进行功能和性能测试。通过编写测试用例,验证CSDN首页页面加载、登录功能、导航链接、搜索功能、文章链接跳转和页面加载性能等方面的表现。

     本次实战设计了六个测试用例,分别对应不同的功能和性能要求,包括:验证CSDN首页页面是否成功加载、验证登录功能是否正常、验证页面顶部导航链接是否正常跳转、验证搜索功能是否正常、验证页面的文章链接是否正常跳转、验证页面加载性能是否在合理范围内。

     执行测试用例使用了Selenium和pytest进行自动化测试,并使用了Page Object模式进行页面对象的封装,以及使用了Scenario和TestCase进行测试场景和测试用例的划分。

     PageObject包封装了与CSDN网站交互的动作和元素定位相关的方法和类。这种封装使得测试用例能够通过调用这些方法来执行相应的操作,从而使测试代码更加简洁和可维护。

     Scenario包中包含了不同的测试场景,通过调用PageObject包中的方法来执行相应的操作。

     TestCase包中包含了具体的测试用例文件,每个文件对应一个具体的测试场景,使用pytest框架执行测试,并生成测试报告。在每个测试用例中,使用断言来判断预期结果和实际结果是否一致,从而验证功能和性能是否符合要求。

     总的来说将页面对象、测试场景和测试用例进行了分离和封装,使得测试代码结构清晰、可读性好,并提供了易于维护和扩展的能力。通过这个完整的自动化测试框架和测试用例的编写,我们可以测试CSDN的Web页面,确保各项功能和性能的正常工作,提高测试效率和准确性。

     通过执行测试用例,得到了相应的测试结果和日志。根据测试报告和日志的分析,可以得出以下结论:CSDN首页页面成功加载,各个元素和数据正常显示;登录功能正常,账号密码验证和页面跳转均符合预期;页面顶部导航链接正常跳转,页面内容正确切换到对应板块;搜索功能正常,搜索结果准确,搜索框响应及时;页面的文章链接正常跳转,文章页面内容正确显示;页面加载性能在合理范围内,页面打开时间和资源加载高效。根据测试结果,CSDN的Web页面在功能和性能方面表现稳定可靠,提供了良好的用户体验和可靠的技术内容。同时,测试也发现了一些潜在的问题和改进空间,如页面加载速度可以进一步优化、搜索功能的搜索结果排序等。


7. 分录

源码下载自动化测试-CSDN的Web页面进行功能和性能测试



相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
10天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
46 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
7天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
37 3
|
13天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
40 3
|
12天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
28 1
|
12天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
1月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
59 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
2月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
239 7
Jmeter实现WebSocket协议的接口测试方法
|
2月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
247 3
快速上手|HTTP 接口功能自动化测试
|
1月前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
40 0
|
2月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
48 5