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

news2025/1/2 2:54:21

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 zipfile

from 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_list


a = 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__':




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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CSS3 立体 3D 变换

个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 ✍CSS3 立体 3D 变换💎1 坐标轴💎2 perspective 透视视…

Vue(二):报错调试,vue3响应式原理、computed和watch,ref,props,接口

一、准备工作调试 跟着张天禹老师看前几集的时候可能会遇到如下问题: 1.下载插件:Vue Language Features (Volar)或者直接下载vue-offical 2.npm run serve时运行时出现错误:Error: vitejs/plugin-vue requires vue (>3.2.13) …

Flutter仿Boss-7.首页列表

效果 考察使用 Flutter Model的创建TabBar及TabBarView 的使用标签Wrap控件的使用列表ListView的使用 具体实现 今天懒的写文字了,想看具体实现的可以直接去我的github上: github:github.com/yixiaolunhui/flutter_project

PostgreSQL入门到实战-第二十四弹

PostgreSQL入门到实战 PostgreSQL中表连接操作(八)官网地址PostgreSQL概述PostgreSQL中CROSS JOIN命令理论PostgreSQL中CROSS JOIN命令实战更新计划 PostgreSQL中表连接操作(八) 使用PostgreSQL CROSS JOIN从连接的表中生成行的笛卡尔乘积。 官网地址 声明: 由于操作系统, 版…

Xcode 15.0 新 #Preview 预览让 SwiftUI 界面调试更加悠然自得

概览 从 Xcode 15 开始,苹果推出了新的 #Preview 宏预览机制,它无论从语法还是灵活性上都远远超过之前的预览方式。#Preview 不但可以实时预览 SwiftUI 视图,而且对 UIKit 的界面预览也是信手拈来。 想学习新 #Preview 预览的一些超实用调试…

计算机服务器中了360后缀勒索病毒怎么办?360后缀勒索病毒解密步骤

网络技术的不断应用与发展,为企业的生产运营提供了极大便利,利用网络可以开展各项工作业务,可以大大提高企业的生产效率,然而,网络是一把双刃剑,在为企业提供便利的同时,也为企业的数据安全带来…

蓝桥杯【第15届省赛】Python B组

这题目难度对比历届是相当炸裂的简单了…… A:穿越时空之门 【问题描述】 随着 2024 年的钟声回荡,传说中的时空之门再次敞开。这扇门是一条神秘的通道,它连接着二进制和四进制两个不同的数码领域,等待着勇者们的探索。 在二进制…

Leetcode刷题之移除元素(C语言版)

Leetcode刷题之移除元素(C语言版) 一、题目描述二、题目解析 一、题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅…

旧版本jquery升级新版本后如何处理兼容性问题

前言 最近项目在漏洞扫描过程中发现现在的jquery版本受多个跨站点脚本漏洞影响,需要升级jquery版本。 1、首先下载高版本的jquery,我这里升级的是3.6.0 2、对应的bootstrap版本也要升级,这里升级的是3.3.7 本来以为替换完这两个文件后&#…

LeetCode654:最大二叉树

题目描述 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 …

STM32+ESP8266水墨屏天气时钟:文字取模和图片取模教程

项目背景 本次的水墨屏幕项目需要显示一些图片和文字,所以需要对图片和文字进行取模。 取模步骤 1.打开取模软件 2.选择图形模式 3.设置字模选项 注意:本次项目采用的是水墨屏,并且是局部刷新的代码,所以设置字模选项可能有点…

自定义注解(二)——系统日志记录

在上一篇自定义注解(一)——统一请求拦截中对自定义注解做了简单说明及关于统一token认证的应用示例。其实对于自定义注解,还有一种常用的方法是用于系统日志记录,此处的系统日志记录,区别于Slf4j或Log4j把日志文件写入…

Big Data and Cognitive Computing (IF=3.7) 期刊投稿

Special Issue: Artificial Cognitive Systems for Computer Vision 欢迎计算机视觉相关工作的投稿! 影响因子3.7,截止时间2024年12月31日 投稿咨询:lqyan18fudan.edu.cn 投稿网址:https://www.mdpi.com/journal/BDCC/special_iss…

模板方法模式:定义算法骨架的设计策略

在软件开发中,模板方法模式是一种行为型设计模式,它在父类中定义一个操作的算法框架,允许子类在不改变算法结构的情况下重定义算法的某些步骤。这种模式是基于继承的基本原则,通过抽象类达到代码复用的目的。本文将详细介绍模板方…

【算法刷题 | 回溯思想 02】4.12(电话号码的字母组合)

文章目录 4.电话号码的字母组合4.1问题4.2解法:回溯4.2.1回溯思路(1)函数返回值以及参数(2)终止条件(3)遍历过程 4.2.2代码实现 4.电话号码的字母组合 4.1问题 给定一个仅包含数字 2-9 的字符…

阻塞队列和生产消费模型

阻塞队列 阻塞队列的概念 队列相信我们已经不陌生了 之前也学过很多队列 比如: 普通队列 和 优先级队列 两种 这两种队列都是线程不安全的 而我们讲的阻塞队列 刚好可以解决线程安全问题 也是先进先出 并且带有阻塞功能. 阻塞功能是怎么回事呢 就是如果入队的时候阻塞队列为…

AI的智商如何测试?

一、AI的智商测试 AI的智商测试不同于人类的智商测试,因为它涉及到不同类型的智能和功能衡量标准。以下是几种常见的AI智商测试或评估方式: 此图片来源于网络 1. **功能性测试**: - 对于算法或机器学习模型,可以通过标准化的基…

探秘大模型:《提示工程:技巧、方法与行业应用》背后的故事

提示工程是一种新兴的利用人工智能的技术,它通过设计提示引导生成式 AI 模型产生预期的输出,来提升人与 AI 的互动质量,激发 AI 模型的潜力,提升AI的应用水平。 为了让每一个人都拥有驱动大模型的能力,以微软全球副总裁…

maven之pom中的build标签

1、build标签分类 1.1、全局配置&#xff08;project build&#xff09; 针对整个项目的所有情况都有效。 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"htt…

Linux执行命令监控详细实现原理和使用教程,以及相关工具的使用

Linux执行命令监控详细实现原理和使用教程&#xff0c;以及相关工具的使用。 0x00 背景介绍 Linux上的HIDS需要实时对执行的命令进行监控&#xff0c;分析异常或入侵行为&#xff0c;有助于安全事件的发现和预防。为了获取执行命令&#xff0c;大致有如下方法&#xff1a; 遍…