跳到内容
新发行

对这个项目有疑问吗?注册一个免费的GitHub帐户以打开一个问题,并联系其维护者和社区。

单击“注册GitHub”,表示您同意我们的服务条款隐私声明。我们偶尔会向您发送与帐户相关的电子邮件。

已经在GitHub上了?登录到您的帐户

[实验]在e2e测试中使用REST API建立状态 #33414

已合并
将11个提交合并到
2021年8月12日

对话

凯文940726
复制链接
成员

@凯文940726 凯文940726 评论2021年7月14日

描述

使用REST API在e2e测试中建立/清除状态。

为什么?

我们的大多数e2e测试都需要在实际运行测试之前设置状态。我们目前的做法是使用木偶演员手动访问这些屏幕并单击这些按钮。它工作得很好,但也很耗时。在每次测试运行之前,我们必须访问几个屏幕并等待它们完成,这是几十个不必要的重复HTTP请求。我们应该做的是以编程方式构建状态以跳过这些步骤。由柏树推广(#参考-1,#参考-2),我们可以专注于需要测试的内容,并停止在手动构建状态上浪费时间。

好处是:

  • 更容易读/写测试。例如,因为我们不必在测试它们之间的交互之前插入100个不同的块。
  • 更快的测试。很明显,如果跳过一些步骤,我们将加快测试速度。

为什么选择REST API

起初,WP-CLI公司被认为是这份工作的最佳选择。然而,在一些任务中测试后,在运行一些基本任务时,它似乎太慢了。例如,运行一个简单的列表方法获取所有保存的小部件需要大约0.5到1秒的时间。事实上,所有命令运行至少需要0.5到1秒的时间。我不确定这是否是该框架的局限性,但这里的瓶颈似乎在当时是无法解决的。

下一个选项是使用REST API。与WP-CLI耗时1秒的任务相同,现在可以在100ms内完成。使用REST API的另一个好处是,我们在使用之前不需要安装任何东西。我们可以在任何WordPress实例上运行这些测试,只要它们支持REST API。

不过也有缺点。有些任务无法使用REST API完成,例如激活主题和插件。我们可能想使用WP-CLI公司或使用auth-cookie调用内部API。我仍然处于不同解决方案之间。

它是如何工作的

此PR尝试迁移小部件e2e测试中的一些任务以使用REST API,其中包括:

  1. 删除所有小部件
  2. 获取所有小部件
  3. 插入旧式小部件

我们可以重复使用@wordpress/api-回迁我们已经在前端使用的包,更稳定的学习曲线。api提取不过,它只支持浏览器环境。幸运的是,我们可以通过修补来解决这个问题窗口.fetch节点提取.

一些REST API也需要身份验证。解决方案是添加基本身份验证要启用的测试插件HTTP基本身份验证在每个RESTAPI端点上。此测试插件应仅在测试环境中使用。

然后,我们包装api获取在测试实用程序中使用身份验证令牌休息,它将两者结合以发出REST请求。最后,我们剩下的就是在测试中实现这些请求。它看起来像这样:

进口 { __实验性休息 作为 休息 }  “@wordpress/e2e-test-utils”;

等待 休息({ 路径以下为:“/wp/v2/widgets” }); //获取所有小部件。

还有一个批处理util我们可以用来发送批处理请求.

进口 { __实验批次 作为 批处理 }  “@wordpress/e2e-test-utils”;

等待 批处理(请求); //“requests”是一个请求数组。

结果

测验 大旅行箱 现在
自定义widgets.test.js 153秒 122秒
编辑-widgets.test.js 136秒 122秒

测试正在macOS上本地运行。然而,结果似乎在运行之间存在显著偏差。

这是如何测试的?

E2E测试应通过

更改的类型

新功能

检查清单:

  • 我的代码已经过测试。
  • 我的代码遵循WordPress代码风格。
  • 我的代码遵循可访问性标准。
  • 我已经用键盘和屏幕阅读器测试了我的更改。
  • 我的代码有适当的内联文档。
  • 如果合适的话,我已经包括了开发人员文档。
  • 我已经更新了所有受此PR中任何重构/重命名影响的React Native文件(请手动搜索所有*.native.js文件需要重命名或删除的术语的文件)。

@凯文940726 凯文940726补充[类型]技术原型 提供对想法的技术探索,作为可能的示例 [类型]自动测试 测试基础架构更改会影响端到端(E2E)和/或单元测试的执行。标签2021年7月14日
@github操作
复制链接

github-操作 机器人程序 评论2021年7月14日

尺寸变化:-1.22千字节(0%)

总大小:1.03 MB

文件名 大小 更改
build/block-editor/index.min.js 118千字节 +43亿(0%)
build/block-library/blocks/columns/editor-rtl.css 194亿 +5亿(+3%)
build/block-library/blocks/columns/editor.css 193亿 +5亿(+3%)
构建/块库/blocks/search/editor-rtl.css 165亿 -44亿(-21%) 🎉
build/block-library/blocks/search/editor.css 165亿 -44亿(-21%) 🎉
build/block-library/blocks/search/style-rtl.css 374亿 +6亿(+2%)
build/block-library/blocks/search/style.css 375亿 +3 B(+1%)
build/block-library/common-rtl.css 832亿 -458亿(-36%) 🎉
build/block-library/common.css 830亿 -458亿(-36%) 🎉
构建/块库/editor-rtl.css 9.38千字节 -505亿(-5%)
构建/块库/editor.css 9.37千字节 -502亿(-5%)
build/block-library/index.min.js 146千字节 +316亿(0%)
build/block-library/style-rtl.css 9.78千字节 -462亿(-5%)
build/block-library/style.css 9.79千字节 -462亿(-5%)
build/blocks/index.min.js 47千字节 +179亿(0%)
build/components/index.min.js 209千字节 +1千字节(0%)
build/components/style-rtl.css 15.7千字节 -16亿(0%)
build/components/style.css 15.8千字节 -17亿(0%)
build/edit-post/index.min.js 28.4千字节 +53亿(0%)
build/edit-site/index.min.js 25.8千字节 +134亿(+1%)
ℹ️查看未更改
文件名 大小
构建/a11y/index.min.js 931亿
build/admin清单/index.min.js 1.09千字节
build/annotations/index.min.js 2.7千字节
构建/api-fetch/index.min.js 2.19千字节
构建/auto/index.min.js 2.08千字节
build/blob/index.min.js 459亿
build/block-directory/index.min.js 6.21千字节
构建/块目录/样式-rtl.css 1.01千字节
构建/块目录/样式.css 1.01千字节
build/block-editor/style-rtl.css 13.9千字节
构建/块编辑器/样式.css 13.9千字节
build/block-library/blocks/archives/editor-rtl.css 61亿
build/block-library/blocks/archives/editor.css 60亿
build/block-library/blocks/archives/style-rtl.css 65亿
build/block-library/blocks/archives/style.css 65亿
build/block-library/blocks/audio/editor-rtl.css 58亿
build/block-library/blocks/audio/editor.css 58亿
build/block-library/blocks/audio/style-rtl.css 111亿
build/block-library/blocks/audio/style.css 111亿
构建/block-library/blocks/audio/theme-rtl.css 125亿
构建/block-library/blocks/audio/theme.css 125亿
build/block-library/blocks/block/editor-rtl.css 161亿
build/block-library/blocks/block/editor.css 161亿
build/block-library/blocks/button/editor-rtl.css 474亿
build/block-library/blocks/button/editor.css 474亿
build/block-library/blocks/button/style-rtl.css 605亿
构建/块库/blocks/button/style.css 604亿
build/block-library/blocks/buttons/editor-rtl.css 315亿
build/block-library/blocks/buttons/editor.css 315亿
build/block-library/blocks/buttons/style-rtl.css 370亿
build/block-library/blocks/buttons/style.css 370亿
build/block-library/blocks/calendar/style-rtl.css 207亿
build/block-library/blocks/calendar/style.css 207亿
build/block-library/blocks/categories/editor-rtl.css 84亿
build/block-library/blocks/categories/editor.css 83亿
build/block-library/blocks/categories/style-rtl.css 79亿
build/block-library/blocks/categories/style.css 79亿
build/block-library/blocks/code/style-rtl.css 90亿
build/block-library/blocks/code/style.css 90亿
build/block-library/blocks/code/theme-rtl.css 131亿
构建/block-library/blocks/code/theme.css 131亿
build/block-library/blocks/columns/style-rtl.css 474亿
build/block-library/blocks/columns/style.css 475亿
build/block-library/blocks/cover/editor-rtl.css 666磅
build/block-library/blocks/cover/editor.css 670亿
build/block-library/blocks/cover/style-rtl.css 1.23千字节
build/block-library/blocks/cover/style.css 1.23千字节
build/block-library/blocks/embed/editor-rtl.css 488亿
构建/块库/blocks/embed/editor.css 488亿
build/block-library/blocks/embed/style-rtl.css 400亿
build/block-library/blocks/embed/style.css 400亿
build/block-library/blocks/embed/theme-rtl.css 124亿
build/block-library/blocks/embed/theme.css 124亿
build/block-library/blocks/file/editor-rtl.css 300亿
build/block-library/blocks/file/editor.css 300亿
build/block-library/blocks/file/style-rtl.css 255亿
build/block-library/blocks/file/style.css 255亿
build/block-library/blocks/file/view.min.js 322亿
build/block-library/blocks/freeform/editor-rtl.css 2.44千字节
build/block-library/blocks/freeform/editor.css 2.44千字节
build/block-library/blocks/galletry/editor-rtl.css 707亿
build/block-library/blocks/galletry/editor.css 706亿
build/block-library/blocks/gallower/style-rtl.css 1.05千字节
build/block-library/blocks/gallower/style.css 1.05千字节
build/block-library/blocks/gallower/theme-rtl.css版本 122亿
build/block-library/blocks/gallery/主题.css 122亿
build/block-library/blocks/group/editor-rtl.css 159亿
build/block-library/blocks/group/editor.css 159亿
构建/块库/blocks/group/style-rtl.css 57亿
build/block-library/blocks/group/style.css 57亿
构建/块-库/块/组/主题-rtl.css 93亿
构建/块-库/块/组/主题.css 93亿
build/block-library/blocks/heading/editor-rtl.css 152亿
build/block-library/blocks/heading/editor.css 152亿
build/block-library/blocks/heading/style-rtl.css 76亿
build/block-library/blocks/heading/style.css 76亿
build/block-library/blocks/home-link/style-rtl.css 247亿
build/block-library/blocks/home-link/style.css 247亿
build/block-library/blocks/html/editor-rtl.css 283亿
build/block-library/blocks/html/editor.css 284亿
build/block-library/blocks/image/editor-rtl.css 728亿
build/block-library/blocks/image/editor.css 728亿
build/block-library/blocks/image/style-rtl.css 482亿
build/block-library/blocks/image/style.css 487亿
构建/block-library/blocks/image/theme-rtl.css 124亿
构建/block-library/blocks/image/theme.css 124亿
build/block-library/blocks/latest-comments/style-rtl.css 284亿
build/block-library/blocks/latest-comments/style.css 284亿
build/block-library/blocks/platest-posts/editor-rtl.css 137亿
build/block-library/blocks/platest-posts/editor.css 137亿
build/block-library/blocks/platest-posts/style-rtl.css 528磅
构建/块库/blocks/latest posts/style.css 527亿
build/block-library/blocks/list/style-rtl.css 63亿
build/block-library/blocks/list/style.css 63亿
build/block-library/blocks/media-text/editor-rtl.css 266亿
build/block-library/blocks/media-text/editor.css 263亿
build/block-library/blocks/media-text/style-rtl.css 488亿
build/block-library/blocks/media-text/style.css 485磅
build/block-library/blocks/more/editor-rtl.css 431亿
build/block-library/blocks/more/editor.css 431亿
build/block-library/blocks/navigation-link/editor-rtl.css 474亿
build/block-library/blocks/navigation-link/editor.css 474亿
build/block-library/blocks/navigation-link/style-rtl.css 94亿
build/block-library/blocks/navigation-link/style.css 94亿
build/block-library/blocks/navigation/editor-rtl.css 1.69千字节
build/block-library/blocks/navigation/editor.css 1.69千字节
build/block-library/blocks/navigation/style-rtl.css 1.65千字节
build/block-library/blocks/navigation/style.css 1.64千字节
构建/块库/blocks/navigation/view.min.js 2.52千字节
build/block-library/blocks/nextpage/editor-rtl.css 395亿
build/block-library/blocks/nextpage/editor.css 395亿
build/block-library/blocks/page-list/editor-rtl.css 310亿
build/block-library/blocks/page-list/editor.css 310亿
build/block-library/blocks/page-list/style-rtl.css 242亿
构建/块库/块/页列表/style.css 242磅
build/block-library/blocks/pragment/editor-rtl.css 157亿
build/block-library/blocks/pragment/editor.css 157亿
build/block-library/blocks/pragment/style-rtl.css 248亿
build/block-library/blocks/pragment/style.css 248亿
构建/块库/blocks/post author/editor-rtl.css 210亿
build/block-library/blocks/post-author/editor.css 210亿
build/block-library/blocks/post-author/style-rtl.css 182亿
build/block-library/blocks/post-author/style.css 181亿
build/block-library/blocks/post-comments-form/style-rtl.css 140亿
build/block-library/blocks/post-comments-form/style.css 140亿
build/block-library/blocks/post-comments/style-rtl.css 360亿
build/block-library/blocks/post-comments/style.css 359亿
build/block-library/blocks/post-content/editor-rtl.css 138亿
build/block-library/blocks/post-content/editor.css 138亿
build/block-library/blocks/post-extract/editor-rtl.css 73亿
build/block-library/blocks/post-extract/editor.css 73亿
build/block-library/blocks/post-extract/style-rtl.css 69亿
构建/块库/块/后摘录/style.css 69亿
build/block-library/blocks/post-featured-image/editor-rtl.css 412亿
build/block-library/blocks/post-featured-image/editor.css 412亿
build/block-library/blocks/post-featured-image/style-rtl.css 143亿
build/block-library/blocks/post-featured-image/style.css 143亿
build/block-library/blocks/post-template/editor-rtl.css 99亿
build/block-library/blocks/post-template/editor.css 98亿
build/block-library/blocks/post-template/style-rtl.css 378亿
build/block-library/blocks/post-template/style.css 379亿
build/block-library/blocks/post-terms/style-rtl.css 73亿
build/block-library/blocks/post-terms/style.css 73亿
build/block-library/blocks/post-title/style-rtl.css 60亿
build/block-library/blocks/post-title/style.css 60亿
build/block-library/blocks/preactatted/style-rtl.css 103亿
build/block-library/blocks/preactatted/style.css 103亿
build/block-library/blocks/pullquote/editor-rtl.css 198亿
build/block-library/blocks/pullquote/editor.css 198亿
build/block-library/blocks/pullquote/style-rtl.css 361亿
build/block-library/blocks/pullquote/style.css 360亿
构建/block-library/blocks/pullquote/theme-rtl.css 167亿
构建/block-library/blocks/pullquote/theme.css 167亿
build/block-library/blocks/query-pagination-numbers/editor-rtl.css 122亿
build/block-library/blocks/query-pagination-numbers/editor.css 121亿
build/block-library/blocks/query-pagination/editor-rtl.css 270亿
build/block-library/blocks/query-pagination/editor.css 262亿
build/block-library/blocks/query-pagination/style-rtl.css 168亿
build/block-library/blocks/query-pagination/style.css 168亿
build/block-library/blocks/query-title/editor-rtl.css 85亿
build/block-library/blocks/query-title/editor.css 85亿
build/block-library/blocks/query/editor-rtl.css 131亿
build/block-library/blocks/query/editor.css 132亿
build/block-library/blocks/quote/style-rtl.css 169亿
build/block-library/blocks/quote/style.css 169亿
build/block-library/blocks/quote/theme-rtl.css 220亿
构建/block-library/blocks/quote/theme.css 222亿
build/block-library/blocks/rss/editor-rtl.css 202亿
build/block-library/blocks/rss/editor.css 204亿
build/block-library/blocks/rss/style-rtl.css 289亿
build/block-library/blocks/rss/style.css 288亿
构建/block-library/blocks/search/theme-rtl.css 64亿
构建/block-library/blocks/search/theme.css 64亿
build/block-library/blocks/seleparator/editor-rtl.css 99亿
build/block-library/blocks/seleparator/editor.css 99亿
build/block-library/blocks/seleparater/style-rtl.css 250亿
build/block-library/blocks/seleparater/style.css 250亿
build/block-library/blocks/seleparater/theme-rtl.css 172亿
build/block-library/blocks/seleparater/theme.css 172亿
build/block-library/blocks/shortcode/editor-rtl.css 474亿
build/block-library/blocks/shortcode/editor.css 474亿
build/block-library/blocks/site-logo/editor-rtl.css 462亿
build/block-library/blocks/site-logo/editor.css 464亿
build/block-library/blocks/site-logo/style-rtl.css 153亿
build/block-library/blocks/site-logo/style.css 153亿
build/block-library/blocks/site-tagline/editor-rtl.css 86亿
构建/块库/块/站点标语/编辑器.css 86亿
build/block-library/blocks/site-title/editor-rtl.css 84亿
build/block-library/blocks/site-title/editor.css 84亿
build/block-library/blocks/social-link/editor-rtl.css 165亿
build/block-library/blocks/social-link/editor.css 165亿
build/block-library/blocks/social-links/editor-rtl.css 812磅
build/block-library/blocks/social-links/editor.css 811亿
build/block-library/blocks/social-links/style-rtl.css 1.33千字节
build/block-library/blocks/social-links/style.css 1.33千字节
build/block-library/blocks/spacer/editor-rtl.css 307亿
build/block-library/blocks/spacer/editor.css 307亿
build/block-library/blocks/spacer/style-rtl.css 48亿
build/block-library/blocks/spacer/style.css 48亿
build/block-library/blocks/table/editor-rtl.css 471亿
build/block-library/blocks/table/editor.css 472亿
build/block-library/blocks/table/style-rtl.css 481亿
build/block-library/blocks/table/style.css 481亿
build/block-library/blocks/table/theme-rtl.css 188亿
build/block-library/blocks/table/theme.css 188亿
build/block-library/blocks/tag-cloud/style-rtl.css 146亿
构建/块库/块/标记云/style.css 146亿
build/block-library/blocks/template-part/editor-rtl.css 636亿
build/block-library/blocks/template-part/editor.css 635亿
build/block-library/blocks/template-part/theme-rtl.css 101亿
build/block-library/blocks/template-part/theme.css 101亿
build/block-library/blocks/term-description/editor-rtl.css 90亿
构建/块库/块/术语描述/editor.css 90亿
build/block-library/blocks/text-columns/editor-rtl.css 95亿
构建/块库/块/文本列/editor.css 95亿
build/block-library/blocks/text-columns/style-rtl.css 166亿
build/block-library/blocks/text-columns/style.css 166亿
build/block-library/blocks/verse/style-rtl.css 87亿
build/block-library/blocks/verse/style.css 87亿
build/block-library/blocks/video/editor-rtl.css 571亿
build/block-library/blocks/video/editor.css 公元572年
build/block-library/blocks/video/style-rtl.css 173亿
build/block-library/blocks/video/style.css 173亿
构建/block-library/blocks/video/theme-rtl.css 124亿
build/block-library/blocks/video/theme.css 124亿
build/block-library/reset-rtl.css 527磅
build/block-library/reset.css 527亿
构建/块库/theme-rtl.css 688亿
构建/块-库/theme.css 692亿
build/block-serialization-default-parser/index.min.js 1.09千字节
build/block-serialization-specifi-parser/index.min.js 2.79千字节
构建/合成/索引.min.js 10.2千字节
构建/core-data/index.min.js 12.3千字节
构建/定制e-widgets/index.min.js 10.4千字节
构建/定制e-widgets/style-rtl.css 1.5千字节
构建/定制e-widgets/style.css 1.49千字节
构建/数据控制/索引.min.js 614亿
build/data/index.min.js 7.03千字节
构建/日期/索引.min.js 31.5千字节
build/deprecated/index.min.js 428亿
build/dom-ready/index.min.js版本 304亿
构建/dom/index.min.js 4.53千字节
build/edit-navigation/index.min.js 13.4千字节
构建/编辑导航/样式-rtl.css 3.1千字节
构建/编辑导航/样式.css 3.1千字节
构建/编辑-发布/分类-rtl.css 492亿
构建/编辑post/classic.css 494亿
构建/编辑-发布/样式-rtl.css 7.18千字节
构建/编辑-发布/样式.css 7.17千字节
构建/编辑site/style-rtl.css 5.01千字节
构建/编辑site/style.css 5.01千字节
build/edit-widgets/index.min.js 15.9千字节
build/edit-widgets/style-rtl.css 4.01千字节
build/edit-widgets/style.css 4.02千字节
build/editor/index.min.js 37.5千字节
构建/编辑器/样式-rtl.css 3.92千字节
构建/编辑器/样式.css 3.91千字节
build/element/index.min.js 3.16千字节
build/escape-html/index.min.js 517亿
build/format-library/index.min.js 5.36千巴
build/format-library/style-rtl.css 668亿
构建/格式化库/style.css 669亿
build/hooks/index.min.js 1.55千字节
build/html-entities/index.min.js 424亿
构建/i18n/index.min.js 3.59千字节
构建/is-shallow-equal/index.min.js 501乙
构建/键盘快捷方式/index.min.js 1.49千字节
build/keycodes/index.min.js 1.25千字节
构建/列出可重用块/index.min.js 1.85千字节
构建/list-rusable-blocks/style-rtl.css 838亿
build/list-rusable-blocks/style.css 838亿
build/media-utils/index.min.js 2.88千字节
build/notices/index.min.js 845亿
build/nux/index.min.js 2.03千字节
build/nux/style-rtl.css 747亿
build/nux/style.css 743亿
build/plugins/index.min.js 1.83千字节
build/primitives/index.min.js 921亿
build/priority-queue/index.min.js 582亿
build/react-i18n/index.min.js 671亿
build/redux例程/index.min.js 2.63千字节
构建/可重用块/index.min.js 2.28千字节
构建/可重用块/样式-rtl.css 256亿
构建/可重用块/样式.css 256亿
构建/rich-text/index.min.js 10.5千字节
build/server-side-render/index.min.js 1.32千字节
build/shortcode/index.min.js 1.48千字节
构建/令牌列表/index.min.js 562磅
构建/url/index.min.js 1.72千字节
build/viewport/index.min.js 1.02千字节
build/warning/index.min.js 248亿
build/widgets/index.min.js 6.27千字节
构建/widgets/style-rtl.css 1.04千字节
build/widgets/style.css 1.04千字节
构建/wordcount/index.min.js 1.04千字节

压缩尺寸作用

复制链接
贡献者

@塔尔丹 塔尔丹 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我认为这是非常必要的,因为测试开始涉及的不仅仅是帖子和块。我知道导航编辑器/块测试肯定也可以使用它。

在合并之前,可能想收集更多的意见/评论,但这对我来说是第一步👍

@吉奥罗牌手表
复制链接
成员

您是否尝试过创建一个WP插件,通过执行DB调用而不是使用REST API来设置初始状态?好吧,它也可以在PHP中运行相同的REST API调用作为开始。

@吵闹声
复制链接
成员

您是否尝试过创建一个WP插件,通过执行DB调用而不是使用REST API来设置初始状态?好吧,它也可以在PHP中运行相同的REST API调用作为开始。

这是一个好主意,但Puppeter如何触发PHP代码?它必须发出页面请求(例如导航到/wp-admin?gutenerg_reset_test_state=1)插件拦截的内容。因为REST API支持批处理,所以我们只保存一到两个请求。

@凯文940726
复制链接
成员 作者

虽然不相关,但更改实现可能会修复#33275🤞. 如果是这样的话,那么我们将更好地了解潜在问题。

@凯文940726
复制链接
成员 作者

您是否尝试过创建一个WP插件,通过执行DB调用而不是使用REST API来设置初始状态?

嗯,我不确定我是否理解。

DB调用类似于SQL命令吗?我考虑过这一点,但WP中的DB结构通常非常复杂,不建议直接更改。

如果它类似于调用core的PHP函数,那么我认为它与调用REST API具有相同的效果?虽然一些核心功能没有向REST API公开(例如激活主题/插件),但我认为这将是一个很好的替代方案。

@吉奥罗牌手表
复制链接
成员

吉奥罗牌手表 评论2021年7月16日

这是一个好主意,但Puppeter如何触发PHP代码?它必须发出插件拦截的页面请求(例如导航到/wp-admin?gutenerg_reset_test_state=1)。因为REST API支持批处理,所以我们只保存一到两个请求。

使用WP钩子,您不需要导航到其他页面,当加载要进行所有测试的页面时,插件只需运行必要的逻辑即可。另一个区别是,您将使用执行的所有REST API(或其对应的WP函数包装器)调用加载页面,因此您只需运行测试规范,因为初始条件已经设置好了-不需要像中那样重新加载页面应显示旧窗口小部件测试。

DB调用类似于SQL命令吗?我考虑过这一点,但WP中的DB结构通常非常复杂,不建议直接更改。

我不是指字面上的SQL命令。任何最适合您的用例。如果这是一个单独的WP函数调用,那么这就是一个胜利。

@吵闹声
复制链接
成员

使用WP钩子,您不需要导航到其他页面,当加载要进行所有测试的页面时,插件只需运行必要的逻辑即可。

是的,但是我们如何区分测试开始时发生的页面加载和中间测试时发生的加载?

@吉奥罗牌手表
复制链接
成员

使用WP钩子,您不需要导航到其他页面,当加载要进行所有测试的页面时,插件只需运行必要的逻辑即可。

是的,但我们如何区分测试开始时发生的页面加载和测试中期发生的页面加载?

我能想到的一种方法是检查是否设置了特殊标志$_GET(获取)然后,您可以在PHP中将HTTP重定向到不带标志的URL,或者在JavaScript中删除此标志,以避免在某些现有测试中刷新页面时执行相同的逻辑。

@凯文940726
复制链接
成员 作者

另一个区别是,您将使用执行的所有REST API(或其对应的WP函数包装器)调用加载页面,因此您只需运行测试规范,因为初始条件已经设置好了-不需要像中那样重新加载页面应显示旧窗口小部件测试。

需要重新加载页面,因为测试发生在我们转到窗口小部件屏幕。我们也可以打电话rest()在访问widgets屏幕重置状态之前,需要进行重构before每个。重新加载只是一种简单的方法,对性能影响不大。即使我们使用WP挂钩方法,我们仍然需要在测试中重新加载页面。

@凯文940726
复制链接
成员 作者

我也重构了激活插件停用插件使用REST API(多亏了@马马杜卡用于抬头!)。

@凯文940726
复制链接
成员 作者

我打开了#33720作为类似的东西的实验@吉奥罗牌手表的方法,通过REST API直接评估WordPress命令。目前,只有一个用例可以在主题之间切换。尝试在我们的测试工具链中引入如此强大的东西,感觉太过分了。

我更喜欢使用REST API来重置/构建状态,而不是调用WP命令,因为它们有很好的文档记录,并且与用户的操作更匹配。我们甚至可以将其视为REST API的e2e测试。

在dea992c中,我还修复了性能测试总是使用最新版本的问题e2e测试装置每当我们更新PR中的包时就会中断。

我认为这个公共关系是前进的方向,除非有重大问题,我想合并它并在主干中监视它。WDYT?

@吉奥罗牌手表
复制链接
成员

我打开了#33720作为类似的东西的实验@吉奥罗牌手表的方法,通过REST API直接评估WordPress命令。目前,只有一个用例可以在主题之间切换。尝试在我们的测试工具链中引入如此强大的东西,感觉太过分了。

我认为这不是我想要的,因为它使用REST API发送PHP代码来运行评估.

我考虑的另一种选择是一个总是安装在E2E测试上下文中的插件,它会截取URL中的一个特殊参数。根据这个参数中传递的值,我们可以执行一些可以访问完整WordPress API的预定义命令。在所有测试运行之前重置WordPress状态更有用,想想现在通过Puppeter处理的代码:

等待 激活主题( “二十二点二十一分” );
等待 垃圾所有支柱();
等待 垃圾所有支柱( 'wp_block' );
等待 设置浏览器();
等待 激活插件( “gutenberg-test-plugin-disables-the-css-animations” );

@凯文940726
复制链接
成员 作者

根据这个参数中传递的值,我们可以执行一些预定义的命令,这些命令可以访问完整的WordPress API。

这也行得通!但我想避免要求开发人员了解PHP,而他们只想编写e2e测试。REST API已经是我们可以使用的官方支持的接口休息helpers本质上只是一个api获取克隆。此外,如果我们不能通过REST API做一些事情,比如切换主题,那么我们很可能也希望在未来实现它。

等待 激活血红素( “二十二点二十一分” );
等待 垃圾所有支柱();
等待 垃圾所有支柱( 'wp_block' );
等待 设置浏览器();
等待 激活插件( “gutenberg-test-plugin-disables-the-css-animations” );

我相信它们中的大多数也可以使用REST API实现,我们不必为了实现这一点而贬低现有的测试实用程序。就像这样激活插件/停用插件在这种PR中进行重构,更改可以是无缝的,并且大部分是向后兼容的。缺点是它的代码稍微多一些,需要更多的RTT,不过我不认为它们有什么大不了的,按顺序调用几个请求仍然比手动访问页面更快。

复制链接
贡献者

@塔尔丹 塔尔丹 留下了评论

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

在我看来还是不错的,谢谢你的努力。

也许在合并之前测试一下它是否能在Windows中正常工作。

bin/plugin/commands/performance.js 过时的 显示已解决 隐藏已解决
包/e2e-test-utils/src/plugins.js 过时的 显示已解决 隐藏已解决
}

等待停用Plugin(“gutenberg-test-classic-widgets”);
等待批次(
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

这是否可以与前一批批处理,或者是否存在限制问题?(我认为上限是25左右)。如果测试添加了很多小部件,那么这个限制实际上可能会引起关注。

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我们实际上不能。我认为这些API中可能有一些竞争条件,但我没有探究原因。

复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

好 啊👍

可能仍然值得研究批量限制问题(一些背景知识-#28709)作为后续操作,我认为这个批处理函数理想情况下应该根据超出限制时的限制拆分请求数组,然后对每个部分进行顺序请求。

线条上的注释+627+634
等待休息({
方法:'POST',
路径:“/wp/v2/widgets”,
数据:{
id_base:'搜索',
sidebar:'侧边栏-1',
实例:defaultSearchInstance,
},
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我觉得随着时间的推移,很高兴能看到一些简单的助手,比如等待createWidgets(小部件,侧栏Id),但随着时间的推移休息批处理作为基础。

packages/e2e测试实用程序/src/rest-api.js 过时的 显示已解决 隐藏已解决
@凯文940726 凯文940726合并提交7d8e740进入之内 大旅行箱 2021年8月12日
@凯文940726 凯文940726删除了 try/rest-api-e2e-utils 分支 2021年8月12日08:43
@github操作 github-操作 机器人程序将此添加到古腾堡11.4里程碑2021年8月12日
@你知道riad
复制链接
贡献者

这是新的吗环境_方向env变量是否必须运行e2e测试和性能测试?它的目的是什么?

模块导出={
…需要(“@wordpress/scripts/config/jest-e2e.config”),
testMatch:['**/performance/*.test.js'],
setupFiles:['<rootDir>/config/gutenberg-phase.js'],
模块名称映射器:{
//针对不同的环境使用不同版本的e2e-test-util
//而不是总是使用最新的。
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

为什么?

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

使用PR版本的e2e测试装置这样,在运行性能测试时可以检测到该包中的更改。不过,这已经不再需要了,因为我们现在已经进行了opt-in和实验性的更改。只是忘了恢复😅.

复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

除非我错了,事实已经是这样了,公关总是使用公关版的e2e测试平台。已经有一个--测试-环境性能PR中的选项?

! spinner.classList.contains('is-active')
);
//使用默认实例在第一个侧栏中创建搜索小部件。
等待休息({
复制链接
贡献者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

对于所有这些内联rest调用,测试似乎不太可读。我认为你应该考虑将它们隐藏为一些实用程序,否则,除非你写了测试,否则还不清楚测试在做什么。

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

是的,这里提到过:#33414(评论).

//只需在任何请求之前设置一次。
await Promise.all([setAPIRootURL,setNonce]);

return waiting apiFetch(options);
复制链接
成员

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

是否可以使用wp.api获取相反,当用户登录时,应该已经设置了所有参数。如下所示:

等待 第页.评价( ( 参数 ) =>
	水处理.api获取( 参数 ),
	选项
);

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

这将使测试依赖于当前运行的页面。一些页面没有wp.api获取默认情况下可用,并且有时登录的用户没有必要的权限。这也意味着在发出此类请求后需要重新加载。对我来说,将其称为服务器端似乎是一种更稳健的方法。

复制链接
成员

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

我必须承认这一切都令人困惑。在当前形状中休息方法正在以管理员身份使用硬编码凭据执行REST API请求管理员+密码。如果目标是使其具有通用性,那么它远非如此。一些担忧:

  • e2e测试也可以在没有具有默认凭据的管理员帐户的站点上执行
  • 是否可以使用休息使用不同的用户帐户还是已注销?
  • wp-login.php型设置cookie,这样一旦测试刷新页面,就很可能以管理员身份执行其余测试

复制链接
成员 作者

选择隐藏此评论的原因

将显示原因,以便向其他人描述此评论。了解更多信息.

休息不是这里最好的名字。它在nodejs进程中运行,而不是在浏览器上下文中运行,因此它独立于测试,不会影响当前登录的用户。如PR描述中所述,它只能用于设置/清除测试之间或测试期间的状态。我会在这里继续寻找更好的名字,幸运的是它仍然被标记为实验性的。

免费注册 在GitHub上加入此对话.已经有帐户了吗?登录以发表评论
标签
[类型]自动测试 测试影响端到端(E2E)和/或单元测试执行的基础设施更改。 【类型】技术原型 提供对想法的技术探索,作为可能的示例
项目
还没有
开发

成功合并此请求可能会解决这些问题。

还没有

5名参与者