【第三篇】XiaoZaiMultiAutoAiDevices之运行流程

简介: 本框架大部分代码都是有详细的注释,配合此教程系列,把流程梳理通应该是没有什么问题。
本框架大部分代码都是有详细的注释,配合此教程系列,把流程梳理通应该是没有什么问题。

在梳理流程的时候,可以使用debug模式进行运行,可以看到详细的代码执行过程。

ios如果已经配置好了相关环境,可以通过tools文件夹中的start_ios_devices.py文件一键启动ios的WebDriverAgent服务。

框架执行流程图

框架执行流程图.png

流程非常简单易懂:

1、首先是调用主函数进行获取在ini已经标记的设备id

2、每有一台设备则开启一个进程

3、每个进程针对该设备向测试文件传入设备id并执行ini中所勾选的测试用例

4、执行测试用例,用例由用户编写,可以再开启线程执行,具体根据需求

5、生成测试报告于Reports文件夹中,并配有相关截图在报告中展示

主功能逻辑

主要就是这一段

# 获取TestCase下需要启动的设备列表
runDevicesList = list(getAllTestCase().keys()) #拿到的设备名称全是小写,全是config的锅
print('当前标记的设备列表:',runDevicesList)
# 判定配置表里面TestCase下的设备是否在线
for device in runDevicesList:
    if device not in [x.lower() for x in allDevicesList]:
        print(f'\033[31m{device}设备不在线,可能未开启WebDriverAgent服务,请在tools文件夹下启动start_ios_devices或检查设备是否配置好相关环境!\033[0m')

# 只有在TestCase配置项下配置了,并且在线的设备才会进行运行
d = dict(zip(range(len(allDevicesList)), allDevicesList))
for k, v in d.items():
    if v.lower() not in runDevicesList:
        d[k] = []
finalDevicesList = [v for k, v in d.items() if v]
print('等待跑用例的设备列表:',finalDevicesList)

这一部分就是获取ini文件中devices的列表,同时需要判定该设备是否在线,只有在线才会开启线程进行执行。

需要注意的是,读取config.ini文件后,所有的字母都会变成小写,所以这里面我加了一个.lower()的判定。

主函数核心功能讲解

进程的开启。

pool_list = []
pools = Process(target=enter_processing,args=(i,MD,start,))
pool_list.append(pools)
for pool in pool_list:
    pool.start()
for pool in pool_list:
    pool.join()

每个线程都去执行enter_processing函数,这个函数里面会再去调用执行用例的方法,RunTestCase.RunTestCase()

if (startflag=="Success"):
    RunTestCase.RunTestCase(MD, start)    ################  用例在这运行
    print("{}完成测试".format(devices))
else:
    print("{}未运行测试。".format(devices))

通过RunTestCase.RunTestCase()去执行对应用例。

image-20220930161956101.png

红框处为本框架最核心之处,大概讲一下这个算法逻辑。

1、由于我使用的报告为unittestreport,这个报告的执行器是通过discover去遍历文件夹下的测试文件,所以我是基于此,去设计的。

2、discover是遍历所有的测试文件,而我配置文件中是自己选择了执行哪几个测试文件,那么如何只选择我勾选了的呢?

3、通过_tests属性,我们可以拿到对应discover所遍历到的测试用例相关信息,通过split切割拿到和配置文件中名称一致的测试文件名。

4、通过exec动态导入测试类,这一步可能会比较难理解。

5、拿到了一致的名称,再通过suite.addTest()将测试类加入到我们的测试套件中执行。

这个地方就来重点了,如何将设备的id传递给用例去执行呢?

suite.addTest(ParameterizedTestCase.parameterize(eval(x['test_class_name']),device_id=device_id))

就是这一句咯,那它是如何执行的呢?我们下一期再见!

下期预告

unittest的testcase外部传参函数剖析

相关文章
|
6月前
|
机器学习/深度学习 敏捷开发 人工智能
2025产品需求管理最佳实践:从流程优化到工具选型 详解项目需求管理实战
本文深入探讨产品需求管理的核心概念与全流程优化方法,涵盖需求采集、分析、优先级排序及落地实现等关键环节。通过多维度需求采集、科学评估与敏捷迭代,结合团队角色分工,确保需求价值最大化。同时对比评测板栗看板、Jira、Axosoft等管理工具,并展望AI赋能下的智能生成、预测性分析与自动化流程新趋势,助力企业精准把握市场动态,打造爆款产品。掌握需求管理精髓,是产品成功的关键驱动力。
|
缓存 Java Serverless
Golang中的闭包详解
Golang中的闭包详解
|
11月前
|
敏捷开发 人工智能 JavaScript
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
Figma-Low-Code 是一个开源项目,能够直接将 Figma 设计转换为 Vue.js 应用程序,减少设计师与开发者之间的交接时间,支持低代码渲染和数据绑定。
811 3
Figma-Low-Code:快速将Figma设计转换为Vue.js应用,支持低代码渲染、数据绑定
|
存储 SQL JSON
AntiSamy:防 XSS 攻击的一种解决方案使用教程
AntiSamy:防 XSS 攻击的一种解决方案使用教程
1329 0
AntiSamy:防 XSS 攻击的一种解决方案使用教程
|
数据采集 数据可视化 数据处理
我们来看一个简单的`matplotlib`代码示例,它使用`plot()`和`scatter()`函数来绘制二维图形。
我们来看一个简单的`matplotlib`代码示例,它使用`plot()`和`scatter()`函数来绘制二维图形。
|
传感器 数据采集 人工智能
传感器架构及原理(一)
传感器架构及原理(一)
546 1
|
算法 定位技术 图形学
unity2d实现一个全方位的无限随机地图
unity2d实现一个全方位的无限随机地图
971 0
|
机器学习/深度学习 人工智能 算法
Nature子刊:大脑学习也靠反向传播?Hinton等用新一代反向传播算法模拟神经网络
反向传播作为一种基本负反馈机制,极大地推动了深度学习神经网络的发展。那么,反向传播也存在于人脑的运行方式中吗?反向传播的发明者Geoffery Hinton发Nature子刊告诉我们:人脑中存在类似于反向传播的神经机制,我用一种新算法类比出来了!
1032 0
Nature子刊:大脑学习也靠反向传播?Hinton等用新一代反向传播算法模拟神经网络
|
安全 Unix Linux
基于MobaXterm工具的Linux远程SSH登录
本文介绍了如何使用 MobaXterm 进行 Linux 远程登录。首先,从官方网站下载并安装 MobaXterm。启动后,创建新的远程会话,选择 SSH 类型,输入服务器 IP、主机名和端口。接着,提供用户名和密码进行连接。成功后,即可使用远程终端执行命令。此外,文章还提到了其他常用的 Linux 远程登录工具,如 PuTTY、OpenSSH、SecureCRT 和 Xshell,强调了选择工具时应考虑个人偏好和安全需求。
|
前端开发 NoSQL Java
【SpringBoot】秒杀业务:redis+拦截器+自定义注解+验证码简单实现限流
【SpringBoot】秒杀业务:redis+拦截器+自定义注解+验证码简单实现限流
416 0