基于appium的app自动化测试框架(代码片段)

自动化软件测试 自动化软件测试     2023-03-05     721

关键词:

App自动化测试主要难点在于环境的搭建,appium完全是基于selenium进行的扩展,所以app测试框架也是基于web测试框架开发的

一、设备连接

(即构建基础的测试环境,保证可以驱动设备进行操作)
0.准备测试环境
1)安装jdk配置java_home环境变量;
2)安装Android SDK(安卓软件开发包)(adb、appt )
3)安装nodejs,并通过npm安装appium
1.获取app包名appPackage
在cmd命令行中输入aapt dump badging +apk包目录


如果提示aapt命令不是内部命令,说明aapt的环境变量配置有问题。


可以直接到android-sdk-windows的安装目录下找到aapt程序,在地址栏中输入cmd,然后在执行上面操作,就可以了。

如果执行脚本出现“no such element: Unable to locate element: “method”:“css selector”,“selector”:“#i1”
(Session info: webview=39.0.0.0)”原因是不明未解决。一般是在模拟机上会出现这种定位问题,真机没有。

成功的结果是这样的,截图如下:

2.获取app入口appActivity的值
还是在上面的信息中往下找找到如下图的位置,其中name的值就是appActivity的参数值


接下来我们可以启动appium软件,直接启动服务appium-server。


然后,通过以上方法获取关于app模块信息,我们可以尝试写一下脚本驱动appium-server来帮我连接到设备上的app软件。脚本命令如下:


脚本完成后,右键执行一下,会发现appium在不停的刷日志(确保appium和脚本在同一网段即可,不一定在同一台电脑)

这样就证明code-client和appium已经建立了联系,然后我们就可以通过写脚本命令操作设备上的软件了。
如果我们要操作手机上自带的软件/功能,没有办法获取apk包怎么办呢?
答:进入cmd命令行中输入adb logcat |findStr START ,然后操作设备上的功能/软件,在打出的日志中查找第一个START,在其后cmp=后面就是报名appPackage和appActivity


二、搭建自动化测试框架
1、整体思路:创建基础类实现设备驱动的获取连接
2、创建页面类实现页面中所有的功能元素可被获取调用(代码驱动编写测试用例)
3、创建测试脚本(测试类),编写测试方法调用测试用例
4、创建服务控制类,通过参数配置的方式连接不同的设备
5、创建框架的启动脚本
具体代码如下:
1.创建基础类实现设备驱动的获取连接
1)编写基础类,实例化封装后的appium框架(即Pyapp)
2.创建页面类实现页面中所有的功能元素可被获取调用(代码驱动编写测试用例)
2)编写登录页面类,实现登录页面的功能操作


3)编写单个页面功能的测试方法


4)逐一编写测试功能页面类的相关功能

3.创建测试脚本(测试类),编写测试方法调用测试用例


4.创建服务控制类,通过参数配置的方式连接不同的设备
1)新建yml文件编写测试设备的详细信息


2)创建服务控制类:服务控制类:appium服务的停止、启动、监听;设备驱动的连接启动

class Controller(object):
#读取设备配置文件中的设备信息进行初始化
def init(self):
# 通过读取yml文件获取 配置信息
self.conf = Tool().app_data
# 拆分包的信息
self.tester = self.conf.get(‘tester’)
# 拆分手机的信息
self.devices = self.conf.get(‘devices’)
# 手机的类型
self.device_type = self.conf.get(‘device_type’)
# 唯一手机
self.device = self.devices.get(self.device_type)[0]
# 手机名称
self.deviceName = self.device.get(‘name’)
#启动appium服务,由于我们是代码驱动,就不能使用手工开启appium
def start_server(self):
device = self.devices.get(self.device_type)[0]
ip = device.get(‘ip’)
port = device.get(‘port’)
deviceName = device.get(‘deviceName’)
log = os.path.join(LOGPATH, device.get(‘name’) + ‘.log’)
cmd = ‘appium -a ip -p port -U deviceName -g log’.format(
ip=ip, port=port, deviceName=deviceName, log=log)
logger.debug(‘启动服务的命令:%s’%cmd)
# 执行命令 netstat -ano | findstr 9036 – netstat -nlpt |grep 9036
subprocess.Popen(cmd, stdout=open(log, ‘a+’), stderr=subprocess.PIPE, shell=True)
#监听appium服务是否启动成功
def test_server(self):
port = self.devices.get(self.device_type)[0].get(‘port’)
while True:
#在cmd命令行中执行netstat -ano |findstr 端口,监听服务是否启动成功
res = subprocess.getoutput(“netstat -ano | findstr %s” % port)
if ‘LISTENING’ in res:
logger.debug(res)
logger.info(“服务启动成功”)
break
else:
time.sleep(3)
logger.debug(‘三秒后重试’)
return True
#开启手机启动的连接
def start_driver(self):
# 包信息 和 手机信息 合并
self.tester.update(self.device)
ip = self.tester.get(‘ip’)
port = self.tester.get(‘port’)
driver = webdriver.Remote(‘http://ip:port/wd/hub’.format(ip=ip,port=port),self.tester)
# 像对列中put生成的drvier
driver_queue.put(driver)
#关闭appium服务
def kill_server(self):
res = subprocess.getoutput(“taskkill /F /IM node.exe /t”)
logger.debug(‘kill server :%s’%res)
if name == ‘main’:
contorller = Controller()
contorller.kill_server()
contorller.start_server()
if contorller.test_server():
contorller.start_driver()

5.创建框架的启动脚本
主要负责启动appium服务、启动设备驱动连接设备、执行测试用例、生成测试报告。

详细代码:
class Main(object):
def init(self):
self.controller = Controller()
self.deviceName = self.controller.deviceName

def run(self):
    self.controller.start_server()
    if self.controller.test_server():
        self.controller.start_driver()
        suite = unittest.TestSuite()
        cases = unittest.defaultTestLoader.discover(APPCASE)
        for case in cases:
            suite.addTest(case)
        f = open(APPREPORT.format('.html'.format(self.deviceName)), 'wb')
        runner = HTMLTestRunner(f, verbosity=1, title=u'测试报告', description=u'用例执行情况:')
        runner.run(suite)
        f.flush()
        f.close()

if name == ‘main’:
m = Main()
m.run()

==============================================================================

三、编写测试用例过程中常见的问题:
1.如果运行以上脚本后,提示“无法与计算机取得联系”

一般原因有两个(1.appium未开启,2.appium服务和脚本服务不在一个网段内。)
2. 有时候联系两次运行脚本会出现“A new session could not be created. Details”

原因是:appium-server和code-client已经连接,无法再去连接。这里我们可以将appium-server服务关闭然后在新建一个appium-server。在执行脚本就好了。

主要原因是selenium的版本问题,可是使用set_value()代替send_keys()方法。

最后:下方这份完整的软件测试视频学习教程已经整理上传完成,朋友们如果需要可以自行免费领取 【保证100%免费】

app自动化测试——appium的使用(代码片段)

...&解决方案优点&缺点总结简介Appium是一个开源测试自动化框架,用于原生、混合和移动Web应用程序。安装Appium安装方式有两种,一种是通过npm命令行安装,另一种是通过安装可视化工具。npm安装npm安装方式稍微... 查看详情

app自动化测试----基础入门appium初使用2(uiautomator元素定位)(代码片段)

1.说明元素定位方式有多种,Android也有自身独有的定位方式。下面就单独介绍其基于uiautomator定位元素的方法。基本语法:driver.find_element_by_android_uiautomator(xx)参考文档:https://developer.android.com/reference/androidx/test/uiautomator/UiSelector&n... 查看详情

appium使用之helloworld(代码片段)

...方面的内容,同时自己又属于比较懒的,所以期望可以做成自动化测试,写个脚本自动运行,在版本迭代后做回归测试会比较方便,另外,我期望测试框架可以根据id等属性来定位控件,而不是如monkeyRunner那样通过坐标来定位,以便于测试... 查看详情

appium+java实现androidapp自动化测试(代码片段)

一、Appium:是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动iOS,Android和Windows应用程序;UiAutomator测试框架是AndroidSDK自带的AppUI自动化测试Java库;appium在Android... 查看详情

appium+java实现androidapp自动化测试(代码片段)

一、Appium:是一个开源测试自动化框架,可用于原生,混合和移动Web应用程序测试。它使用WebDriver协议驱动iOS,Android和Windows应用程序;UiAutomator测试框架是AndroidSDK自带的AppUI自动化测试Java库;appium在Android... 查看详情

appium-自动化测试框架-工作原理环境搭建

在这里,我还给大家推荐一套app自动化测试的视频,比文字内容更容易理解!python+Appium自动化测试框架【项目实战合集】,轻松掌握app高级自动化测试_哔哩哔哩_bilibilipython+Appium自动化测试框架【项目实战... 查看详情

app自动化测试是怎么实现h5测试的(代码片段)

移动端app自动化框架很多,但是有一些框架因为不支持混合应用测试,一直没有完全流行。比较典型的是经典的Python框架uiautomator2,这个框架简单好用,没有appium那样复杂的api调用,受到不少python自动化工程师的青睐。但是不管... 查看详情

appium学习笔记——appium初探,下载与安装以及初步的录制尝试(代码片段)

一.Appium简介Appium是一个开源测试自动化框架,可以用来测试NativeApp、混合应用、移动Web应用(H5应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium坚持的测试理念:•无需用户对App进行任... 查看详情

appium学习笔记——appium初探,下载与安装以及初步的录制尝试(代码片段)

一.Appium简介Appium是一个开源测试自动化框架,可以用来测试NativeApp、混合应用、移动Web应用(H5应用)等,也是当下互联网企业实现移动自动化测试的重要工具。Appium坚持的测试理念:•无需用户对App进行任... 查看详情

app自动化测试系列之desiredcapabilities详解(代码片段)

在上一篇APP自动化系列文章:APP自动化测试系列之Appium介绍及运行原理,主要介绍appium的运行原理。以下主要介绍Appium中DesiredCapabilities的作用、常用配置及实战。一DesiredCapabilities介绍1DesiredCapabilities概念DesiredCapabilities是... 查看详情

app自动化测试——appium的使用(代码片段)

...&解决方案优点&缺点总结简介Appium是一个开源测试自动化框架,用于原生、混合和移动Web应用程序。安装Appium安装方式有两种,一种是通过npm命令行安装,另一种是通过安装可视化工具。npm安装npm安装方式稍微... 查看详情

(c#)appium自动化测试之卸载重装app(代码片段)

1、先获取session,实例化driver2、自动安装APP//安装driver.InstallApp("APP的路径");//判断是否安装完成,返回true\falseboolisInstalled=driver.IsAppInstalled("app包名");3、重启APP//重装过后要唤起APPdriver.ResetApp();4、卸载driver.RemoveApp("APP包名"); 查看详情

python+appium实现app自动化测试(代码片段)

Python+Appium实现app自动化测试一、Appium简介Appium是一款开源工具,用于自动化iOS、Android和Windows桌面平台上的本地、移动web和混合应用程序。原生应用是指那些使用iOS、Android或Windowssdk编写的应用。移动网页应用是通过移动... 查看详情

移动端自动化测试appium框架之数据驱动(代码片段)

...找工具类元素定位类基础启动类业务组合测试类总结背景自动化是为业务测试服务,如果数据与业务放在一起看起来不是专业,把数据与业务分离是完全必要的,这也是市场常见的数据驱动框架,今天咱们就聊一... 查看详情

python+appium+pytest+allure实战app自动化测试框架,小试牛刀!

...写常规的线性脚本具体的步骤如下:1、设计待测试APP的自动化测试用例;2、新建app测试项目;3、配置conftest.py文件等;4、编写整体app测试用例运行文件;5、把设计好的自动化测试用例转化成脚本备注。编写常规的线性脚本具... 查看详情

教你用appium搭建android自动化测试框架(详细教程)(代码片段)

如题,本文附有仓库地址以及代码,目录如下:1.下载安装appium2.配置并使用appium3.配置工程一、下载安装appium下载appium-desktop的mac版本,我选择用1.17.1版本,最新的版本1.22.0,拆分一个桌面应用为两个桌面... 查看详情

史上最全appium自动化测试从基础到框架实战(代码片段)

对测试人来说,Appium是非常重要的一个开源跨平台自动化测试工具,它允许测试人员在不同的平台(iOS、Android等)使用同一套API来写自动化测试脚本,这样可大幅提升代码复用率和工作效率。本文汇总了从Appi... 查看详情

appium入坑必备--不写代码的自动化测试,你不心动吗?(代码片段)

       上一章我们讲了appium的一些基本操作,也是app测试中一些比较常用的一些方法。本章我们讲讲另外两种工具的使用,最后一种会让你心动!元素定位及工具使用-------必须学会的技能app定位的基本操作-------... 查看详情