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

本文涉及的产品
日志服务 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 等等。大家可以动手试一试,把报错这部分的内容也添加到你的测试脚本中去~

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
JSON 监控 测试技术
Groovy脚本编写员工上网行为监控自动化测试
本文介绍了如何使用Groovy脚本创建一个自动化工具来监控员工的网络活动。通过编写简单脚本记录员工访问的网站并打印信息,可进一步扩展为将数据保存至数据库。此外,通过设定定时任务,实现了每30分钟自动监控一次的功能。最后,展示了如何将监控数据转换为JSON格式并使用HTTP POST请求提交到网站,以实现数据的自动化上报,有助于企业保障网络安全、保护数据并提升工作效率。
129 5
|
1天前
|
数据管理 测试技术 持续交付
自动化测试的进阶之路:从脚本到框架
【6月更文挑战第28天】在软件开发的生命周期中,自动化测试是确保产品质量和提升开发效率的关键步骤。本文深入探讨了自动化测试的演变历程,从简单的脚本编写到构建复杂的测试框架,揭示了如何通过持续集成和持续部署(CI/CD)实现自动化测试的高效执行。文章不仅介绍了自动化测试的基本概念和工具,还提供了实用的策略和技巧,帮助读者理解如何在现代软件工程实践中有效地应用自动化测试,以及如何克服常见的挑战。
|
9天前
|
运维 监控 应用服务中间件
自动化脚本:提升运维效率的秘诀
**自动化脚本提升服务器管理效率:** - 数据库备份脚本自动执行mysqldump,保证数据安全。 - DoS防护脚本监测Nginx日志,异常IP自动屏蔽。 - 实时网卡流量监控脚本展示网络流量,辅助异常检测。 - 配置邮件发送环境,利用mailx发送告警通知。 - Nginx日志按天切割脚本优化存储,日志分析脚本提供访问洞察。 这些脚本简化运维工作,增强系统安全与响应能力。
21 6
|
9天前
|
机器学习/深度学习 人工智能 运维
自动化运维的崛起:从脚本到智能
【6月更文挑战第20天】在数字化时代,自动化运维不再是一个选择,而是企业追求效率和稳定性的必要条件。本文将探讨自动化运维的发展轨迹,从最初的脚本编写到现今的智能化工具应用,揭示自动化技术如何重塑IT运维领域,提升业务连续性和敏捷性。
|
14天前
|
运维 监控 API
自动化运维实践指南:Python脚本优化服务器管理任务
本文探讨了Python在自动化运维中的应用,介绍了使用Python脚本优化服务器管理的四个关键步骤:1) 安装必备库如paramiko、psutil和requests;2) 使用paramiko进行远程命令执行;3) 利用psutil监控系统资源;4) 结合requests自动化软件部署。这些示例展示了Python如何提升运维效率和系统稳定性。
30 8
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的演进之路:从脚本到智能
【6月更文挑战第18天】自动化测试作为软件质量保证的重要手段,其发展历程映射了技术进步和行业需求的变化。本文旨在探讨自动化测试技术从简单的脚本编写逐步演变为集成化、智能化的测试解决方案的过程。文章将分析自动化测试面临的挑战,介绍当前流行的框架和工具,并展望自动化测试的未来趋势,特别是人工智能如何重塑测试实践,提升测试效率和有效性。
24 2
|
1天前
|
Ubuntu 关系型数据库 MySQL
expect自动交互脚本:简化你的自动化任务
`expect` 是Linux自动化神器,用于模拟键盘输入与交互式应用自动交互,常用于自动登录服务器、执行命令。安装 `expect`(CentOS: `yum -y install tcl expect`, Ubuntu: `apt-get -y install expect`) 后,编写脚本如SSH登录示例,自动发送密码和命令。通过结合shell命令,`expect` 可实现复杂任务,如获取IP、登录MySQL。支持多服务器管理,根据用户输入选择登录。学习 `expect` 提升自动化效率!
6 0
|
24天前
|
存储 SQL 运维
使用PowerShell进行自动化脚本编写:入门与实战
【6月更文挑战第6天】本文介绍了PowerShell作为Windows系统管理的自动化工具,用于提升效率和减少错误。内容涵盖PowerShell基础,如变量、命令执行、管道、条件和循环语句、函数。实战案例展示了如何用PowerShell脚本进行文件备份。此外,还提及PowerShell的进阶功能,如模块、远程管理和与其他工具集成。学习和应用PowerShell能有效提升IT运维自动化水平。
|
2月前
|
SQL 关系型数据库 MySQL
【简单无脑】自动化脚本一键安装虚拟机下的MySQL服务
该文章提供了在虚拟机上安装MySQL服务的简化方法,特别是针对新手。作者提供了一个自动化脚本`install_mysql.sh`,使得安装过程更简单。用户需要下载`install.rpm`资源,将其放在指定目录下,然后创建并编辑脚本文件,将提供的代码粘贴进去,通过`chmod u+x`授权,最后运行脚本`./install_mysql.sh [rpm文件路径]`来安装MySQL。文章还附有相关图片说明。
167 1
【简单无脑】自动化脚本一键安装虚拟机下的MySQL服务
|
2月前
|
SQL 缓存 关系型数据库
MySQL常见问题解决和自动化安装脚本
这篇内容包含了两个主要部分:解决MySQL登录问题和处理GPG密钥问题。当MySQL密码正确但无法登录时,可以通过执行SQL命令`ALTER USER`和`flush privileges`来修改和重置密码。对于MySQL安装时的GPG密钥错误,首先需要强制删除旧的MySQL仓库包,导入新的GPG公钥,然后安装MySQL服务器。如果遇到GPG检查错误,可以使用`--nogpgcheck`参数忽略检查来安装。最后,提供了一个自动化安装MySQL的脚本,用于检查旧版本、卸载残留、安装MySQL8并启动服务。
39 1
MySQL常见问题解决和自动化安装脚本