如何使用 Appium/Cucumber 为 Xamarin Forms 构建 E2E 测试?

How to structure E2E tests with Appium/Cucumber for Xamarin Forms?

我们开始使用 Appium / Cucumber / Ruby 堆栈构建我们的 UI e2e 测试。 由于我们使用的是 Xamarin Forms,因此我们显然想要测试 iOS 和 Android。 最后我们想将测试上传到 App Center 到 运行 在多个设备中,获取报告等

Cucumber 通常使用此目录结构:

E2E

----特点

--------支持

------------env.rb

------------hooks.rb

--------STEP_DEFINITIONS

------------home_steps.rb

--------Home.feature

问题始于 env.rb 文件,该文件包含 Appium 所需的所有功能,它们完全不同或 iOS 和 Android。

1 - 我们如何 env.rb 从一个平台切换到另一个平台?

两个平台的功能和步骤定义基本相同,但最终会有差异,例如在 Android 中测试后退按钮行为。

2 - 我们可以创建某种 PLATFORM 全局变量并创建条件,例如 IF PLATFORM = ANDROID THEN ... 在我们的步骤定义和功能中吗?

另一种方法是将每个平台的源代码完全分开,像这样:

E2E

----iOS

--------特点

------------支持

----------------env.rb

----------------hooks.rb

------------STEP_DEFINITIONS

----------------home_steps.rb

------------Home.feature

----ANDROID

--------特点

------------支持

----------------env.rb

----------------hooks.rb

------------STEP_DEFINITIONS

----------------home_steps.rb

------------Home.feature

这种方法在没有针对每个平台的条件的情况下会有更简洁的代码,但显然缺点是我们必须将所有测试编写两次。

3 - 您认为哪种方法更好?

谢谢

这实际上不是关于 Cucumber 的问题,它更多的是关于您的 application/organisation 以及有多少东西是特定于某个特定平台的。如果您有很多东西在 IOS 和 Android 上的工作方式不同,并且您一次开发一个平台(e.g.have 独立的 IOS/Android 团队),那么单独的功能集可能做到最好。

如果绝大多数东西是相同的,那么在不同平台上配置为 运行 的单个文件夹(可能使用环境变量来选择)就可以了。或者您可以将具有 features ios-features android-features.

的两者结合起来

Cucumber 内部有许多工具,支持在单个文件夹中使用不同的配置。请记住 env.rb 只是一个 ruby 文件,因此它可以加载环境变量并使用它们来更改配置。此外,您还有标签和挂钩,因此您可以使用@ios-only scenarios,并且您有配置文件。