前言
本篇文章主要介绍基于 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):
"&#