软件测试/测试开发丨学习笔记之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亿元!第二届中国·普宁电商直播节圆满落幕
- 海南都逃不过寒潮 什么是寒潮?
- 每日消息!经常憋大便有什么危害(憋大便的危害有哪些?每天排便几次算正常?)
- 高岭土是什么?高岭土主要应用在哪些领域?
 
				 (资料图片仅供参考)
(资料图片仅供参考)