javascript - 具有许多断言的赛普拉斯测试的最佳实践
问题描述
我正在用 Cypress 编写自动化测试,但遇到了一个问题。让我们看下面的例子:
要执行我的测试,我需要登录。请注意,身份验证过程然后显示页面大约需要 5-6 秒。
加载页面后,我想确保一些主要的 UI 元素存在并且处于正确的状态,例如:
- 检查
<table>
元素、其列名及其顺序 - 检查表过滤器/搜索,并确保它们都是空的
- 确保分页可用
- 等等
因为所有这些测试都是简单的观察,完全没有交互,它们不会相互交互/干扰。这意味着我可以编写一个it()
测试来检查所有内容。但是,如果我这样做,我的测试将是巨大的(比如 100 多行)
另一种方法是将这些测试拆分为更小的测试,以使它们更具可读性。但是,这意味着每次测试我都必须登录,这大大增加了执行测试所需的时间
关于哪种方法更好的想法?
- 一项重大测试,因为“没有影响的同一页面”
- 更小的测试以获得更好的可读性但更长的运行时间
解决方案
因为所有这些测试都是简单的观察,完全没有交互,它们不会相互交互/干扰。这意味着我可以编写一个 it() 测试来检查所有内容。但是,如果我这样做,我的测试将是巨大的(比如 100 多行)
嗯,不完全是。
最佳做法是(如您所述)让您的测试易于阅读。根据 testes 部分,将您的测试拆分(即使它只是简单的断言)分成单独的其、描述甚至文件有很大帮助。测试更具可读性,结果也更清晰。此外,每个测试都应该是独立的,不仅是在元素不相互干扰的情况下。
要编写更少的代码行,您可以使用数组,例如用于表格元素:
const columns = ['name', 'surname', 'value1', 'value2'];
columns.forEach(function(column) {
cy.contains('table', column).should('be.visible');
我会在设置中创建一个describe
并使用login()
函数,并为每个部分使用一对,以使测试易于阅读。before
it
推荐阅读
- python - 如何在 python csv 文件中排序(然后删除重复项)?
- docker - 如何将此 gitlab yml 文件重写为 docker 文件
- javascript - 防止 rxjs 主题完成
- c# - 我可以告诉外部函数从其本地函数内部返回吗?
- ruby-on-rails - 如何创建 CSV 并将其保存到 Rails 中的主机?
- python - 无法从 arduino 获取 gps 坐标以与 kivy mapview 绑定
- asp.net-mvc - IIS 从错误的位置读取.. 是吗?
- replication - Gerrit 3.0.4 如何删除已提交但复制失败的提交
- service-worker - 如果未访问,chrome 是否会删除离线内容?
- ios - IOS下OpenGL如何正确渲染广色域(Display p3)