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