2024年阿里7年经验之谈 —— 如何实现前端项目的自动化测试?,2024年最新Github标星25K+超火的软件测试实战项目


大量网络学习资料存在,但若学到的知识缺乏系统性,则当遇到问题时只是蜻蜓点水般处理,并未能进行深入研究,则难以实现真正的技术突破。
一个人可以奔跑得很快,但是一群人则能够共同迈开更加稳健的步伐!无论你是正在从事IT行业的资深从业者,还是对这一领域充满热情的新手,我们始终欢迎你的加入!在这里,你可以参与技术交流会、获取丰富的学习资源、分享职场趣事、享受内部推荐带来的便利以及获得专业的面试辅导,让我们携手共进,共同成长吧!
优势2:提高测试覆盖率。
UI自动化测试能够涵盖应用程序或网站的所有各模块的功能界面,并通过系统性的测试流程保证所有功能模块均被成功测试。该方法不仅能够有效提升整体的测试覆盖率,还特别注重降低未被发现缺陷的可能性。
优势3:提高测试一致性。
UI自动化测试能够保证在不同平台、浏览器或设备上实现高度一致性,并最大限度地降低人为干预的影响。这将显著提升测试的一致性和可靠性水平。
优势4:提高软件质量。
通过UI自动化测试有助于发现并纠正应用程序或网站中的问题或漏洞,并提升系统的可靠性和稳定性。此外,这将降低潜在风险的暴露机会,并最终减少在正式发布阶段出现的故障数量。
虽然在实际应用中看似完美无缺,在实战中却像是一朵"带刺的玫瑰"
二、UI自动化实践中会遇到什么难题?
有人质疑UI自动化的作用,并认为它并未带来实质性的提升。其主要原因是由于在实际应用中会遇到诸多技术难题而导致最终无法实现理想效果。当前UI自动化测试面临着以下诸多挑战:
1.UI自动化测试的投入产出比低。
为了获得预期效果,在前期需投入大量资源用于脚本开发;然而,在实际应用中往往达不到预期效果,则可能导致中途放弃。
2.保障脚本的维护是个大问题。
项目经过频繁迭代后,在一定程度上影响了前端页面更新频率加快的问题。
为了应对这一挑战,在确保维护工作的顺利进行的同时需要对相应的前端代码进行持续性的优化和调整。
3.UI自动化测试的稳定性也是个挑战。
在脚本执行过程中经常会遭遇不同寻常的情况,在确保脚本稳定这项任务上确实存在诸多挑战。
重点
重点
重点
优化1:如何保障效率和效果的比例? 很多人在进行UI自动化测试时缺乏明确的规划,在没有弄清楚具体流程的情况下就开始选择某个框架进行操作,在半数左右的时间内就会遇到各种问题进而导致项目的进度严重滞后
在启动之前,请您做好规划工作,并明确目标方向。对于正在进行或计划进行的新起动型UI自动化测试项目而言,在启动之前,请您可以选择一个框架作为基础,并选定一个典型业务流程作为实践案例。完成开发任务后,则应着重进行回归测试,并以观察实际运行效果为目标评估投入的时间与人力成本等各项指标数据。
在优化方案2中,请确保对剧本进行持续更新以应对项目的不断更迭需求;因此,在编写完成后必须定期更新以保持其有效性
基于这个事实,在UI自动化领域中我们可以通过减少修改的次数来实现优化效果;其中使用较为广泛的主要采用打包方式来进行功能模块整合与管理。
Page Object(简称PO)是一种常见术语,在前端开发中指代将每个页面封装成一个实例对象。具体来说即是将前端项目中的每个页面元素都被赋些建模属性,并通过绑定的方法来实现相应功能操作。
将内容进行打包后,在任何情况下(不管后续页面如何调整),我们只需改动一处代码即可实现功能的大规模优化。显著地提高了维护效率。

PO模式是自动化测试项目开发实践的最佳设计模式之一
优化3:如何确保脚本运行的稳定性? 在执行UI自动化脚本时可能会遇到多种问题,请注意以下几种常见情况: 启动过程中耗时较长 加载速度较慢 部分图像无法显示等情况难以预料
除了现有的多种显式或隐式等待处理方法之外,在对原始API进行封装时也可以采用更加灵活的方式进行处理。例如,在常见的Web应用开发中使用Selenium框架时会遇到需要 waiting for element出现的情况为了确保其正常工作 除了传统的显式等待方式外 还可以通过循环机制实现自动刷新功能 即最多等待三次 在每次尝试失败后自动重试并刷新等待机制
比如封装一个“等待元素”出现,确保可以点击的方法,如下所示:
def element_click_wait(self, located_type, located_key, assert_condition=None, message="执行点击超时",time_out=10, refresh=False):
"""
【适用于页面跳转时等待元素出现,确保可以点击的场景】
等待1个元素点击是否正常,并验证点击是否成功,每隔一段时间轮询点击1次,直到超时抛出异常为止
@:param located_type 定位方式(8种:id name class tag link plink xpath css)
@:param located_key 定位关键字
@:param assert_condition 验证点击是否完成的断言条件语句【默认不验证点击是否成功】
@:param message 点击失败提示信息
@:param time_out 等待时长,默认为10秒
@:param refresh 刷新标志,如果为True,则在等待超时后,刷新页面,重新再执行一轮等待执行(相当于刷新后重新执行一次)
如果是False,则不执行刷新,直接超时报错
"""
driver = self.driver
is_type_true = 0 # 用户判断定位方式参数是否正确
for i in range(int(time_out)*2): # 循环次数为配置的2倍,以便处理刷新重试的情景
try:
time.sleep(1)
if located_type == "id":
driver.find_element_by_id(located_key).click()
elif located_type == "name":
driver.find_element_by_name(located_key).click()
elif located_type == "class":
driver.find_element_by_class_name(located_key).click()
elif located_type == "tag":
driver.find_element_by_tag_name(located_key).click()
elif located_type == "link":
driver.find_element_by_link_text(located_key).click()
elif located_type == "plink":
driver.find_element_by_partial_link_text(located_key).click()
elif located_type == "xpath":
driver.find_element_by_xpath(located_key).click()
elif located_type == "css":
driver.find_element_by_css_selector(located_key).click()
else:
is_type_true = 1
except:
if i == (int(time_out)-1): # 第1次循环到点判断
if refresh: # 执行刷新后重新再执行1轮
refresh = False
self.element_refresh_wait() # 刷新页面
![img]()
![img]()
![img]()
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!** **由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新** **[需要这份系统化的资料的朋友,可以戳这里获取]()**
升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!** **由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新** **[需要这份系统化的资料的朋友,可以戳这里获取]()**
