教你实现一个非常有趣的自动化脚本“循环执行”的实例

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 教你实现一个非常有趣的自动化脚本“循环执行”的实例

前言



今天我们来学习1个非常有趣的 poco 实例。在这个示例中,我们将学习到以下小知识:


  • 1.如何过滤非报错的log信息,让你的log窗口不再密密麻麻
  • 2.连接设备、初始化poco、打开应用这几个脚本顺序应该怎么放
  • 3.循环执行1个测试动作,直到满足某个条件为止
  • 4.多次执行同一脚本,并且每一次执行都生成1份测试报告


下文的例子中用到的demo可以在我们官网上下载到(链接:poco.readthedocs.io/en/latest/s…


1.过滤非报错的log信息



默认情况下,在IDE执行测试脚本的时候,log查看窗口会打印出所有等级的日志信息,包含 [DEBUG][INFO][WARNING][ERROR] 等等。



如果你不想这些非报错的日志信息过多占据log查看窗的位置,并且干扰到你提取有效的报错日志;你可以在脚本代码开头加上 对日志信息等级的设定


__author__ = "Airtest"
import logging
logger = logging.getLogger("airtest")
logger.setLevel(logging.ERROR)
复制代码


logging 模块是 Python 内置的标准模块,主要用于输出运行日志。它还可以设置输出日志的等级、日志保存路径、日志文件回滚等。


在这里我们主要用到设置输出日志的等级这个方法,仅输出日志等级为[DEBUG]的日志信息:



可以看到,把输出日志信息的级别改成 [ERROR] 以后,整个脚本运行过程中只有少量初始化信息输出,更方便查看报错信息。


2.如何安排连接设备、初始化poco和打开应用的脚本顺序



很多新手在使用 poco 的时候,都容易把连接设备、初始化 poco 和打开应用的脚本顺序搞乱,导致出现一大堆奇妙的报错。


比如大家最常见的:“远程主机强迫关闭了一个现有的连接”、“socket connection broken”等等。


最正确的顺序是:先连接设备(一般在 auto_setup 接口里面连接)--> 再打开应用(一般用 start_app 接口)--> 等应用开启完毕,最后才初始化 poco


# -*- encoding=utf8 -*-
__author__ = "Airtest"
from airtest.core.api import *
# 连接设备
auto_setup(__file__,logdir=True,devices=["Android://127.0.0.1:5037/emulator-5554?cap_method=JAVACAP"])
#启动应用
start_app("com.NetEase")
sleep(6.0)
# 初始化poco
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
poco("btn_start").click()
复制代码


所以下次写 poco 脚本的时候,千万记住要检查下这几条代码的顺序,避免产生不必要的报错。


3.多次执行某个测试动作



python给我们提供了多个循环方法,比如while循环、for循环等,还有个特别一点的循环叫嵌套循环,可以让我们在while循环里面使用for循环。


在我们之前的推文“1篇文章带你了解poco的所有基本功能”中,我们有简单介绍如何遍历元素,那时候用的就是for循环:


for star in poco("playDragAndDrop").child("star"):
    star.drag_to(poco("shell"))
复制代码


今天我们写一个嵌套循环,当游戏得分小于100分时,就继续把星星拖动到贝壳上,并打印当前分数,当游戏得分大于或等于100分时,就终止循环,并打印最终游戏得分:



# 循环执行某个动作
    while int(poco("scoreVal").get_text()) < 100:
        for star in poco("playDragAndDrop").child("star"):
            star.drag_to(poco("shell"))
            print("当前得分:"+poco("scoreVal").get_text())
    else:
        print("游戏结束,最终得分:"+poco("scoreVal").get_text())
        print("这是第"+str(a)+"次执行脚本")
复制代码


else: 下面的代码是不满足循环条件时执行的动作。


4.多次执行脚本并生成多个测试报告



我们还是利用 while循环,重复执行3次完整的脚本内容,并依次生成 log1.htmllog2.htmllog3.html。实现思路大致如下:


a = 1
while a < 4:
    # 执行完整的脚本内容
    pass
    # 生成报告
    from airtest.report.report import simple_report
    simple_report(__file__,logpath=True,output="log"+str(a)+".html")
    a = a + 1
复制代码


我们可以设置一个变量 a ,每执行一次脚本,变量 a 的值就 +1,直到 a=4,即脚本重复执行了3次以后,循环条件不再满足,程序结束循环。


最终log查看窗打印的部分结果如下:



也生成了3分独立的测试报告:



这里有一点需要特别注意下,就是在每一次执行完脚本之后,我们需要把设备恢复到原始状态:


# 回到首页并清理应用
keyevent("HOME")
clear_app("com.NetEase")
复制代码


5.小结



如果想获取今天示例的完整代码,童鞋们可以在直接在公众号回复关键词“循环”。


另外本次示例中没有考虑到出现报错,程序终止执行的情况,实际上我们也应该把这部分的内容考虑进去。


之前我们也教过大家很多捕捉报错让程序继续执行的方法,可以使用 try catchtry excepttry finally 等等。大家可以动手试一试,把报错这部分的内容也添加到你的测试脚本中去~

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
2月前
|
传感器 人工智能 JavaScript
Playwright实战:写UI自动化脚本,速度直接起飞
简介: 测试工程师老王因UI自动化问题深夜奋战,反映出传统测试工具的局限性。微软开源的Playwright凭借智能等待、跨域操作、移动端模拟与网络拦截等强大功能,正迅速取代Selenium,成为新一代自动化测试标准。其稳定高效的设计显著降低维护成本,助力企业构建高质量测试流程。
|
4月前
|
机器学习/深度学习 Kubernetes 监控
Kubernetes 节点故障自愈方案:结合 Node Problem Detector 与自动化脚本
本文深入探讨了Kubernetes节点故障自愈方案,结合Node Problem Detector(NPD)与自动化脚本,提供技术细节、完整代码示例及实战验证。文章分析了硬件、系统和内核层面的典型故障场景,指出现有监控体系的局限性,并提出基于NPD的实时事件捕获与自动化诊断树的改进方案。通过深度集成NPD、设计自动化修复引擎以及展示内核死锁恢复的实战案例,文章详细说明了自愈流程的实现步骤与性能优势。此外,还提供了生产环境部署指南、高可用架构设计及安全防护措施,并展望了机器学习增强故障预测和混沌工程验证的进阶优化方向。全文约1.2万字,适合希望提升Kubernetes集群稳定性的技术人员阅读。
149 1
|
11月前
|
数据采集 监控 数据挖掘
Python自动化脚本:高效办公新助手###
本文将带你走进Python自动化脚本的奇妙世界,探索其在提升办公效率中的强大潜力。随着信息技术的飞速发展,重复性工作逐渐被自动化工具取代。Python作为一门简洁而强大的编程语言,凭借其丰富的库支持和易学易用的特点,成为编写自动化脚本的首选。无论是数据处理、文件管理还是网页爬虫,Python都能游刃有余地完成任务,极大地减轻了人工操作的负担。接下来,让我们一起领略Python自动化脚本的魅力,开启高效办公的新篇章。 ###
|
10月前
|
Python
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
818 61
自动化微信朋友圈:Python脚本实现自动发布动态
|
7月前
|
关系型数据库 Shell 网络安全
定期备份数据库:基于 Shell 脚本的自动化方案
本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
|
9月前
|
Web App开发 人工智能 JSON
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
AutoMouser是一款Chrome扩展程序,能够实时跟踪用户交互行为,并基于OpenAI的GPT模型自动生成Selenium测试代码,简化自动化测试流程。
538 17
AutoMouser:AI Chrome扩展程序,实时跟踪用户的浏览器操作,自动生成自动化操作脚本
|
9月前
|
人工智能
LangGraph:构建多代理动态工作流的开源框架,支持人工干预、循环、持久性等复杂工作流自动化
LangGraph 是一个基于图结构的开源框架,专为构建状态化、多代理系统设计,支持循环、持久性和人工干预,适用于复杂的工作流自动化。
1167 12
LangGraph:构建多代理动态工作流的开源框架,支持人工干预、循环、持久性等复杂工作流自动化
|
9月前
|
Web App开发 数据采集 JavaScript
Chrome浏览器实例的TypeScript自动化脚本
Chrome浏览器实例的TypeScript自动化脚本
|
10月前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
383 7
|
10月前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。