原文链接

背景

在2018年的时候曾写过一篇自动化测试的文章,没想到这么受欢迎。原文地址:https://blog.csdn.net/u013314786/article/details/83216390

在这一年多的时间里,挺多小伙伴看到了那篇文章,但是自己在操作过程中遇到了各式各样的问题,然后通过留言、私信、加QQ等方式联系我,而我又经常不在线,不能及时帮大家解决问题。
所以抽空专门为想要入门自动化测试的初学者再写一篇文章。本文内容仅包含自动化测试环境配置、基本的demo测试及生成测试报告,没有高级功能介绍,目的只是带门外的小伙伴入个门,故配置方面尽量简化了。
虽然本文会复用上一篇文章的部分内容,但比上一篇要简单。比如,本文在使用模拟器测试的基础上,直接复用模拟器中的工具包,不再需要安装Android SDK(当然如果有能力折腾的话建议安装原版Android SDK+最新版Appium)。

概述

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

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

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

正文

一、安装Python3

直接登录Python官网https://www.python.org/,下载最新版本即可。
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图1
然后安装的时候注意一下安装路径,比如我的安装路径D:\Python37,接下来会用到这个安装路径。

二、安装Python3的Appium库

打开Python安装目录,找到Scripts文件夹,点进去,示例:
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图2在地址栏上输入cmd,然后回车,打开控制台:
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图3
在控制台里输入命令pip install Appium-Python-Client,然后回车
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图4
看到下图的提示就表明安装成功了
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图5

三、安装JDK

这里我使用的是JDK8,官网下载地址
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
选择对应平台下载即可
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图6
现在下载JDK好像要账号登录,不想麻烦的话,百度下“JDK8 下载”之类的关键词,有许多下载网站,选个靠谱的下载即可。

接下来安装过程比较简单,也是一路Next,注意选择一下安装路径,比如我的安装路径D:\Java\jdk1.8
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图7

四、安装模拟器

这里使用的是夜神模拟器,官网地址 https://www.yeshen.com/
本文使用的版本:v6.6.0.5(点击下载)
这个也没有什么好说的,也是注意一下安装路径,然后一路下一步就好了。

由于本文我们不打算依赖Android SDK,所以安装完成后要从模拟器里抽出 adb 给Appium用,所以要进行如下配置:

  1. 新建一个文件夹android-sdk,然后在该文件夹下新建platform-tools,比如我的:D:\android-sdk\platform-tools
  2. 打开模拟器安装目录,进入到bin目录(比如:D:\Nox\bin),复制adb.exeAdbWinApi.dllAdbWinUsbApi.dll三个文件到上边创建的platform-tools文件夹
    Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图8
    Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图9
  3. 启动模拟器
  4. 启动完成后,在模拟器bin目录打开控制台,执行adb.exe connect 127.0.0.1:62001,然后执行adb devices,看到如下信息就表示成功了Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图10
  5. 在模拟器里安装测试apk文件,这里以一个计算器app(点击下载)
    为例,直接将apk文件拖到模拟器里即可Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图11
  6. 继续在刚刚的控制台窗口里输入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自动化测试,并生成测试报告(简化版) - 图12
    可以看到安装包的信息都打印出来了,记录下红框里这两个名称,待会儿写测试脚本的时候要用。
    注意,如果模拟器重启了,需要执行第4步的adb.exe connect 127.0.0.1:62001

五、安装Appium

鉴于本文宗旨是教大家尽可能简单的入门自动化测试,这里没有选用最新版的Appium,因为最新版的Appium即便运行一个最简单的测试demo也需要安装完整的Android
SDK。
本文所用的Appium下载地址:<https://github.com/appium/appium-
desktop/releases/download/v1.7.1/appium-desktop-setup-1.7.1.exe>

关于Appium更多信息,请参考官网 http://appium.io/
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图13
安装完成后,启动Appium,host和port默认的即可,然后编辑下配置信息,ANDROID_HOMEJAVA_HOME就是上边SDK和JDK的路径。
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图14
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图15
然后点下边那个保存并重启的按钮,然后点第一个Start Server按钮,将会看到
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图16

七、编写测试脚本并生成测试报告

  1. 创建测试用例目录testcase,在该目录下创建test_app.py文件
  1. import unittest
  2. from appium import webdriver
  3. class MyTests(unittest.TestCase):
  4. # 测试开始前执行的方法
  5. def setUp(self):
  6. desired_caps = {'platformName': 'Android', # 平台名称
  7. 'platformVersion': '5.1.1', # 系统版本号
  8. 'deviceName': '127.0.0.1:62001', # 设备名称。如果是真机,一般在'设置->关于手机->设备名称'里查看
  9. 'appPackage': 'com.youdao.calculator', # apk的包名
  10. 'appActivity': 'com.youdao.calculator.activities.MainActivity' # activity 名称
  11. }
  12. self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps) # 连接Appium
  13. self.driver.implicitly_wait(6)
  14. def test_calculator(self):
  15. """计算器测试"""
  16. time.sleep(3)
  17. window = self.driver.get_window_size()
  18. x0 = window['width'] * 0.8 # 起始x坐标
  19. x1 = window['width'] * 0.2 # 终止x坐标
  20. y = window['height'] * 0.5 # y坐标
  21. for i in range(3):
  22. self.driver.swipe(x0, y, x1, y, 500)
  23. time.sleep(1)
  24. self.driver.find_element_by_id('com.youdao.calculator:id/guide_button').click()
  25. time.sleep(1)
  26. for i in range(6):
  27. self.driver.find_element_by_id('com.youdao.calculator:id/frag_calculator').click()
  28. time.sleep(1)
  29. 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'
  30. self.driver.find_element_by_xpath(btn_xpath.format(7)).click()
  31. self.driver.find_element_by_xpath(btn_xpath.format(10)).click()
  32. self.driver.find_element_by_xpath(btn_xpath.format(8)).click()
  33. time.sleep(5)
  34. # 测试结束后执行的方法
  35. def tearDown(self):
  36. self.driver.quit()

其中,appPackageappActivity对应上边 aapt 命令查出来的app信息。
platformVersion指的是系统版本号,对应模拟器或者真机的版本,如下
Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图17

  1. 创建run.py文件
  1. import time
  2. import unittest
  3. from HTMLTestRunner import HTMLTestRunner
  4. test_dir = './testcase'
  5. discover = unittest.defaultTestLoader.discover(start_dir='./testcase', pattern="test*.py")
  6. if __name__ == "__main__":
  7. report_dir = './test_report'
  8. os.makedirs(report_dir, exist_ok=True)
  9. now = time.strftime("%Y-%m-%d %H-%M-%S")
  10. report_name = '{0}/{1}.html'.format(report_dir, now)
  11. with open(report_name, 'wb') as f:
  12. runner = HTMLTestRunner(stream=f, title="测试报告", description="本测试报告内容包含超级计算器的简单测试")
  13. runner.run(discover)

导出测试报告用到了HTMLTestRunner,但是Python3的好像有问题,在网上找了两个修改后支持Python3的,需要的话可以在本文尾部的示例项目中下载。

  1. 运行run.py文件
    Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图18
    等程序运行完之后即会在test_report目录下生成测试报告
    Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图19
    在浏览器里打开即可看到报告内容,示例
    Python3   Appium   安卓模拟器 实现APP自动化测试,并生成测试报告(简化版) - 图20

至此,全部完成。

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