在本地appium服务器上运行javascript e2e测试

时间:2017-11-27 12:11:33

标签: javascript android testing mocha appium

我想在运行本地android模拟器的Appium服务器实例上运行用jocha编写的e2e测试。测试中的应用程序是最初用react-native编写的apk。

在Windows上我通过使用Appium桌面应用程序启动并运行Android Studio模拟器。服务器都看起来不错,并有我想测试工作正常的本机应用程序的apk。我还有一个用mocha编写的基本describe / assert测试,我想将其应用到app。

我的问题是我需要包含什么(可能在测试文件中)才能使测试实际测试模拟器应用程序?我发现文档非常混乱,示例代码似乎非常特定于不同的用例。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

至少有2个优秀的js客户端库可用于基于Appium的项目:webdriveriowd。就个人而言,我使用第二个,所以我可以建议你如何使用它和mocha进行测试: 我的测试文件如下所示:

'use strict'

require(path.resolve('hooks', 'hooks'))

describe('Suite name', function () {
  before('Start new auction', async function () {
    //do before all the tests in this file, e.g. generate test data
  })

  after('Cancel auction', async function () {
    //do after all the tests in this file, e.g. remove test data
  })

 it('test1', async () => {
  // test steps and checks are here
 })

 it('test2', async () => {
  // test steps and checks are here
 })

 it('test3', async () => {
  // test steps and checks are here
 })
})

其中 hooks.js 包含所有测试的全局之前/之后:

const hooks = {}

before(async () => {
  // before all the tests, e.g. start Appium session
})

after(async () => {
  // after all the tests, e.g. close session
})

beforeEach(async () => {
  // before each test, e.g. restart app
})

afterEach(async function () {
  // e.g. take screenshot if test failed
})

module.exports = hooks

我并不是说它是设计测试的最佳实践,而是它的多种方式之一。

答案 1 :(得分:0)

酷,所以我设法让它在一定程度上工作。当我试图运行东西时,我正在检查Appium控制台日志,并注意到我的请求中缺少会话ID。所需要的只是使用会话ID附加驱动程序。我的代码看起来有点像这样:

"use strict";

var wd = require("wd")
var assert = require("assert")

var serverConfig = {
    host: "localhost",
    port: 4723,
}

var driver = wd.remote(serverConfig)

driver.attach("0864a299-dd7a-4b2d-b3a0-e66226817761", function() {
    it("should be true", function() {
        const action = new wd.TouchAction()
        action
            .press({x: 210, y: 130})
            .wait(3000)
            .release()
        driver.performTouchAction(action)
        assert.equal(true, true)
    })
})

equals true assert就在那里作为占位符健全性检查。目前唯一的问题是,每次重新启动Appium服务器时,我都会在attach方法中复制粘贴字母数字会话ID,因此我需要找到一种自动化方法。