主要介绍下appium结合python完成一个自动化测试,分为环境安装和具体使用两部。
1.jdk-8u121-window(32位的就下载32位的,64位的就下载64位的)
2.Android-sdk
3.Python:(V3.6也可以)
4.appium:最新版本
5.Node.js:node-v4.4.7-x64
6.Appium-python-Client
7.pycharm
其中1-5文件已经整理也可以自己去网上下载,不要使用过老版本
6使用命令pip install Appium-Python-Client安装
7为python编辑idea,可以使用其他python代替,或者使用命令运行py文件
提示找不到pip命令的话 先安装pip命令:python setup.py install,或者去python安装目录下执行试试
例如我的安装目录:C:\Users\80639\AppData\Local\Programs\Python\Python37\Scripts的目录下运行该命令
Java,Android,python环境变量必须配置
appium,node.js的环境变量也可以不用配置
1.Java环境变量配置
classpath值: %JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
path值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
详细的可以百度下,这里不做详细说明了。
2.Android环境变量
系统变量”>"新建",变量名中填写“ANDROID_HOME”,例如变量值填写“c:\tools_r25.2.3-windows”;
%ANDROID_HOME%\build-tools\25.0.3”加入到环境变量path中(注25.0.3是build-tools中的其中一个sdk版本,包含aapt等工 具,请根据自己实际的情况填写); “%ANDROID_HOME%\platform-tools”加入到环境变量path中;
“%ANDROID_HOME%\tools”加入到环境变量path中;
部分环境变量配置如下:
1.Appium使用
所有环境安装完毕后单开Appium界面如图:
点击 start Inspetor session按钮:
配置下设置和app信息
{
"platformName": "Android",
"deviceName": "emulator-5554",
"platformVersion": "5.1.1",
"appPackage": "com.zhilink.wms",
"appActivity": "com.zhilink.wms.login.aty.WelComeActivity"
}
参数说明:
platformName:系统名称
deviceName:设备名称
platformVersion:系统版本
appPackage:要使用的app包名
appActivity :app的启动画面,我们这里使用欢迎页面 WelComeActivity
Adb命令:
adb devices
adb shell getprop ro.build.version.release
adb shell dumpsys window windows | findstr "Current" 这个需要打开要查看的app,方法有很多,这是其中一种。
国内一些第三方模拟器找不到adb命令的话参考下博客
https://www.cnblogs.com/hankzhouAndroid/p/9070473.html
成功开启界面后如图:
其中1,2按钮为定义滑动事件的开始坐标和结束坐标
3为刷新界面,因为存在响应延迟
4为开始录制脚本
5为复制app布局代码
6选中一个控件后点击即为该控件设置点击
7给输入框输入文字,注意中文好像不可以
8.显示或者隐藏连接信息,建议显示,这样执行单个脚本方便一点
9复制脚本
注意录制的时候画面跳转了点一下3刷新界面的按钮,防止运行时找不到控件,录制完成后复制脚本到pycharm里面或者txt(扩展名改成py就行),需求手动修改下代码,由于我们有一个欢迎页面,脚本一开就去操作会报错,所以先sleep 5s左右,然后界面之间的跳转也会存在一定延迟,sleep 1-2两秒,
脚本录制没有直接响应点击Android键盘enter事件的,手动写入代码:driver.keyevent(66)
网络过慢可能导致脚本运行错误,脚本无法判断请求是否成功。
屏蔽掉最后一行代码#driver.quit()这样运行完之后app不会退出
常用Android键盘事件:https://blog.csdn.net/weixin_40180628/article/details/79169846
2.脚本文件注意事项
WMS6.0app部分脚本文件:
# This sample code uses the Appium python client
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
from appium import webdriver
from time import sleep
caps = {}
caps["platformName"] = "Android"
caps["deviceName"] = "emulator-5554"
caps["platformVersion"] = "5.1.1"
caps["appPackage"] = "com.zhilink.wms"
caps["appActivity"] = "com.zhilink.wms.login.aty.WelComeActivity"
driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
sleep(5)
el1 = driver.find_element_by_id("com.zhilink.wms:id/et_login_user")
el1.click()
el1.send_keys("yuanyuan")
el2 = driver.find_element_by_id("com.zhilink.wms:id/et_login_psd")
el2.send_keys("yuanyuan")
el3 = driver.find_element_by_id("com.zhilink.wms:id/cb_remember_psd")
el3.click()
el4 = driver.find_element_by_id("com.zhilink.wms:id/tv_login")
el4.click()
sleep(2)
el5 = driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.view.ViewPager/android.widget.LinearLayout/android.widget.LinearLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[5]/android.widget.TextView")
el5.click()
el6 = driver.find_element_by_id("com.zhilink.wms:id/et_doc_no_one")
el6.set_value("123")
driver.keyevent(66)
#driver.quit()
执行过程中可以再Appium中看日志
结合HtmlTestRunner可以生成测试报告
首先去下载https://pan.baidu.com/s/1dEZQ0pz,针对python3以上 。
建议统一使用python3以上版本
下载放到python的路径里面,具体路径C:\Users\80639\AppData\Local\Programs\Python\Python37\Lib
自己对照找下
然后脚本文件需要做对应修改:
# This sample code uses the Appium python client
# pip install Appium-Python-Client
# Then you can paste this into a file and simply run with Python
from appium import webdriver
from time import sleep
import time
import unittest
import HTMLTestRunner
from unittest import runner
global driver
class Show(unittest.TestCase):
def setUp(cls):
caps = {}
caps["platformName"] = "Android"
caps["deviceName"] = "emulator-5554"
caps["platformVersion"] = "5.1.1"
caps["appPackage"] = "com.zhilink.wms"
caps["appActivity"] = "com.zhilink.wms.login.aty.WelComeActivity"
caps["unicodeKeyboard"] = "True" # 输入中文
caps["resetKeyboard"] = "True" # 输入中文
cls.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps)
def login(self):
sleep(5)
el1 = self.driver.find_element_by_id("com.zhilink.wms:id/et_login_user")
el1.click()
el1.send_keys("yuanyuan")
el2 = self.driver.find_element_by_id("com.zhilink.wms:id/et_login_psd")
el2.send_keys("yuanyuan")
el3 = self.driver.find_element_by_id("com.zhilink.wms:id/cb_remember_psd")
el3.click()
el4 = self.driver.find_element_by_id("com.zhilink.wms:id/tv_login")
el4.click()
sleep(2)
el5 = self.driver.find_element_by_xpath("/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.support.v4.view.ViewPager/android.widget.LinearLayout/android.widget.LinearLayout/android.support.v7.widget.RecyclerView/android.widget.LinearLayout[5]/android.widget.TextView")
el5.click()
el6 = self.driver.find_element_by_id("com.zhilink.wms:id/et_doc_no_one")
el6.send_keys("111中")
self.driver.keyevent(66)
#self.driver.quit()
if __name__ == '__main__':
#unittest.main()
testunit=unittest.TestSuite()
#将测试用例加入到测试容器中
testunit.addTest(Show("login"))
#获取当前时间,这样便于下面的使用。
now = time.strftime("%Y-%m-%d-%H_%M_%S",time.localtime(time.time()))
#打开一个文件,将result写入此file中
fp=open("result"+now+".html",'wb')
runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title='test result',description=u'result:')
runner.run(testunit)
fp.close()
后续可以写一个主运行文件出来,或者已这个为模板修改login里面的脚本文件就行
大家使用对应编辑器运行,我用Vs code运行生成报告如下(直接cmd运行不行)
如果执行错误
会有对应错误提示。
后续使用python执行脚本时
打开Appium,打开模拟器,然后python编辑器
注意python是以缩进判断执行代码块的,从网上复制过来的代码可能需要重新缩进下。
Python学习网站http://www.runoob.com/python3/python3-tutorial.html
参考博客:https://blog.csdn.net/ezreal_tao/article/details/80917360