zoukankan      html  css  js  c++  java
  • 一个方法帮你在正式脚本里添加“子脚本”的运行

    前言

    在脚本内执行子脚本是同学们经常会遇到的一个需求。比如,当我们写了多个需要顺序执行的用例,然后想在一个正式脚本里面添加这些用例的执行,该如何实现呢?

    今天我们就用一个简单的实操案例,来带大家看看具体的实现思路。

    案例简介

    ① 本次案例我们用到的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() 方法,我们还可以用别的方式实现在主脚本中运行子脚本的操作,只不过这些方式需要我们自己实现一些运行用例的方法,会相对复杂一些。同学们可以优先使用已提供的接口,待需求更加复杂的时候,再实现自己的运行用例的方法。

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


    Airtest官网:http://airtest.netease.com/
    Airtest教程官网:https://airtest.doc.io.netease.com/
    搭建企业私有云服务:https://airlab.163.com/b2b

     

  • 相关阅读:
    题解 P1030 【求先序排列】
    行列式及其打开方式
    题解 P2580 【于是他错误的点名开始了】
    题解 P1130 【红牌】
    题解 P5239 【回忆京都】
    题解 P1184 【高手之在一起】
    【笔记】自学ST表笔记
    题解 P1208 【[USACO1.3]混合牛奶 Mixing Milk】
    树状数组自学笔记
    EBS R12.2系统logo的修改
  • 原文地址:https://www.cnblogs.com/AirtestProject/p/13201733.html
Copyright © 2011-2022 走看看