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

news2024/9/30 11:29:21

软件测试专栏

感兴趣可看:软件测试专栏
                     自动化测试学习部分源码
python自动化测试相关知识:
       【如何学习Python自动化测试】—— 自动化测试环境搭建
       【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
       【如何学习Python自动化测试】—— 页面元素定位
       【如何学习Python自动化测试】—— 时间等待
       【如何学习Python自动化测试】—— 浏览器操作
       【如何学习Python自动化测试】—— 鼠标键盘操作
       【如何学习Python自动化测试】—— 多层窗口定位
       【如何学习Python自动化测试】—— 警告框处理
       【如何学习Python自动化测试】—— Cookie 处理
       【如何学习Python自动化测试】—— expected_conditions
       【如何学习Python自动化测试】—— Python 的 unittest 框架
       【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告


CSDN的Web页面自动化测试

  • 软件测试专栏
  • 1. 测试页面的介绍
  • 2. 测试用例设计
  • 3. 测试框架介绍
    • 难易程度
    • 封装程度
  • 4. 具体的自动化测试脚本
    • PageObject包
    • Scenario包
    • TestCase包
  • 5. 测试结果以及测试报告
  • 6. 总结
  • 7. 分录

1. 测试页面的介绍

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

  • CSDN首页页面:CSDN的首页是用户访问CSDN网站的入口页面,展示了最新的技术文章、博客、问答等内容。测试目标是验证CSDN首页页面是否成功加载,包括页面元素是否正确显示、数据是否正常加载等。

  • CSDN登录功能:CSDN网站提供了用户登录功能,用户可以通过手机扫码进行登录,以便享受更多的个性化服务和参与社区互动。测试目标是验证登录功能是否正常,包括是否正确验证、登录后是否跳转到用户个人页面等。

  • 页面顶部导航链接:CSDN网站的页面顶部包含了一系列导航链接,用于用户浏览和切换不同的内容板块。测试目标是验证顶部导航链接是否正常跳转,包括点击链接后页面是否正确切换到对应板块的内容。

  • 搜索功能:CSDN网站提供了搜索功能,用户可以通过输入关键词进行搜索,以查找相关的技术文章、博客或问答。测试目标是验证搜索功能是否正常,包括搜索结果是否准确、搜索框是否响应等。

  • 页面的文章链接:CSDN的页面中展示了大量的技术文章和博客,用户可以点击文章链接进行阅读和查看详情。测试目标是验证页面的文章链接是否正常跳转,包括点击链接后是否成功打开文章页面、文章内容是否正确显示等。

  • 页面加载性能:页面加载性能是指页面打开所需的时间和资源消耗情况。测试目标是验证页面加载性能是否在合理范围内,包括页面打开时间是否在预期范围、资源请求和加载是否高效等。

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

在这里插入图片描述

2. 测试用例设计

用例ID用例等级用例标题前置条件操作步骤预期结果
test_CSDNPageLoadL1页面加载1. 打开网页页面成功加载,无错误提示
2. 检查页面是否成功加载
test_UserLoginTestL2登录打开网页1. 打开网页成功跳转到用户个人主页,显示用户相关信息
2. 点击页面顶部的“登录”链接
3. 手机扫码登录
4. 再次点击登录按钮(成功登录后变成用户的头像)
5. 检查是否成功跳转到用户个人主页
test_CSDNNavigationL3点击页面顶部导航链接跳转打开网页1. 打开网页成功跳转到对应的页面
2. 点击页面顶部导航栏中的每个链接(例如:博客、下载、学习等)
3. 检查是否成功跳转到对应的页面
test_CSDNSearchL3搜索打开网页1. 打开网页搜索结果页面正确显示包含关键词 “自动化测试” 的搜索结果
2. 在搜索框中输入关键词 “自动化测试”
3. 点击搜索按钮
4. 检查搜索结果页面是否正确显示搜索关键词
test_CSDNArticleViewL3点击页面的文章的链接跳转打开网页1. 打开网页成功跳转到对应的页面
2. 点击页面的第一个文章的链接
3. 检查是否成功跳转到对应的页面
test_CSDNPageLoadPerformanceL2页面加载性能打开网页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页面进行功能和性能测试


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1309133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《算法竞赛入门到进阶》——图论

10.1 图的基本概念(P214) 10.2 图的存储(P215) 10.3 图的遍历和连通性(P217) bfs 和 dfs 。 10.4 拓扑排序(P219) 一个图能进行拓扑排序的充要条件是它是一个有向无环图。 算法…

大数据----31.hbase安装启动

二.Hbase安装 先前安装: Zookeeper 正常部署 首先保证 Zookeeper 集群的正常部署,并启动之。 三台机器都执行:zkServer.sh startHadoop 正常部署 Hadoop 集群的正常部署并启动。 主节点上进行 :start-all.sh 1.HBase 的获取 一定…

AUTOSAR_SWS_LogAndTrace文档中文翻译

1 Introduction and functional overview 本规范规定了AUTOSAR自适应平台日志和跟踪的功能。 日志和跟踪为AA提供接口,以便将日志信息转发到通信总线、控制台或文件系统。 提供的每个日志记录信息都有自己的严重性级别。对于每个严重级别,都提供了一个单…

风速预测(三)EMD-LSTM-Attention模型

目录 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集,按照8:2划分训练集和测试集 2.2 设置滑动窗口大小为7,制作数据集 3 基于Pytorch的EMD-LSTM-Attention模型预测 3.1 数据加载&#…

【数据结构】什么是堆?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 堆的概念及结构 堆的定义如下: n个元素的序列{k1,k2,...,kn}当且仅当满足以下关系时,称之为堆. 或 把这个序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个…

贪心算法:K次取反后最大化的数组和 加油站 分发糖果

1005.K次取反后最大化的数组和 思路: 如果数组中有负数的话,优先把较小那些的负数取反变成整数;如果没有负数了,而k的次数还有剩,只对最小的正数反复做取反,即使这个数最后变成了负数,也是能取…

HarmonyOS使用Web组件

Web组件的使用 1 概述 相信大家都遇到过这样的场景,有时候我们点击应用的页面,会跳转到一个类似浏览器加载的页面,加载完成后,才显示这个页面的具体内容,这个加载和显示网页的过程通常都是浏览器的任务。 ArkUI为我…

ARCGIS 中使用 ChatGPT 的 5 种方式

ChatGPT 一度成为最热门的话题。什么是 ChatGPT?谁能比 ChatGPT 本身更好地回答这个问题呢?我们要求它写一个关于 ChatGPT 是什么的简短描述,这是它的回应: ChatGPT 是一个聊天机器人,使用 OpenAI 开发的 GPT-3 语言模…

完全平方数 C语言xdoj49

问题描述 若一个整数n能表示成某个整数m的平方的形式&#xff0c;则称这个数为完全平方数。写一个程序判断输入的整数是不是完全平方数。 输入说明 输入数据为一个整数n&#xff0c;0<n<10000000。 输出说明 如果n是完全平方数&#xff0c;则输出构成这个完全…

扩展操作码指令格式

指令 操作码地址码 \quad \quad 判断几地址指令 开头4位不是全1, 则表示是三地址指令 开头4位全1, 后面4位不是全1, 则为二地址指令 前面12全1, 则为零地址指令 当然啦这只是一种扩展方法, 如果想扩展更多, 可以将1110留作扩展操作码 较短的操作码, 我们对它的译码和分析的时间…

@ApiImplicitParam注解使用说明

ApiImplicitParam注解使用说明 ApiImplicitParam是Swagger注解之一&#xff0c;用于描述接口中的参数信息。它可以用于方法上的单个参数或者方法上的参数列表。具体来说&#xff0c;它可以描述参数的名称、数据类型、是否必填、参数的具体意义等信息。 下面是一个使用ApiImpl…

让艺术触手可及!实时云渲染赋能真浪数字艺术馆首展

2023年5月18日&#xff0c;由真浪数字艺术和EZVR联合打造的真浪数字艺术馆首展–「破界交织」让艺术更自由&#xff0c;正式与大家相见。此次展览分为五个主题展馆&#xff0c;汇聚了来自全球各领域的19位青年数字艺术家一同探讨虚实共生、人机共生和万物共生的艺术创作。 真浪…

发布 Whatsonchain 上的 BSV20 插件

我们发布了 whatsonchain 上的 BSV20 插件来验证 BSV20 代币。 对于任何交易&#xff0c;whatsonchain 都可以通过以下网址打开&#xff1a; https://whatsonchain.com/tx/{hash}我们使用此 bsv20 v21 交易 打开 Whatsonchain 。 打开whatsonchain后你会看到BSV20插件&#x…

VLAN协议与单臂路由

文章目录 VLAN协议与单臂路由一、VLAN的概念及优势1、分割广播域2、VLAN的优势3、VLAN数据帧 二、VLAN的种类1、静态VLAN2、动态VLAN3、VLAN划分方式 三、静态VLAN的配置1、VLAN的范围2、静态VLAN的配置2.1 配置静态VLAN的步骤2.2 vlan三种端口类型举例&#xff1a;配置静态VLA…

Vue学习计划-Vue2--VueCLi(一)准备工作,安装node、vuecli

1. 安装node 网址&#xff1a;https://nodejs.org/en下载LTS版本表示长期支持版本说明&#xff1a; node是一个基于Chrome V8引擎的javascript运行环境,让JavaScript 运行在服务端的开发平台vuecli创建的项目必须运行在node环境中&#xff0c;npm为node自带包管理工具&#xf…

java 执行linux 命令

文章目录 前言一、linux命令执行二、使用步骤三、踩坑 前言 java 执行linux 命令&#xff1b; 本文模拟复制linux文件到指定文件夹后打zip包后返回zip名称&#xff0c;提供给下载接口下载zip&#xff1b; 一、linux命令执行 linux命令执行Process process Runtime.getRunti…

FlieZilla服务器配置与数据访问、传输

概述 手机apk当初服务器&#xff0c;PC端访问手机端的数据&#xff0c;再没有数据线的情况下&#xff0c;非常方便。希望各位同仁搞起来&#xff0c;在此做个笔录。 安装包下载链接&#xff1a;https://download.csdn.net/download/qq_36075612/88577274 一、下载安装包&…

​Linux Ubuntu环境下安装配置Docker 和Docker、compose、mysql、中文版portainer

​Linux Ubuntu环境下安装配置Docker 和Docker、compose、mysql、中文版portainer 这篇文章探讨了在Linux Ubuntu环境下安装和配置Docker及其相关工具的过程。首先介绍了Docker的基本概念&#xff0c;然后详细讲解了在Ubuntu系统上的安装步骤。随后&#xff0c;文章涵盖了Dock…

【JUC】二十八、synchronized锁升级之偏向锁

文章目录 1、偏向锁出现的背景2、从共享对象的内存结构看偏向锁3、偏向锁的持有4、启动偏向锁5、sleep暂停来启动偏向锁6、偏向锁的撤销7、总体流程8、SinceJava15 偏向锁的废除 1、偏向锁出现的背景 如果一个线程连续几次抢到锁&#xff0c;仍然重复加锁解锁&#xff0c;就会…

如何使用 Redis 快速实现分布式锁?

本文我们来讨论如何使用 Redis 快速实现分布式锁。 分布式锁有很多种解决方案&#xff0c;前面简单介绍过&#xff0c;Redis 可以通过 set key 方式来实现分布式锁&#xff0c;但实际情况要更加复杂&#xff0c;比如如何确保临界资源的串行执行&#xff0c;如何及时释放&#…