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实现的数据结构与算法之快速排序详解
Apr 22 Python
python输出指定月份日历的方法
Apr 23 Python
Python3 循环语句(for、while、break、range等)
Nov 20 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
用Python实现数据的透视表的方法
Nov 16 Python
Django自带的加密算法及加密模块详解
Dec 03 Python
python的json中方法及jsonpath模块用法分析
Dec 06 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
Python常见反爬虫机制解决方案
Jun 01 Python
浅谈pytorch中torch.max和F.softmax函数的维度解释
Jun 28 Python
如何表示python中的相对路径
Jul 08 Python
Python机器学习工具scikit-learn的使用笔记
Jan 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 header示例代码(推荐)
2010/09/08 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
php绘制一个矩形的方法
2015/01/24 PHP
ThinkPHP模型详解
2015/07/27 PHP
Swoole扩展的6种模式深入详解
2021/03/04 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
封装好的js判断操作系统与浏览器代码分享
2015/01/09 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
微信小程序 详解Page中data数据操作和函数调用
2017/01/12 Javascript
详解Vue双向数据绑定原理解析
2017/09/11 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
[00:06]Yes,it worked!小卡尔成功穿越时空加入战场!
2019/07/20 DOTA
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python学生管理系统的实现
2020/04/05 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
基于Python的自媒体小助手---登录页面的实现代码
2020/06/29 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
HTML5 直播疯狂点赞动画实现代码 附源码
2020/04/14 HTML / CSS
外贸业务员求职信
2014/06/16 职场文书
事业单位聘任报告
2015/03/02 职场文书
工作时间调整通知
2015/04/24 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
Python opencv缺陷检测的实现及问题解决
2021/04/24 Python
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
2022/06/01 Servers