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爬虫抓取豆瓣电影TOP100及用户头像的方法
Jan 20 Python
Python中的if、else、elif语句用法简明讲解
Mar 11 Python
在Python 中实现图片加框和加字的方法
Jan 26 Python
用python 实现在不确定行数情况下多行输入方法
Jan 28 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
Python逐行读取文件内容的方法总结
Feb 14 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
用python对oracle进行简单性能测试
Dec 05 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 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向socket服务器收发数据的方法
2015/01/24 PHP
iOS+PHP注册登录系统 PHP部分(上)
2016/12/26 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
web 页面分页打印的实现
2009/06/22 Javascript
JavaScript使用过程中需要注意的地方和一些基本语法
2010/08/26 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
jquery 面包屑导航 具体实现
2013/06/05 Javascript
鼠标拖拽移动子窗体的JS实现
2014/02/25 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
jquery及js实现动态加载js文件的方法
2016/01/21 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
JS基于贪心算法解决背包问题示例
2017/11/27 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
使用webpack搭建vue项目及注意事项
2019/06/10 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
小程序实现左滑删除的效果的实例代码
2020/10/19 Javascript
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[39:46]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第二场 11.25
2020/11/25 DOTA
Python与Redis的连接教程
2015/04/22 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
python调用摄像头显示图像的实例
2018/08/03 Python
Django model 中设置联合约束和联合索引的方法
2019/08/06 Python
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
电大学习个人自我评价范文
2013/10/04 职场文书
电大自我鉴定
2013/10/27 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
同学会邀请函模板
2015/01/30 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL
sql注入报错之注入原理实例解析
2022/06/10 MySQL