接口/UI自动化面试题

一、UI自动化

1.1、接口和UI自动化有多少用例?

  • 回答策略:根据接口设定用例,100个接口,自动化case在1500-2000左右。结合自身的项目,回答覆盖的主功能流程。

  • 示例:

    • 接口自动化的测试case一般需要根据接口数量来确定,我当时将主功能流程接口实现了自动化,大概将近有80个的接口,case数量将近1000个;主要涵盖了账户体系管理、合约簿记、出入金管理、流水录入、资金清算、生成报表等核心业务流。通过数据驱动(YAML文件)实现参数化。

    • UI自动化一般根据业务功能进行设计,实现近200个用例自动化,涵盖主回归流程测试。主要需要考虑其底层的稳定以及后续维护成本,通常是30%的自动化覆盖率。

1.2、什么是POM模式

  • 概述:POM全称叫page object model,页面对象模型。意思是把一个页面当成一个对象,页面的元素就是对象的属性,页面的操作就是对象的行为(方法)。一般情况分三层:基础封装层BasePage、PO页面对象层、TestCase测试用例层。

    我这里是采用PO的设计模式,大致分成了基础驱动层用于元素的定位和浏览器的操控;第二层是页面对象层,将整个页面的元素和功能进行封装;第三个是业务逻辑层,是通过组合不同页面中的功能实现用例中的业务流程;第四个数据管理层管理测试数据;用例执行层,用于用例的执行、断言、日志和报告生成等。
    
  • 优点

    • 使得用例更简单、更清晰,把很多业务操作封装到PO页面对象层,用例只需要调用即可。

    • 如果页面有变动,只需要修改PO页面对象层的属性即,增加代码的可维护性。

1.3、如何提高UI自动化的稳定性

  • 尽量使用相对路径定位元素

  • 定位元素使用封装显示等待,增加条件

  • 用例和用例之间尽量避免依赖

  • 加入用例失败重跑机制

  • 自动化测试的环境区分其他环境

1.4、谈谈印象最深的bug

1.4.1、脚本定位问题

在编写自动化脚本时,遇到过像浏览器更新后,自动化测试用例会出现误报的问题。

解决方式:1. 针对这个问题,我首先是思考影响范围,比如其它浏览器是否有类似的情况存在,并对比不同浏览器原因是否都一致;2. 当我将一些影响因素排除之后,自己就通过网上查阅官方的文档,学习和借鉴其他人的一些更改方法;尝试去调整代码的定位策略,如元素属性和层
级关系,尽可能用相对路径进行定位;以及更改了等待方式,通过在显示等待中加了一些判定条件;增加用例失败重跑机制等多种方式去规避这类问题,最终
问题得到了解决,并且我在后续会定期的去更新测试代码,保证稳定性。

1.4.2、对比工具性能问题

在开发报表对比工具时,遇到了数据量大导致处理慢和数据格式不一致的问题。

解决方式:1. 首先,通过使用Pandas库中的chunksize分块读取数据,避免内存过载,同时利用Pandas的向量化操作和分组聚合功能,提高处理能力;并行计算:
利用Dask加速计算;数据库优化:添加索引的方式,减少查询时间。2.  另外,针对格式问题,读取数据后 统一设置相关列的数据格式。通过这些方法,解决了上述的问题。

1.5、遇到的挑战

发现整体版本流程自动化覆盖率很低,开发提测质量差,严重影响版本交付进度。

解决方法:1. 首先,我通过优先整理主功能流程,将回归用例实现自动化全覆盖,在开发脚本的过程中,我也在思考后续的用例如何便于维护,因此我通过引入PO
设计模式,并结合产品业务,大致分成了元素定位层、页面操作层、业务逻辑层、数据管理层和用例执行层;此外,针对开发提测质量差的问题,我通过
Jenkins集成了自动化打包与用例执行自动化,在开发代码提测后,会自动进行打包,并执行主功能用例,如果执行不通过,则代码打回,将报错的截图和日志发送给开发。2.  需要将相关的依赖包批量移动和替换到指定的位置。3.  正则表达式+递归搜索的方式,筛选指定的路径以及文件名称解决了这个问题。

二、接口自动化

2.1、接口关联是如何处理的

通过一个yaml文件独立保存所有接口提取的变量,并且这个变量在执行用例之前清空;(truncat())

  1. 在测试用例的yaml文件里通过一个关键字extract提取标量:json或者正则表达式提取

  2. 在下一个接口通过{{}}或${}的(热加载)方式进行获取。

    热加载:代码执行过程中,动态调用Python中的方法达到或得到动态参数的目的。
    

2.2、requests中的Session会话管理的作用是什么

  1. 首先,因为很多接口都需要cookie和session来记录登录状态,并且必须要有这个登录状态才可以请求成功;

  2. Requests中的Session会话管理的作用就是自动记录cookie和Session的登录状态,不需要再手动去记录。

2.3、接口自动化测试中的断言是如何实现的

  1. 首先,把断言封装成一个方法,这个方法会读取yaml文件里的validate字段,包括断言的方式和数据;

  2. 然后,在后台实现了断言,并体现在报告中,不需要再写任何的Python代码。

2.4、数据驱动和关键字驱动的理解

  • 数据驱动概念:从数据文件(Excel、CSV、数据库)读取输入、输出数据,然后通过变量传入自动化用例中,测试数据都是在数据文件中,通过修改数据达到自动化用例执行的方式叫做数据驱动;

  • 关键字驱动:是从面向对像的思维出发,将同样的业务逻辑封装成一个函数,不同关键字实现不同的业务逻辑,这样业务逻辑就可以通过调用关键字来实现业务功能。

2.5、接口测试过程中遇到过哪些bug

常规Bug:接口没有实现、没有按照接口文档返回结果、接口报错。

如:我在测试资金账户接口时,其中当前名义本金参数,我改成了负值也能创建成功。

2.6、怎么校验结果是否正确

  • 状态码校验:验证返回的状态码为200。

  • 业务校验:

    • 错误码为0。

    • 当接口响应报文比较短,比较固定情况下,校验完全一致。

    • 响应报文比较长,校验核心最核心的业务信息。

    • 响应报文比较复杂,多层级XML或JSON格式,通过Xpath、正则表达式的匹配方式获取关键字的业务节点进行校验。

    • 查询数据库校验或者通过其它接口进行校验。

2.7、碰见过哪些异常,用到了哪些Python库

  • 异常

    • NoSuchElementException 没有该元素

    • NoSuchAttributeException 没有该属性

    • NoSuchElementException 没有如此框架

    • ElementNotVisibleException 元素不可见异常

    • ElementNotSelectException 元素不可选

  • python库

    • webdriver、os、time、json、request、pytest、pymysql

2.8、报表对比工具实现逻辑

  1. 数据接入

    1. 通过使用pandas解析报表(Excel/CSV)内容;

    2. 通过pyodbc连接数据库,并查询相关的数据库表字段;

  2. 校验规则设计

    1. 静态校验:字段是否为空、数据类型(浮点、保留位数);

    2. 业务逻辑校验:将报表的字段与数据库查询的字段根据业务逻辑进行比较校验

  3. 结果通知

    1. 通过发送邮件的方式告知相关的执行结果。
  4. 遇到的问题:性能处理

    1. 分块处理:chunksize读取报表数据,避免内存溢出

    2. 并行计算:利用Dask加速计算

    3. 数据库优化:添加索引的方式,减少查询时间

2.9、如何开展接口自动化测试(思维)

  1. 目的:为什么要做接口测试?

    1. 提效。人工、持续集成、交付
  2. 首先,我需要自动化的可行性分析,自动化率可以实现到什么样的程度。

  3. 其次就是需要选择合适的测试工具,做一个小的demo进行演示。

  4. 第三就是制定详细的测试计划,包含测试环境、测试范围、测试用例设计,相对应的时间节点等;

  5. 第四就是用例的设计,我需要从新建波形到最后生成可执行文件,详细测试相关的文件是否符合标准规范。

  6. 第五根据业务对自动化框架进行分层便于后续的脚本更新和维护。

    1. 我这里是采用PO的设计模式,大致分成了基础驱动层用于元素的定位和浏览器的操控;

    2. 第二层是页面对象层,将整个页面的元素和功能进行封装;

    3. 第三个是业务逻辑层,是通过组合不同页面中的功能实现用例中的业务流程;

    4. 第四个数据管理层管理测试数据;

    5. 用例执行层,用于用例的执行、断言、日志和报告生成等。

  7. 再考虑引入Jenkins的方式持续集成和定时运行。

  8. 将自动化流程化,出具相关的使用说明文档和规范文档。

  9. 后续持续不断完善框架功能。

  10. 比如在军工通信项目中,我对波形建模流程测试时,首先是确保页面元素没有问题,通过使用边界值、因果图法的测试方法测试输入值是否有异常;其次再对实际的接口进行调用测试,确保后台功能接口能够正常传参返参;之后再根据需求,设复杂的测试业务场景,通过mysql后台查询相关数据,确保实际结果与预期结果统一;

  11. 如果出现问题时,通过截图的方式,将报错页面以及后台报错日志通过加上时间戳的方式保存在本地,当时我也通过jenkins将截图和日志归档在构建完的产物中,便于后续的历史回溯。

2.10、对于加密接口、签名接口如何进行测试

  • 加密接口:在调用接口时,需要清楚接口的方式是什么。如:
    • 对称式的加密方式(私钥加密):Base64。
    • 非对称的加密方式(双钥加密):RSA加密方式。
    • 只加密不解密:MD5、SHA1。
    • 自定义加密规则:混合加密方式。
  • 清楚加密规则后,在请求接口之前,先对参数做对应的加密之后再发送请求。单一加密方式,postman和Jmeter有些支持。Poatman使用JavaScript脚本实现,Jmeter使用beanshell中的java代码实现。

2.11、依赖于第三方数据的接口如何进行测试

可以通过Postman搭建Mock服务,但是Postman的Mock服务由访问次数限制,一天只能访问1000次。

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

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

相关文章

使用Docker部署RabbitMQ

第一步:安装 RabbitMQ # 1. 拉取镜像 docker pull rabbitmq:3.12.0-management# 2. 启动容器(开放端口 数据持久化) docker run -d \--nameshare_rabbitmq \-p 5672:5672 \ # AMQP 协议端口-p 15672:15672 \ # 管理界面端口…

2.基于多线程的TCP服务器实现

目录 1. 简单分析之前的代码 2. 多线程服务器设计 2.1 C11线程的基本使用 2.2 服务器主体逻辑 3. 错误处理的封装 4. 完整的代码实现 客户端代码(client.cpp) 服务器代码(server.cpp) 5. 运行方式 在我们预想中&#xff…

Python Web 框架 Django、Flask 和 FastAPI 对比

在探索 Python Web 框架时,Django、Flask 和 FastAPI 无疑是最常被提及的名字。根据我们最新的 Python 开发者调查,这三大框架继续稳坐后端 Web 开发的热门宝座。它们均为开源项目,并且与 Python 的最新版本无缝兼容。然而,面对不…

SQL Server数据库表删除分区

在 SQL Server 中删除分区并将表恢复到非分区状态,需按以下步骤操作: 一、合并所有分区 1. 检查现有分区结构 首先确认表的分区方案和分区函数: -- 查看分区方案 SELECT * FROM sys.partition_schemes;-- 查看分区函数 SELECT * FROM sys…

信息安全和病毒防护——安全协议关于SSL和TLS协议的补充说明

文章目录 SSL与TLS的关系SSL与TLS的核心区别SSL/TLS的典型应用安全建议总结SSL与TLS的关系 SSL(Secure Sockets Layer,安全套接层)和TLS(Transport Layer Security,传输层安全)是同一技术体系的演进版本,而非完全独立的协议。其发展历程如下: SSL 1.0(1994):未公开…

[原创](Modern C++)现代C++的关键性概念: 多维数组的下标引用.

[作者] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共24年] 职业生涯: 22年 开发语言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 开发工具: Visual Studio、Delphi、XCode、C …

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.3实战案例:在笔记本电脑上运行轻量级LLM

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 实战案例:在笔记本电脑上运行轻量级LLM2.2.3 模型架构设计与实现1. 环境与工具准备1.1 硬件要求1.2 软件栈选择2. 轻量级模型架构设计2.1 模型参数配置2.2 关键技术优化3. 实战流程3.1 数据准备流程3.2…

工业软件的破局与重构:从技术依赖到自主创新的未来路径

工业软件作为现代工业的“神经与大脑”,不仅是制造业数字化转型的核心工具,更是国家工业竞争力的战略制高点。近年来,中国工业软件市场在政策驱动与技术迭代中迅猛发展,但核心技术受制于人的困境仍待突破。如何实现从“跟跑”到“…

歌曲缓存相关功能

1. 核心组件 MusicCacheManager (音乐缓存管理器) 单例模式:确保全局只有一个实例,方便管理。 private static var instance: MusicCacheManager?static func shared() -> MusicCacheManager {if instance nil {instance MusicCacheManager()}ret…

解决 Ubuntu/Debian 中 `apt-get` 报错 “无法获得锁 /var/lib/dpkg/lock“

问题描述 在 Ubuntu/Debian 系统中运行 sudo apt-get install 或 sudo apt update 时,遇到以下错误: E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它&#…

阿里开源的免费数据集成工具——DataX

企业里真实的数据流转是什么样子的呢? 左侧描述了一个企业真实的样子,我们总是需要把数据从一个地方搬到另一个地方,最后就是搬来搬去搬成了一张张解不开的网。 右侧则表达了使用DataX为中心实现数据的同步。 什么是DataX DataX是一个异构…

26考研——图_图的遍历(6)

408答疑 文章目录 三、图的遍历图的遍历概述图的遍历算法的重要性图的遍历与树的遍历的区别图的遍历过程中的注意事项避免重复访问遍历算法的分类遍历结果的不唯一性 广度优先搜索广度优先搜索(BFS)概述BFS 的特点广度优先遍历的过程示例图遍历过程 BFS …

前端解决方案:实现网页截图并导出PDF功能

前端解决方案:实现网页截图并导出PDF功能 在前端开发中,我们经常会遇到需要将网页内容导出为PDF的需求。本文将以一个准考证预览和导出的例子,带你一步步实现这个功能。我们会处理包括跨域图片、Canvas绘图、PDF生成等多个技术要点。 一、基…

【MySQL】表操作

表操作 一、创建表 1、语句2、语句介绍3、注意事项4、介绍5、示例 二、查看表结构 1、语句2、介绍3、返回的信息4、示例 三、添加字段 1、语句2、语句介绍3、示例 四、修改 1、语句2、语句介绍3、示例 五、删除 1、语句2、示例 六、修改表名 1、语句2、语句介绍3、示例 七、删…

[新闻.AI]国产大模型新突破:阿里开源 Qwen2.5-VL-32B 与 DeepSeek 升级 V3 模型

(本文借助 Deepseek-R1 协助生成) 在2025年3月24日至25日的短短24小时内,中国AI领域迎来两大重磅开源更新:阿里通义千问团队发布多模态大模型Qwen2.5-VL-32B-Instruct,而DeepSeek则推出编程能力大幅提升的DeepSeek-V3…

深入剖析C# List<T>的底层实现与性能奥秘

一、动态数组的本质:List的架构设计 在C#的集合类型体系中,List作为最常用的线性数据结构,其核心实现基于动态数组机制。与传统数组不同,List通过智能的容量管理策略,在保持数组高速随机访问优势的同时,突…

【单元测试】

一、框架 不同的编程语言有不同的测试框架,以下是一些常见的测试框架: 1)Java:JUnit、TestNG2)Python:unittest、pytest3)JavaScript:Jest、Mocha4)C#:NUni…

机器学习——XGBoost

XGBoost(极度梯度提升树,eXtreme Gradient Boosting)是基于GBDT的优化模型,其最大特性在于对GBDT的损失函数展开到二阶导数,使得其梯度提升树模型更接近其真实损失 其XGBoost分类树拟合和预测方法的基本思路为: 遍历所有的树&…

响应“一机两用”政策 ,实现政务外网安全

在数字化办公的浪潮下,企业与政务机构面临着既要保障数据安全,又要高效访问互联网的双重需求。“一机两用”成为解决这一难题的关键。 政策驱动,需求迫切 随着《网络安全法》《数据安全法》等法律法规的相继出台,网络安全防护的要…

【后端】【Django】Django DRF API 单元测试完整方案(基于 `TestCase`)

Django DRF API 单元测试完整方案(基于 TestCase) 一、方案概述 使用 django.test.TestCase 和 rest_framework.test.APIClient 进行 API 单元测试,确保 API 正确性、权限控制、数据返回格式、业务逻辑 等。 二、基本步骤 使用 setUp() 初始…