一,为什么是Appium
借一张图:

1.1 Appium优点

l  开源

l  跨架构:NativeApp、Hybird App、Web App

l  跨设备:Android、iOS、Firefox OS

l  不依赖源码

l  使用任何WebDriver 兼容的语言来编写测试用例。比如 Java, Objective-C, JavaScript with Node.js, PHP, Python, Ruby, C#, Clojure, 或者 Perl.

l  不需要重新编译APP

1.2 Appium理念

l  你无需为了自动化,而重新编译或者修改你的应用。

l  你不必局限于某种语言或者框架来写和运行测试脚本。

l  一个移动自动化的框架不应该在接口上重复造轮子。(WebDriver)

l  无论是精神上,还是名义上,都必须开源。

1.3 Appium架构

借一张图:

iOS: 苹果的UIAutomation
Android 4.2+: Google的UiAutomator
Android 2.3+: Google’s Instrumentation. (由单独的项目Selendroid提供支持 )

Appium 1.6版本以上增加了UiAutomator2

为了满足上面跨平台,把这些三方框架封装成一套API —— WebDriver Api(客户端到服务端的协议)

事实上 WebDriver 已经成为 web 浏览器自动化的标准,也成了 W3C 的标准 —— W3CWorking Draft,所以Appium在原有基础上扩充了移动自动化相关的API。

投资 WebDriver 意味着你可以押宝在一个已经成为标准的独立,自由和开放的协议。你不会被任何专利限制。

核心架构:Appium使用C/S架构,运行时候Service端会监听Client端发送的命令,接着在移动设备上执行这些命令,然后将执行结果放在 HTTP 响应中返还给客户端。

基于这架构可以做什么?

可以用任何实现了该客户端的语言来写测试代码

可以把服务端放在不同的机器上

可以只写测试代码,然后利用类似Testin 云服务解决方案来解释命令.

二,Appium环境搭建
需要用到的软件如下:

1. jdk-8u121-window(32位的就下载32位的,64位的就下载64位的)。

2.Android-sdk_r24.3.4-windows(下载这个adt-bundle-windows-x86-20140624)

3.Python:(V3.6也可以)

4.appium:1.4.13.1

5.Node.js:node-v4.4.7-x64

6.Appium-python-Client

7.pycharm

其中1-5是可以先下载的,6则需要在完成前面的五个步骤后才进行,7为可选Ide工具。

2.1 JDK
下载好jdk直接点下一步就可以了,然后开始配置变量,参考如下路径:http://jingyan.baidu.com/article/d45ad148ba5ab169552b80d3.html

注意:

classpath值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

path值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;是有“.”这个符号的不能漏掉

按快捷键win+r,在运行内输入cmd,并输入Java,回车,如果出来的是些用法中文,那说明这是正确的,在接下来输入javac,回车,如果出现些用法中文,说明是环境变量配好了。

2.2 下载SDK
http://www.androiddevtools.cn/

直接下载adt/Android studio完美集成,下载好后并进行解压,然后开始配置三个变量:

1.解压adt集成包到合适的路径下面,比如D:\adt\

2.设置安卓环境变量

配置环境变量,

设置ANDROID_HOME系统变量为你的android SDK路径,并把tools和platform-tools两个目录加入到系统的Path路径里。

eg:添加变量名:ANDROID_HOME 变量值: D:\adt\sdk

并把这句添加到 %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools记得要加上";"

配置完环境后,可以在运行cmd后输入 adb(能看到当前版本号),再输入android-h(tools目录下的,如果出来一堆文字则是可以的)

2.3 安装python
进入官网或百度下载python下载好后安装到所需安装路径,如在D盘中新建一个python文件夹,如d:\python34

安装完成后将D:\python和D:\python\Scripts,添加到环境变量path下

打开cmd输入python,出现版本号,然后输入print("helloworld!")这样python就是安装好了。

2.4 安装node.js
进入官网地址并下载:https://nodejs.org/en/download/

下载后一路傻瓜式安装,安装完成后,运行cmd,输入node –v查看版本号,然后输入npm

2.5 安装appium服务端
方法一:进入官网地址并下载

https://bitbucket.org/appium/appium.app/downloads/

完整安装带UI的appium,可以从官网直接下载dmg(mac)或者zip(Windows),运行里面的app即可。

appium安装好后:

找到这个文件安装目录D:\appium\node_modules\.bin

将上面的地址添加到环境变量path下;

方法二:node.js包管理安装

npm install -g appium

appium –v

npm install -g appium-doctor

appium-doctor

命令安装的appium是控制台程序,没有UI界面。可到github搜索appium的appiumDesktop项目中下载最新版本

但是由于GFW关系,此方法会在安装过程中卡住或是直接报错,解决办法:挂VPN代理FQ;为了满足国内开发人员的需要,淘宝npm镜像cnpmjs.org可替代官方版本。打开输入:

npm install -g appium --registry=https://registry.npm.taobao.org

方法三:百度pan

直接下载appium的GUI界面安装包,下载地址:https://pan.baidu.com/s/1jGvAISu#list/path=%2F,Windows最新版本是AppiumForWindows_1.4.16.1.zip,MacOS最新版本是appium-1.5.3.dmg。笔者以windows为例,下载的AppiumForWindows_1.4.16.1.zip 进行解压安装,启动appium,弹出错误提示框

很容易在网上查到错误原因,因为node.js需要.NETFramework框架的支持,所以在这里需要安装net framework4.5。当.net framework 4.5安装完成,再次启动Appium,

打开appium

appium安装好后:

找到这个文件安装目录D:\appium\node_modules\.bin

将上面的地址添加到环境变量path下;

Tips:检查appium的所有需求环境

npm install -g appium-doctor

appium-doctor

打开cmd,输入appium-doctor,检查环境是否OK,出现allchecks were successful,说明环境OK;

2.6 安装Appium-Python-Client
进入cmd 输入:pip install Appium-Python-Client。通过Python安装等待安装完成。

如果从官方的资源库下载Appium-Python-Client失败,请自行更换下载源重新下载。在命令行输入"pip install Appium-Python-Client -ihttp://pypi.douban.com/simple"重试

Tips:检查selenium版本3.3.3

安装 Appium-Python-Client 的同时会安装一个selenium模块.试着进入python3交互命令行,然后执行下面命令:

import selenium

selenium.__version__

如果你显示的 selenium 版本是当前最新版本3.3.3的话,那么最好使用下面命令将版本装成3.0.2,网传某些Api的话会报错。

pip3 install -I selenium==3.0.2

2.7 安装pycharm
安装流程参考:http://www.jianshu.com/p/042324342bf4

需要激活可以购买正版或网上搜索激活码。

三,简单自动化测试用例编写
3.1 新建Python unit test文件
新建Python unit test类型文件,对test类补充setup及teardown函数

对类MyTestCase添加setUp函数(这是测试用例执行前的准备动作,负责告诉appium监听那个端口、与那个手机连接、安装那个应用等信息)

对类MyTestCase添加TearDown函数(这是测试用例执行结束后的动作,可以执行保存执行结果等操作)

3.2 编写测试用例
简单实例点位两个控件,执行点击事件

# MyTestCase.py

#!/usr/bin/env python
# _*_ coding:utf-8 _*_

import unittest
import selenium
import time
from appium import webdriver

class MyTestCase(unittest.TestCase):

@classmethod
def setUp(self):
# super().setUp()
print('selenium version = ', selenium.__version__)
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4'
desired_caps['deviceName'] = '192.168.1.54:5555'
desired_caps['appPackage'] = 'com. xx'
#desired_caps['app'] = 'F:// debug.apk'
desired_caps['appActivity'] = 'com.xx.MainActivity'
self.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)

def test_something(self):
print('test_something click ------ ')

# xpath:
time.sleep(2)
self.driver.find_element_by_xpath("//android.widget.ListView/android.widget.TextView[contains(@text,'测试')]").click()

# uiautomator -UiSelector:
# name方式在1.5版本后已废除,能找到接口,不可使用,使用new UiSelector().text替代
# self.driver.find_element_by_android_uiautomator("newUiSelector().text(\"测试\")").click()

# class_name - child:
# items =self.driver.find_elements_by_class_name('android.widget.TextView')
# items[1].click()

# id:
time.sleep(2)
self.driver.find_element_by_id('com.hisense.vod:id/test_video_resize').click()

@classmethod
def tearDown(self):
time.sleep(5)
print('tearDown ------ ')
self.driver.quit()

if __name__ == '__main__':
unittest.main()

四,踩坑
1 selenium版本3.3.3兼容性
安装 Appium-Python-Client 的同时会安装一个selenium模块.试着进入python3交互命令行,然后执行下面命令:

import selenium

selenium.__version__

结果

如果你显示的 selenium 版本是当前最新版本3.3.3的话,那么最好使用下面命令将版本装成3.0.2

pip3 install -I selenium==3.0.2

否则的话,在使用Appium-Python-Client的某些Api的话会报错.应该是版本兼容性的问题,3.11已修复的。

2 findElementByName无效.
Searching by name was deprecated over ayear ago and removed from 1.5. In general, searching by accessibility id isbetter for a variety of reasons.

如上findElementByName这个方法从Appium 1.5之后删除了,但是API不经能找到并且也没提示过时,这不坑爹嘛。后来使用下面的代码才解决用name,即text查找元素的方法。

java:

1

2

String query = "new UiSelector().textContains" + "(\"" + locator.value + "\")";

webElements = mDriver.findElementsByAndroidUIAutomator (query);

Python:

self.driver.find_element_by_android_uiautomator("newUiSelector().text(\"测试\")").click()
3 据说Appium 1.6.3可以查找 Toast 的信息了.

试了下网上的例子发现不好使,一度以为是Client版本的问题。搞了半天才发现需要加下面的代码:

java:

1

capabilities.setCapability (MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);

4 安装的时候重新签名
无意中发现测试的时候弹Toast报错,然后直接编译安装却不保存,猜测是不是在安装过程中Appium改了啥,看了下Service日志,竟然在安装的时候重新签名…

App not signed with debug cert.

2017-02-13 18:17:19:848 - info: [debug] [ADB] Resigning apk.

2017-02-13 18:17:23:938 - info: [debug] [ADB] Zip-aligning 'app-debug.apk'

2017-02-13 18:17:24:104 - info: [AndroidDriver] Remote apk path is /data/local/tmp/463eb03788048b4a1dacfe28545ee76e.apk

解决方法:

java:

capabilities.setCapability(AndroidMobileCapabilityType.NO_SIGN, true);
---------------------
作者:起个昵称那么难
来源:CSDN
原文:https://blog.csdn.net/qq_16206535/article/details/79586818
版权声明:本文为博主原创文章,转载请附上博文链接!

自动化测试 - Appium + Python史上最全最简环境搭建步骤的更多相关文章

  1. 【转】自动化测试 - Appium + Python史上最全最简环境搭建步骤

    一,为什么是Appium借一张图: 1.1 Appium优点 l  开源 l  跨架构:NativeApp.Hybird App.Web App l  跨设备:Android.iOS.Firefox ...

  2. 转 史上最详细的Hadoop环境搭建

    GitChat 作者:鸣宇淳 原文:史上最详细的Hadoop环境搭建 关注公众号:GitChat 技术杂谈,一本正经的讲技术 [不要错过文末活动哦] 前言 Hadoop在大数据技术体系中的地位至关重要 ...

  3. Appium+python(1)简单的介绍环境搭建

    环境搭建其实并不难,只不过安装的东西有点多,要加的环境变量有点多. 链接:https://pan.baidu.com/s/1nwLhNIT 密码:56wn 这个压缩包里要用的都有了,只需要下载,然后安 ...

  4. 史上最强Java开发环境搭建

    在项目产品开发中,开发环境搭建是软件开发的首要阶段,也是必须阶段,只有开发环境搭建好了,方可进行开发,良好的开发环境搭建,为后续的开发工作带来极大便利. 对于大公司来说,软件开发环境搭建工作一般是由运 ...

  5. python史上最全学习路线图

    ps:盘它 python入门教程 关注微信公众号,回复"python入门"获取视频下载地址

  6. 教你如何快速上手markdown语法,编写技术博客(史上最全最简,用MarkDown写博客)

    首先,进行有道云笔记官网,新建一份markdown文档, 如下图 然后,在文档编辑区,左边,复制如下段落文字 加粗 斜线 标记颜色 下划线 废弃线 一级标题 二级标题 三级标题 四级标题 五级标题 六 ...

  7. 史上最详细的Hadoop环境搭建(转)

    转载的文章,请告知侵删.本人只是做个记录,以免以后找不到. 前言 Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的扎实程度,会决定在大数据技 ...

  8. 你想找的Python资料这里全都有!没有你找不到!史上最全资料合集

    你想找的Python资料这里全都有!没有你找不到!史上最全资料合集 2017年11月15日 13:48:53 技术小百科 阅读数:1931   GitHub 上有一个 Awesome - XXX 系列 ...

  9. 史上最全的 jmeter 获取 jdbc 数据使用的4种方法——(软件测试Python自动化)

    周五,下班了吗?软件测试人. 明天是周末了!给大家推荐一个技术干货好文.史上最全的 jmeter 获取 jdbc 数据使用的四种方法.我也精剪了jmeter的自动化接口测试的视频放在了同名UP主,周末 ...

随机推荐

  1. 最常见的5个导致 RAC 实例崩溃的问题

    适用于: OracleDatabase - Enterprise Edition - 版本11.2.0.1 和更高版本本文档所含信息适用于所有平台 用途 本文档的目的是总结可能导致 RAC 实例崩溃的 ...

  2. BZOJ2733:[HNOI2012]永无乡

    浅谈线段树合并:https://www.cnblogs.com/AKMer/p/10251001.html 题目传送门:https://lydsy.com/JudgeOnline/problem.ph ...

  3. GPRS模块用TCP实现MQTT协议(基于SIM900A)

    mqtt部分: int strlen(char *str) { int len = 0; while (*str != '\0') { len++; str++; } return len; } // ...

  4. 微服务理论之五:微服务架构 vs. SOA架构

    一.面向服务的架构SOA 面向服务的架构是一种软件体系结构,应用程序的不同组件通过网络上的通信协议向其他组件提供服务.通信可以是简单的数据传递,也可以是两个或多个服务彼此协调连接.这些独特的服务执行一 ...

  5. 实现oracle分页---3种方法--

    oracle的分页一共有三种方式 方法一 根据rowid来分 SELECT * FROM EMP WHERE ROWID IN (SELECT RID FROM (SELECT ROWNUM RN, ...

  6. IIS及时回收

    在打开的列表中更改以下设置:回收——固定时间间隔(分钟) 改为 0进程模型——闲置超时(分钟) 改为 0

  7. Pycharm的远程代码编辑

    作为一个从java转到python的程序猿,一直觉得python的远程代码调试能力不如java,远程调试一把需要各种改代码,牵扯到eventlet库的时候,问题就更严重,需要调整eventlet的各种 ...

  8. Java视频播放器的制作

    ----------------siwuxie095                             使用 Java Swing 框架制作一个简单的视频播放器:         首先到 Vid ...

  9. 使用 Chrome Timeline 来优化页面性能

    使用 Chrome Timeline 来优化页面性能 有时候,我们就是会不由自主地写出一些低效的代码,严重影响页面运行的效率.或者我们接手的项目中,前人写出来的代码千奇百怪,比如为了一个 Canvas ...

  10. 手机连接fiddler后,浏览器无法打开网页或者fiddler抓取不到手机应用相关数据的情况

    关于手机如何连接fiddler,网上有很多教程,我暂时就不写了 今天在使用fiddler的过程中,发现fiddler突然无法抓取移动端应用的数据包,再三确认连接无误.因此就开始了解决之旅 起因是安卓手 ...