appium 自动化测试

发布时间:2023-01-07 23:30

一.移动自动化测试的技术体系

  1. UI 自动化分类

    1. Web 自动化:Selenium

    2. App 自动化:Appium

    3. GUI 自动化:Windows、Mac

    4. 微信小程序自动化:App + Web 测试技术的外延形态

  2. 自动化测试框架选择

    1. 推荐Appium

      1. 跨语言:Java、Python、Node.js 等

      2. 跨平台:Android、iOS、Windows、Mac

      3. 底层多引擎可切换

      4. 生态丰富,社区强大(testerHome)

    2. iOS: KIF、WDA、XCTest

    3. Android: Robotium、UI Automator、UI Automator2

    4. 特色框架:calabash、Macaca、ATX

二.准备工作

  1. Appium 简介
    1.  Appium 是一个开源的、跨平台的测试框架,可以用来测试 Native App、混合应用、移动 Web 应用(H5 应用)等,也是当下互联网企业实现移动自动化测试的重要工具。
    2. Appium、Appium-desktop、Appium Client 的区别是 Appium 体系的核心,因为它本身也是一个 web 接口服务,所以也会被成为 appium server,对外默认开启包括 4723 等多个端口。
    3. Appium-Desktop:是为了让 Appium 能够更好用,让小白入门更容易,让调试和界面分析更方便,官方开发了 GUI 的工具 Appium-desktop。
    4. Appium Client:Appium 只是一个 Web 接口,他接受 HTTP 请求,所以各个语言都可以自己封装发送请 求,于是就有 appium 下的各个子项目。以下是各语言对 Appium Client 做的支持。

      appium 自动化测试_第1张图片

    5. Appium 的设计理念

      appium 自动化测试_第2张图片
    6. Appium 引擎列表 appium 自动化测试_第3张图片
  2.  Appium 的安装 (Mac 版)
    1. npm 方式安装 (官方安装,国际通用,网络不稳定,不建议使用此方式安装)​​​​​​
      > brew install node      # get node.js
      > npm install -g appium  # get appium
      
    2. cnpm 方式安装 (推荐)
      1.  npm install -g cnpm --registry=https://registry.npm.taobao.org
      2. cnpm install -g appium
      3. ​​​pip3 install Appium-Python-Client
  3.  注意事项

    1.  pip 问题:由于mac系统默认安装了python2.7且pip已经不对python2进行管理,导致pip安装失败。
      解决:安装python3,配置path环境变量,否则zsh会报command not found;将本地的python alias python3路径(可参考
      这里

    2. 安装python IDE,使用pycharm 社区版本即可,专业版需要付费

    3. iOS真机证书问题1:由于appium 是基于WebDriverAgent,找到appium文件下WebDriverAgent位置打开配置即可,appiumdesktop的WebDriverAgent通常是在
      /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj

    4.  iOS真机证书问题2: 如果配置玩证书仍旧提示证书问题,可能是由于WebDriverAgent工程的位置没和appium 对应上,根据server提示的路径(一般是在这里/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeproj)找到WebDriverAgent工程配置即可

 三.小试牛刀      

  1. 启动appiumdesktop点击start server
    appium 自动化测试_第4张图片
  2. server启动成功
    appium 自动化测试_第5张图片
  3. start inspector session
    appium 自动化测试_第6张图片
  4. 配置caps参数,官网介绍https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md
    此处配置了:平台、自动化测试框架、设备名称、udid、teamid、开发环境、app路径、每次执行用例是否重置
    appium 自动化测试_第7张图片
  5. 点击start进入 inspector
    inspector提供了图层树,方便定位元素;点击、滑动、输入、刷新、语言选择及用例录制等功能
    appium 自动化测试_第8张图片
  6. inspector操作对应的log会在appiumserver控制台输出如下
    appium 自动化测试_第9张图片
  7. 常用定位手段

    1. id

    2. Accessibility ID

    3. XPath

  8. 元素定位符与复用

    1. findElementByXXX

    2. findElement(by, value)

  9. 常见自动化动作支持

    1. click

    2. sendKeys

    3. swipe

    4. touch action

  10. 常用的设备交付命令

    1. 模拟电话、短信

    2. 横竖屏切换

    3. App处理

    4. 键盘、粘贴板

    5. 录屏

 四.使用pycharm编写用例

        inspector虽然也可以生成用例,可是代码可读性较低,难以维护,为了使用例的可维护行增强,建议使用IDE来编写测试用例

1.配置caps,封装启动过程

# This sample code uses the Appium python client
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python

from datetime import datetime
from time import sleep
import pytest
from appium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

from pageObject.TLMainPage import TLMainPage


class App:
    driver: WebDriver = None

    @classmethod
    def start(cls):
        caps = {}
        caps["platformName"] = "ios"
        caps["automationName"] = "xcuitest"
        caps["deviceName"] = "iPhone 8P"
        caps["udid"] = "5394fc48a76b80e4aff8adacbb1256bc809a6b58"
        caps["xcodeOrgId"] = "E6YTL27QWA"
        caps["xcodeSigningId"] = "iPhone Developer"
        caps["app"] = "/Users/chenwuqi/Documents/appium/VSTimeLine.app"
        caps["noReset"] = False
        caps["autoAcceptAlerts"] = True

        cls.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
        cls.driver.implicitly_wait(1)#隐式等待

        print("1-------------" + datetime.now().strftime(format("%H:%M:%S")))

        def loaded(driver):
            print("2-------------" + datetime.now().strftime(format("%H:%M:%S")))
            if len(cls.driver.find_elements_by_id("btn skip@3x")) >= 1:
                cls.driver.find_element_by_id("btn skip@3x").click()
                return True
            else:
                return False

        try:
            WebDriverWait(cls.driver, 40).until(loaded)#显示等待
        except:
            print("no update")
        return TLMainPage(cls.driver)

    @classmethod
    def quit(cls):
        cls.driver.quit()
  • 创建caps字典,将初始化参数配置好,主要告诉appium当前的测试平台(Android、iOS)、自动化测试框架、设备名称、udid、teamid、开发环境、app路径、每次执行用例是否重置;
  • 这里多了一个autoAcceptAlerts,其主要作用是为了解决系统弹窗问题,由于系统弹窗不属于我们app管理,我们无法识别该弹窗,apple提供了相应API方便自动化测试处理,appium以启动参数的形式供我们配置使用;
  • 隐式等待:implicitly_wait,适用于通用场景,服务端(Appium)会在特定的超时时间内重试多次寻找控件,目的是提高测试用例的健壮性,考虑到系统的动画通常默认时间是0.3s,以及页面绘制等其他消耗,所以这里我们设置了1秒;
  • 显示等待:WebDriverWait(cls.driver, 40).until(loaded),适用于特定场景,比如说我们app启动页的跳过按钮,显示出来可能要10s,这种情况隐式等待是不方便处理的;显示等待通常会有一个最大等待时间和等待条件;我们这里是在40s内循环判断条件是否满足,如果超时则抛出异常

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号