AirtestProject 一个方法帮你在正式脚本里添加 “子脚本” 的运行
此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途
前言
在脚本内执行子脚本是同学们经常会遇到的一个需求。比如,当我们写了多个需要顺序执行的用例,然后想在一个正式脚本里面添加这些用例的执行,该如何实现呢?
今天我们就用一个简单的实操案例,来带大家看看具体的实现思路。
案例简介
① 本次案例我们用到的 APP、IDE 和设备情况如下:
- 1.待测应用:网易新闻 app
- 2.IDE 版本:1.2.3
- 3.设备:雷电模拟器
② 这个案例需要完成以下工作:
- 1.编写登录网易新闻 app 的用例
- 2.编写使用网易新闻 app 的用例
- 3.编写退出网易新闻 app 的用例
- 4.新增 1 个脚本,在里面添加以上 3 个用例的执行
1.登录 app
我们在登录 app 的脚本 newsLogin.air
中定义了一个执行登录操作的方法,并且要求不论在执行登录操作的任何一个步骤中报错,都会生成一个登录的运行报告。
# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
from airtest.report.report import simple_report
def newsLogin():
auto_setup(__file__,logdir=True,devices=["Android://127.0.0.1:5037/emulator-5554"])
clear_app("com.netease.newsreader.activity")
start_app("com.netease.newsreader.activity")
sleep(1.0)
from poco.drivers.android.uiautomation import AndroidUiautomationPoco
poco = AndroidUiautomationPoco(use_airtest_input=True, screenshot_each_action=False)
sleep(1.0)
try:
# 实现登录操作
pass
finally:
simple_report(__file__,logpath=True,output="../netease_music/登录.html")
另外小编还想强调下,初始化脚本、打开应用和初始化 poco,这三者的顺序不能随意变动,否则很容易带来各种各样神奇的报错。
2.使用 app
在使用 app 的脚本 newsUsing.air
中,我们主要实现了几个小操作:
- 浏览首页首条文章
- 双击视频菜单下的首个视频
-
给圈子里面的第一条圈子点赞
def newsUsing(): try: pass log("成功浏览首页首条文章") pass log("成功双击首个视频") pass log("成功给第一条圈子点赞") finally: simple_report(__file__,logpath=True,output="../netease_music/浏览.html")
3.退出登录
def newsExit():
try:
# 实现退出登录的操作
pass
finally:
simple_report(__file__,logpath=True,output="../netease_music/退出.html")
4.运行多个子脚本
编写完上述三个需要顺序执行的用例以后,我们再来给大家介绍一个 airtest
提供的调用子脚本的方法: using()
方法。
using()
方法我们在之前的推文 “调用过程中你一定遇到过的几个问题” 中就有简单介绍过,它可以帮助我们在 1 个主脚本中引入其它脚本,从而帮助我们实现运行子脚本的功能。
在 using()
方法里传入子脚本的绝对或者相对路径,都可以将子脚本引入进来:
# 使用相对路径
using("a.air")
# 使用绝对路径
using("D:/test/a.air")
因此,我们可以用如下方式将上述的 3 个用例引入到一个正式脚本中并执行他们:
def customUsing(fiLe):
print("--------引入" + fiLe + ".air--------")
pathU = os.path.join("D:/test/"+fiLe+".air")
using(pathU)
try:
# 执行登录的脚本
customUsing("newsLogin")
from newsLogin import newsLogin
newsLogin()
print("-----newsLogin执行完毕-----")
# 执行浏览使用的脚本
customUsing("newsUsing")
from newsUsing import newsUsing
newsUsing()
print("-----newsUsing执行完毕-----")
# 执行退出登录的脚本
customUsing("newsExit")
from newsExit import newsExit
newsExit()
print("-----newsExit执行完毕-----")
except Exception as e:
traceback.print_exc()
因上述 3 个脚本都是存放在 D:/test/
这个相同的目录下,所以我们定义了一个新的 customUsing
方法,只要传入 .air
脚本不带后缀的名称即可,方便后面我们引入这些子脚本。运行效果如下:
因在编写用例时,我们要求不论用例执行是否成功,都会在指定目录中生成对应的 html 报告,所以在主脚本执行完 3 个用例之后,生成的报告如下:
5.小结
其实除了 using() 方法,我们还可以用别的方式实现在主脚本中运行子脚本的操作,只不过这些方式需要我们自己实现一些运行用例的方法,会相对复杂一些。同学们可以优先使用已提供的接口,待需求更加复杂的时候,再实现自己的运行用例的方法。
如果想获取今天示例的完整代码,童鞋们可以在直接在公众号回复关键词 “子脚本”。
Airtest 官网:airtest.netease.com/
Airtest 教程官网:airtest.doc.io.netease.com/
搭建企业私有云服务:airlab.163.com/b2b