如何设置 Appium UI 测试 maven 项目与 Gitlab CI 一起测试 Android App?

how to set up a Appium UI test maven project to work with Gitlab CI to test Android App?

我现在是一名实习生,刚接触自动化test.My这里的目标是帮助我的公司为客户端设置CI。

现在我有一个 Maven 项目包含几个使用 Appium java-client lib 的测试,在 Eclipse IDE 下,可以在本地 运行 UI 测试。我的下一步目标是将我的测试与 gitlab 存储库挂钩(它已经存在,由 android 开发人员创建),但我被困在这里。有人可以帮帮我吗? 请尽量具体:

  1. 我应该如何设置 .gitlab.yaml?
    • 我们可以只用 yaml 中的脚本来下载 Appium 和 maven 吗?
    • 或者我们可以只下载 Appium,但将所有 Appium java-client jar 导入 main 中的库?
  2. 如果以上任何一个为真,怎么办?如果两者都不是,我应该怎么办 做什么?
  3. 我应该把我的测试放在那个 repo 的 gitlab 什么地方?或者我不必 将我的测试放在现有的仓库中。相反,我可以有另一个 并告诉 yaml 去哪里?再一次,如何?
  4. 如果你能帮助我完成工作流程,那将会很有帮助。 就像,当我开发人员签入代码时,gitlab 读取 yaml,然后 构建,然后在 where(Q3) 中找到我的测试服,然后执行等

非常感谢!

既然终于有人对这个问题感兴趣了,那我就分享一下我的解决方法吧。

所以,如果您正在看这个问题,我假设您已经有了测试套件,并且可以在您的机器上本地测试它,或者将您的应用程序安装在模拟器或真实设备中。现在你需要阅读更多关于 gitlab pipeline 和 gitlab CI :

而且您应该已经注意到,Appium 的优点之一是 您不需要更改正在测试的应用程序的任何东西,您正在测试即将投入生产的同一应用程序。要了解有关 Apppium 的更多信息:

现在,为了 运行 自动化测试,您需要测试套件、应用程序和 Appium 服务器。我们需要做的是在.gitlab-ci.yml中添加另一个阶段,告诉它

  • 拿新编译的App,编译你的测试套件

  • 在 simulator/real 设备中安装应用程序

  • 编译您的测试套件并运行它。

为了让事情更容易理解,我们从问题 4,工作流开始:

所以当代码被签入gitlab时,gitlab 运行ner 运行s你.gitlab中每个阶段的作业-ci.yml,当它运行s 到你的舞台,它进行自动化测试,并注意它在你的服务器上 运行ning,所以这意味着你需要在你的服务器上安装 Appium 并启动它 运行ning 尝试 运行 你的自动化测试套件。现在的问题是,您的服务器是否能够这样做?如果你想在你的服务器上做自动化测试,你需要在上面安装Appium,模拟器可能(并且可能需要你的服务器配备GPU)等,这些都是维护服务器的关注点。另一种方法是使用第三方服务,这就是我所做的。原来我们(当我在那家公司的时候)服务器不能运行宁自动化UI测试,所以我们求助于AWS-ADF(Amazon Device Farm),还有很多其他服务提供商可以选择,参考link:

https://adtmag.com/blogs/dev-watch/2017/05/device-clouds.aspx

所以我在功能测试阶段基本上有一个python脚本,它会抓取新编译的应用程序,自动化测试套件,将它们上传到AWS ADF,然后安排一个运行,在 运行 完成时产生结果。

所以,回答问题 1:

  • 我们需要在 .gitlab.yaml 中为我们的功能测试再创建一个阶段,在我的例子中,我在 functionalTest_project 阶段之后编译 Android 应用程序。然后你在你的阶段编写必要的 cmd 脚本,或者如果它太长,你的脚本在另一个文件中(把它放在你的 repo 中)然后执行它。在我的例子中,我把我的脚本放在 python_ci.py,然后我在我的舞台上使用“python python_ci.py” 执行它。(这里你需要一个 docker 满足这些要求, 也见​​下文)

  • 您无需下载 Appium,而是在您的设备上设置 Appium,或者如果您使用云服务,该服务应为您设置 Appium。

  • 我做的是使用maven构建并在本地打包测试套件,然后将其推送到gitlab repo,现在我相信更好的方法是将它编译并打包到你的.gitlab.yml 中的功能测试阶段。现在回到问题 1 的第一点,如何获取 maven,我的理解是它是服务器的依赖项,如 python,因此它们都可以通过告诉 gitlab 使用 docker 具有 python 和 Maven 依赖性。

问题 3 的答案:

  • 将其放在同一个仓库中,但不在 Android 项目中(即它们将在同一目录下)。

  • 如何告诉yml到达测试套件?请记住它们在同一台服务器上,因此您可以在 yml 脚本中使用相对路径来告诉 yml 从哪里获取您的测试套件。

希望对您有所帮助!