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




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

相关推荐

  1. selenium解放双手--记某电力学校的刷课脚本

    2024-04-13 17:40:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-13 17:40:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-13 17:40:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-13 17:40:03       87 阅读
  4. Python语言-面向对象

    2024-04-13 17:40:03       96 阅读

热门阅读

  1. 探索未来学术:ChatGPT如何引领论文写作革命

    2024-04-13 17:40:03       33 阅读
  2. jvm中堆与栈的区别详细讲解

    2024-04-13 17:40:03       39 阅读
  3. 2024-04-09 问AI: 在深度学习中,dropout层是什么?

    2024-04-13 17:40:03       37 阅读
  4. python项目练习——22、人脸识别软件

    2024-04-13 17:40:03       36 阅读
  5. 手机重启手app没了

    2024-04-13 17:40:03       40 阅读
  6. 数组名的指针用法

    2024-04-13 17:40:03       34 阅读
  7. 蓝桥杯真题有奖问答

    2024-04-13 17:40:03       35 阅读