移动端自动化测试appium+python

主要介绍下appium结合python完成一个自动化测试,分为环境安装和具体使用两部。

1.环境安装

1.所需要安装的软件 

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的目录下运行该命令

 

2.环境变量配置:

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中;

  部分环境变量配置如下:

移动端自动化测试appium+python_第1张图片

移动端自动化测试appium+python_第2张图片

 

2.简单使用

1.Appium使用

所有环境安装完毕后单开Appium界面如图:

      移动端自动化测试appium+python_第3张图片

 

 

点击 start Inspetor session按钮:

移动端自动化测试appium+python_第4张图片

 

 

       配置下设置和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

   

移动端自动化测试appium+python_第5张图片

 

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

成功开启界面后如图:

移动端自动化测试appium+python_第6张图片

 

 

其中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中看日志

移动端自动化测试appium+python_第7张图片

 

3.测试报告

结合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运行不行)

移动端自动化测试appium+python_第8张图片

    如果执行错误

移动端自动化测试appium+python_第9张图片

  

 

 

 

会有对应错误提示。

后续使用python执行脚本时

打开Appium,打开模拟器,然后python编辑器

注意python是以缩进判断执行代码块的,从网上复制过来的代码可能需要重新缩进下。

Python学习网站http://www.runoob.com/python3/python3-tutorial.html

参考博客:https://blog.csdn.net/ezreal_tao/article/details/80917360   

 

 

你可能感兴趣的:(测试,appium,python,自动化测试,Android)