Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告


Posted in Python onJanuary 27, 2021

2020年4月补充

鉴于配置自动化测试这套框架确实稍微有点麻烦,许多小伙伴在配置的过程中总是踩坑,最近写了篇简化版的入门教程,不想折腾Android SDK的小伙伴可以移步到那篇文章:https://3water.com/article/169763.htm


概述

本文主要分为以下几个部分

  1. 安装Python3
  2. 安装Python3的Appium库
  3. 安装Android SDK
  4. 安装JDK
  5. 安装Appium
  6. 安装模拟器
  7. 编写测试脚本并生成测试报告

项目示例下载地址: https://github.com/lixk/apptest

正文

一、安装Python3

直接登录Python官网https://www.python.org/,下载最新版本即可。

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

然后安装的时候注意一下安装路径,比如我的安装路径D:\Python37,接下来会用到这个安装路径。

二、安装Python3的Appium库

打开Python安装目录,找到Scripts文件夹,点进去,示例:

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

在地址栏上输入cmd,然后回车,打开控制台:

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

在控制台里输入命令pip install Appium-Python-Client,然后回车

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

看到下图的提示就表明安装成功了

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

三、安装Android SDK

我懒得折腾,所以就直接下载了Android Studio
下载地址
https://developer.android.com/studio/#downloads

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

下载完成开始安装

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

如果需要安装自带的模拟器,就把这一项勾选上,然后Next,接下来选择安装路径,比如我的同样放在D

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

接下来一路Next,到了选择SDK的页面注意一下

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

选择Custom,这样可以只安装自己喜欢的部分,接下来选择主题,当然这个以后可以在Android Studio里边改

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

继续Next,到达定制组件页面,如下图

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

设置一下SDK的安装路径,比如我的是D:\Android\SDK,接下来继续Next…finish。然后就进入了缓慢的下载环节,让它在这儿慢慢的下载吧,下载完成后就好了。我们可以进入下一节了。

四、安装JDK

这里我使用的是JDK8,下载地址
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

接受协议,然后选择对应平台下载即可

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

接下来安装过程比较简单,也是一路Next,注意选择一下安装路径,比如我的安装路径D:\Java\jdk1.8

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

五、安装Appium

官网地址 http://appium.io/

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

点击下载按钮会到GitHub的下载页面,选择对应平台下载

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

Windows就选这个(快捷下载)

安装完成后,启动Appium,host和port默认的即可,然后编辑下配置信息

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

然后点下边那个保存并重启的按钮,然后点第一个Start Server按钮,将会看到

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

如果使用真机测试,插上手机就可以开始编写脚本测试了。但是呢,由于手边没有数据线,就采用模拟器了,所以有了下一节。

六、安装模拟器

这里使用的是夜神模拟器下载地址 https://www.yeshen.com/,之所以不用Android自带的,是因为记得多年前启动一次要好久,然后就再也没用过。
这个也没有什么好说的,也是注意一下安装路径,然后一路下一步就好了。
安装完成后要进行一下简单修改:

  • 打开安装目录,进入到bin目录(比如:D:\Nox\bin
  • 把第三节里安装好的Android SDK里的adb.exe文件(比如我的在D:\Android\SDK\platform-tools目录下)复制到该目录覆盖掉该目录已存在的adb.exe文件
  • 删掉该目录的nox_adb.exe文件,再复制一份adb.exe并重命名为nox_adb.exe
  • 启动模拟器
  • 再该目录打开控制台,执行nox_adb.exe connect 127.0.0.1:62001,然后执行adb devices,看到如下信息就表示成功了

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

在模拟器里安装测试apk文件,这里以一个计算器为例,直接将apk文件拖到模拟器里即可

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

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

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

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

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

import time
import unittest

from appium import webdriver


class MyTests(unittest.TestCase):
 # 测试开始前执行的方法
 def setUp(self):
  desired_caps = {'platformName': 'Android', # 平台名称
      'platformVersion': '4.4.2', # 系统版本号
      '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(8)

 def test_calculator(self, t=500, n=4):
  """计算器测试"""
  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(n):
   self.driver.swipe(x0, y, x1, y, t)
   time.sleep(1)
  self.driver.find_element_by_id('com.youdao.calculator:id/guide_button').click()
  for i in range(6):
   self.driver.find_element_by_accessibility_id('Mathbot Editor').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(3)

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

2.创建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的, 需要的话可以在本文尾部的示例项目中下载。

3.运行run.py文件
等程序运行完之后即会在test_report目录下生成测试报告

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

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

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

到此,全部完成。如果有空的话可以再补充下Appium的使用,比如元素定位之类的,希望本文能帮到初学自动化测试的同学。
项目示例下载地址 https://github.com/lixk/apptest
艾玛,罗嗦这么多,都八点了还没吃晚饭,好饿,今天就先到这里了。


2019/5/21 补充

如果配置跟上边那几步都一致,确实没问题,结果不能正常运行。那么问题可能出在模拟器配置。下边补充下我这边的模拟器配置。

Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告

代码中的'platformVersion': '4.4.2'就是上图中的Android版本。

如果还是有许多人跑不起来,接下来可以考虑抽空录个操作视频,哈哈哈。

到此这篇关于Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告的文章就介绍到这了,更多相关Python3 + Appium + 安卓模拟器实现APP自动化测试内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python 获取文件列表(或是目录例表)
Mar 25 Python
使用go和python递归删除.ds store文件的方法
Jan 22 Python
Python减少循环层次和缩进的技巧分析
Mar 15 Python
Django rest framework基本介绍与代码示例
Jan 26 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
python批量导入数据进Elasticsearch的实例
May 30 Python
Flask模拟实现CSRF攻击的方法
Jul 24 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
对Keras中predict()方法和predict_classes()方法的区别说明
Jun 09 Python
用python写PDF转换器的实现
Oct 29 Python
一个入门级python爬虫教程详解
Jan 27 #Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 #Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 #Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 #Python
python实现scrapy爬虫每天定时抓取数据的示例代码
Jan 27 #Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 #Python
用Python实现定时备份Mongodb数据并上传到FTP服务器
Jan 27 #Python
You might like
URL Rewrite的设置方法
2007/01/02 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
jquery tools之tooltip
2009/07/25 Javascript
深入理解JavaScript系列(11) 执行上下文(Execution Contexts)
2012/01/15 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
2013/01/25 Javascript
jQuery移除tr无效的解决方法(tr是动态添加)
2014/09/22 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
详解Angular-cli生成组件修改css成less或sass的实例
2017/07/27 Javascript
js实现拖拽上传图片功能
2017/08/01 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
详解vue中axios的封装
2018/07/18 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
PyQt5实现下载进度条效果
2018/04/19 Python
python删除本地夹里重复文件的方法
2020/11/19 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
Python global全局变量函数详解
2018/09/18 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
详解python路径拼接os.path.join()函数的用法
2019/10/09 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
python 实现简易的记事本
2020/11/30 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
bonprix荷兰网上商店:便宜的服装、鞋子和家居用品
2020/07/04 全球购物
应届大学生的推荐信
2013/11/20 职场文书
办公设备采购方案
2014/03/16 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
车间安全生产管理制度
2015/08/06 职场文书
护士岗位竞聘书
2015/09/15 职场文书
Nginx同一个域名配置多个项目的实现方法
2021/03/31 Servers
PostgreSQL自动更新时间戳实例代码
2021/11/27 PostgreSQL
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android