Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当通过web端点触发时,如何将输入传递到Java Selenium测试?_Java_Selenium_Servlets_Junit_Testng - Fatal编程技术网

当通过web端点触发时,如何将输入传递到Java Selenium测试?

当通过web端点触发时,如何将输入传递到Java Selenium测试?,java,selenium,servlets,junit,testng,Java,Selenium,Servlets,Junit,Testng,我试图找到一个高度可扩展且灵活的解决方案,用于从远程机器启动Selenium测试,最好是通过基于web的端点,在那里我可以将一些数据传递给我的测试 我曾经尝试使用JUnite和TestNGEE,再加上ServletFilter,试图得到我想要的东西,但不能完全满足我的所有要求,所以我忍不住认为我试图以完全错误的方式去做…一定有人以前解决过这个问题…我只是不知道如何 我希望发生的事情: 想要执行java Selenium测试的人浏览到我的一个网页。这可能是一个JUnite或TestNgeeServ

我试图找到一个高度可扩展且灵活的解决方案,用于从远程机器启动Selenium测试,最好是通过基于web的端点,在那里我可以将一些数据传递给我的测试

我曾经尝试使用JUnite和TestNGEE,再加上ServletFilter,试图得到我想要的东西,但不能完全满足我的所有要求,所以我忍不住认为我试图以完全错误的方式去做…一定有人以前解决过这个问题…我只是不知道如何

我希望发生的事情:

  • 想要执行java Selenium测试的人浏览到我的一个网页。这可能是一个JUnite或TestNgeeServlet,可能是其他的东西
  • 用户从可用测试列表中选择要运行的Selenium测试,以及页面上表单元素中的两个值。假设它是两个字符串值——一个用于环境,一个用于用户名
  • 用户按下运行测试按钮
  • 服务器接受所选测试并开始执行,为其提供用户指定的环境和用户名值 其他要求:

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

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

  • 用户点击端点:
  • testLauncher的myServlet触发包含的与com.mySite.selenium.flow1匹配的测试,该测试依次导航到“http://testEnvironment1.mySite.com”,并继续在输入框中输入“userNumber1”文本

  • 第二个用户可以在前一个测试仍在执行时访问同一个servlet,但参数不同(或相同):

  • testLauncher的myServlet启动另一个线程,运行相同的测试,但针对指定的站点:“http://testEnvironment2.mySite.com”,并继续在输入框中输入“userNumber1”文本

  • 我错过了什么


    提前谢谢

    我最后把JUnitEE给甩了。现在生活更好了。我的堆栈现在使这成为可能:GitLab、GitLabCI(w/Docker)、Gradle、Junit/TestNG

    • 我现在将代码存储在GitLab(Enterprise)中,并使用Gradle作为构建系统。这样做可以做到这一点:
      包含的GitLabCI将配置为承载可触发GitLab管道的URL。每个GitLab管道都在docker容器中运行
    • 我的GitLabCI配置设置为在将此触发器(URL)发布到时执行gradle命令。触发器URL可以包含可变数量的自定义变量,这些变量由GitLab转换为环境变量
    • 我的项目现在是一个Gradle项目,因此当我的GitLab触发器被发布到时,我使用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或测试/测试框架本身

    这种方法似乎非常灵活和健壮,足以满足我的需要,让我的许多团队中的每一个都可以根据自己的具体需求配置和处理项目,而不需要过于规范。

    如果您只通过Jenkins之类的构建工具来公开这种行为,不会更容易?你不需要让你的用户看到你的自定义页面,你只需要让他们看到Jenkins中的一个构建作业,然后就可以完成了。不,谢谢你的输入,Krishnan。出于治理原因,我无法使用jenkins。我的构建工具将需要超出我范围的自定义更改。我几乎完全掌握了“测试”实现,但构建系统不在此范围内。您的每一个servlet基本上都会分离出新的线程,在这些线程中执行您的实际测试。因此,如果旋转导致servlet暂停,那么最终您可能会遇到所有线程都被占用的情况,从而有效地关闭您的web应用程序。。让您的所有测试基本上填充web应用程序中的内部队列,该队列跟踪所有此类“测试作业”请求。您可以有一个单独的线程轮询队列,然后生成测试。这将是线程安全的(您只需要信任用户,他将给您线程安全凭据,否则一个登录可能导致另一个注销)