Appium APP UI自动化测试框架介绍
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:
- appiumSettings:appium设置的东西,自动安装
- 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自动化测试框架介绍相关推荐
- App 自动化解决方案 [开源项目] 基于 Appium 的 UI 自动化测试框架完美版
欢迎查阅Appium(Android自动化测试框架体系) Appium Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的,可用于IOS和Android以 ...
- Appium APP UI自动化测试简介与环境搭建
一. app自动化测试背景 移动终端越来越多,手机应用也越来越多 App回归测试用例越来越多,但全量回归很消耗时间 移动端碎片化严重,尤其是Android端(兼容性就是碎片化的体现,有很多厂商.机型. ...
- APP UI自动化测试:框架选择、环境搭建、脚本编写……全总结
首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师.高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去. 接下来, ...
- 阿里p8呕心沥血整理出来的,APP UI自动化测试思路总结,速看
首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师.高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还是需要花时间去掌握的,毕竟谁也不会跟钱过不去.接下来,一 ...
- Ui自动化概念+Web自动化测试框架介绍
目录 UI 1.UI自动化测试概念:我们先明确什么是UI 2.为什么对UI采用自动化测试? 3.什么项目适合做UI自动化测试? 4.UI自动化测试介入时机 5.UI自动化测试所属分类 Web自动化测试 ...
- 实战 | UI 自动化测试框架设计与 PageObject 改造
本文节选自霍格沃兹<测试开发实战进阶>课程教学内容,进阶学习文末加群. 在 UI 自动化测试过程中,面对复杂的业务场景,经常会遇到这样的挑战: 简单的录制/回放速度快,但无法适应复杂场景: ...
- Web端与App端自动化测试框架
Web端与App端自动化测试框架 一.Web端与App端的区别 想了解Web端与App端自动化测试框架的区别 ,那么我们就要先来了解Web和App的区别.Web项目一般都是B/S架构,基于浏览器的,而 ...
- 整装待发 QTA UI自动化测试框架迎来大更新
2019独角兽企业重金招聘Python工程师标准>>> 整装待发 QTA UI自动化测试框架迎来大更新 QTA是什么 QTA是一个跨平台的测试自动化工具,适用于后台.原生或混合型客户 ...
- ui自动化测试框架_数据驱动 vs 关键字驱动:对搭建UI自动化测试框架的探索
谢谢打开这篇文章的每个你 关注我们 点击右上角 ··· 设为星标 UI自动化测试用例剖析 让我们先从分析一端自动化测试案例的代码开始我们的旅程.以下是我之前写的一个自动化测试的小Demo.这个Demo ...
最新文章
- keras 模型用于预测时的注意事项
- 深度学习(四十三)——深度强化学习(6)AlphaGo全系列
- A/B Matrix CodeForces - 1360G(思维构造)
- golang如何打印float64的整数部分_2020-08-10:如何不用加减乘除求浮点数的2倍值?...
- Linux命令:mkdir
- 华为上机试---购物单(算法:背包问题)
- 手抄Threejs源码之Scene
- (11)System Verilog对象复制
- python 实现对地图的点击_python使用folium库绘制地图点击框
- mui框架 页面无法滚动解决方法
- span标签居中显示的正确方法
- mysql 连接 监控_监控mysql上客户端的连接数
- vue 字符存在_vue中如何渲染字符串,字符串是组件类型的
- 智方8000系文具进销存管理系统 华军软件网
- UG NX 10 坐标系
- 张亮:Sharding-Sphere成长记
- 为什么要了解和使用拉姆达——走进Java Lambda(〇)
- python春节对客流量的影响_2018年2月各城市地铁日均客流、春节长假日均客流分析...
- python抢票软件源代码_自己写的一个抢票加速的Python小程序源码分享-----纯属娱乐...
- 添加网络计算机名,windows10系统,更改计算机名后,网络中看不见自己的电脑了。...