java - 如何从 dsl 生成 UI 测试?

标签 java android groovy android-uiautomator

我不确定这个问题属于 SO,因为它可能太宽泛了,但我不知道去哪里问(我没有找到更好的 stackexchange 站点)。

上下文

我正在使用 UiAutomator在 android 上写一些 Ui 测试。我创建了一些函数来简化测试的编写,就像文档中的那样

public void startMainActivityFromHomeScreen() {
    /*Start the app from the home screen*/
}

作为开发人员,这很好用。但是非技术人员(契约(Contract)所有者)不能轻易使用此功能来编写测试。

需要

我正在寻找一种方法,让非技术用户可以使用我已经定义的函数编写一些脚本。这是一个虚拟示例(脚本格式和操作)

Suite: Launch the app twice from the home screen

Case: Launch the app for the first time
  Do startMainActivityFromHomeScreen
  Expect ...

Case: Launch the app for the second time
  Do startMainActivityFromHomeScreen
  Expect ...

这里重点是与java函数交互。我知道其他工具,例如 calabash但它不提供java接口(interface)。

当前方法

这是一个想法(没有实现)

  1. 将所有函数放在一个库中
  2. 编写一个 groovy dsl(因为 groovy 与 java 交互良好),允许非技术用户轻松编写脚本
  3. 创建一个 java 程序,它将评估 groovy 脚本并生成关联的 android 代码源(与 lib(来自(1))作为 gradle 依赖项)。
  4. 运行gradle androidTestCompile

由于函数在一个库中,开发人员可以轻松地将其包含在他们的项目中并使用它。因此所有用户都可以使用相同的库。

我讨厌这个想法,因为我必须从我的代码中生成代码源,但这是我唯一的。

问题

  • 这种方法是否像我认为的那样可怕?
  • 你知道另一种方法吗?

最佳答案

我会查看 https://cucumber.io/docs/reference/jvm#java ,它是一个库,通过让您将正则表达式与 Java 测试方法关联起来,几乎可以完全满足您的需求。

您的 Java 代码将类似于:

@When("^I open the app from the (main|home) screen$")
public void openApp(String launchScreen) { 
    ... 
}

测试文件看起来像:

Feature: Launching app

Scenario: Launching from first screen
    When I open the app from the main screen
    Then I see a blue icon...

Scenario: Launching from second screen
    When I open the app from the second screen
    Then I see a green icon...

关于java - 如何从 dsl 生成 UI 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130835/

相关文章:

java - 用于登录 S3 的 Log4j appender

java - Java 中使用 for 循环的多线程

java - 如何用Java获取Mac应用程序文件夹

android - 谷歌 GCM 还可用吗?

android - 如何在 Android.mk 中获取环境变量值?

java - 如何为使用数据库的 Android 应用程序构建服务器和客户端之间的通信

java - 使用基于百分比通过/失败子作业的 Groovy 脚本设置 Jenkins 多作业构建结果

java - 在 Spring 4 中导入 Groovy Bean 定义?

Java 可调整大小的 JLabel 图标不断变大

java - 展开所有实例的抽象 Java 类