计算器软件测试-herom2测试登陆器
自动化测试任务二:使用unittest框架测试模拟器自带的计算器功能,计算“2+(7−3)×8”表达式
目录
步骤一:软件的安装
(学习通上面也有,那里下载更快,虽然版本都挺老了,但是它稳定呀!!!)
1.1 Java_jdk的安装
偷个懒直接放别人写好的的教程
1.2android-sdk-windows 的安装
这个安装教程可以看一下我博客里面的
1.3Appium-Server-GUI-wi 的安装
这个的话,官网下载一个exe程序包,一键无脑安装就啦! Download Appium-Server-GUI-windows-1.22.3-4.exe (Appium Desktop) (sourceforge.net)
步骤二:模拟器的创建
注意:(内容概述,讲了创建过程中可能会遇到的一些问题并提出解决方法,建议先通读一遍,再跟着操作)
怎么创建呢?
首先,打开android-sdk里面的AVD Manager 程序,双击运行创建一个模拟器。
创建成功则开始启动模拟器
等他加载完毕就创建成功。
但是呢??会发现这个创建不成功,因为找不到HAXM里面的加速器插件,我估摸着是环境变量的问题。
所以进行了如下的修改
(之前看了我那篇如何安装AndroidSDK文章的小伙伴,也应该这么修改SDK的环境变量,防止出问题)
ANDROID_HOME 改为 ANDROID_SDK_HOME ,里面存储的还是SDK的安装路径
接着修改path变量
往里面添加这个
添加完毕之后呢,安装下载好的HAXM文件,双击运行安装。
完成之后勒,就可以重新回去创建模拟器了。
创建成功后,又发现模拟器黑屏了,这是又怎么了呢??上网查询后勒,什么userdata 分区问题,导致 e2fsck 校验失败啥的(我也不懂这是啥问题),一般有以下解决方案
尝试重新创建一个新的 AVD 环境,并且确保设置 userdata 分区大小正常。如果问题没有解决,则尝试调整分区大小为更大一些来解决此问题。
检查您所使用的 Android SDK 是否最新版本。如果不是,请升级它可能有助于消除此问题。同时,需要确保 Android Studio 版本与 SDK 版本保持同步,以避免与模拟器出现兼容性问题。
如果您正在使用 HAXM 加速器,则需要在启动 AVD 前,打开 Task Manager 并杀掉运行的“qemu-system-x86_64.exe”进程。然后尝试在命令行中运行 AVD 的启动命令进行测试。
可以尝试更换其他模拟器或真实设备,以确定问题是否出在当前的模拟器软件或真实设备上。如果模拟器正常工作而真实设备存在问题,则可能需要检查应用程序代码是否存在问题以及可能的兼容性问题。
然后就,漂亮,以上方案都不能解决这个分区问题,真的是绝望,那就行咯。全部卸载一遍,重新来过,这次我选择学校电脑上的SDK软件来装,毕竟是老版本的,应该没啥太大毛病。照着官网上给的步骤一步一步来,结果还是出毛病,真的心累。
这是一个压缩包,给它整上环境变量就可以使用了
老版本的环境变量随便整整先试试看。
重新创建模拟器,发现启动成功
步骤三、Appium-Server-GUI-wi 的使用
介绍:Appium-Server-GUI-wi 是一款方便易用的 Appium 服务器界面程序,可以简化 Appium 测试的部署和管理。该软件在 Apache 许可证 2.0 下发布,适用于 Windows 操作系统。
使用 Appium-Server-GUI-wi 可以实现以下功能:
启动与关闭 Appium 服务器。在服务器上设置调试端口、绑定地址等配置选项。显示服务器日志,并支持保存日志到文件。提供图形用户界面操作,提供启动服务等选项。
与其他 Appium 服务器 GUI 工具相比,Appium-Server-GUI-wi 最大的优点是它非常简单和易于使用。它还配备了一些高级配置选项和快捷方式供用户快速启动和关闭服务器。
启动appium服务,双击程序开启服务
打开pycharm编写连接代码 appium
所需要的参数的话 主要需要一下几个
platformName(平台,Android或ios)
platformVersion(平台系统版本,可在手机设置里面查看)
deviceName(刚才adb连接时的设备名称)
appPackage(应用包名)
appActivity(应用首页)
测试连接脚本代码可以这样子写
from appium import webdriver
caps = {}
caps['platformName'] = 'Android'
caps['deviceName'] = 'emulator-5554'
caps['appPackage'] = 'com.android.launcher'
caps['appActivity'] = 'com.android.launcher2.Launcher'
caps['platformVersion'] = '5.0.1'
driver = webdriver.Remote("http://192.168.1.123:4723/wd/hub", caps)
print('成功连接')
这些参数怎么获取呢??
比如这次任务是使用unittest框架测试模拟器自带的计算器功能,计算“2+(7−3)×8”表达式
因此我们需要先打开模拟器,找到里面的计算器功能计算器软件测试,双击运行,会有以下的界面
这些完成之后,win+R 打开cmd命令行窗口
输入 以下指令,获取模拟器活动信息
adb devices
获取到了设备信息计算器软件测试,但这个状态显示设备是掉线的 。
这里表示成功在线的
adb shell dumpsys activity activities
本地ip地址的话,可以输入ipconfig命令自行查阅 参数携带完整路由示例如下
http://192.168.1.123:4723/wd/hub
以上参数获取完毕之后,可以编写脚本测试连接了,测试连接脚本大致参考上面代码。
脚本启动后出现了个报错,这里是因为模拟器下载某个apk程序的时候连接超时了终止了,可以调整下载时长,或者手动安装(本地有该apk程序),这里选择手动安装。
找到apk程序的位置,打开appium软件的安装位置,直接搜索该目录下的所有.apk后缀文件
找到之后,使用adb install + 程序路由 进行安装
adb install + 程序路由
这里面有安装过的 ,为了防止出问题,先卸载再重新安装一遍。
安装完毕之后 重新运行 测试连接脚本。
ok这样子就连接成功了。
如果还是不能成功连接,一直卡在连接超时那里,可以试试以下几种方法
以管理员的身份启动appium服务
adb install -r
adb install 安装 指定-r参数将apk程序安装将它安装到模拟器的SD卡上(记得分配内存)
还不行的话,就.....别搞了,****(这里是脏话) 神马软件,这不搞人心态吗???这么难装,一堆破毛病。。。。呼呼!!!
到这里,我们就成功连接上了!!接下来就是代码的编写。写到这里我感觉文章有点多了,讲解代码的话就有空下篇文章再来讲解。ok,以下就是本次任务的代码。。
步骤四、任务脚本代码的编写
import unittest
import time
from appium import webdriver
from selenium.webdriver.common.by import By
class AppTest(unittest.TestCase):
def setUp(self):
caps = {}
self.start = time.time()
caps['platformName'] = 'Android'
caps['deviceName'] = 'emulator-5554'
caps['appPackage'] = 'com.android.calculator2'
caps['appActivity'] = '.Calculator'
caps['platformVersion'] = '5.0.1'
self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
print('成功连接')
def tearDown(self):
self.end = time.time()
print("用时:", self.end - self.start)
time.sleep(10)
self.driver.quit()
def test(self):
try:
time.sleep(2)
"""使用unittest框架测试模拟器自带的计算器功能,计算“2+(7−3)×8”表达式"""
# 1、打开计算器;
# self.driver.find_element(By.LINK_TEXT, 'Calculator').click()
time.sleep(2)
# 2、在输入框里面输入2;
self.driver.find_element(By.ID, 'com.android.calculator2:id/digit_2').click()
time.sleep(0.2)
# 3、点击“+”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/op_add').click()
time.sleep(0.2)
# 4、向左滑动,可以看到隐藏的科学计算按钮;
self.driver.swipe(470, 270, 80, 270, 1000)
time.sleep(0.2)
# 5、点击“(”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/digit_0').click()
# 6、向右滑动,将科学计算按钮面板隐藏;
self.driver.swipe(80, 270, 470, 270, 1000)
# 7、点击“7”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/digit_7').click()
# 8、点击“-”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/op_sub').click()
# 9、点击“3”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/digit_3').click()
# 10、向左滑动,可以看到隐藏的科学计算按钮
self.driver.swipe(470, 270, 80, 270, 1000)
time.sleep(0.2)
# 11、点击“)”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/eq').click()
# 12、向右滑动,将科学计算按钮面板隐藏
self.driver.swipe(80, 270, 470, 270, 1000)
time.sleep(0.2)
# 13、点击“ * ”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/op_mul').click()
time.sleep(0.2)
# 14、点击“8”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/digit_8').click()
time.sleep(0.2)
# 15、点击“=”按钮;
self.driver.find_element(By.ID, 'com.android.calculator2:id/eq').click()
time.sleep(0.2)
# 16、获取输入框里面的值,使用断言判断表达式计算结果是否正确
num = self.driver.find_element(By.ID, 'com.android.calculator2:id/formula').text
print(num)
self.assertEqual(num, '34')
except:
print("Exception:计算结果出错")
这里为啥会错误呢??因为这个是我之前电脑写的脚本,然后勒,里面的一些参数不想修改,就这样子啦!!!