Webdriverio: Testes de pilha de navegador em paralelo

Criado em 21 ago. 2017  ·  9Comentários  ·  Fonte: webdriverio/webdriverio

O problema

Se duas ou mais pessoas / máquinas executam webdriverio-tests conectados à mesma conta Browserstack simultaneamente, todos, exceto o último teste executado, começam a falhar. O motivo parece ser a colisão do porto.

Há uma observação sobre a falta de suporte de localIdentifier para o Browserstack:
http://webdriver.io/guide/services/browserstack.html#Known -Issues

Não tenho certeza se essa nota implica diretamente que não é possível executar testes de várias máquinas simultaneamente, usando uma conta Browserstack. Daí este relatório de problema.

Ambiente

  • Versão WebdriverIO: 4.8.0
  • Versão Node.js: 6.11.2
  • Modo autônomo ou wdio testrunner : testrunner
  • se wdio testrunner, executando testes síncronos ou assíncronos: testes assíncronos
  • Pacotes wdio adicionais usados ​​(se aplicável): wdio-mocha-framework, wdio-browserstack-service

Detalhes

Duas máquinas iniciam os testes usando a mesma conta Browserstack. Um deles começará a falhar. As capturas de tela do Browserstack mostram o navegador exibindo uma mensagem "Não foi possível conectar ao host local: 12345 ".

Comentários muito úteis

Conseguimos resolver esse problema. Para qualquer um que venha do Google etc., aqui está uma versão minimizada de nosso arquivo de configuração com todos os detalhes relevantes:

const localIdentifier = `foobar_${Date.now()}`

exports.config = {
  user: BROWSERSTACK_USER,
  key: BROWSERSTACK_KEY,
  capabilities: [
    {
      browser: 'Chrome',
      browser_version: '58.0',
      'browserstack.local': true,
      'browserstack.localIdentifier': localIdentifier
    }
  ],
  onPrepare: (config, capabilities) => new Promise((resolve, reject) => {
    exports.bs_local = new browserstack.Local()
    exports.bs_local.start({ localIdentifier, key: BROWSERSTACK_KEY }, error => {
      if (error) return reject(error)

      // Start server and tests
      // ...

      resolve()
    })
  }),
  onComplete: exitCode => {
    exports.bs_local.stop(() => ({}))
  }
}

Todos 9 comentários

'browserstack.local': true está na configuração.

Definir localIdentifier não ajuda.

onPrepare: (config, capabilities) => new Promise((resolve, reject) => {
  exports.bs_local = new browserstack.Local()
  exports.bs_local.start(
    {
      key: BROWSERSTACK_KEY,
      localIdentifier: `foobar_${Date.now()}`
    },
    error => {
      if (error) return reject(error)

      // Start test
      // ...

      resolve()
    }
  )
})

Resultado:

ERROR: [browserstack.local] is set to true but local testing through BrowserStack is not connected.
Error: [browserstack.local] is set to true but local testing through BrowserStack is not connected.
ERROR: [browserstack.local] is set to true but local testing through BrowserStack is not connected.
[...]

@codeclown parece que você precisa definir o host e a porta como bs local. Junte-se ao nossoGitter para este tipo de perguntas. Isso não é um problema necessário.

Obrigado pelo esclarecimento. Eu não tinha certeza se isso era um bug e / ou falha de documentação ou não, daí o problema.

Conseguimos resolver esse problema. Para qualquer um que venha do Google etc., aqui está uma versão minimizada de nosso arquivo de configuração com todos os detalhes relevantes:

const localIdentifier = `foobar_${Date.now()}`

exports.config = {
  user: BROWSERSTACK_USER,
  key: BROWSERSTACK_KEY,
  capabilities: [
    {
      browser: 'Chrome',
      browser_version: '58.0',
      'browserstack.local': true,
      'browserstack.localIdentifier': localIdentifier
    }
  ],
  onPrepare: (config, capabilities) => new Promise((resolve, reject) => {
    exports.bs_local = new browserstack.Local()
    exports.bs_local.start({ localIdentifier, key: BROWSERSTACK_KEY }, error => {
      if (error) return reject(error)

      // Start server and tests
      // ...

      resolve()
    })
  }),
  onComplete: exitCode => {
    exports.bs_local.stop(() => ({}))
  }
}

Uma vez que não está documentado e está altamente relacionado a este tíquete:

WebdriverIO oferece suporte a uma forma mais elegante de conexão local à pilha de navegadores -> http://webdriver.io/guide/services/browserstack.html . Basicamente, você apenas define browserstackLocal em exports.config para fazê-lo funcionar (sem um identificador). Se você deseja adicionar um identificador, você precisa fazê-lo por meio de browserstackOps :

const localIdentifier = `foobar_${Math.round(Math.random() * 100)}_${Date.now()}`;
export.configs = {
  user,
  key,
  // use of wdio-browserstack-service for automated local tunneling
  browserstackLocal: true,
  browserstackOpts: {
    localIdentifier,
  },
  ...

@Chaoste , tentei a solução escrita acima e obtive:
ERROR: [browserstack.local] is set to true but local testing through BrowserStack is not connected.

Qualquer ideia ?

@ckurban Significa simplesmente que sua conexão de túnel não foi estabelecida. Verifique os logs de rede na pilha de navegadores

@ckurban
wdio-browserstack-service não inicia browserstackLocal quando definido como true. Tive que iniciar meu túnel local antes de executar meus testes.

Conseguimos resolver esse problema. Para qualquer um que venha do Google etc., aqui está uma versão minimizada de nosso arquivo de configuração com todos os detalhes relevantes:

const localIdentifier = `foobar_${Date.now()}`

exports.config = {
  user: BROWSERSTACK_USER,
  key: BROWSERSTACK_KEY,
  capabilities: [
    {
      browser: 'Chrome',
      browser_version: '58.0',
      'browserstack.local': true,
      'browserstack.localIdentifier': localIdentifier
    }
  ],
  onPrepare: (config, capabilities) => new Promise((resolve, reject) => {
    exports.bs_local = new browserstack.Local()
    exports.bs_local.start({ localIdentifier, key: BROWSERSTACK_KEY }, error => {
      if (error) return reject(error)

      // Start server and tests
      // ...

      resolve()
    })
  }),
  onComplete: exitCode => {
    exports.bs_local.stop(() => ({}))
  }
}

Você utiliza um arquivo local.runner.js?

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

sarahdayan picture sarahdayan  ·  4Comentários

briancullinan picture briancullinan  ·  4Comentários

halfzebra picture halfzebra  ·  3Comentários

graingert picture graingert  ·  4Comentários

kiraLinden picture kiraLinden  ·  3Comentários