2017-03-16 62 views
0

我试图找到一个高度可扩展性和灵活性的解决方案,用于从远程计算机启动Selenium测试,最好通过基于Web的终端,我可以将一些数据传递给我的测试。如何在通过Web端点触发时将输入传递给Java Selenium测试?

我试过同时使用jUnitEE和TestNGEE--加上一个ServletFilter--试图获得我想要的但不能完全满足我所有的要求,所以我不禁想到我正在试着去解决它完全走错了路......有人已经解决了这之前...我只是想不通

我想吃点什么怎么...发生:

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

附加要求:

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

注:

  • 虽然我很高兴有这个,即使只有一个参数的工作,希望是,用户将能够通过任何数量的任意键的列表/值对,然后可用于执行的测试,甚至可能是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而现有测试仍在执行,但具有不同的(或相同的)PARAMS: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'文本。

我在这里错过了什么?

在此先感谢!

+1

对于你来说,通过像Jenkins这样的构建工具来暴露这种行为会不会更容易,例如?您可以将他们暴露给Jenkins的构建作业,而不是将您的用户展示给您的自定义页面,而不是完成它? –

+0

谢谢你的意见,克里斯南。出于治理原因,我无法使用jenkins。我的构建工具将需要在我的范围之外的自定义更改。我对“测试”实现几乎完全统治,但构建系统不在此范围之内。 –

+0

John,这是你的servlet方法的一个基本问题。你的每个servlet基本上都会脱离你的实际测试执行的新线程。因此,如果关闭导致servlet停顿,那么最终可能会遇到所有线程都被占用的情况,从而导致Web应用程序无法正常运行。 –

回答

0

我已经完全放弃了JUnitEE。生活现在更好。我的筹码,现在让这成为可能是:GitLab,GitLabCI(W /泊坞),摇篮,Junit的/ TestNG的

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

这种方法似乎非常灵活和足够强大,足以满足我的需求,让我的每个团队都能根据自己的特定需求配置和处理项目,而不会过于说明性。

相关问题