阿里p7大佬在线讲解基于 python 和 Appium 的移动端多设备自动化测试框架实现

前言

本篇文章主要介绍基于 pytest 和 Appium 框架,支持 Android 和 iOS 功能自动化的测试框架。同时该框架支持多设备测试,并利用 allure 库,生成可视化测试报告。本框架主要涉及的内容包括:python3、pytest、appium、allure 等,此处已假设你具备相应的基础知识,同时已有可以随时运行的测试环境(iOS 设备的测试只能在 Mac 系统中执行,没有 Mac 的朋友们,可以看看不执行)

一、流程图

本部分内容先从自动化测试的整体流程开始介绍,目的是希望大家在开始动手去实现框架之前,对测试过程做到清晰明了,这样在实现过程中,才能帮助我们无论何时,都不会迷茫和不知所措。才能让我们知道从何开始,如何优化以及拓展。 那么我们先来看下面这张流程图: 

以上是本文所介绍框架的核心流程图,上图已经展现了框架的核心流程,所以在接下来的讲述中,大家可以参考该图进行理解和优化。

二、appium 服务

在开始我们的测试之前,还有很多的工作需要我们去处理,这其中最重要,也是我们开始的第一步,就是开启 appium 的本地服务。关于 appium 的实现原理,本文不作过多的讲解,小编会抽空进行补充,届时也希望大家能及时关注。心急的小伙伴也可以自行百度哦~这里仅介绍启动服务的方法。

根据 appium 官方的介绍,我们可以通过下面的方式来启动 appium 服务:

/usr/local/bin/appium -a ip -p port

也就是我们在启动 appium 时,指定 ip 和端口,一般来说,本地 ip 使用 127.0.0.1 即可,官方默认端口为 4723,我们也可以修改成自己想要的端口,只要保证使用的端口没有被其他服务占用即可。(小技巧:如果你不知道自己 appium 安装路径,可通过 which appium 来帮你找到)

启动服务之后,一般我们可以通过访问这个连接来验证服务是否正常:http://127.0.0.1:4723/wd/hub/status。可正常访问并返回 json 格式数据时,则说明服务已正常启动。

但事实上,并不是每次启动都可以顺利进行,总会有一些意外的情况发生。比如说端口被占用。遇到这种情况我们也不必惊慌,做好应对即可。那么今天我们就上述的过程结合 python,把它实现出来。

上面的过程,用 python 来实现,其实很简单,我们这里选择使用 python 中的 subprocess 库来执行命令,从而达到我们预期。代码片段如下:

import subprocess
import abc
import socket

class Driver:
	__metaclass__ = abc.ABCMeta
	self._host = '127.0.0.1'
	
	@abc.abstractmethod
	def connect_appium(self, port, n)
		"""
		待实现的连接设备方法
		"""
		return
	
	def start_appium(self, port):
		server = self.get_local_server_path()
        host = readConfig.ReadConfig().get_commend("host")
        log_path = root_path + '/result/log'
        cmd = "%s -a %s -p %s" % (server, host, str(port))
        if self.check_port(int(port)):
            subprocess.Popen(cmd, shell=True, stdout=open('%s/AppiumServer%s.log' % (log_path, port), 'w'))
            log.logger.info('%s/AppiumServer%s.log' % (log_path, port))
        else:
            log.logger.info("关闭被占用的端口号:%s" % str(port))
            self.kill_appium()
            log.logger.info("端口释放完毕!启动Appium-server,端口号:%s" % str(port))
            subprocess.Popen(cmd, shell=True, stdout=open('%s/AppiumServer%s.log' % (log_path, port), 'w'))
            log.logger.info("Appium日志信息存储地址: %s/AppiumServer%s.log" % (log_path, port))

    def check_port(self, port):
        "&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值