Android自动化测试之Appium工具使用

537 阅读2分钟

1 先下载 Appium 并安装

下载链接:

appium io

2 运行Appium 并启动服务

选择简单模式 , 然后配置服务器为127.0.0.1 :4723

然后点击启动服务器

如果是如下界面 则服务器启动完成

新建会话界面

快捷键为 ctrl + N , 新建会话界面,选择自动设定

配置platformName ,platformVersion 等信息

  • platformVersion :模拟器或真机的安卓版本
  • platformName :Andrioid/其他
  • automationName :uiautomator2
  • noReset : true
  • appActivity :
  • appPackage:
  • deviceName:

appActivity appPackage deviceName ,通过adb 命令获取

//获取 appActivity  appPackage
adb shell dumpsys activity activities | findstr "mResumedActivity"
//获取deviceName 
adb devices

先以模拟器的计算器为测试对象 ,全部配置好如下图所示

配置好先启动模拟器 , 再点击启动会话

然后找到控件的id 给来待会写测试用例用

3 用kotlin编写测试用例

先依赖 java-client库

   implementation "io.appium:java-client:4.1.2"

把计算器页面的id全部找出来

通过 findElementById 、 findElementByAccessibilityId 把控件找到

            //数字 1 - 9  
            val digit_1 =
                driver.findElementById("com.android.calculator2:id/digit_1") as MobileElement
            val digit_2 =
                driver.findElementById("com.android.calculator2:id/digit_2") as MobileElement
            val digit_3 =
                driver.findElementById("com.android.calculator2:id/digit_3") as MobileElement
            val digit_4 =
                driver.findElementById("com.android.calculator2:id/digit_4") as MobileElement
            val digit_5 =
                driver.findElementById("com.android.calculator2:id/digit_5") as MobileElement
            val digit_6 =
                driver.findElementById("com.android.calculator2:id/digit_6") as MobileElement
            val digit_7 =
                driver.findElementById("com.android.calculator2:id/digit_7") as MobileElement
            val digit_8 =
                driver.findElementById("com.android.calculator2:id/digit_8") as MobileElement
            val digit_9 =
                driver.findElementById("com.android.calculator2:id/digit_9") as MobileElement
            //加减乘除
            val add = driver.findElementByAccessibilityId("plus");
            val red = driver.findElementByAccessibilityId("minus");
            val mul = driver.findElementByAccessibilityId("multiply");
            val div = driver.findElementByAccessibilityId("divide");
            val clear = driver.findElementByAccessibilityId("delete");
            val equals = driver.findElementByAccessibilityId("equals");
            val result =
                driver.findElementById("com.android.calculator2:id/result") as MobileElement

找到控件开始编写测试用例

测试执行100次

长按清空 -> 点击1 -> 点击加->点击2->点击减->...->最后把结果打印出来 println(result.text)

            for (i in 1..100) {
                //先长按清空
                val action1 = TouchAction(driver)
                action1.longPress(clear).perform()
                action1.release()
                digit_1.click()
                add.click()
                digit_2.click()
                red.click()
                digit_3.click()
                mul.click()
                digit_4.click()
                div.click()
                digit_5.click()
                digit_6.click()
                digit_7.click()
                println(result.text)
            }

完整代码如下

import com.google.gson.Gson
import io.appium.java_client.MobileElement
import io.appium.java_client.TouchAction
import io.appium.java_client.android.AndroidDriver
import io.appium.java_client.android.AndroidElement
import io.appium.java_client.remote.AndroidMobileCapabilityType
import io.appium.java_client.remote.MobileCapabilityType
import org.openqa.selenium.interactions.touch.TouchActions
import org.openqa.selenium.remote.DesiredCapabilities
import java.net.URL


class Test {
    companion object {

        const val url = "http://localhost:4723/wd/hub"
        val json = """
            {
              "platformName": "Android",
              "platformVersion": "7",
              "automationName": "uiautomator2",
              "appPackage": "com.android.calculator2",
              "appActivity": ".Calculator",
              "noReset": "true",
              "deviceName": "emulator-5554"
            }         
        """.trimIndent()

        val jsonObj = Gson().fromJson(json, HashMap::class.java)
        private val serverURL = URL(url)
        private val capabilities by lazy {
            DesiredCapabilities().apply {
                setCapability(
                    MobileCapabilityType.PLATFORM_NAME,
                    jsonObj.get("platformName")
                )
                setCapability(MobileCapabilityType.DEVICE_NAME, jsonObj.get("deviceName"))
                setCapability(
                    MobileCapabilityType.PLATFORM_VERSION,
                    jsonObj.get("platformVersion")
                )
                setCapability(
                    MobileCapabilityType.AUTOMATION_NAME,
                    jsonObj.get("automationName")
                )
                setCapability(MobileCapabilityType.NO_RESET, jsonObj.get("noReset"))
                setCapability(
                    AndroidMobileCapabilityType.APP_PACKAGE,
                    jsonObj.get("appPackage")
                )
                setCapability(
                    AndroidMobileCapabilityType.APP_ACTIVITY,
                    jsonObj.get("appActivity")
                )
            }
        }
        private val driver by lazy { AndroidDriver<AndroidElement>(serverURL, capabilities) }


        @JvmStatic
        fun main(args: Array<String>) {
            val digit_1 =
                driver.findElementById("com.android.calculator2:id/digit_1") as MobileElement
            val digit_2 =
                driver.findElementById("com.android.calculator2:id/digit_2") as MobileElement
            val digit_3 =
                driver.findElementById("com.android.calculator2:id/digit_3") as MobileElement
            val digit_4 =
                driver.findElementById("com.android.calculator2:id/digit_4") as MobileElement
            val digit_5 =
                driver.findElementById("com.android.calculator2:id/digit_5") as MobileElement
            val digit_6 =
                driver.findElementById("com.android.calculator2:id/digit_6") as MobileElement
            val digit_7 =
                driver.findElementById("com.android.calculator2:id/digit_7") as MobileElement
            val digit_8 =
                driver.findElementById("com.android.calculator2:id/digit_8") as MobileElement
            val digit_9 =
                driver.findElementById("com.android.calculator2:id/digit_9") as MobileElement
            val add = driver.findElementByAccessibilityId("plus");
            val red = driver.findElementByAccessibilityId("minus");
            val mul = driver.findElementByAccessibilityId("multiply");
            val div = driver.findElementByAccessibilityId("divide");
            val clear = driver.findElementByAccessibilityId("delete");
            val equals = driver.findElementByAccessibilityId("equals");
            val result =
                driver.findElementById("com.android.calculator2:id/result") as MobileElement
            for (i in 1..100) {
                val action1 = TouchAction(driver)
                action1.longPress(clear).perform()
                action1.release()
                digit_1.click()
                add.click()
                digit_2.click()
                red.click()
                digit_3.click()
                mul.click()
                digit_4.click()
                div.click()
                digit_5.click()
                digit_6.click()
                digit_7.click()
                println(result.text)
            }

        }
    }
}

运行测试

控制台打印结果