APP UI自动化测试同样可以使用unittest框架,与web的UI自动化类似

整个自动化流程介绍

1) 会先从手工用例里面抽离出要做自动化的用例,在测试用例里面会加一个执行方式的标签,标明是手动还是自动化,以此明确自动化测试的范围。

2) 开始搭建自动化测试框架,整个框架的设计是基于Python+appium+一些模块的封装。我们封装的模块分几部分内容:

  • case层:是核心,放自动化用例。case层的设计原理是:使用了unittest三部分内容,setup、teardown和test方法。

    • setup是做初始化的一些操作,初始化一些参数设置、APP启动,还会加一个启动时间。
    • Teardown是做一些退出、截图,打印结束时间的操作。
    • Test方法是手工用例对应的自动化用例
  • report层:放HTML testrunner,一个生成HTML报告的py文件,最终的自动化测试报告也会生成在这个模块下
  • public层:比如登录以及经常要业务复用的一些场景,会将它们抽离出来作为public,在其他的case层可以直接调用
  • testrunner:在case层里面有很多自动化用例,不可能一个一个去运行。所以写了这个testrunner,通过它可以实现批量运行,运行case层里面所有的py文件。这样的好处是,对于测试回归来说,在这个版本提交之后,每天都可以进行一次回归,回归之后可以查看报告,然后对有错误的地方进行分析,看是否对老功能有影响。

1. 初始化代码详解

from appium import webdriverdesired_caps = {}   #定义了一个字典,下面是字典里面的值
desired_caps['platformName'] = 'android'  #平台名称,如果是苹果,则写ios(小写)
desired_caps['platformVersion'] = '5.1'  #手机系统版本号,与测试手机版本一致
desired_caps['deviceName'] = 'Android Emulator'  #设备名,appium不强制检查此参数值,只要有值即可
desired_caps['noReset'] = 'True'  #退出APP时,不重置APP的数据
desired_caps['appPackage'] = 'cn.xiaochuankeji.tieba'  #包名,每个APP就是通过包名来唯一区分
desired_caps['appActivity'] = '.ui.base.SplashActivity'  #首个界面的activitydriver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)  #初始化driver
#http://localhost:4723/wd/hub是远程的请求地址,前面是域名,/wd/hub是路径  desired_caps是参数
#4723是端口号,需要与appium监听的端口号对应(在appium首页可以设置端口号)
  • 界面名称:每一个界面就是一个activity(web是通过URL来区分界面,APP是通过activity区分界面)
  • activity可能是复用的:在APP中,有些布局是类似的时候,可能activity是一样的

包名获取方法
APP打开,在cmd中输入adb shell dumpsys activity top|findstr “ACTIVITY”
/前面是包名,/后面以点号开始的一串是当前界面的activity名称

初始化时,只能进到APP首个界面

获取首个界面activity的方法:先在cmd中将获取命令输好,再启动APP,APP起来之后,马上在命令窗口点回车(如果点慢了,可能就不是首个界面了)

初始化时,appium会给手机里安装2个APP:

  1. appiumSettings:appium设置的东西,自动安装
  2. Unlock:手机解锁,解不了图文和密码的,只能滑动解锁

2. 框架介绍

2.1 Public

public封装公用业务模块,如APP登录
封装一个Mylogin类,类里面是对应的login方法
如封装的登录模块:

import timeclass Mylogin(object):def __init__(self, driver):self.driver = driverdef login(self):self.driver.implicitly_wait(60)self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/me_item").click()time.sleep(2)self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/tv_notLogin_goLogin").click()time.sleep(1)self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/login_mode").click()self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/phone_num_edit").send_keys("151********")self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/code_edit").send_keys("a123456")self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/login").click()time.sleep(5)

2.2 report

放一个HTML testrunner.py文件,自动生成报告

2.3 case(核心)

  • APP和web有一些共有的,所以在case层下分了APP和web。

    • setup:初始化
    • teardown:清理
    • test方法:每一个test方法对应一条手工用例,每个test方法都需要以test开头,不然不会执行。

2.4 几种典型case例子

1.有时进入首页时会弹出青少年模式,有时不会弹出。对于这种情况,如果需要定位首页控件,可以使用try语句

def testshouye01_01(self):'''验证首页导航栏文案显示是否正常'''time.sleep(8)try:self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/home_item").click()except:passtime.sleep(6)navText = self.driver.find_elements_by_id("cn.xiaochuankeji.tieba:id/title")self.assertEqual(navText[0].text, "关注")self.assertEqual(navText[1].text, "推荐")self.assertEqual(navText[2].text, "视频")self.assertEqual(navText[3].text, "图文")

2.动态内容处理:验证帖子列表内容跳转

def testshouye01_02(self):'''验证帖子列表内容跳转'''time.sleep(8)aa = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/expand_content_view")bb = aa.textaa.click()time.sleep(3)forumDetailText = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/tvTitle")cc = self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/ss")self.assertEqual(forumDetailText.text,"帖子详情")self.assertEqual(bb,cc.text)

3.验证评论帖子功能

def testshouye01_03(self):'''验证评论帖子功能'''Mylogin(self.driver).login()time.sleep(3)self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/iconTabItem").click()  #点击首页time.sleep(6)self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/expand_content_view").click() #点击帖子列表中的一个数据time.sleep(3)self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/etInput").send_keys("textCESHI")  #输入评论内容self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/send").click()  #点击发送sendContent = self.driver.find_elements_by_id("cn.xiaochuankeji.tieba:id/expandTextView")  #将所有评论内容的控件全部拿到sendContentRawList = []  #定义列表  ['a123456','猫']for i in range(0, len(sendContent)):  #循环所有控件sendContentRawList.append(sendContent[i].text)  #将控件上的文本信息全部追加到定义的列表中sendContentList = "".join(sendContentRawList)  #将列表转换成一个字符串  "a123456猫"self.assertIn("textCESHI", sendContentList)  #断言:如果评论内容在所有评论内容里面,说明评论内容已经显示出来了#测试时,需要让评论内容唯一化,可以加时间实现,text+时间(精确到秒)

4.页面滑动,直到找到某一控件为止

def testshouye01_04(self):'''验证关注功能'''time.sleep(10)while True:try:self.driver.find_element_by_id("cn.xiaochuankeji.tieba:id/v_epaulet_follow").click()breakexcept:height = self.driver.get_window_size()['height']width = self.driver.get_window_size()['width']self.driver.swipe(width * 0.5, height * 0.8, width * 0.5, height * 0.2, 1000)  # 当关注没有显示时,上滑#断言toast = ("xpath", '//*[contains(@text,"关注成功")]')# 最大等待时间10秒,每隔0.1秒检测1次,直到当前界面存在了关注成功提示ele = WebDriverWait(self.driver, 10, 0.1).until(EC.presence_of_element_located(toast))self.assertEqual("关注成功",ele.text)

Appium APP UI自动化测试框架介绍相关推荐

  1. App 自动化解决方案 [开源项目] 基于 Appium 的 UI 自动化测试框架完美版

    欢迎查阅Appium(Android自动化测试框架体系) Appium Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的,可用于IOS和Android以 ...

  2. Appium APP UI自动化测试简介与环境搭建

    一. app自动化测试背景 移动终端越来越多,手机应用也越来越多 App回归测试用例越来越多,但全量回归很消耗时间 移动端碎片化严重,尤其是Android端(兼容性就是碎片化的体现,有很多厂商.机型. ...

  3. APP UI自动化测试:框架选择、环境搭建、脚本编写……全总结

    首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师.高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去. 接下来, ...

  4. 阿里p8呕心沥血整理出来的,APP UI自动化测试思路总结,速看

    首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师.高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去.接下来,一 ...

  5. Ui自动化概念+Web自动化测试框架介绍

    目录 UI 1.UI自动化测试概念:我们先明确什么是UI 2.为什么对UI采用自动化测试? 3.什么项目适合做UI自动化测试? 4.UI自动化测试介入时机 5.UI自动化测试所属分类 Web自动化测试 ...

  6. 实战 | UI 自动化测试框架设计与 PageObject 改造

    本文节选自霍格沃兹<测试开发实战进阶>课程教学内容,进阶学习文末加群. 在 UI 自动化测试过程中,面对复杂的业务场景,经常会遇到这样的挑战: 简单的录制/回放速度快,但无法适应复杂场景: ...

  7. Web端与App端自动化测试框架

    Web端与App端自动化测试框架 一.Web端与App端的区别 想了解Web端与App端自动化测试框架的区别 ,那么我们就要先来了解Web和App的区别.Web项目一般都是B/S架构,基于浏览器的,而 ...

  8. 整装待发 QTA UI自动化测试框架迎来大更新

    2019独角兽企业重金招聘Python工程师标准>>> 整装待发 QTA UI自动化测试框架迎来大更新 QTA是什么 QTA是一个跨平台的测试自动化工具,适用于后台.原生或混合型客户 ...

  9. ui自动化测试框架_数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索

    谢谢打开这篇文章的每个你 关注我们 点击右上角 ··· 设为星标 UI自动化测试用例剖析 让我们先从分析一端自动化测试案例的代码开始我们的旅程.以下是我之前写的一个自动化测试的小Demo.这个Demo ...

最新文章

  1. keras 模型用于预测时的注意事项
  2. 深度学习(四十三)——深度强化学习(6)AlphaGo全系列
  3. A/B Matrix CodeForces - 1360G(思维构造)
  4. golang如何打印float64的整数部分_2020-08-10:如何不用加减乘除求浮点数的2倍值?...
  5. Linux命令:mkdir
  6. 华为上机试---购物单(算法:背包问题)
  7. 手抄Threejs源码之Scene
  8. (11)System Verilog对象复制
  9. python 实现对地图的点击_python使用folium库绘制地图点击框
  10. mui框架 页面无法滚动解决方法
  11. span标签居中显示的正确方法
  12. mysql 连接 监控_监控mysql上客户端的连接数
  13. vue 字符存在_vue中如何渲染字符串,字符串是组件类型的
  14. 智方8000系文具进销存管理系统 华军软件网
  15. UG NX 10 坐标系
  16. 张亮:Sharding-Sphere成长记
  17. 为什么要了解和使用拉姆达——走进Java Lambda(〇)
  18. python春节对客流量的影响_2018年2月各城市地铁日均客流、春节长假日均客流分析...
  19. python抢票软件源代码_自己写的一个抢票加速的Python小程序源码分享-----纯属娱乐...
  20. 添加网络计算机名,windows10系统,更改计算机名后,网络中看不见自己的电脑了。...

热门文章

  1. 远程计算机桌面登录拒绝访问,win7远程界面显示拒绝访问
  2. 《活法》读后感--发paper思想准备
  3. java内存映射读取管道文件
  4. 计算机科学个人陈述中文,留学文书写作范例-计算机科学(个人陈述)
  5. 25.优化算法4:求解信赖域子问题及其收敛性
  6. 江南Style之---西塘
  7. python+opencv遇到的错误(长期更新)
  8. 使用Halo搭建我的博客
  9. 编写c语言的开篇——Hello World
  10. Amazon EKS 使用 EFS服务