2020年4月补充
鉴于配置自动化测试这套框架确实稍微有点麻烦,许多小伙伴在配置的过程中总是踩坑,最近写了篇简化版的入门教程,不想折腾Android SDK的小伙伴可以移步到那篇文章:https://www.jb51.net/article/169763.htm
概述
本文主要分为以下几个部分
- 安装Python3
- 安装Python3的Appium库
- 安装Android SDK
- 安装JDK
- 安装Appium
- 安装模拟器
- 编写测试脚本并生成测试报告
项目示例下载地址: https://github.com/lixk/apptest
正文
一、安装Python3
直接登录Python官网https://www.python.org/,下载最新版本即可。
然后安装的时候注意一下安装路径,比如我的安装路径D:\Python37
,接下来会用到这个安装路径。
二、安装Python3的Appium库
打开Python安装目录,找到Scripts
文件夹,点进去,示例:
在地址栏上输入cmd
,然后回车,打开控制台:
在控制台里输入命令pip install Appium-Python-Client
,然后回车
看到下图的提示就表明安装成功了
三、安装Android SDK
我懒得折腾,所以就直接下载了Android Studio
下载地址
https://developer.android.com/studio/#downloads
下载完成开始安装
如果需要安装自带的模拟器,就把这一项勾选上,然后Next,接下来选择安装路径,比如我的同样放在D
盘
接下来一路Next,到了选择SDK的页面注意一下
选择Custom
,这样可以只安装自己喜欢的部分,接下来选择主题,当然这个以后可以在Android Studio里边改
继续Next,到达定制组件页面,如下图
设置一下SDK的安装路径,比如我的是D:\Android\SDK
,接下来继续Next…finish。然后就进入了缓慢的下载环节,让它在这儿慢慢的下载吧,下载完成后就好了。我们可以进入下一节了。
四、安装JDK
这里我使用的是JDK8,下载地址
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
接受协议,然后选择对应平台下载即可
接下来安装过程比较简单,也是一路Next,注意选择一下安装路径,比如我的安装路径D:\Java\jdk1.8
五、安装Appium
官网地址 http://appium.io/
点击下载按钮会到GitHub的下载页面,选择对应平台下载
Windows就选这个(快捷下载)
安装完成后,启动Appium,host和port默认的即可,然后编辑下配置信息
然后点下边那个保存并重启的按钮,然后点第一个Start Server
按钮,将会看到
如果使用真机测试,插上手机就可以开始编写脚本测试了。但是呢,由于手边没有数据线,就采用模拟器了,所以有了下一节。
六、安装模拟器
这里使用的是夜神模拟器
下载地址 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
,看到如下信息就表示成功了
在模拟器里安装测试apk
文件,这里以一个计算器为例,直接将apk
文件拖到模拟器里即可
继续在刚刚的控制台窗口里输入aapt dump badging D:\apk\com.youdao.calculator-2.0.0.apk
,其中D:\apk\com.youdao.calculator-2.0.0.apk
是测试apk
的完整路径。
可以看到安装包的信息都打印出来了,记录下红框里这两个名称,待会儿写测试脚本的时候要用。
注意,如果模拟器重启了,需要执行第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
目录下生成测试报告
在浏览器里打开即可看到报告内容,示例
到此,全部完成。如果有空的话可以再补充下Appium的使用,比如元素定位之类的,希望本文能帮到初学自动化测试的同学。
项目示例下载地址 https://github.com/lixk/apptest
艾玛,罗嗦这么多,都八点了还没吃晚饭,好饿,今天就先到这里了。
2019/5/21 补充
如果配置跟上边那几步都一致,确实没问题,结果不能正常运行。那么问题可能出在模拟器配置。下边补充下我这边的模拟器配置。
代码中的'platformVersion': '4.4.2'
就是上图中的Android版本。
如果还是有许多人跑不起来,接下来可以考虑抽空录个操作视频,哈哈哈。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]