软件测试/测试开发丨学习笔记之App自动化用例录制、结构分析-速看料
1、自动化用例录制
目录
Appium Inspctor 功能介绍Appium Inspctor 用法介绍Appium Inspctor 功能介绍
UI 分析录制用例元素查找测试Attcah 已有的 session云测试用例录制
获取 app 的信息配置待测应用获取 app 的信息
app 入口,两种方式获取:1、通过 logcat 日志获取Mac/Linux: adb logcat ActivityManager:I | grep “cmp"Windows: adb logcat ActivityManager:I | findstr "cmp"2、通过 aapt 获取Mac/Linux: aapt dump badging wework.apk | grep launchable-activityWindows: aapt dump badging wework.apk | findstr launchable-activity启动应用命令 adb shell am start -W -n <package-name>/<activity-name> -S配置待测应用
platformName:平台,Android/iOSdeviceName:设备名appPackage:应用的包名appActivity:应用的页面名 ActivitynoReset: 防止清空缓存信息验证是否启动成功:
Appium inspector 页面结构
功能键
SelectElements:选中元素,查看层级和属性Swipe By Coordinates:通过坐标点滑动Tap By Coordinates:通过坐标点点击Back:返回Refresh Source & Screenshot:刷新页面StartRecording:开始录制脚本Search for element:搜索元素Copy XML Source to Clipboard:复制 xml 结构Quit Session & Close Inspector:退出当前 Session示例
下载官方 Demo apk(https://github.com/appium/appium/tree/master/sample-code/apps)安装 API Demo.apk示例-录制用例
打开 API Demo 应用点击 OS,进入下个界面点击【Morse Code】输入内容【ceshiren.com】返回上一个页面返回上一个页面关闭应用2、自动化测试用例结构分析
desktop 生成用例脚本
el1:点击 OS ,进入下一个页面调用点击方法el2:点击 Morse Code调用sendkeys方法,输入ceshiren.com返回el1 = driver.find_element_by_accessibility_id("OS")el1.click()el2 = driver.find_element_by_accessibility_id("Morse Code")el2.click()el3 = driver.find_element_by_id("io.appium.android.apis:id/text")el3.clear()el3.send_keys("ceshiren.com")driver.back()driver.back()
用例脚本优化
添加 capability 信息初始化webdriver,添加setup和teardown添加隐式等待和noReset属性增强用例稳定性添加断言注意selenium 版本建议 3.141.0appium-python-client 版本建议 1.2.0完整代码
import timefrom appium import webdriverfrom appium.webdriver.common.mobileby import MobileByclass TestXueQiu: def setup(self): desire_cap = {} # 平台 desire_cap["platform"] = "Android" # 设备名 desire_cap["deviceName"] = "emulator" # app 包名 desire_cap["appPackage"] = "io.appium.android.apis" # app 页面名 desire_cap["appActivity"] = ".ApiDemos" self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap) self.driver.implicitly_wait(10) def teardown(self): time.sleep(3) # 退出应用 self.driver.quit() def test_api_demo(self): """ 1、打开 API demo apk 2、点击 OS 控件 3、点击 Morse Code 控件 4、在搜索框中输入 ceshiren.com 5、返回到第一页 6、断言 :return: """ # 点击 OS 控件 self.driver.find_element_by_accessibility_id("OS").click() # 点击 Morse Code 控件 self.driver.find_element_by_accessibility_id("Morse Code").click() # 输入`ceshiren.com` self.driver.find_element_by_id("io.appium.android.apis:id/text").clear() self.driver.find_element_by_id("io.appium.android.apis:id/text").send_keys("ceshiren.com") # 返回第一页 self.driver.back() self.driver.back() self.driver.back() # 选择元素进行断言 result = self.driver.find_element(MobileBy.XPATH,"//*[@resource-id="android:id/text1"][1]") print(result.text) # 断言 assert result.text == "Access"ibility"
# 导入 pip install appium-python-clientfrom appium import webdriver# 创建一个字典,desirecapbilitycaps = {}caps["platformName"] = "Android"# Android 包名和页面名,获取命令:# mac/linux: adb logcat ActivityManager:I | grep "cmp"# windows: adb logcat ActivityManager:I | findstr "cmp"caps["appPackage"] = "io.appium.android.apis"caps["appActivity"] = ".ApiDemos"caps["deviceName"] = "emulator-5554"# 创建driver ,与appium server建立连接,返回一个 sessiondriver = webdriver.Remote("http://localhost:4723/wd/hub", caps)el1 = driver.find_element_by_accessibility_id("OS")el1.click()el2 = driver.find_element_by_accessibility_id("Morse Code")el2.click()el3 = driver.find_element_by_id("io.appium.android.apis:id/text")el3.clear()el3.send_keys("ceshiren.com")driver.back()# 返回driver.back()# 回收sessiondriver.quit()
# 导入 pip install appium-python-clientfrom time import sleepfrom appium import webdriverfrom appium.webdriver.common.appiumby import AppiumByclass TestAppDemo: def setup(self): # 创建一个字典,desirecapbility caps = {} caps["platformName"] = "Android" # Android 包名和页面名,获取命令: # mac/linux: adb logcat ActivityManager:I | grep "cmp" # windows: adb logcat ActivityManager:I | findstr "cmp" caps["appPackage"] = "io.appium.android.apis" caps["appActivity"] = ".ApiDemos" caps["deviceName"] = "emulator-5554" caps["noReset"] = "true" # 创建driver ,与appium server建立连接,返回一个 session # driver 变成self.driver 由局部变量变成实例变量,就可以在其它的方法中引用这个实例变量了 self.driver = webdriver.Remote("http://localhost:4723/wd/hub", caps) self.driver.implicitly_wait(5) def teardown(self): # 回收session self.driver.quit() def test_input(self): # el1 = self.driver.find_element_by_accessibility_id("OS") el1 = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "OS") el1.click() # el2 = self.driver.find_element_by_accessibility_id("Morse Code") el2 = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Morse Code") el2.click() # el3 = self.driver.find_element_by_id("io.appium.android.apis:id/text") el3 = self.driver.find_element(AppiumBy.ID, "io.appium.android.apis:id/text") # 清除原有的内容 el3.clear() el3.send_keys("ceshiren.com") el3.clear() # 手动制造关闭应用 sleep(5) # 启动应用, 热启动,会进入到app 的首页 self.driver.launch_app() result = self.driver.find_element(AppiumBy.ACCESSIBILITY_ID, "Accessibility").text # 断言 assert result == "Accessibility"
3、capability 配置参数解析
目录
capability 含义capability 参数介绍Capability 简介
功能:配置 Appium 会话,告诉 Appium 服务器需要自动化的平台的应用程序形式:键值对的集合,键对应设置的名称,值对应设置的值主要分为三部分公共部分ios 部分android 部分Session
Appium 的客户端和服务端之间进行通信的前提通过 Desired Capabilities 建立会话公共部分参数配置
键 | 描述 (资料图片仅供参考) | 值 |
platformName | 使用的手机操作系统 | iOS,Android,或者 Firefox0S |
platformVersion | 手机操作系统的版本 | 例如 7.1, 4.4 |
deviceName | 使用的手机或模拟器类型 | iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android Emulator, Galaxy S4, 等等…. 在 iOS 上,使用 Instruments的 instruments -s devices 命令可返回一个有效的设备的列表。在 Andorid 上虽然这个参数目前已被忽略,但仍然需要添加上该参数 |
automationName | 使用哪个自动化引擎 | android默认使用uiautomator2,ios默认使用XCUTest |
noReset | 在当前 session 下不会重置应用的状态。默认值为 false | true, false |
udid | 连接的真实设备的唯一设备编号 (Unique device identifier) | 例如 1ae203187fc012g |
Android 部分特有参数配置
键 | 描述 | 值 |
appActivity | Activity 的名字是指从你的包中所要启动的 Android acticity。他通常需要再前面添加. (例如 使用 .MainActivity 代替 MainActivity) | MainActivity, .Settings |
appPackage | 运行的 Android 应用的包名 | com.example.android.myApp, com.android.settings |
appWaitActivity | 用于等待启动的 Android Activity 名称 | SplashActivity |
unicodeKeyboard | 启用 Unicode 输入,默认为 false | true or false |
resetKeyboard | true or false | |
dontStopAppOnReset | 首次启动的时候,不停止 app | true or false |
skipDeviceInitialization | 跳过安装,权限设置等操作 | true or false |
iOS 独有
键 | 描述 | 值 |
bundleId | 被测应用的 bundle ID 。用于在真实设备中启动测试,也用于使用其他需要 bundle ID 的关键字启动测试。在使用 bundle ID 在真实设备上执行测试时,你可以不提供 app 关键字,但你必须提供 udid 。 | 例如 io.appium.TestApp |
autoAcceptAlerts | 当 iOS 的个人信息访问警告 (如 位置、联系人、图片) 出现时,自动选择接受( Accept )。默认值 false | true 或者 false |
showIOSLog | 是否在 appium 日志中显示从设备捕获的任何日志。默认 false | true or false |
Desire capability 参数示例
API Demo 启动页配置{ "platformName": "android", "deviceName": "emulator-5554", "appPackage": "io.appium.android.apis", "appActivity": ".ApiDemos"}
配置优化
添加参数,提高用例的稳定性{ "noReset": "true", // 不清空缓存信息 "dontStopAppOnReset": "true", // 首次启动的时候,不停止app "skipDeviceInitialization": "true", // 跳过安装,权限设置等操作 "unicodeKeyBoard": "true" // 输入中文}
4、app 自动化控制
目录
启动数据清理关闭启动
启动应用方式一:webdriver.remote("url",desirecapability)方式二:launch_app() 将应用启动起来# 方式一:self.driver = webdriver.Remote\("http://127.0.0.1:4723/wd/hub", desire_cap)# 方式二:self.driver.launch_app()
数据清理
清空输入框内容clear()self.driver.find_element_by_accessibility_id("SomeAccessibilityID").clear()
关闭
退出appquit()self.driver.quit()
关键词:
推荐阅读
高岭土是什么?高岭土主要应用在哪些领域?
高岭土是什么?高岭土是一种非金属矿物,是一种粘性的土和粘性的土岩,主要由高岭石族的粘土矿物组成,有黏土和黏土岩。因其白色细腻,又叫 【详细】
南北两极同时出现极端高温 为什么两极会比较寒冷?
南北两极同时出现极端高温南极洲多个考察站本月(3月)18日测得创纪录高温。其中,康科迪亚南极考察站测得-11 5℃,较往年同期平均水平高出约 【详细】
射干每亩种多少斤? 射干的种植技术有哪些?
射干每亩种多少斤?1 每亩成本:租金500元,肥料200元,种子(3公斤)360元,机械化40元,机械化播种20元,机械化收获150元,地膜40元,人工20 【详细】
磁性材料的应用有哪些 磁性材料有关的上市公司有哪些 ?
磁性材料的应用有哪些?磁性材料广泛应用于电声、电信、电表、电机、存储元件、微波元件等。1 可用于记录语言、音乐和图像信息的磁带、计算 【详细】
汽车品牌沃尔沃最贵的车多少钱 沃尔沃XC90配置简介
沃尔沃在很多人的印象中是一个相对低调的汽车品牌,以朴实无华的设计,良好的品质和安全为重点,大概是深入人心吧。就定位而言,沃尔沃确实 【详细】
相关新闻
- 软件测试/测试开发丨学习笔记之App自动化用例录制、结构分析-速看料
- 天天动态:清华教授吴国盛:妄称四大发明不是科学!
- 最新资讯:电子相册是什么(什么叫电子相册?)
- 焦点热文:天津武清:为百姓“米袋子”“菜篮子”添秤加码
- 世界速递!忱怎么读组词 忱怎么读
- 当前快看:外盘不妙 大A走向何方?
- 不想卷工作的年轻人,卷起了彩票 焦点热讯
- 购买股票多久可以分红 持股多久可以分红
- 明晚,有一场首次来自火星的直播
- 动视暴雪 CEO 科蒂克再谈微软收购案:若成功有利于行业
- OPPO Reno10 系列手机今日开售:全系标配超光影长焦
- 世界今热点:阿里巴巴普惠体 3.0 正式发布:支持新国标 GB18030-2022
- 今日快看!内存占用少 50%、安装速度提高 3 倍,Win10、Win11 平台默认改用 Teams 2.0
- 引领AI设计革命:建筑装饰行业垂直大模型阿拉丁ALDGPT重磅发布
- 满是青木瓜和摩托车的越南,从“黑马”变“黑洞”?
- 中兴通讯亮相2023年科技趋势峰会,分享5G-A新生长愿景 全球速读
- 每日热闻!电商直播销售额超3.7亿元!第二届中国·普宁电商直播节圆满落幕
- 海南都逃不过寒潮 什么是寒潮?
- 每日消息!经常憋大便有什么危害(憋大便的危害有哪些?每天排便几次算正常?)
- 高岭土是什么?高岭土主要应用在哪些领域?