UI测试与API测试的差异(ui和软件测试)

之前的文章介绍了如何安装UI测试框架, 如何展示好看的报告, 以及好用的定位方法. 但是想要正确使用UI框架进行测试还远远不够. UI的测试有很多与API测试不同的地方, 需要我们特殊对待. 本文以此为出发点, 简单谈谈个人看法.

UI测试与API测试, 最主要的区别它是一个端到端的测试用例. 因此决定了, 它运行速度慢, 操作路径长, 需要兜底API测试不能覆盖的场景.

运行速度慢

由于UI是完整地端到端用例, 除API的响应等待时间还增加了页面渲染的时间. 因此, 我们在考虑写自动化测试用例时候, 对于数据校验优先使用API测试来完成. UI测试用例主要是覆盖页面的js逻辑为主, 校验各个页面是否正常工作, 交互是否有问题等等, 辅以一些简单的跨页面的数据对比校验.

操作路径长

众所周知, 自动化用例需要重复运行, 并且基本上要求相互独立. 因而在开发自动化用例过程中, 需要编写完备的数据准备以及数据清理步骤. 所以会导致ui自动化整体操作路径会很长. 这样极大增加了程序不稳定的可能性.

操作路径长的第二个问题是, UI测试的校验点跟测试编写人员的经验有关. 有时候在一个很长的操作路径的某处出了问题, 仅仅看最后的截图是不足以找到问题的根源, 但是又没有像接口测试那样, 借助接口返回来判断是哪一步出了问题.

所以基本上所有的UI测试框架, 都会提供截图和录屏等相关的功能. 例如Robotframework+Playwright 框架, 截图是默认启用的, 如果我们想要开启录屏功能, 只需要指定一下视频保存的地址. 这样所有打开页面的关键词的日志下面, 可以看到相关录屏, 方便我们排查到底是哪一步开始出现了问题.

New Context  recordVideo={"dir": "${OUTPUT_DIR}/video"} 

兜底API测试

API测试毕竟是针对接口操作的校验, 它不能覆盖到前端js的代码. 因此有很多场景我们只能使用UI测试来校验.

  • 场景一 下载文件

下载也是一个非常常见的端到端用例, 如何通过Robotframework+Playwright来测试这个场景呢.

首先还是要开启下载功能

New Context  acceptDownloads=True

其次就开始进行页面操作, 等待文件下载完成, 并校验相关文件是否能在文件系统中找到.

${dl_promise}   Promise To Wait For Download     ${OUTPUT_DIR}/browser/${file_name}
点击进行下载
Wait For  ${dl_promise}
File Should Exist    ${OUTPUT_DIR}/browser/${file_name}
  • 场景二 在一个下拉列表, dom不是马上把所有数据都加载进来, 而是在用户滚动侧边栏来逐步加载数据.

这个场景可以利用 Scroll By 这个关键词, 它接受两个参数, 滚动条所在的dom元素, 以及滚动的像素值, 可以指定是横向也可以是纵向. 由于元素是动态生成的, 不知道要滚动到哪才能生成, 我在这里使用了一个递归方法, 直到最后找到了这个元素为止.

滚动查找元素
   [Arguments]    ${scroll_holder}    ${element}
   ${status}    Get Element States     ${element}
   Run Keyword If   not 'visible' in ${status}    Run Keywords    Scroll By   ${scroll_holder}   vertical=70   AND  滚动查找元素   ${scroll_holder}    ${element}

“天生我材必有用”, 既然现在既有API测试框架, 也有UI测试框架, 就有它们存在的价值. 重要的是, 作为测试开发人员, 如何根据实际场景来判断采用那一种方式去实现.

原文链接:,转发请注明来源!