当前位置: 首页 > article >正文

接口/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.kler.cn/a/610855.html

相关文章:

  • 力扣hot100_二分查找
  • 在线问卷调查|在线问卷调查系统|基于Spring Boot的在线问卷调查系统的设计与实现(源码+数据库+文档)
  • node-red dashboard
  • 在 ASP .NET Core 9.0 中使用 Scalar 创建漂亮的 API 文档
  • Android14 原生PackageInstaller安装某些apk报错问题
  • Qt的文件操作
  • MySQL无法链接
  • Oracle 数据库通过exp/imp工具迁移指定数据表
  • WordPress 代码高亮插件 io code highlight
  • 推荐一款好看的 vue3 后台模板
  • 【Unity3D实现UI轮播效果】
  • Spring Boot 自定义 Starter 组件的技术指南
  • 通过按键控制stm32最小系统板上LED的亮灭状态
  • 全文 - MLIR Toy Tutorial Chapter 1: Toy Language and AST
  • CAT1模块 EC800M HTTP 使用后续记录
  • PSA方法计算器(PSA Method Calculator): 鼠标完美灵敏度测试网站
  • 【计算机网络】计算机网络协议、接口与服务全面解析——结合生活化案例与图文详解
  • Jmeter:常用线程组设置策略
  • Axure RP9.0 教程:左侧菜单列表导航 ( 点击父级菜单,子菜单自动收缩或展开)【响应式的菜单导航】
  • 基于人工智能的扫阅卷和数据分析服务需求文档