基于appium的app自动化测试框架

基于appium框架的app自动化测试
App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于web测试框架开发的
一、设备连接
(即构建基础的测试环境,保证可以驱动设备进行操作)
0.准备测试环境
1)安装jdk配置java_home环境变量;
2)安装Android SDK(安卓软件开发包)(adb、appt )
3)安装nodejs,并通过npm安装appium
1.获取app包名appPackage
在cmd命令行中输入aapt  dump badging +apk包目录

如果提示aapt命令不是内部命令,说明aapt的环境变量配置有问题。

可以直接到android-sdk-windows的安装目录下找到aapt程序,在地址栏中输入cmd,然后在执行上面操作,就可以了。

如果执行脚本出现“no such element: Unable to locate element: {"method":"css selector","selector":"#i1"}  (Session info: webview=39.0.0.0)”原因是不明未解决。一般是在模拟机上会出现这种定位问题,真机没有。

成功的结果是这样的,截图如下:

2.获取app入口appActivity的值
还是在上面的信息中往下找找到如下图的位置,其中name的值就是appActivity的参数值

接下来我们可以启动appium软件,直接启动服务appium-server。

然后,通过以上方法获取关于app模块信息,我们可以尝试写一下脚本驱动appium-server来帮我连接到设备上的app软件。脚本命令如下:

脚本完成后,右键执行一下,会发现appium在不停的刷日志(确保appium和脚本在同一网段即可,不一定在同一台电脑)

这样就证明code-client和appium已经建立了联系,然后我们就可以通过写脚本命令操作设备上的软件了。
如果我们要操作手机上自带的软件/功能,没有办法获取apk包怎么办呢?
答:进入cmd命令行中输入adb logcat |findStr  START  ,然后操作设备上的功能/软件,在打出的日志中查找第一个START,在其后cmp=后面就是报名appPackage和appActivity

===============================================================================
二、搭建自动化测试框架
1、整体思路:创建基础类实现设备驱动的获取连接
2、创建页面类实现页面中所有的功能元素可被获取调用(代码驱动编写测试用例)
3、创建测试脚本(测试类),编写测试方法调用测试用例
4、创建服务控制类,通过参数配置的方式连接不同的设备
5、创建框架的启动脚本
具体代码如下:
1.创建基础类实现设备驱动的获取连接
1)编写基础类,实例化封装后的appium框架(即Pyapp)
2.创建页面类实现页面中所有的功能元素可被获取调用(代码驱动编写测试用例)
2)编写登录页面类,实现登录页面的功能操作

3)编写单个页面功能的测试方法

4)逐一编写测试功能页面类的相关功能

3.创建测试脚本(测试类),编写测试方法调用测试用例

4.创建服务控制类,通过参数配置的方式连接不同的设备
1)新建yml文件编写测试设备的详细信息

2)创建服务控制类:服务控制类:appium服务的停止、启动、监听;设备驱动的连接启动
class Controller(object):
    #读取设备配置文件中的设备信息进行初始化
    def __init__(self):
        # 通过读取yml文件获取 配置信息
        self.conf = Tool().app_data
        # 拆分包的信息
        self.tester = self.conf.get(‘tester‘)
        # 拆分手机的信息
        self.devices = self.conf.get(‘devices‘)
        # 手机的类型
        self.device_type = self.conf.get(‘device_type‘)
        # 唯一手机
        self.device = self.devices.get(self.device_type)[0]
        # 手机名称
        self.deviceName = self.device.get(‘name‘)
    #启动appium服务,由于我们是代码驱动,就不能使用手工开启appium
    def start_server(self):
        device = self.devices.get(self.device_type)[0]
        ip = device.get(‘ip‘)
        port = device.get(‘port‘)
        deviceName = device.get(‘deviceName‘)
        log = os.path.join(LOGPATH, device.get(‘name‘) + ‘.log‘)
        cmd = ‘appium -a {ip} -p {port} -U {deviceName} -g {log}‘.format(
            ip=ip, port=port, deviceName=deviceName, log=log)
        logger.debug(‘启动服务的命令:%s‘%cmd)
        # 执行命令 netstat -ano | findstr  9036 --  netstat -nlpt |grep 9036
        subprocess.Popen(cmd, stdout=open(log, ‘a+‘), stderr=subprocess.PIPE, shell=True)
    #监听appium服务是否启动成功
    def test_server(self):
        port = self.devices.get(self.device_type)[0].get(‘port‘)
        while True:
            #在cmd命令行中执行netstat -ano |findstr 端口,监听服务是否启动成功
            res = subprocess.getoutput("netstat -ano | findstr %s" % port)
            if ‘LISTENING‘ in res:
                logger.debug(res)
                logger.info("服务启动成功")
                break
            else:
                time.sleep(3)
                logger.debug(‘三秒后重试‘)
        return True
    #开启手机启动的连接
    def start_driver(self):
        # 包信息 和 手机信息 合并
        self.tester.update(self.device)
        ip = self.tester.get(‘ip‘)
        port = self.tester.get(‘port‘)
        driver = webdriver.Remote(‘http://{ip}:{port}/wd/hub‘.format(ip=ip,port=port),self.tester)
        # 像对列中put生成的drvier
        driver_queue.put(driver)
    #关闭appium服务
    def kill_server(self):
        res = subprocess.getoutput("taskkill /F /IM node.exe /t")
        logger.debug(‘kill server :%s‘%res)
if __name__ == ‘__main__‘:
    contorller = Controller()
    contorller.kill_server()
    contorller.start_server()
    if contorller.test_server():
        contorller.start_driver()

5.创建框架的启动脚本
主要负责启动appium服务、启动设备驱动连接设备、执行测试用例、生成测试报告。

详细代码:
class Main(object):
    def __init__(self):
        self.controller = Controller()
        self.deviceName = self.controller.deviceName

    def run(self):
        self.controller.start_server()
        if self.controller.test_server():
            self.controller.start_driver()
            suite = unittest.TestSuite()
            cases = unittest.defaultTestLoader.discover(APPCASE)
            for case in cases:
                suite.addTest(case)
            f = open(APPREPORT.format(‘{}.html‘.format(self.deviceName)), ‘wb‘)
            runner = HTMLTestRunner(f, verbosity=1, title=u‘测试报告‘, description=u‘用例执行情况:‘)
            runner.run(suite)
            f.flush()
            f.close()

if __name__ == ‘__main__‘:
    m = Main()
    m.run()

==============================================================================

三、编写测试用例过程中常见的问题:
1.如果运行以上脚本后,提示“无法与计算机取得联系”

一般原因有两个(1.appium未开启,2.appium服务和脚本服务不在一个网段内。)
2. 有时候联系两次运行脚本会出现“A new session could not be created. Details”

原因是:appium-server和code-client已经连接,无法再去连接。这里我们可以将appium-server服务关闭然后在新建一个appium-server。在执行脚本就好了。

主要原因是selenium的版本问题,可是使用set_value()代替send_keys()方法。

  

原文地址:https://www.cnblogs.com/yunyuan01/p/9962807.html

时间: 2024-10-10 12:12:42

基于appium的app自动化测试框架的相关文章

基于Appium的APP自动化测试基础--美团APP的实例

转:https://blog.csdn.net/Tigerdong1/article/details/80159156 前段时间用一种流行语言,一个主流工具,一个实用框架,写了一个美团app自动化测试的Demo,利用appium+python+unittest+uiautomatorviewer,编写了测试用例,并通过HTMLTestRunner输出测试报告.Appium环境搭建的过程就不说了(这种内容百度一搜一大把).我是利用uiautomatorviewer进行元素定位的,当然如果比较简单也

基于UI Automation的自动化测试框架 .

http://blog.csdn.net/roger_ge/article/details/5531941 第一部分:前言 自动化测试或许是众多测试同行都在研究或准备研究的领域.结合自己的能力和公司的状况,选择合适的自动化工具.搭建正确而又高效的框架或许是个永远讨论不完的话题,正如应了那句话,没有最好,只有更好. 个人所在的公司当前开展的很多项目都是基于Win7和WPF开发的,之前想尝试用QTP对之进行录制和回放操作,不幸的是,需要额外的WPF插件支持:另外QTP的脚本语言是VBScript,虽

Appium基于Python APP自动化测试框架 -- PO

关于对自动化测试框架PO的认识详见之前我写的博客:http://www.cnblogs.com/hanxiaobei/p/6755329.html 本篇主要是说appium自动化测试如何有PO的设计思想来实现. PO模型的目录结构: 其中,main.py为框架的主入口,test_creat.py调用creat_page.py,creat_page.py调用base_page.py. PO代码示例: main.py 1 import unittest 2 import HTMLTestRunner

Windows下部署Appium教程(Android App自动化测试框架搭建)

摘要: 1,appium是开源的移动端自动化测试框架: 2,appium可以测试原生的.混合的.以及移动端的web项目: 3,appium可以测试ios.android.firefox os: 4,appium是跨平台的,可以用在osx,windows以及linux系统上: ----------------------------------------------appium的一些基本概念---------------------------------------------- appium

移动APP自动化测试框架

简介 移动APP的UI自动化测试长久以来一直是一个难点,难点在于UI的"变", 变化导致自动化用例的大量维护.从分层测试的角度,自动化测试应该逐层进行.最大量实现自动化测试的应该是单元测试,最容易实现也最容易在早期发现问题:其次是接口级测试,以验证逻辑为目的进行自动化,由于接口的相对稳定,自动化测试成本相对也可以接受:自动化成本最大的便是UI级自动化测试,然而UI界面是直接反馈给用户的效果展示,适度的尤其是BVT级的自动化测试也是非常必要的.本文通过分析几种自动化框架的异同,使测试人员

基于Ruby的Watir-WebDriver自动化测试框架

Watir-WebDriver       —— 软件测试的自动化时代 QQ群:160409929 支持哪些浏览器? 几乎所有的浏览器: 比如Firefox, Chrome 和IE,除了Safari. 支持网页上哪些元素? watir-webdriver支持所有的HTML元素 运行模式是什么? Watir-WebDriver是基于ruby开发web驱动框架 自动化测试框架 根据不同业务开发相应自动化用例,由Ruby测试框架统一调用分析展示.实现出入口统一,工具类封装:降低用例开发复杂度,框架统一

python专项测试——Android App自动化测试框架

1 为什么需要框架?   代码混乱,难阅读: 重复编码,效率低:需求变化,难维护: 一 自动化实例 1 准备测试的app:准备测试环境:实现脚本: 2 测试app:只有登录功能    测试环境: Appium(Android/IOS); Android SDK; Appium-Python-Client; Selenium(Appium-Python-Client继承于Selenium);  UIAutomatorViewer Pycharm 3 实现脚本 在Pycharm中编写脚本: 用UIA

搭建appium+maven手机自动化测试框架

搭建安卓自动化测试框架记录: 需要的软件: jdk版本:jdk1.8 appium版本:v1.4.16 下载AppiumForWindows.zip adb:adt_bundle_windows_x86_20130917.467161976.rar,带Android SDK,eclipse,Android SDK Manager node.js:node-v5.7.0-x64.msi 1.jdk.Maven环境变量配置: 变量配置:JAVA_HOME    C:\Program Files\Ja

appium+python,app自动化测试框架

目前正在写一个app的自动化UI测试框架,目录结构如, 脚本还在调试,实现的方法是从excel表格读取测试用例,执行完成后会将结果保存到Excel中. 等待....... 原文地址:https://www.cnblogs.com/lisa2016/p/10142118.html