如何通过Web端点触发输入到Java Selenium测试?

时间:2017-03-16 03:15:48

标签: java selenium servlets junit testng

我寻求一种高度可扩展且灵活的解决方案,用于从远程计算机启动Selenium测试,最好是通过基于Web的端点,我可以将一些数据传递给我的测试。

我已经尝试过使用jUnitEE和TestNGEE - 加上一个ServletFilter - 试图得到我想要的东西但是不能满足我的所有要求所以我不禁想到我正试图完全去做错误的方式......有人必须在此之前解决这个问题......我只是无法弄清楚如何......

我希望发生什么:

  1. 想要执行java Selenium测试的人导航到我的网页。这可能是一个jUnitEE或TestNGEE servlet,也许它是另一回事。
  2. 用户从可用测试列表中选择一个Selenium测试,并从页面上的表单元素中选择一些值。假设它是2个字符串值 - 一个用于 environment ,另一个用于用户名
  3. 用户按下运行测试按钮。
  4. 服务器获取所选测试并开始执行,为其提供环境和用户指定的用户名值。
  5. 其他要求:

    • 所有活动都应该是线程安全的。即使多个用户同时启动相同的测试,数据也不应在测试之间交叉。

    注意:

    • 虽然我很高兴即使只使用一个参数也可以工作,但希望用户能够传递任意数量的任意键/值对的列表,然后这些列可用于执行的测试,甚至可能是csv或其他类型的数据文件,或从中检索数据的Web端点。

    示例:

    1. 用户点击端点:http://testLauncherUI.mySite.com/myServlet?test=com.mySite.selenium.flow1&environment=testEnvironment1.mySite.com&username=userNumber1&otherRandomKey=randomValue
    2. testLauncher的myServlet触发包含的测试匹配 com.mySite.selenium.flow1 ,该测试依次导航到'http:// testEnvironment1.mySite.com ',然后继续在输入框中输入'userNumber1'文本。

    3. 第二个用户可以在先前的测试仍在执行时使用相同的servlet,但使用不同(或相同)的参数:http://testLauncherUI.mySite.com/myServlet?test=com.mySite.selenium.flow1&environment=testEnvironment2.mySite.com&username=userNumber1&otherRandomKey=randomValue

    4. testLauncher的myServlet启动另一个线程,运行相同的测试,但针对指定的站点:'http:// testEnvironment2.mySite.com ',然后继续输入'userNumber1 '将文字输入输入框。

    5. 我在这里缺少什么?

      提前致谢!

1 个答案:

答案 0 :(得分:0)

我完全放弃了JUnitEE。生活现在变得更好了。我的堆栈现在可以实现:GitLab,GitLabCI(带Docker),Gradle,Junit / TestNG

  • 我现在将我的代码存储在GitLab(Enterprise)中,并使用Gradle作为构建系统。这样做可以做到这一点:
    包含的GitLabCI将配置为托管可触发GitLab管道的URL。每个GitLab管道都在docker容器中运行。
  • 我的GitLabCI配置设置为在此触发器(URL)发布时执行gradle命令。触发器URL可以包含可变数量的自定义变量,这些变量由GitLab转换为环境变量。
  • 我的项目现在是Gradle项目,所以当我的GitLab触发器被POST时,我使用Gradle的过滤器指定要执行的测试(例如`$ ./gradlew test my-test-subproj :: test System.getenv(' TARGETED_TESTS'))。
  • 我发布测试的URL(例如http://myGitLab.com/my-project/trigger?TARGETED_TESTS=com.myapp.feature1.tests),并且一个docker容器从GitLabCI旋转以运行匹配的。当然,通过这种方法,我可以设置我需要的任何变量,并且可以在任何级别读取它们--GitLabCI,Gradle或测试/测试框架本身。

这种方法看起来非常灵活和强大,足以满足我的需求,让我的许多团队都能够根据自己的特定需求配置和处理项目,而不会过于规范。