zoukankan      html  css  js  c++  java
  • 第四章 Appium真机运行测试用例讲解

     -----手机自动化之Appium

        手机自动化测试用例虽然可以在模拟器上运行,可是模拟器毕竟和真机还是有区别的。在第二章我们讲到了模拟器上运行测试用例后,我又花了两天的时间,研究了一下真机运行测试用例。只有在真机上运行,才能真正发现出问题。期间也遇到了不少问题,不过最终还是搞定了,现在先将测试用例真机运行的方法说一下,然后再罗列我遇到的问题。

    4.1真机运行测试用例的方法

    一,    打开手机的USB调试模式

    不同的手机有不同的方法打开usb调试模式,可是去网上查一下你手机的调试模式打开办法(http://wenku.baidu.com/view/3077f06c25c52cc58bd6be15.html?re=view)。还有一个可以去网上下载一个“USB调试快捷开关”的应用,将手机的USB调试模式打开。

    二,    连接手机到电脑

       将手机用数据线连接到电脑,并授权USB调试模式。查看连接的效果,在cmd下运行命令:adb devices -l 查看UDID,如下图4.1所示:

     

    第四章 <wbr>Appium真机运行测试用例讲解
    图4.1 查看手机信息

    如果有输出,就表示连接成功。

    三,    启动Appium服务

       根据查到的UDID启动appium服务,运行命令:

    #>appium -a 127.0.0.1 -p 4723  –U  4ca1558c  --no-reset

    -U 参数后面跟的一串字符就是手机的UDID,这个是通过第二步查到的。

     

    第四章 <wbr>Appium真机运行测试用例讲解

    图4.2 启动Appium服务

     当程序输出如上图信息的时候,表示appium启动成功,此时便可以运行测试脚本了。

    四,    安装要测试的App

    当然我们要需要在测试机上安装被测试的App,去网上下载最新的众筹网的App,然后安装到测试机上。注意要确保安装的App的版本,手机系统版本,和android Sdk的API版本相同或是兼容。

    五,测试脚本的编写及运行

       真机运行的测试脚本与模拟器上几乎是相同的,就是有些儿配置不太一样。具体脚本详解如下:

    #-*- coding: UTF-8 -*-

    import os

    import time

    import unittest

    from selenium import webdriver

    from lib2to3.pgen2.driver import Driver

    from lib2to3.tests.support import driver

     

    PATH=lambda p:os.path.abspath(

    os.path.join(os.path.dirname(__file__),p)                            

    )

    global driver

     

    class LoginAndroidTests(unittest.TestCase):

        def setUp(self):

            desired_caps={}

            desired_caps['device'] = 'android'

            desired_caps['platformName']='Android'

            desired_caps['browserName']=''

            desired_caps['version']='4.4.2'

            desired_caps['deviceName']='MIUI-KXCCNBF22.0'#这是测试机的型号,可以查看手机的关于本机选项获得

           

            desired_caps['app'] = PATH('D:\AndroidAutomation\AndroidAutoTest\app\zhongchou.apk')#被测试的App在电脑上的位置

     

    #如果知道被测试对象的apppage,appActivity可以加上下面这两个参数,如果不知道,可以注释掉,不影响用例执行

            #desired_caps['appPackage']='com.subject.zhongchou'

            #desired_caps['appActivity']='.ZhongChou'

            self.driver=webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)

           

        def tearDown(self):

            self.driver.quit()

       

        def test_login(self):

            time.sleep(10)

            #点击“注册登录”按钮       button=self.driver.find_element_by_id("com.subject.zhongchou:id/register_button")

            button.click()

            time.sleep(5)

            #登录

            name = self.driver.find_element_by_id('com.subject.zhongchou:id/loginnumber_phone')

            name.click()

            name.send_keys('183XXXXXX05')

           

            psd = self.driver.find_element_by_id('com.subject.zhongchou:id/loginnumber_password')

            psd.click()

            psd.send_keys('XXXXXXXX’)

           

            blogin=self.driver.find_element_by_id('com.subject.zhongchou:id/go_numberlogin')

            blogin.click()

            time.sleep(10)

            #此处加上检测登录是否成功的代码

    if __name__ == '__main__':

        suite = unittest.TestLoader().loadTestsFromTestCase(LoginAndroidTests)

        unittest.TextTestRunner(verbosity=2).run(suite)

     

    另开一个cmd窗口,运行测试脚本(python XXXX.py)即可。此时服务端就会有输出,程序在手机上运行。打开App后,输入用户名和密码,然后进入应用后停了10秒后关闭App。

    注:在测试用例运行过程中,要在手机上安装Appium Settings,按提示允许安装就可以了。

    4.2          真机运行的时候遇到的问题

    (1)电脑连接到手机后,运行adb devices –l无信息输出?

       电脑连接手机后,一般情况下会提示安装驱动程序,如果手机较新的话可能不会提示,但是运行adb devices –l后无任何输出。此时只需要安装91手机助手或是其他手机管理工具,安装上相应的驱动程序,再次连接就可以了。

    (2)运行程序后提示:WebDriverException: Message: u"A new session could not be created. (Original error: Activity used to start app doesn't exist or cannot be launched! Make sure it exists and is a launchable activity)"

        当我从网上学习了脚本的编写方法后,模拟着写了一个我自己的测试用例,可是连接到真机后,运行脚本时,在执行过程中出现了上面的错误提示,可是程序无法运行。

       在网上查看了一下,找到了问题所在:是程序的'appPackage'和‘appActivity’不正确,查找了解决办法,有说要反编译被测试的app,然后查找里面的appactivity。可是反编译后才发现,里面的东西好多,找不到开始的时候appactivity是哪儿个?只好再找其他的办法了。

       最后在一个论坛的回复中找到了解决办法:将setup函数中的两行代码注释掉就可以了。

    desired_caps['appPackage']='com.subject.zhongchou'

    desired_caps['appActivity']='.ZhongChou'

    (3)在程序执行这程中,用Send_keys()函数对输入框输入值的时候,无法输入?

        当我执行测试用例的时候,发现用户名和密码无法用send_keys()函数输入到输入框中。因为输入就会打开软键盘,而软键盘上面的布局是九宫格的,点击一直出错。

        在网上查了好多办法,人家都是一用的这个函数啊,为什么到我这就不行了呢?我想到了先切换到数字或是英语输入模式,然后再输入,折腾起来很麻烦,还没有成功。最后才发现,是我自己好傻,安装了搜狗输入法的原因,把这个输入法卸掉后就成功了!

    4.3          本章小结

    本章我们讲解了如何在真实的手机上运行测试用例,当然我们仍然是以众筹网App的登录为例的。通过分步介绍,我们可以一步步地把测试用例在真机上运行起来,这也是我们真正开始我们的自动化测试用例编写之路之前的准备。环境,Appium API和真机运行方法我们都讲解完后,从下一章我们开始,讲解具体的测试用例应该如何入手。

  • 相关阅读:
    Feature euerka Consul zookeeper etcd
    mysql配置参数
    镜像网站
    携程Apollo分布式配置中心部署以及使用
    linux 基础知识 之基础网络
    linux 基础知识 之基础系统管理
    linux安全
    java.多态
    java.抽象、接口
    使用Vscode
  • 原文地址:https://www.cnblogs.com/zgq123456/p/10142601.html
Copyright © 2011-2022 走看看