appium自动化测试入门

212 阅读1分钟

appium是一个开源的用于移动和桌面应用的自动化测试工具

准备

下载安卓 sdk 和 android 和 android studio 安装 docker

创建avd

avdmanager create avd -n avdtest -k "system-images;android-28;google_apis;x86"

下载demo apk

安装 appium

npm install -g appium

安装 appium-doctor

npm install -g appium-doctor

运行 appium-doctor,根据提示安装缺失依赖(比如 java 等)

运行avd

emulator -avd avdtest

运行一个 proxy(因为 emulator 运行的 avd 监听的是 localhost,可以使用其他反向代理) 这里写个简单代码 proxy.go

package main

import (
	"io"
	"net"
)

func main() {
	ln, err := net.Listen("tcp", ":5553")
	if err != nil {
		panic(err)
	}
	for {
		conn, err := ln.Accept()
		if err != nil {
			panic(err)
		}
		go serve(conn)
	}
}

func serve(src net.Conn) {
	dst, err := net.Dial("tcp", "127.0.0.1:5555")
	if err != nil {
		panic(err)
	}
	go io.Copy(src, dst)
	go io.Copy(dst, src)
}

运行 proxy

go run proxy.go

运行 appium

假设10.105.16.166 为目标 ip,/data 是 apk 的位置

docker run -d -p 4723:4723 -e REMOTE_ADB=true -e ANDROID_DEVICES=10.105.16.166:5553 -e REMOTE_ADB_POLLING_SEC=3 -v /data:/data --name container-appium appium/appium

新建测试

mkdir appiumtest
cd appiumtest
npm init -y
npm install webdriverio

获取 devicename

adb devices

创建 index.js,内容如下

const wdio = require("webdriverio");
const assert = require("assert");

const opts = {
  path: "/wd/hub",
  port: 4723,
  capabilities: {
    platformName: "Android",
    platformVersion: "9",
    deviceName: "emulator-5554", //上一步获取的
    app: "/path/to/ApiDemos-debug.apk",
    appPackage: "io.appium.android.apis",
    appActivity: ".view.TextFields",
    automationName: "UiAutomator2",
  },
};

async function main() {
  const client = await wdio.remote(opts);

  const field = await client.$("android.widget.EditText");
  await field.setValue("Hello World!");
  const value = await field.getText();
  assert.equal(value, "Hello World!");

  await client.deleteSession();
}

main();

运行测试

node index.js

提示

安卓模拟器相关:

下载(Command line tools only)

查看

./bin/sdkmanager --list --sdk_root=/path/to/lib

安装 platform-tools

./bin/sdkmanager --sdk_root=/path/to/lib "platform-tools" "platforms;android-28"

安装 emulator

./bin/sdkmanager  --sdk_root=/path/to/lib emulator