当前位置: 首页 > news >正文

Aritest+python+Jenkins解放双手iOS/Android自动化

ARITest、Python 和 Jenkins 可以结合在一起创建一个自动化测试解决方案,实现持续集成和持续测试的目标。以下是三者如何协同工作的基本概念:

1. **ARITest**:
   ARITest 是一款功能全面的自动化测试工具,提供 UI 自动化、接口自动化、性能测试等多种测试手段。假设您正在使用 ARITest 进行自动化测试,可以编写或录制生成自动化测试脚本。

2. **Python**:
   Python 在此场景中的角色可能是编写自动化测试脚本,或者与 ARITest 结合使用。ARITest 支持多种编程语言,若其支持 Python,则可通过编写 Python 脚本来操控 ARITest 执行自动化测试任务,或者处理测试过程中的数据和逻辑。

3. **Jenkins**:
   Jenkins 是一个开源的持续集成和持续部署工具,常用于自动化各种软件开发流程,包括构建、测试和部署等。在您的案例中,可以将 ARITest 的自动化测试集成到 Jenkins 工作流中:
   - 创建 Jenkins 任务,配置源代码管理(如 Git),当代码库有新的提交时触发构建。
   - 构建步骤中执行 ARITest 的自动化测试脚本(无论是否为 Python 编写)。这可以通过 Jenkins 插件或直接命令行调用实现。
   - 测试完成后,Jenkins 可以根据测试结果决定是否继续后续的部署或其他操作,比如发送邮件通知、更新测试报告等。

总结来说,ARITest 提供了自动化测试的能力,Python 可能用于增强测试脚本的编写和处理逻辑,而 Jenkins 则负责协调整个自动化流程,确保每一次代码变更都能自动触发测试,并及时反馈测试结果,提升团队的工作效率和产品质量。

操作流程如下:
1.Aritest里面编写自动测试用例,包含测试报告zip压缩,源码已贴
2.脚本放在python中运行,需要注意
auto_setup(__file__, devices=['Android://127.0.0.1:65535/R9HT30CMP7X'],logdir=True) #pycharm中运行
3.脚本运行完接入Jenkins本地路径,定时构建运行
4.查看定时构建的UI测试报告

如何自动化发送测试报告参考

展示Jenkins定时构建结果

展示 自动化发送测试报告参考

代码如下:

# -*- encoding=utf8 -*-
__author__ = "86150"import zipfilefrom airtest.core.api import *
from airtest.report.report import LogToHtml, simple_report
import yagmail#auto_setup(__file__) #airtest中运行auto_setup(__file__, devices=['Android://127.0.0.1:65535/R9HT30CMP7X'],logdir=True) #pycharm中运行# with open('C://360Downloads/phone1.txt', 'r') as file:
#     lines = file.readlines()
#     last_line = lines[-1].strip()
#     i = last_line
#     print(i)
#     a = i[-10:]
#     print(a)def phone_lis():with open("C://360Downloads/phone1.txt",'r')as f:phone_list = []for line in f.readlines():phone_list.append(line.strip()[-10:])return phone_lista = phone_lis()
for i in range(2):  #循环次数,根据文本内容phone_h = a.pop()touch(Template(r"tpl1702347655566.png", record_pos=(0.12, -0.862), resolution=(1080, 2408)))touch(Template(r"tpl1702295125063.png", record_pos=(-0.028, -0.372), resolution=(1080, 2408)))shell(f"input text {phone_h}")touch(Template(r"tpl1702347688845.png", record_pos=(-0.012, 0.017), resolution=(1080, 2408)))sleep(3.0)touch(Template(r"tpl1702450967129.png", record_pos=(-0.168, 0.108), resolution=(1080, 2408)))shell("input text '1234'")#输入验证码##2.点击借款完件sleep(2.0)touch(Template(r"tpl1702443733048.png", record_pos=(0.02, -0.106), resolution=(1080, 2408)))sleep(5.0)touch(Template(r"tpl1702443838057.png", record_pos=(-0.187, -0.11), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702443851819.png", record_pos=(-0.341, 0.741), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702443875269.png", record_pos=(-0.237, 0.737), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702443894716.png", record_pos=(-0.379, 0.739), resolution=(1080, 2408)))sleep(2.0)touch(Template(r"tpl1702443921021.png", record_pos=(-0.005, 0.178), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702444012781.png", record_pos=(0.001, 0.427), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702444030976.png", record_pos=(-0.004, 0.719), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702444110247.png", record_pos=(0.361, 0.723), resolution=(1080, 2408)))#3.准备断言页面确认借款sleep(40.0)snapshot(msg="确认借款额度页面")touch(Template(r"tpl1702444750799.png", record_pos=(-0.004, 0.881), resolution=(1080, 2408)))##4.准备退出了,切换账号sleep(2.0)touch(Template(r"tpl1702441741837.png", record_pos=(0.235, 0.913), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702441753369.png", record_pos=(0.12, -0.817), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702441768025.png", record_pos=(0.008, 0.256), resolution=(1080, 2408)))sleep(1.0)touch(Template(r"tpl1702441776831.png", record_pos=(-0.228, 0.149), resolution=(1080, 2408)))sleep(1.0)keyevent("HOME")sleep(1.0)##执行完毕,准保下一轮#1.用脚本导出运行报告
h1 = LogToHtml(script_root=r'C:\Users\86150\Desktop\untitled6.air', log_root=r"C:\Users\86150\Desktop\untitled6.air\log",export_dir=r"C:\360Downloads\test\report02", logfile=r'C:\Users\86150\Desktop\untitled6.air\log\log.txt', lang='zh',plugins=None)
h1.report()#2.将导出的报告文件压缩成zip包
def zipDir(dirpath,outFullName):# dirpath为需要导出的文件夹路径# outFul1Name为导出的zip压缩包的路径 (含压缩包名称)zip = zipfile.ZipFile(outFullName,"w",zipfile.ZIP_DEFLATED)for path,dirnames,filenams in os.walk(dirpath):# 去掉目标根路径,只对目标文件夹下边的文件及文件夹进行压缩fpath = path.replace(dirpath,'')for filename in filenams:zip.write(os.path.join(path, filename), os.path.join(fpath, filename))zip.close()
zipDir(r"C:\360Downloads\test\report02\untitled6.log", r"C:\360Downloads\test\untitled6.log.zip")#3.连接邮箱服务器
yag = yagmail.SMTP(user="my@qq.com", password="cqfoejatumircahi", host='smtp.qq.com')
#邮箱正文,自定义
contents = ['Airtest测试报告','脚本: nolog_test.air','作者:Cas']
#发送带附件的邮件,最后1个参数为附件地址
# 接收邮件的邮箱和附件地址可以为列表,即发送给多个邮箱,发送多个附件
yag.send('tomyis@meprestamo.mx','邮件主题',contents,[r"C:\360Downloads\test\untitled6.log.zip"])#if __name__ == '__main__':

代码中本地创建日志路径如下

相关文章:

Aritest+python+Jenkins解放双手iOS/Android自动化

ARITest、Python 和 Jenkins 可以结合在一起创建一个自动化测试解决方案,实现持续集成和持续测试的目标。以下是三者如何协同工作的基本概念: 1. **ARITest**: ARITest 是一款功能全面的自动化测试工具,提供 UI 自动化、接口自…...

Problem #7 [Medium]

This problem was asked by Facebook. Given the mapping a = 1, b = 2, … z = 26, and an encoded message, count the number of ways it can be decoded. For example, the message ‘111’ would give 3, since it could be decoded as ‘aaa’, ‘ka’, and ‘ak’. Y…...

MySQ数据库: MySQL数据库的安装配置 ,图文步骤详细,一篇即可完成安装完成! MySQL数据库如何与客户端连接

LiuJinTao: 2024年4月14日 文章目录 MySQL的安装配置1. 下载2. 安装 三、 MySQL 启动与停止1. 第一种 方式:2. 第二种方式: 四、MySQL 客户端连接2. 方式二: MySQL的安装配置 1. 下载 官方下载网址:https://www.mysq…...

vue3+vant自动导入+pina+vite+js+pnpm搭建项目框架

vue3vant自动导入pinavitejspnpm搭建项目框架 文章目录 vue3vant自动导入pinavitejspnpm搭建项目框架1. 安装pnpm(如果还没有安装):2. 创建项目目录并进入该目录:3. 初始化项目:4. 安装Vite作为构建工具:5.…...

使用 Axios 处理 AxiosError 的三种常见方法

在使用 Axios 时处理 AxiosError 有几种常见的方法: 使用 try-catch 语句捕获异常: try {const response await axios.get(/api/data);// 处理响应数据 } catch (error) {if (error.response) {// 请求成功但状态码不在 2xx 范围console.log(error.response.data);console.l…...

linux上安装Tomcat

安装Tomcat 安装JDK https://www.oracle.com/java/technologies/downloads/#license-lightbox mkdir -p /usr/java tar xf jdk-11.0.22_linux-x64_bin.tar.gz ln -sv /usr/java/jdk /usr/java/jdk-11.0.22配置环境变量&#xff1a; cat > /etc/profile.d/java.sh <&…...

Ubuntu20.04安装ROS过程记录以及常见报错处理

官网安装步骤如下&#xff1a; http://wiki.ros.org/cn/noetic/Installation/Ubuntu#A.2BXwBZy1uJiMU- 第一个&#xff1a;添加ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-la…...

PaddleOCR 图片日期识别

目录 一 . 获取图片信息种对应坐标区域日期信息 &#xff08;类型为1&#xff1a;http链接 类型为 2本地图片路径&#xff09; 二 . ocr图片识别日期信息获取&#xff0c;调用获取图片区域相应位置方法 三 . 如有所需获取rtsp流回放格式 四 . 完整代码如下 &#xff08…...

HTML5学习记录

简介 超文本标记语言&#xff08;HyperText Markup Language&#xff0c;简称HTML&#xff09;&#xff0c;是一种用于创建网页的标准标记语言。 编辑器 下载传送门https://code.visualstudio.com/ 下载编辑器插件 标题 标题通过 <h1> - <h6> 标签进行定义。 …...

提升法律文书起草效率:AlphaGPT 助力律师快速生成诉讼和仲裁文件

法律文书起草对于法律专业人士而言是一项基础而关键的任务。无论是民事、刑事还是行政诉讼&#xff0c;以及仲裁案件&#xff0c;精确的法律文书撰写对于案件的成功至关重要。然而&#xff0c;这一过程往往既耗时又复杂&#xff0c;尤其是在处理复杂的案情和面对当事人难以理解…...

大数据之 Hive 快速搭建的详细步骤

Hive hive 搭建三种模式: 内嵌模式本地模式远程模式内嵌模式 Hadoop 和 Hive 整合 修改 hadoop/etc/下的 core-site.xml: <property><name>hadoop.proxyuser.root.hosts</name><value>*</value> </property> <property><nam…...

从入门到高级的99个python知识点

大家好&#xff0c;想掌握Python编程语言&#xff0c;从零基础的小白晋升为大神&#xff1f;没问题&#xff01;接下来我们将以轻松有趣的方式&#xff0c;逐一解锁Python学习路上的99个关键知识点。每一步都将结合实际应用场景、函数功能解析及简洁代码演示&#xff0c;带你深…...

设计模式之备忘录模式(上)

备忘录模式 1&#xff09;概述 1.定义 在不破坏封装的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并在该对象之外保存这个状态&#xff0c;可以在以后将对象恢复到原先保存的状态。 2.作用 备忘录模式提供了一种状态恢复的实现机制&#xff0c;使得用户可以方便…...

算法中二分搜索详解

文章目录 在有序数组中找num是否存在实现思路实现代码(里面运用了对数器)在有序数组中找>num的最左位置实现思路代码实现 在有序数组中找<num的最右位置实现思路实现代码 二分搜索不一定发生在有序数组上(比如寻找峰值问题)题目描述实现思路实现代码 在有序数组中找num是…...

关于无线充电项目总结IP6826

1、电路 1.1 选用芯片IP6826英集芯 支持PD3.0 5-15W 1.2 推荐电路 讲解这个是官方推荐图 注意以下几点&#xff1a; NTC是100K的别买错了 L就是线圈 我这选用的A11 6.3 uH 淘宝买的 需要陪400nf NPO或CBB 还可以10uh配250nf&#xff08;这个我没试过&#xff09; 如果led2闪烁…...

[CSS]样式属性+元素设置

哎呀&#xff0c;好多东西&#xff0c;根本记不住&#xff0c;更多的还是边用边记吧&#xff0c;这里的代码就当使用范例&#xff0c;但其实如果可以让gpt应该会更好&#xff0c;哎学吧&#xff0c;反正记得住当然更好 文本 属性名描述word-break单词换行。取值如下&#xff1…...

优雅关闭jar程序shell 脚本

参考竽道Linux部署 #!/bin/bash set -eDATE$(date %Y%m%d%H%M) # 基础路径 BASE_PATH/work/projects/yudao-server # 服务名称。同时约定部署服务的 jar 包名字也为它。 SERVER_NAMEyudao-server # 环境 PROFILES_ACTIVEdev# heapError 存放路径 HEAP_ERROR_PATH$BASE_PATH/he…...

基于51单片机多功能洗衣机控制(强洗弱洗漂洗)设计( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机多功能洗衣机控制(强洗弱洗漂洗)设计( proteus仿真程序设计报告原理图讲解视频&#xff09; 多功能洗衣机控制-强洗弱洗漂洗 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单资料下载链接&#xf…...

CVP(ChatGPT、Vector Database和Prompt)

CVP实际上指的是ChatGPT、Vector Database和Prompt的结合&#xff0c;这是一种新型的技术栈&#xff0c;用于构建智能应用。 首先&#xff0c;我们来看这三个组成部分&#xff1a; ChatGPT&#xff1a;这是一个强大的语言模型&#xff0c;它能够理解并生成自然语言文本。Chat…...

c语言-----数组知识汇总

前言 本文为我学习数组知识点之后&#xff0c;对c语言的数组部分进行的知识点汇总。 简单数组介绍 简单来说&#xff0c;数组就是一个数据组&#xff0c;像一个箱子&#xff0c;里面放有多个数据。 [1,2,3,4,5] 数组的定义 基础定义 语法&#xff1a; 数据类型 数组名[数组…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...