Appium移动自动化测试环境搭建

[Appium移动自动化测试环境搭建]

前言

Appium是一个开源的自动化测试框架,支持跨平台,支持多种编程语言,可用于原生,混合和移动web应用程序,使用webdriver驱动ios,android应用程序、那么为了学习app自动化测试首要任务肯定就是搭建测试开发环境, 因此在这里记一次搭建Appium自动化测试环境的完整过程,文章较长,需要花费一定的时间,请耐心阅读,如果文中有什么错误请指正

安装****Java JDK

JDK环境可以看我之前安装Jenkins时的随笔https://www.cnblogs.com/linuxchao/p/linuxchao-jenkins-setup.html,这里需要注意一点尽量安装jdk 1.8,防止后面链接手机失败

安装****Node.js

安装nodejs之前,我们需要知道,为什么要安装nodejs? 因为appium是nodejs实现的,node相当于appium的解释器

Node.js下载地址:https://nodejs.org/en/download/current/

由于我的电脑是windows 64位的系统,这里我直接下载windows 64位的msi程序文件

下载完成后直接双击安装即可(傻瓜式的安装),所以我就不说具体步骤了,安装后,检查是否安装成功

cmd终端输入第一个命令 node -v

image.png

npm -version,输出下面的信息


image.png

ok, 这说明node.js已经安装成功

安装Appium server

不知道你做过或者学习过selenium没有,这里的appium server 相当于 selenium中的浏览器驱动程序,当启动浏览器驱动时会初始化一个服务器,绑定本机的地址和端口,那么Appium server也一样,当启动appium时同样会初始化一个服务器绑定本地的地址和端口

安装server有两种方式

第一种:使用npm工具

使用命令 npm install -g appium 安装,不过这种安装方式比较慢

第二种:安装desktop版本

windows的用户通常使用这种安装方式。这种安装方式还是比较快的,但是下载安装包也比较慢,好歹安装没出现什么问题

下载地址

https://github.com/appium/appium-desktop/releases (这个是官网的地址,按下图下载最新的安装即可)

image.png

下载完成之后,直接双击安装

傻瓜式安装,默认安装目录: C:\Users\机器名\AppData\Local\Programs\Appium

安装完成后能够成功打开桌面的appium程序,说明安装过程暂时没什么问题

image

安装Android SDK,可以使用模拟adb进行配置

(如果已经有了,直接配置环境变量就行)可参考 https://www.jianshu.com/p/4ac1313b50cb
1、安装android sdk 不想安装略过这部分

下载SDK及安装

下载地址: https://www.androiddevtools.cn/

image

下载完成后,直接双击安装即可

安装完成后,找到你的安装目录,并找到SDK-manager工具双击打开

image
image

自己根据需求选择对应的sdk build-tools,Android SDK Platform-tools及api,api我选择的API 22(5.1.1)版本

Android SDK Platform-tools, SDK build-tools我这里是直接下载安装的最新版本,如果你下载的版本比较低的话,后面链接模拟器或者真机时可能会链接不上

点击上图中的[Install packages],弹出下面的页面,点击Accept License后安装,等待所有包安装完成(所需时间比较久,请耐心等待)

image

配置环境变量

image

新建系统变量

ANDROID_HOME=D:\Program Files\Android\android-sdk变量及值(SDK的安装目录)

image

添加系统变量

把platform-tools及tools添加到系统环境变量,变量值(路径)之间使用分号隔开,两个变量值分别为:%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\tools;或者直接添加绝对路径

image

配置完环境变量之后,我们就可以使用adb命令了

image

2、使用模拟adb进行配置

我们不打算依赖Android SDK,所以安装完成后要从模拟器里抽出adb给Appium用,所以要进行如下配置:

1.新建一个文件夹android-sdk,然后在该文件夹下新建platform-tools,比如我的:D:\android-sdk\platform-tools

2.打开模拟器安装目录,进入到bin目录(比如:D:\Nox\bin),复制adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll三个文件到上边创建的platform-tools文件夹

image.png

image.png

安装Appium Client

我们使用python开发appium的自动化测试脚本,肯定离不开appium的一些api库,所以说这里的appium 客户端就是python代码使用的库,用来连接appium server 及操作app

安装appium client 就非常简单了,只要你已经配置好了python环境,就可以直接使用pip安装了,cmd 执行pipi install Appium-Python-Client即可完成安装,输入下图命令不报错,代表已经安装成功。
参考资料地址:https://pypi.org/project/Appium-Python-Client/

image

环境检查

这步可省。初学不建议省。
打开CMD执行命令 npm install -g appium-doctor 安装appium-doctor
如果下载特别慢可以使用cnpm
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install appium-doctor -g

image

现在们就可以使用appium-doctor命令检查整个环境是否有问题了

cmd执行 appium-doctor命令,如何你的输出信息和我的一样那么恭喜你环境搭建成功了

image

安装模拟器

模拟器的很多种,

Genymotion现在官网下载必须注册账号(跳转下载), 可以先注册账号然后下载.

请注意:Genymotion的运行需要Oracle VirtualBox的支持,官网下载的安装包也有两个版本,一个是包括的虚拟机的版本,另外一个是不包括虚拟机的版本.请结合自身情况,请选择对应合适的版本进行安装.

image

安装过程省略,就是选对路径之后一路next就完成了,再次声明Genymotion安装虚拟机许要有Oracle VirtualBox的支持.

上面也说到了,由于Genymotion虚拟机是基于X86架构的,但是现在大多数APP是ARM架构,这就导致了许多APP在虚拟机上会出现安装失败的错误.但是Genymotion提供了简单的ARM-Translation,只需要简单的拖入到虚拟机安装,就可以解决无法安装app的问题,可以说是十分方便,具体下载链接自行百度,注意一定要对应自己的Android版本.

特别注意:拖动安装ARM-Translation.zip的时候,文件路径不能含有中文,否则虚拟机会把安装动作当成复制动作,导致安装无法完成

注意,一定要将Genymotion的adb地址改为本机安装的Android SDK的adb地址,否则可能会出现许多意想不到的问题导致环境安装失败,如果本机有其他的adb程序占用端口,无比卸载其他程序避免adb无法正常启动,出现各种奇形怪状的问题.

image

下载完成后直接安装,安装完成后,桌面会生成两个图标,夜神模拟器和夜神多开器

连接模拟器

开启模拟器的开发者模式

点击模拟器的设置-点击关于平板电脑-点击版本号(会有提示点击几次打开开发者模式)

image

打开CMD终端,切换cmd 的工作目录到夜神模拟器的安装目录的bin目录下(或者你把这个目录添加到环境变量也可以,但是最好不要添加到环境变量,因为bin目录下也存在一个adb.exe会和Android SDK中的adb.exe冲突),执行命令 nox_adb.exe connect 127.0.0.1:62001(不同模拟器的这个端口号不同)

如果执行命令时提示类似:abd server version(40) doesn't match this client (36) 这样的失败信息,那么说明你的server(夜神模拟器的adb(nox_adb.exe))和client(Android SDK中的adb)版本不对应

解决版本不对应的问题如下:如果没有问题直接跳过下面一步:

检查版本

cmd 输入 adb version 查看client版本

image

cmd切换到夜神安装目录的bin目录下,执行nox_adb.exe version

image

我的版本是一样的,你的可能是两个不同的版本号, 你需要把Android SDK中的adb拷贝到夜神模拟器安装目录下的bin目录下,并重命名为nox_adb.exe 并替换原来的即可。

连接模拟器

接下来我们就可以测试连接是否正常了,输入命令 nox_adb.exe connect 127.0.0.1:62001(这里要注意执行命令的目录,应为夜神模拟器安装目录的bin目录下)

image

看到上面的提示后,接着再次输入命令 adb devices (注意:不要在上面的目录下继续输入命令,因为bin下同样存在一个adb.exe ,如果你还在这个目录下执行adb命令,那么使用的并不是Android SDK中的adb,所以切换到其他任意目录执行命令)

image

如果你看到的是上图中的信息, 说明已经成功连接上了模拟器, 这里只能说明Android的开发环境没问题了,但是进行自动化时还不一定能够正常控制模拟器

连接真机

将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
将设备与电脑通过 USB 线连接
Android 设备的开发者选项和 USB 调试模式已开启。
可以到「设置」-「开发者选项」-「Android 调试」查看。
如果在设置里找不到开发者选项,在「设置」-「关于手机」连续点击「版本号」7 次。
adb devices # 看到xxxxxx device即表示连接成功

安装测试apk

在模拟器里安装测试apk文件,这里以一个计算器app(点击下载https://github.com/lixk/apptest/blob/master/%E6%B5%8B%E8%AF%95apk/com.youdao.calculator-2.0.0.apk
为例,直接将apk文件拖到模拟器里即可

image.png

继续在刚刚的控制台窗口里输入aapt dump badging D:\apk\com.youdao.calculator-2.0.0.apk,其中D:\apk\com.youdao.calculator-2.0.0.apk是测试apk的完整路径。


image.png

可以看到安装包的信息都打印出来了,记录下红框里这两个名称,待会儿写测试脚本的时候要用。
注意,如果模拟器重启了,需要执行adb.exe connect 127.0.0.1:62001。

7、编写测试脚本并生成测试报告

创建测试用例目录testcase,在该目录下创建test_app.py文件

import time
import unittest

from appium import webdriver


class MyTests(unittest.TestCase):
    # 测试开始前执行的方法
    def setUp(self):
        desired_caps = {'platformName': 'Android',  # 平台名称
                        'platformVersion': '5.1.1',  # 系统版本号
                        'deviceName': '127.0.0.1:62001',  # 设备名称。如果是真机,一般在'设置->关于手机->设备名称'里查看
                        'appPackage': 'com.youdao.calculator',  # apk的包名
                        'appActivity': 'com.youdao.calculator.activities.MainActivity'  # activity 名称
                        }
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)  # 连接Appium
        self.driver.implicitly_wait(6)

    def test_calculator(self):
        """计算器测试"""
        time.sleep(3)
        window = self.driver.get_window_size()
        x0 = window['width'] * 0.8  # 起始x坐标
        x1 = window['width'] * 0.2  # 终止x坐标
        y = window['height'] * 0.5  # y坐标
        for i in range(3):
            self.driver.swipe(x0, y, x1, y, 500)
            time.sleep(1)
        self.driver.find_element_by_id('com.youdao.calculator:id/guide_button').click()
        time.sleep(1)
        for i in range(6):
            self.driver.find_element_by_id('com.youdao.calculator:id/frag_calculator').click()
            time.sleep(1)

        btn_xpath = '/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.widget.DrawerLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout[3]/android.view.View/android.widget.GridView/android.widget.FrameLayout[{0}]/android.widget.FrameLayout'
        self.driver.find_element_by_xpath(btn_xpath.format(7)).click()
        self.driver.find_element_by_xpath(btn_xpath.format(10)).click()
        self.driver.find_element_by_xpath(btn_xpath.format(8)).click()
        time.sleep(5)

    # 测试结束后执行的方法
    def tearDown(self):
        self.driver.quit()

其中,appPackage和appActivity对应上边aapt命令查出来的app信息。
platformVersion指的是系统版本号,对应模拟器或者真机的版本,如下

创建run.py文件

import os
import time
import unittest

from HTMLTestRunner import HTMLTestRunner

test_dir = './testcase'
discover = unittest.defaultTestLoader.discover(start_dir='./testcase', pattern="test*.py")

if __name__ == "__main__":
    report_dir = './test_report'
    os.makedirs(report_dir, exist_ok=True)
    now = time.strftime("%Y-%m-%d %H-%M-%S")
    report_name = '{0}/{1}.html'.format(report_dir, now)

    with open(report_name, 'wb') as f:
        runner = HTMLTestRunner(stream=f, title="测试报告", description="本测试报告内容包含超级计算器的简单测试")
        runner.run(discover)

导出测试报告用到了HTMLTestRunner,但是Python3的好像有问题,在网上找了两个修改后支持Python3的,需要的话可以在本文尾部的示例项目中下载。

运行run.py文件

等程序运行完之后即会在test_report目录下生成测试报告

在浏览器里打开即可看到报告内容,示例

至此,全部完成。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,406评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,976评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,302评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,366评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,372评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,457评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,872评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,521评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,717评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,523评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,590评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,299评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,859评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,883评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,127评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,760评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,290评论 2 342

推荐阅读更多精彩内容