如何使用 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,并且您有配置文件。
我们开始使用 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,并且您有配置文件。