appium自动化测试实战详解及框架搭建

news2024/11/18 2:21:19

目录

一、Appium的介绍    

二、Appium实战(以真机为例)


一、Appium的介绍    

       Appium是一款开源的自动化测试工具,其支持iOS和安卓平台上的原生的,基于移动浏览器的,混合的应用。

1、 使用appium进行自动化测试的好处

       Appium在不同平台中使用了标准的自动化APIs,所以在跨平台时,不需要重新编译或者修改自己的应用。

       Appium支持Selenium WebDriver支持的所有语言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl语言,更可以使用Selenium WebDriver的Api。Appium支持任何一种测试框架.Appium实现了真正的跨平台自动化测试。(本文主要介绍Python的用法)

2、Appium架构

      Appium 是一个用Node.js编写的HTTP server,它创建、并管理多个 WebDriver sessions 来和不同平台交互,如 iOS ,Android等等. 

      Appium 开始一个测试后,就会在被测设备(手机)上启动一个 server ,监听来自 Appium server的指令. 每种平台像 iOS 和Android都有不同的运行、和交互方式。所以Appium会用某个桩程序“侵入”该平台,并接受指令,来完成测试用例的运行。

      下面直接开始正题,进行移动端自动化测试实战。

appium自动化测试视频:2023年,你一定要学会的APP自动化测试项目实战_哔哩哔哩_bilibiliicon-default.png?t=N4HBhttps://www.bilibili.com/video/BV13g4y1G7QC/?spm_id_from=333.999.0.0

 

二、Appium实战(以真机为例)

       aapt dump badging D:\XXX.apk  获取安装包的所有信息

       adb devices(查看手机是否连接到电脑)

       adb shell pm list packages:列出所有的包名,找到所查看包的包名。

       adb shell dumpsys package com.android.XXX:查看某个包的具体信息

       其它:

       adb devices:查看Android设备是否连接到电脑。

       adb shell dumpsys activity:查看当前运行的是哪个activity,运行的一些进程等

       adb shell dumpsys activity activities

       adb shell pm list packages:列出所有的包名。

       adb shell dumpsys package:列出所有的安装应用的信息

       adb shell dumpsys package com.android.XXX:查看某个包的具体信息

       adb shell dumpsys activity | grep mFocusedActivity:查看当前resume的是哪个activity

       adb logcat | grep ActivityManager:查看当前正在运行的Activity

       adb logcat | grep Displayed:查看当前正在运行的Activity

1、 连接真机或者模拟器(此处以真机为例)

       连接手机时注意选择手机的开发者模式,cmd打开命令行窗口,输入adb devices获取到设备的deviceName。

       

2.获取Activity

       cmd打开命令行窗口,输入aapt dump badging D:\XXX.apk(xxx指安装包名,D:\是指路径)直接查看需要测试app安装包的具体信息。

       

       标记的就是包名,继续往下拖拽,可以找到activity的信息。

       

       这里的红圈就可以看到activity的信息。这两个值,在appium脚本中都需要提前获取到,所以需要提前介绍这个获取方法。如果你觉得在cmd里面不好看,你可以把cmd信息导出到一个txt文件,例如 aapt dump badging shoujibaidu.apk > 123.txt 回车后,会在桌面生成一个123.txt文件,你可以打开,通过查询找到这些信息。通过上面的方法,只要我们有android SDK环境,那么我们就可以获取到任意一个包的包名和Activity信息。

appium自动化测试:

2023年,你一定要学会的APP自动化测试项目实战_哔哩哔哩_bilibiliicon-default.png?t=N4HBhttps://www.bilibili.com/video/BV13g4y1G7QC/?spm_id_from=333.999.0.0                   

3.启动Appium 

     1)  双击桌面上的appium图标打开,点击Android Settings进行设置。

     

     2)将上方获取到的真机的deviceName填入 ,选择platformName和platformVersion

     

      3)将服务的session配置成可重写(非必要的配置)

       

      配置好后,点击右上角的启动按钮进行启动即可。

       

        启动成功,下一步该写代码了。

4、将上方得到的设备和安装包信息写入脚本中

desired_caps = {
    'platformName': 'Android',
    'deviceName':'8TB6V4ZPZ54LPJ5P',
    'platformVersion': '5.1',
    'app': PATH(r'D:\shell_customer-debug.apk'),
    'appPackage': 'com.jyibb.shell_customer',
    'appActivity': 'com.jyibb.module_launch_customer.SplashActivity',    # 'unicodeKeyboard': 'True',#此两行是为了解决字符输入不正确的问题
    # 'resetKeyboard': 'True'   #运行完成后重置软键盘的状态

5、查找app定位元素

      启动Android SDK中的一个神器可以查找app的定位元素进行脚本的编写。在Android SDK中的tools中有一个uiautomatorviewer.bat,如下图所示:

      

      点击uiautomatorviewer.bat进行启动,左上角一共四个按钮,作用分别是打开本地文件、dump页面、dump压缩格式的页面、保存;启动后点击左上角第三个图标进行真机界面的呈现。

       

      第一次连接会比较慢,耐心等候一下,连接好后以后就快了。我这里以百度界面为例。

     

     这是连接真机后的界面显示。这样就可以根据id、class、text等定位元素进行定位了。

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
driver.find_element_by_id("com.baidu.searchbox:id/baidu_searchbox").click()
driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").clear()
driver.find_element_by_id("com.baidu.searchbox:id/SearchTextInput").send_keys('appium测试')

driver.find_element_by_id("float_search_or_cancel").click()
driver.find_element_by_id("floating_action_button").click()

driver.quit()

三.下方直接上完整代码,以我自己的app为例

#coding:utf-8

from appium import webdriver
import time,os

PATH = lambda p:os.path.abspath(os.path.join(os.path.dirname(__file__),p))

#设备及安装包信息
desired_caps = {
    'platformName': 'Android',
    'deviceName':'8TB6V4ZPZ54LPJ5P',
    'platformVersion': '5.1',
    'app': PATH(r'D:\shell_customer-debug.apk'),
    'appPackage': 'com.jyibb.shell_customer',
    'appActivity': 'com.jyibb.module_launch_customer.SplashActivity',
    # 'unicodeKeyboard': 'True',
    # 'resetKeyboard': 'True'
}

driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
time.sleep(5)#等待时间可根据自己的情况进行添加

driver.find_element_by_id("com.jyibb.shell_customer:id/layout_main_header_mine").click()
time.sleep(5)

driver.find_element_by_id("com.jyibb.shell_customer:id/login_phone_number_p").send_keys('15000000000')
driver.find_element_by_id("com.jyibb.shell_customer:id/login_password_p").click()
driver.find_element_by_id("com.jyibb.shell_customer:id/login_password_p").send_keys("111111q")

time.sleep(5)
driver.find_element_by_id("com.jyibb.shell_customer:id/bt_login_p").click()

      至此运行脚本即可进行自动化测试。

  appium自动化测试:

2023年,你一定要学会的APP自动化测试项目实战_哔哩哔哩_bilibiliicon-default.png?t=N4HBhttps://www.bilibili.com/video/BV13g4y1G7QC/?spm_id_from=333.999.0.0

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545470.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】容器篇(一)—— vector 的基本概述以及模拟实现

前言: 在之前,我们已经对 string类进行了基本的概述,并且手动的实现了string类中常用的接口函数。本期,我将带领大家学习的是STL库中的一个容器 -- vector 的学习。相比于之前的string类,本期的 vector 相对来说实现起…

CSAPP复习(三)

CH1: 但是如果问什么时候 得到二进制文件 那就是汇编的时候 CH2 sizeof 的返回值是一个无符号数 然后i-D自动默认是一个无符号数 无符号数不能出现负数 所以出现了一个循环 所以永远不可能循环完成。 CH7链接 什么是静态库?使用静态库的优点是什么? …

在windows内使用virtualbox搭建安卓x86--以及所遇到的问题解决--3

一.ARM兼容包的植入 1.下载arm包: 2.安装arm兼容包 3.验证arm兼容包是否移植成功 二.触屏无效 三.玩游戏卡顿严重 一.ARM兼容包的植入 在AndroidX86系统内大部分应用(国内)并没有适配X86架构,安装基于arm架构的应用会出现报错的情况,如遇到此问题可…

【Linux网络】Linux防火墙

Linux防火墙 一 、Linux包过滤防火墙概述1.1iptables概述1.2netfitel与iptables的关系1.3四表五链1.3.1 四表1.3.2五链1.3.3数据包到达防火墙时,规则表之间的优先顺序**1.3.4规则链之间的匹配顺序** 二、iptables的安装与配置方法2.1iptables的安装2.2iptables的配置…

MySQL数据库基础3-基础查询

文章目录 基础查询(单表)替换查询结果排序筛选分页结果更新表删除数据截断(清空)表聚合函数分组查询 基础查询(单表) 创建表、单行插入、多行插入就不重复介绍了。 替换 当我们的程序每天都会产生大量的数据,而这些数据都是前一天或者再之前的数据更新产生&#…

0基础学习VR全景 平台篇第26章:热点功能-3D物体/空间模型

大家好,欢迎观看蛙色VR官方系列——后台使用课程! 本期为大家带来蛙色VR平台,热点功能—3D物体/空间模型操作。 热点,指在全景作品中添加各种类型图标的按钮,引导用户通过按钮产生更多的交互,增加用户的多…

opencv_c++学习(十四)

一、图像直方图的统计与绘制 如果直方图各个数字之间分布比较均衡,则其对比度就相对较低,反之亦然。同时也可以通过直方图可以大致了解图像的亮暗等。 calcHist(const Mat * images, int nimages, const int * channels, lnputArray mask, OutputArray…

【Python Xpath】零基础也能轻松掌握的学习路线与参考资料

Python是一种面向对象的编程语言。Xpath是一种在XML文档中定位信息的方法。XPath是一种语言,可以用于xml和html文档中选择和查找节点。在Python中,我们可以使用xpath来解析html页面,从而提取所需的数据。 Python xpath学习路线: …

C++中的继承、以及赋值兼容转换。

一、继承的概念及定义 继承可以使代码复用,允许在保持原有类特性的基础上进行扩展。 举个例子:就好比我现在要封装老师、学生等这些人的属性和方法,但是这些人都有重复的属性和方法,比如name、age、sex等等,那么我可…

let、const、var的区别,解构赋值,箭头函数

let、const、var的区别 使用var声明的变量,其作用域为该语句所在的函数内,且存在变量提升现象。使用let声明的变量,其作用域为该语句所在的代码块内,不存在变量提升。使用const声明的是常量,在后面出现的代码块中,不能在修改改常量的值。 var let const 函数级作用域 块级…

Go语言核心编程-运算符和进制转换

第 4 章 运算符 4.1 运算符的基本介绍 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 算术运算符赋值运算符比较运算符/关系运算符逻辑运算符位运算符其它运算符 4.2 算术运算符…

体验联网版 ChatGPT:优点和缺点同样明显,还藏着无限可能

ChatGPT 有点像古希腊的阿喀琉斯:它很强大,却有个致命的弱点——无法联网,这注定了它只能是一个停留在 2021 年的超人。 但很快,我们将等到一个「鱼和熊掌兼得」的时刻。 通过插件集的 Web browsing 功能,ChatGPT 就…

C++每日一练:贝博士的机械零件(补全题目)奇偶排序(巧妙快排)寻因找祖

文章目录 前言一、贝博士的机械零件1、题目2、解法 二、奇偶排序(巧用快排)三、寻因找祖 前言 今天的题目中寻因找祖最难了,明显的数学题,笔者这数学文盲水平肯定不会,用暴力搞了一波,只有50%。就去考察学…

(二十六)ATP应用测试平台——将一个微服务打包成含skywalking链路追踪的docker镜像

前言 延续前面的章节内容,本节内容我们以ht-atp的springboot应用为例,封装一个包含skywalking链路追踪的微服务docker应用。完成服务调用的链路追踪监控。skywalking采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但…

详解c++STL—容器set/multiset

目录 1、set基本概念 1.1、功能 1.2、本质: 1.3、set和multiset区别 2、set构造和赋值 2.1、功能描述 2.1、构造 2.3、赋值 2.4、示例 3、set大小和交换 3.1、功能描述 3.2、函数原型 3.2、示例 4、set插入和删除 4.1、功能描述 4.2、函数原型 4.3…

YOLO V3 SPP ultralytics 第一节:VOC 的标注文件(xml)转YOLO标注格式(txt)以及如何自定义YOLO数据样本

目录 1. 前言 2. 关于PASCAL VOC数据集xml --> YOLO txt格式 2.1 路径设定 2.2 读取xml 文件的函数 2.3 xml ---> yolo txt 2.4 yolo 的label文件 2.6 结果 2.7 代码 3. 自定义 YOLO 数据集 3.1 预备工作 3.2 打开labelimg 3.3 绘制 代码参考是b站的大佬&…

CNNs: ZFNet之CNN的可视化网络介绍

CNNs: ZFNet之CNN的可视化网络介绍 导言Deconvnet1. Unpooling2. ReLU3. Transpose conv AlexNet网络修改AlexNet Deconv网络介绍特征可视化 导言 上一个内容,我们主要学习了AlexNet网络的实现、超参数对网络结果的影响以及网络中涉及到一些其他的知识点&#xff0…

RedisInsight—Redis可视化工具

到处都是各种redis的可视化工具,但是那个是redis官网推荐的呢。 答案是:RedisInsight。 好用吗?自己看看吧。反正下载是挺烦躁的。 RedisInsight介绍 RedisInsight支持多种操作系统:Linux、Windows和macOS。 RedisInsight支持…

全网最牛最全面的jmeter教程之jmeter对图片验证码的处理

jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 通过jmeter对图片验证码…

【数据结构】C语言实现堆及其应用

二叉树的顺序结构--堆 一、堆的概念与实现堆的概念堆结构定义堆的初始化与销毁堆的插入与向上调整堆的打印、判空、元素个数size、堆顶元素堆的删除与向下调整大根堆与小根堆的写法区别堆的两种建立方式建堆的时间复杂度推导 二、堆的应用堆的应用--topK堆的应用--堆排序优先级…