移动端自动化测试框架-unittest+appium

本文介绍通过python实现APP自动化的框架,对通讯录软件进行测试,文末有实操源码。

具体业务逻辑可基于框架补充。

预备知识:

APP移动端自动化基础及appium环境搭建

 appium元素定位

APP自动化测试框架

框架功能:

业务功能封装、测试用例封装、测试包管理、截图出来、断言处理、日志获取、测试报告生成、测试驱动、数据配置 

移动端自动化测试框架-unittest+appium_第1张图片

项目目录 

移动端自动化测试框架-unittest+appium_第2张图片

如下部分,截图为教学案例,因没有教学案例所用APP安装包,实操部分,使用夜神模拟器自带的通讯录软件进行操作。

框架执行顺序:

run执行入口,收集用例->执行test_login,测试类TestAdd继承StartEnd->执行StartEnd的setup,进行driver设置->执行test_login 下的test_get_zhangsan->
执行StartEnd中的teardown
->执行StartEnd的setup>执行test_login下的test_login_001->执行StartEnd中的teardown->生成测试报告

baseView

封装元素基本操作

class BaseView(object):
    def __init__(self,driver):
        self.driver=driver

    def find_element(self,*loc):
        return self.driver.find_element(*loc)

    def find_elemets(self,*loc):
        return self.find_elemets(*loc)

    def get_window_size(self):
        return self.driver.get_windows_size()

    def swipe(self,start_x,start_y,end_x,end_y,duration):
        return self.driver.swipe(self,start_x,start_y,end_x,end_y,duration)


common_fun

定义一些页面元素/相关操作

移动端自动化测试框架-unittest+appium_第3张图片

desired_caps

APP设备相关信息及连接

from appium import webdriver
import yaml

import logging
import logging.config
import os
CON_LOG='../config/log/conf'


def appium_desired():
    """
    yaml是一种简洁的非标记语言,以数据为中心,使用空白,分行组织数据
    :return:
    """
    with open('../config/config.yaml','r',encoding='utf-8')as file:
        data=yaml.load(file, Loader=yaml.FullLoader)
    #创建设备信息
    desired_caps={}
    desired_caps['platformName']=data['platformName']
    desired_caps['platformVersion']=data['platformVersion'] # #在手机设置,关于平板电脑可以找到版本
    desired_caps['deviceName']=data['deviceName'] #模拟器上设备的名称 在cmd下用adb devices显示的地址
    desired_caps['appPackage']=data['appPackage']#通讯录包名
    desired_caps['appActivity']=data['appActivity']#app活动名

    #连接
    driver=webdriver.Remote(data['url'],desired_caps)#连接的是appium
    driver.implicitly_wait(5)

  
    return driver





myunit

 初始化和结束测试固件

import unittest
from common.desired_caps import appium_desired
import logging
from time import sleep
class StartEnd(unittest.TestCase):
    def setUp(self):
        logging.info("---------------setup-------------")
        self.driver=appium_desired()

    def tearDown(self):
        logging.info("---------------tearDown---------")
        sleep(5)
        self.driver.close_app()

需要注意的点是,如上代码的setup和teardown会导致在测试类的每一个test方法前都初始化一次driver,所以每次test前后APP都会关闭启动,消耗时间。

如何使在在一个测试类中只启动一次APP呢?

可以使用 setupClass

import unittest
from common.desired_caps import appium_desired
import logging
from time import sleep
class StartEnd(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        logging.info("---------------setup-------------")
        cls.driver=appium_desired()
    @classmethod
    def tearDownClass(cls):
        logging.info("---------------tearDown---------")
        sleep(5)
        # self.driver.close_app()

yaml文件

配置信息文件

platformName: Android
platformVersion: 7.1.2
deviceName: 127.0.0.1:62001
appPackage: com.android.contacts
appActivity: .activities.PeopleActivity
url: http://127.0.0.1:4723/wd/hub

account.csv文件

测试数据文件

移动端自动化测试框架-unittest+appium_第4张图片

loginView

业务逻辑封装

移动端自动化测试框架-unittest+appium_第5张图片

 移动端自动化测试框架-unittest+appium_第6张图片

 移动端自动化测试框架-unittest+appium_第7张图片

test_login 

测试用例组织

移动端自动化测试框架-unittest+appium_第8张图片 run.py

执行入口,包含测试报告生成

移动端自动化测试框架-unittest+appium_第9张图片

 初级水平,可入面试,深层次的,需要继续学习。

通讯录软件

该软件为夜深模拟器上自带的通讯录软件。

移动端自动化测试框架-unittest+appium_第10张图片

实操运行结果

 运行结果一条通过一条不通过

移动端自动化测试框架-unittest+appium_第11张图片

测试报告

移动端自动化测试框架-unittest+appium_第12张图片

 源码:GitHub - 2504973175/API_UIAuto: APP移动端UI自动化

总结:APP移动端自动化与webUI自动化很像,只是一些基础的知识不同,如appium使用,元素定位相关,但selenium的使用是类似的。

各种自动化测试框架,都大同小异,甚至包括接口自动化测试。

框架只是入门,能够实战落地,并在工作中运用,提高测试效率才是根本。

如何结合实践,修改框架,如何封装业务逻辑,以及框架的优化,会更考验能力。

你可能感兴趣的:(#,appium,自动化)