2014-01-16 46 views
2

我想通过grunt为浏览器功能矩阵运行cucumberjs测试。grunt cucumberjs多个并行运行

矩阵配置“咕噜”正常(qcuberbatch是当地咕噜任务定义):

grunt.initConfig 
    qcumberbatch: 
     options: 
      steps: 'src/features/integration/steps' 
      tags: '[email protected]' 
      browserstack: 
       'browserstack.user' : process.env.BS_USER 
       'browserstack.key' : process.env.BS_ACCESS_KEY 
       'browserstack.tunnel' : 'true' # This was the secret! 

      matrix: [ 
       browser: 'firefox' 
       browser_version: '26.0' 
       os: 'Windows' 
       os_version : '7', 
      , 
       browser : 'IE', 
       browser_version : '9.0', 
       os : 'Windows', 
       os_version : '7', 
       resolution : '1024x768' 
      ] 
      hub: "http://hub.browserstack.com/wd/hub" 

     local: 
      files: 
       src: ['src/features/integration/*'] 
      options: 
       hub: 'http://localhost:4444/wd/hub' 
       matrix: ['firefox'] 

     browserstack: 
      files: 
       src: ['src/features/integration/*'] 

     failing: 
      files: 
       src: ['src/features/integration/*'] 
      options: 
       tags: '@ShouldFail' 

默认选项有它使用Firefox和IE浏览器在Windows 7上运行针对browserstack,与当地的测试覆盖browserstack使用本地硒webdriver枢纽。

黄瓜世界设定了一个构造函数取功能对象:

module.exports = class World 
    ### 
    Create a new world, assuming firefox capabilities. 

    @param {string} browser property name from the `webdriver.Capabilities` 
     list. 
    ### 
    constructor: (capabilities = {browserName: "firefox"})-> 
     @driver = new webdriver.Builder(). 
      usingServer(process.env.SELENIUM_HUB). 
      withCapabilities(capabilities).build() 

     @driver.manage().timeouts().setScriptTimeout(10000) 

的问题,从咕噜运行这个时候,是cucumberjs没有任何编程接口(即我见)。如果没有配置在运行时加载哪几个功能块的能力,我应该怎么做才能在cucumberjs run和grunt之间传递功能?

回答

0

可能的解决办法:

写文件,在繁重的文件的已知位置用的所有功能斑点。然后,启动几个cucumberjs运行,使用一个进程环境变量告诉世界哪个能力使用blob。

我不喜欢这样,因为它涉及每次运行创建临时文件等。我更喜欢在配置World对象时以编程方式找到一种方法来使用cucumberjs。

+0

扩展到这个想法,在env var中将JSON传递的能力如何?然后解析你的世界中的那个JSON字符串,并让你的对象返回。 – jbpros

1

我会用你的解决方案和一个JSON对象,我建议。但是,如果您对更具编程意义的方法感兴趣,则可以很容易地实例化Cucumber运行时。 CLI源代码非常简单,它是如何从代码调用Cucumber的一个很好的例子。见https://github.com/cucumber/cucumber-js/blob/master/lib/cucumber/cli.js

+0

我曾考虑将其绑定到CLI,但这需要在所需的步骤文件中具有文件中的功能。在我看来,支持代码加载器在仅从文件路径加载代码时是有问题的,而不是允许运行时传入具有步骤定义的对象。但是,在其他页面中存在各种架构问题。可能超出了这个问题的范围。 如果我在github上发布这个作为0.6的增强版,你会对改变API感兴趣吗? –

+0

当然,我们可以改进它。你有没有检查过我们如何在浏览器上下文中注入支持代码?这可能有帮助。 https://github.com/cucumber/cucumber-js/blob/master/example/example.js#L80 – jbpros

+0

嗯,我没有看到。我会看看并张贴一些东西。 –