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 面向对象 成员的访问约束
Dec 23 Python
从零学Python之入门(四)运算
May 27 Python
Python中的深拷贝和浅拷贝详解
Jun 03 Python
python绘制条形图方法代码详解
Dec 19 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
Aug 01 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
Python多线程多进程实例对比解析
Mar 12 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
使用matplotlib的pyplot模块绘图的实现示例
Jul 12 Python
如何用Matlab和Python读取Netcdf文件
Feb 19 Python
Python如何使用神经网络进行简单文本分类
Feb 25 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
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
使用JS进行目录上传(相当于批量上传)
2010/12/05 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
node.js中的events.emitter.once方法使用说明
2014/12/10 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
JS实现根据文件字节数返回文件大小的方法
2016/08/02 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
JavaScript 正则命名分组【推荐】
2018/06/07 Javascript
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
浅析TypeScript 命名空间
2020/03/19 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
python不带重复的全排列代码
2013/08/13 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
Python中bisect的用法及示例详解
2020/07/20 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
高中生期末评语大全
2014/01/28 职场文书
地理教师岗位职责
2014/03/16 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
婚庆司仪开场白
2015/05/29 职场文书
护士旷工检讨书
2015/08/15 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
Oracle锁表解决方法的详细记录
2022/06/05 Oracle