【问题标题】:Appium, Mocha, Android, JS - Is it possible to pass settings via command line (like version of android) when run tests?Appium、Mocha、Android、JS - 运行测试时是否可以通过命令行(如 android 版本)传递设置?
【发布时间】:2018-10-25 02:29:52
【问题描述】:

我是移动测试的新手,我有几个问题和疑问。

问题 1: 我有几个运行测试的真实设备。每次在设备之间切换时,在功能中更改 conf 文件中的 Android 版本有点烦人。

问题 1: 我想在运行测试时通过 Android 版本。当我在 Jasmine + Protractor 上编写测试时,我可以在 conf 文件中这样配置:

switch (browser.params.env) {
    case 'case1':
      browser.params.url = 'url1';
      break;
    case 'case2':
      browser.params.url = 'url2';
      break;
    }

并像这样运行测试:

npm run test -- --browser.params.env=case1

是否可以在 Appium+Mocha 中做同样的事情?我试图使用 --default-capabilities 标志,但这不是我需要的。

问题 2: 我想将用户名和密码设置为环境变量(找到了一个示例 here),但我不明白如何在 Appium 中正确执行此操作? 目前用户数据存储在单独的文件中,如下所示:

const users = [
  {
    id: 'someId1',
    pass: 'somePass1'
  }
]

但我认为存储通过测试不是一个好主意。那么如何使用这些环境变量呢?

非常感谢您的帮助。

【问题讨论】:

    标签: javascript android mobile mocha.js appium


    【解决方案1】:

    您可以在config 文件夹中创建类似caps.js 的文件来存储功能矩阵:

    const caps = {}
    
    caps.android6 = {
      platformName: 'Android',
      automationName: 'UiAutomator2',
      deviceName: <device name>,
      appWaitActivity: <activity name>,
      appWaitPackage: <package name>,
      androidInstallTimeout: 90000,
      app: <path to app>
    }
    
    caps.android5 = {
      platformName: 'Android',
      platformVersion: '5.0',
      automationName: 'UiAutomator2',
      ...
    }
    
    caps.default = {...}
    
    
    module.exports = caps
    

    如果您使用wd.js,您可以通过以下方式创建驱动程序:

    const path = require('path')
    const caps = require(path.resolve('config','caps'))
    const wd = require('wd')
    const server = {host: 'localhost', port: 4723}
    
    const capabilities = caps[
      process.env('caps') !== 'undefined'
        ? process.env['caps']
        : 'default'
    ]
    const driver = wd.promiseChainRemote(server)
    await driver.init(capabilities)
    

    当您运行测试时,您可以像 export caps=android6 &amp;&amp; npm run tests 一样执行此操作,其中 tests 是您在 package.json 中指定的用于运行 mocha 测试的脚本。在这种情况下,android6 使用来自 caps.js 的数据。

    您可以使用相同的方法来提供凭据:

    export login=user@gmail.com password=124356 && npm run tests
    

    在您的测试中,您可以通过process.env阅读它

    【讨论】:

    • 嗨!非常感谢您的回答。我将在几天后尝试此解决方案并提供反馈。
    • 谢谢,它有效! :) 我将process.env('caps') 更改为process.env['caps'] 的唯一区别。在() 的情况下,我收到一个错误,即 process.env 不是函数。
    • 太棒了,我很高兴我帮助了你,感谢你的评论,我用正确的括号更新了答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 2020-11-06
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多