【第四篇】XiaoZaiMultiAutoAiDevices之核心机制

news/2024/5/8 12:03:43/文章来源:https://blog.csdn.net/qq_46158060/article/details/128093893

【第四篇】XiaoZaiMultiAutoAiDevices之核心机制

一、unittest改造

在上一期说到主要的流程和部分核心运行流程,这一期我们主讲:如何通过外部参数指定脚本运行指定设备

测试框架传参,可能一部分同学会想到unittest的DDT,使用pytest相关装饰器和各种外部文件的数据传入方式。

在当前这套框架中,我们是将设备在index.py中加入到进程中,再由进程去调用RunTestCase方法,在RunTestCase方法中,我们将进程中传入的设备ID再传入到TestCase中,实现一个动态获取动态执行。

那么,如何在TestCase文件外部传入一个值进入TestCase内部,并且进行使用呢?

这里我自己通过查阅资料,封装了一套方法,文件路径在common\ParameterizedTestCase.py

(1) 如何使用ParameterizedTestCase

可参考框架中TestCase\Demo文件夹中的TestCase文件,均使用了ParameterizedTestCase

1.在需要使用TestCase文件中导入ParameterizedTestCase类

from common.ParameterizedTestCase import ParameterizedTestCase

2、在编写TestCase时,继承ParameterizedTestCase类

class TESTDemo_1(ParameterizedTestCase):'第一个测试文件'# @unittest.skipdef test001_startAPP(self):'001进入第一个页面'print(f"当前运行的设备为:{self.device_id}")print('001进入第一个页面')# @unittest.skipdef test002_Authorization(self):'''001_进行授权'''print('001第二个测试用例')def test004_IosAtt(self):'''001_ios弹出ATT弹窗,点击"允许跟踪"按钮'''print('001_ios弹出ATT弹窗,点击"允许跟踪"按钮')

(2) ParameterizedTestCase 源码解析

我框架源码有详细注释

# -*- coding: utf-8 -*-
'''
@Time : 2022/9/19 17:26
@Author : Vincent.xiaozai
@Email : Lvan826199@163.com
@File : ParameterizedTestCase.py
'''
__author__ = "梦无矶小仔"import unittestclass ParameterizedTestCase(unittest.TestCase):""" 继承unittest.TestCase类,ParameterizedTestCase类可以进行参数化使用时直接继承ParameterizedTestCase类注意:methodName不要赋值,否则test不生效"""def __init__(self, methodName, device_id=None):super(ParameterizedTestCase, self).__init__(methodName)self.device_id = device_id@staticmethoddef parameterize(testcase_class, device_id=None):""" 创建一个套件,其中包含给定的测试类,参数可以自己定义单个或多个:return 返回测试套件:device_id 表示传入的参数,可以自定义,需要注意的是,在init中需要同步更新"""testloader = unittest.TestLoader()testnames = testloader.getTestCaseNames(testcase_class)suite = unittest.TestSuite()for name in testnames:suite.addTest(testcase_class(name, device_id=device_id))return suite

二、外部传参入TestCase

在前面我们将需要接收外部参数的测试类继承了ParameterizedTestCase,在ParameterizedTestCase 中我们可以自定义接收的参数,本框架为了便于理解只定义了一个device_id变量,如果想要传入多个参数,可以自行采用*args**kwargs进行传值。

(1)定义接收变量字典

在TestCase类外定义一个字典,进行全局变量控制,如Demo示例中为:

controlparams = {'control':1} # 用作控制器

在这里control作为控制器,防止设备频繁进行初始化。

(2)setUp进行初始化

Demo中为IOS的初始化,其他初始化可以参考index.py中的代码。setUp代码如下:

def setUp(self):u'''这里放需要在每条用例前执行的部分'''# 前段部分用于初始化连接设备,这个部分的作用就是避免设备多次重新连接,只会连接一次if controlparams['control'] == 1 :self.ios = IOS("http+usbmux://" + self.device_id)self.c = wda.Client("http+usbmux://{udid}".format(udid=self.device_id))controlparams['ios'] = self.ioscontrolparams['c'] = self.ccontrolparams['control'] = 2# 每次执行用例前,需要从控制参数里面进行取出(但不会进行重新连接)self.ios = controlparams['ios']self.c = controlparams['c']

这里我们看到了一个self.device_id,这个值就是我们在ParameterizedTestCase 中定义的外部传入的值,在TestCase可以直接用self进行获取。

其他的self.ios是使用的airtest-core-ios中的ios进行ios的一些原生控件操作初始化。

self.c则是使用的wda进行初始化,使用者可以自行选择一个,也可以全都用。(Android请不要讲uiautomator2和airtest一起初始化使用,会发生冲突。)

(3)Case中进行使用

在每个小case中,我们直接使用self.属性就可以啦,因为所有的步骤都是一样的,初始化的时候可以cv框架中Demo的代码就行,如果想要自己改造,可以看下系列教程。

三、IOS相关封装

common\IOSAppOperate.py封装了IOS相关操作。

1.自动切换更改Apple Store 的账号密码

2.自动切换更改沙盒账号密码

3.自动前往TestFlight下载相关应用

相关代码可自行下载框架源码进行查阅。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学生选课系统

项目描述 通过项目背景的分析以及了解到现在学校面临的问题,特别需要一个选课管理系统保证学生信息以及各种课程成绩的准确性和实效性,通过利用计算机的高速计算和快速的统计分析,保证学生信息的最新记录。从教职工的角度老考虑,…

用VS软件开发“中国象棋“游戏<笔记摘录>

整体架构如上 1.很直观地去看这个中国象棋的界面,数一下它有多少行和多少列. 10行,9列:要注意这里数的是安放象棋的位置,有10行9列 这里我们首先想到的必然是二维数组,每一个行列交叉的点都设置成二维数组a[i][j]这样的格式,以此来确定棋盘上面每一个棋子的位置和走向. 我们…

详解 Spring Boot 项目中的配置文件

目录 1. Spring Boot 项目中配日文件的作用是什么 2. Spring Boot 配置文件的两种格式 3. properties 配置文件 3.1 properties 配置文件的基本语法 3.2 properties 配置文件的分类 3.3 如何读取配置文件 3.4 properties 配置文件的优缺点分析 4. yml 配置文件 4.1 yml …

BP神经网络PID从Simulink仿真到PLC控制实现(含博途PLC完整SCL源代码)

单神经元自适应PID控制博途PLC完整源代码,请参看下面的文章链接: 博途PLC单神经元自适应PID控制_RXXW_Dor的博客-CSDN博客_单神经元pid控制1、单神经元作为构成神经网络的基本单位,具有自学习和自适应能力,且结构简单易于计算,传统的PID具有结构简单、调整方便和参数整定…

【软件测试】8年资深测试说出来我们的心声......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 执着于手动的功能测…

SSM毕设项目 - 基于SSM的毕业设计管理系统(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.3.2 教师登录流程3.3.3 系统操作流程3.3 系统结构设计4 项目获取1 项目简介 Hi,各位同学好呀,这里是M学姐! 今天向大家分享一个今年(2022)最新…

【Android App】实战项目之仿抖音的短视频分享App(附源码和演示视频 超详细必看)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 与传统的影视行业相比,诞生于移动互联网时代的短视频是个全新行业,它制作方便又容易传播,一出现就成为大街小巷的时髦潮流。 各行各业的人们均可通过短视频展示自己,短小精悍的视频…

社区系统项目复盘-6

文章目录什么是Elasticsearch?Spring是怎么整合Elasticsearch的?开发社区搜索功能Elasticsearch实现全文搜索功能什么是Elasticsearch? Elasticsearch简介 一个分布式的、Restful风格的搜索引擎支持对各种类型的数据的检索搜索速度快&#xf…

基于粒子群算法和遗传算法优化的高速列车横向悬挂

目录 前言 1.高速列车模型 2.优化算法优化模糊PID流程 3.普通PID、优化算法模糊PID仿真对比 3.1 模糊控制器设计 3.2 仿真结果 3.2.1粒子群优化PID 3.2.2粒子群优化模糊PID 3.2.3遗传算法优化模糊PID 4.总结 前言 高速列车,是指最高行驶速度在200km/h 及以…

小知识· Zigbee 简介

1. 介绍 ZigBee是一种近距离、低复杂度、低功耗、低速率、低成本的双向无线通讯技术 ZigBee建立在IEEE 802.15.4标准(定义了PHY和MAC层)之上,ZigBee联盟对其网络层和应用层进行了标准化 ZigBee协议栈可分为五层 - 物理层(PHY&a…

多进程并发服务器

TCP三次握手建立连接错误处理模块&#xff1a;wrap.c,函数声明&#xff1a;wrap.h并发服务器模型&#xff08;多进程&#xff0c;多线程&#xff09; 转换大小写程序 服务端 #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #incl…

Mybatis Plus 多租户id使用

本文就不多逼逼&#xff0c;直接进入正题。 什么是多租户 多租户技术&#xff08;Multi-TenancyTechnology&#xff09;又称多重租赁技术&#xff0c;简称SaaS&#xff0c;是一种软件架构技术&#xff0c;是实现如何在多用户环境下 &#xff08;此处的多用户一般是面向企业用…

Java SPI机制的使用和理解

前言&#xff1a; SPI(Service Provider Interface)&#xff0c;是JDK内置的一种服务提供发现机制&#xff0c;Java中 SPI 机制主要思想是将装配的控制权移到程序之外&#xff0c;在模块化设计中这个机制尤其重要&#xff0c;其核心思想就是解耦 1、大家都知道API&#xff0c;却…

【C++】STL —— map和set的模拟实现

目录 一、基础铺垫 二、基本结构分析 1. 节点结构分析 2. 模板参数中仿函数分析 三、正向迭代器 四、封装完成的红黑树 五、map的模拟实现 六、set的模拟实现 一、基础铺垫 在前面的博客中我们了解了map和set的基本使用&#xff0c;以及对二叉搜索树、AVL树和红黑树的…

IPv6进阶:IPv6 过渡技术之 NAT64(IPv6 节点主动访问 IPv4 节点-地址池方式)

实验拓扑 PC1是IPv4网络的一个节点&#xff0c;处于Trust安全域&#xff1b;PC2是IPv6网络的一个节点&#xff0c;处于Untrust安全域。 实验需求 完成防火墙IPv4、IPv6接口的配置&#xff0c;并将接口添加到相应的安全域&#xff1b;在防火墙上配置NAT64的IPv6前缀3001::/64&…

【毕业设计】30-基于单片机矿井瓦斯_气体浓度_烟雾浓度报警设计(原理图+源代码+仿真+答辩论文+答辩PPT)

【毕业设计】30-基于单片机矿井瓦斯/气体浓度/烟雾浓度报警设计&#xff08;原理图源代码仿真答辩论文答辩PPT&#xff09; 文章目录【毕业设计】30-基于单片机矿井瓦斯/气体浓度/烟雾浓度报警设计&#xff08;原理图源代码仿真答辩论文答辩PPT&#xff09;任务书设计说明书摘要…

网络套接字编程(UDP协议)

文章目录预备知识socket&#xff08;网络套接字&#xff09;编程接口简单的UDP网络程序增加多用户可以互相通信预备知识 网络字节序 大端存储&#xff1a;数据的高字节内容保存在内存的低地址处&#xff0c;数据的低字节内容保存在内存的高地址处 小端存储&#xff1a;数据的高…

global关键字、python实现ATM简单功能

目录 一.局部变量、全局变量 二.global关键字 演示 三.编写ATM程序 要求 详细步骤 存在问题 改进 完整代码 一.局部变量、全局变量 1.什么是局部变量 作用范围在函数内部&#xff0c;在函数外部无法使用 2.什么是全局变量 在函数内部和外部均可使用 3.如何将函数内定…

[附源码]SSM计算机毕业设计校园自行车租售管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

高等数学(第七版)同济大学 习题10-3 (前9题)个人解答

高等数学&#xff08;第七版&#xff09;同济大学 习题10-3&#xff08;前9题&#xff09; 函数作图软件&#xff1a;Mathematica 1.化三重积分I∭Ωf(x,y,z)dxdydz为三次积分&#xff0c;其中积分区域Ω分别是\begin{aligned}&1. \ 化三重积分I\iiint_{\Omega}f(x, \ y, …