鱼C论坛

 找回密码
 立即注册
查看: 1923|回复: 0

[技术交流] Appium自动化测试(三):python+appium真机实践

[复制链接]
发表于 2018-1-25 19:56:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zhang805095258 于 2018-1-28 19:15 编辑

一、        连接android手机和电脑连接(安装驱动)
a)        打开手机的USB调试
b)        连接手机到电脑
将手机用数据线连接到电脑,并授权USB调试模式。查看连接的效果,在cmd下运行命令:adb devices查看UDID,如下图所示:

1

1

二、        启动Appium
1.        Cmd命令行启动
1.1        没有指定任何参数

2

2

Appium启动成功,启动ip为默认的 0.0.0.0,端口为默认的 4723

1.2        指定一些参数
命令行中输入:appium -a 127.0.0.1 -p 4723 --session-override

3

3

-a 是指定监听的ip(也可写成 --address),后面“127.0.0.1”可以改为你需要的ip地址;
-p 是指定监听的端口(也可写成 --port),也可以修改为你需要的端口;
--session-override 是指覆盖之前的session;
1.3        实际工作中常用的命令
命令行中输入:appium -a 127.0.0.1 -p 4727 -bp 4728 --chromedriver-port 9519 -U T47TCEHEBQPZPBO7--session-override

4

4

-bp 是连接Android设备bootstrap的端口号,默认是4724(也可写成--bootstrap-port)
--chromedriver-port 是chromedriver运行需要指定的端口号,默认是9515#应该是和浏览器的模拟器有关,做app测试可忽略
-U 是连接的设备名称,如"adb devices"获取的设备标识(也可写成--udid)

所以真实测试时,只需要运行下列命令:
根据查到的UDID启动appium服务,运行命令:
#>appium -a 127.0.0.1 -p 4723  –U  T47TCEHEBQPZPBO7 --no-reset
-U 参数后面跟的一串字符就是手机的UDID,这个是通过第一步查到的。
2.        点击左上角有“机器人”的按钮
   

5

5

6

6

三、        然后执行python编写好的自动化测试代码
真机运行的测试代码与模拟器上几乎是相同的,就是有些儿配置不太一样。具体代码demo如下demo.py:

'''
测试登陆、订单列表、订单搜索、交接班
'''

#! /usr/bin/env python
#coding=utf-8
import os
import time
import unittest
from appium import webdriver#导入的必须是appium而不是selenium,因为有一些函数没有。例如driver.keyevent(4)
from selenium.webdriver.support.wait import WebDriverWait

#主测试程序
def d(platformName,platformVersion,deviceName,path):

    desired_caps = {}
    desired_caps['platformName'] = platformName#设备系统
    desired_caps['platformVersion'] = platformVersion#设备系统版本
    desired_caps['deviceName'] = deviceName#设备名称
    #desired_caps['unicodeKeyboard'] = True#不弹出键盘直接输入
    #desired_caps['resetKeyboard'] = True#不弹出键盘直接输入

    desired_caps['app'] = path#金元宝

    #金元宝
    desired_caps['appPackage'] = 'com.yunzong.crosspos'
    desired_caps['appActivity'] = 'com.yunzong.crosspos.activity.LauncherActivity'

    #如果设置的是app在电脑上的路径,则不需要配appPackage和appActivity,同理反之

    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)#启动app

    if wait(driver,t='请输入您的账号'):
        driver.find_element_by_xpath("//android.widget.RelativeLayout[contains(@index,1)]").send_keys("18511076143")
        driver.find_element_by_xpath("//android.widget.RelativeLayout[contains(@index,2)]").send_keys("111111")

        driver.hide_keyboard()#收起键盘
            
        if wait(driver,t='登录'):
            driver.find_element_by_name("登录").click()

            if wait(driver,t='收银台'):
                driver.find_element_by_name("订单").click()
               
                if wait(driver,t='订单(今天)'):
                    driver.find_element_by_xpath("//android.widget.RelativeLayout/android.widget.TextView[contains(@index,2)]").click()

                    if wait(driver,t='请输入订单编号或会员卡号'):
                        driver.find_element_by_name("请输入订单编号或会员卡号").send_keys(u"1712161510548371")
                        driver.keyevent(84)#搜索点击确定
                        driver.find_element_by_name("取消").click()
                        driver.find_element_by_name("返回").click()
                        driver.find_element_by_name("交接班").click()
                        driver.find_element_by_name("在班").click()
                        driver.find_element_by_name("确定交接班").click()
                        print("测试完成,全部通过")
                        driver.quit()

#显式等待函数
def wait(driver,t):
    try:
        if WebDriverWait(driver,20,1).until(lambda driver:driver.find_element_by_name(t)):
            return True
        else:
            return False
    except:
        print("20秒内没有找到元素:%s" % t)
        driver.quit()


if __name__=="__main__":
    platformName = 'Android'#设备系统
    platformVersion = '4.2.1'#设备系统版本
    deviceName= 'T47TCEHEBQPZPBO7'#设备名称
    path = 'E:\\android+appium\\pos-release-1.1.4-sunmi.apk'

d(platformName,platformVersion,deviceName,path)


另开一个cmd窗口,运行测试代码(python demo.py)即可。此时服务端就会有输出,程序在手机上运行。
注:在测试用例运行过程中,正常情况下手机会自动安装Settings和Unlock,有些手机有兼容性问题,Settings和Unlock程序打不开,所以每次运行代码都会提示安装,按提示允许安装就可以。
四、        Appium的Desired Capabilities是扩展了webdriver的Desired Capabilities的,下面的一些通用配置是需要指定的:
•        automationName:使用哪种自动化引擎。appium(默认)还是Selendroid?#如果是app自动化测试,一定要选择appium
•        platformName:使用哪种移动平台。iOS, Android, orFirefoxOS?
•        deviceName:启动哪种设备,是真机还是模拟器?iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, etc...
•        app:应用的绝对路径,注意一定是绝对路径。如果指定了appPackage和appActivity的话,这个属性是可以不设置的。另外这个属性和browserName属性是冲突的。
•        browserName:移动浏览器的名称。比如Safari' for iOS and 'Chrome', 'Chromium', or 'Browser' for Android;与app属性互斥。
•        udid:物理机的id。比如1ae203187fc012g。
五、        下面这些属性是android平台特定的:
•        appActivity:待测试的app的Activity名字。比如MainActivity, .Settings。注意,原生app的话要在activity前加个"."。
•        appPackage:待测试的app的java package。比如:com.example.android.myApp, com.android.settings。
六、        获取Android app的appActivity
方法一:
问研发

方法二:
appPackage 是com.yunzong.crosspos
adb shell
logcat | grep cmp= com.yunzong.crosspos

7

7


方法三:
首先,你要有一个APP的安装包 xxx.apk,
然后,通过这个解压工具将.apk解压。如下:
1.png
通过notepad++ 打开AndroidManifest.xml 文件,在里面搜索:manifest对应的就是appPackage。
2.png
搜索:activity对应的就是appActivity。(activity关键字很多,你要注意辨别。)
3.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-4 11:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表