最文档

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

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

  项目目录 

  如下部分,截图为教学案例,因没有教学案例所用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
  定义一些页面元素/相关操作
   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文件
  测试数据文件:

   loginView
  业务逻辑封装

   test_login 
  测试用例组织
   run.py
  执行入口,包含测试报告生成

  初级水平,可入面试,深层次的,需要继续学习。
   通讯录软件
  该软件为夜深模拟器上自带的通讯录软件。

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

   测试报告

   总结:APP移动端自动化与webUI自动化很像,只是一些基础的知识不同,如appium使用,元素定位相关,但 selenium的使用是类似的。
  各种 自动化测试框架,都大同小异,甚至包括接口自动化测试。
  框架只是入门,能够实战落地,并在工作中运用,提高测试效率才是根本。
  如何结合实践,修改框架,如何封装业务逻辑,以及框架的优化,会更考验能力。

本文链接:https://www.bdoc.cn/post/57.html

版权声明:本文内容不用于商业目的,如涉及知识产权问题,请权利人联系小编QQ或者微信:799549349,我们将立即处理

联系客服
返回顶部
移动端自动化测试框架-unittest+appium_APP测试_最文档

最文档