HttpRunner3.x 源码解析(2)-main_run执行用例

这篇具有很好参考价值的文章主要介绍了HttpRunner3.x 源码解析(2)-main_run执行用例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

命令入口

当在终端运行输入httprunner run 目录或者文件名,则会调用main_run函数,并传入目录/文件名来执行测试用例。

main_run(extra_args)

HttpRunner3.x 源码解析(2)-main_run执行用例

 main_run

对于extra_args中的值,如果在os.path.exists不存在,则将其加入extra_args_new中。

如果存在,则将其加入用例列表  tests_path_list

def main_run(extra_args) -> enum.IntEnum:
    ga_client.track_event("RunAPITests", "hrun")
    # keep compatibility with v2
    extra_args = ensure_cli_args(extra_args)

    tests_path_list = []
    extra_args_new = []
    for item in extra_args:
        if not os.path.exists(item):
            # item is not file/folder path
            extra_args_new.append(item)
        else:
            # item is file/folder path
            tests_path_list.append(item)#用例文件列表

    if len(tests_path_list) == 0:
        # has not specified any testcase path
        logger.error(f"No valid testcase path in cli arguments: {extra_args}")
        sys.exit(1)

    testcase_path_list = main_make(tests_path_list)#转换测试用例文件格式
    if not testcase_path_list: #未转换成功则打印未找到有效用例
        logger.error("No valid testcases found, exit 1.")
        sys.exit(1)

    if "--tb=short" not in extra_args_new:#什么意思
        extra_args_new.append("--tb=short")

    extra_args_new.extend(testcase_path_list) #列表插入列表
    logger.info(f"start to run tests with pytest. HttpRunner version: {__version__}")
    # print("extra_args_new")
    # print(extra_args_new) ['--tb=short', 'D:\\Project\\demo\\testcases\\demo_testcase_ref_test.py']
    return pytest.main(extra_args_new) #调用pytest执行用例

1)如果列表  tests_path_list长度为0,说明用例文件不存在,则输出没有有效用例。

如文件名给错或者目录错误 

HttpRunner3.x 源码解析(2)-main_run执行用例

 2) 如果tests_path_list长度大于0(可能是文件列表/目录名),则调用main_make转换用例为py文件,并返testcase_path_list

如果testcase_path_list不存在,则异常退出sys.exit(1)

如果存在,则将其加入extra_args_new。可以看到还给extra_args_new加了一个参数--tb=short

这个是pytest的参数,用来输出详细报错信息。

在return中调用了pytest.main执行测试用例。

由此可见,httprunner最终是调用了pytest执行的用例。

小技巧

看源码时,学习到的一些知识可以化为自己的知识。文章来源地址https://www.toymoban.com/news/detail-407856.html

os.path.exists 校验目录/文件是否存在

sys.exit(1) 程序异常退出

extra_args_new.extend(testcase_path_list)#列表插入列表
 
                    

到了这里,关于HttpRunner3.x 源码解析(2)-main_run执行用例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【源码解析】Mybatis执行原理

    MyBatis 是一款优秀的持久层框架,MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。 Mybatis中的mapper接口并没有具体实

    2024年02月16日
    浏览(25)
  • 【Mybatis源码解析】mapper实例化及执行流程源码分析

    基础环境:JDK17、SpringBoot3.0、mysql5.7 储备知识:《【Spring6源码・AOP】AOP源码解析》、《JDBC详细全解》 基于SpringBoot的Mybatis源码解析: 1.如何对mapper实例化bean 在加载BeanDefinition时,会将SqlSessionFactory、SqlSessionTemplate、MapperScannerConfigurer加载到注册表中,以供后续进行实例化。

    2024年02月01日
    浏览(31)
  • SpringAOP源码解析之advice执行顺序(三)

    上一章我们分析了Aspect中advice的排序为Around.class, Before.class, After.class, AfterReturning.class, AfterThrowing.class,然后advice真正的执行顺序是什么?多个Aspect之间的执行顺序又是什么?就是我们本章探讨的问题。 既然需要知道advide的执行顺序,那么我们就得有Aspect。我们还是使用之前

    2024年02月08日
    浏览(26)
  • [main] ERROR org.springframework.boot.SpringApplication - Application run

    13:58:43.381 [main] ERROR org.springframework.boot.SpringApplication - Application run failed org.yaml.snakeyaml.parser.ParserException: while parsing a block mapping in \\\'reader\\\', line 2, column 1: spring: ^ expected block end, but found \\\'block mapping start\\\' in \\\'reader\\\', line 5, column 2: profiles: ^ yml配置有误 我的这样出了这个问题。下次用

    2024年02月11日
    浏览(31)
  • 【源码解析】flink sql执行源码概述:flink sql执行过程中有哪些阶段,这些阶段的源码大概位置在哪里

    本文大致分析了flink sql执行过程中的各个阶段的源码逻辑,这样可以在flink sql执行过程中, 能够定位到任务执行的某个阶段的代码大概分布在哪里,为更针对性的分析此阶段的细节逻辑打下基础,比如create 的逻辑是怎么执行的,select的逻辑是怎么生成的,优化逻辑都做了哪

    2024年02月04日
    浏览(28)
  • Arbitrum 的 Nitro 项目启动和交易执行源码解析

    1 合约部署 在节点启动之前,会先去部署 L1 上的合约,L2 上的合约是预部署的,接口部分有 solidity 来编写,实现是由 go 代码来实现的,合约实现对应的 go 代码为 precompiles 项目的代码目录,接口定义为 /nitro/contracts/src/precompiles 的代码。 2.1 L1 上的合约部署 合约部署代码入口

    2024年02月14日
    浏览(32)
  • 源码解析Flink源节点数据读取是如何与checkpoint串行执行

    源码解析Flink源节点数据读取是如何与checkpoint串行执行 Flink版本:1.13.6 前置知识:源节点的Checkpoint是由Checkpointcoordinate触发,具体是通过RPC调用TaskManager中对应的Task的StreamTask类的performChecpoint方法执行Checkpoint。 本文思路:本文先分析checkpoint阶段,然后再分析数据读取阶段,

    2024年02月14日
    浏览(34)
  • Clion 使用MFC库,本地main方法想run一下失败后的解决方法

    最近在写JNI,打算用java去调 C 或 C++ 去操作操作系统底层的API。MFC编程已经算是一个非常老的技术了。在MFC库中提供了大量的windows-api,故准备写JNI去调用windows底层api。 因为习惯使用Jetbrains家的产品,对于快捷键从Idea系列无缝对接所以选择了 Clion 作为C的编写。 当然这里也

    2024年02月08日
    浏览(31)
  • no main manifest attribute, in app.jar(Docker run命令出错)

    解决no main manifest attribute, in app.jar 环境:SpringBoot2.6.13+java8 重点 : pom.xml文件是IDEA自动配的,然后出错 我在将一个SpringBoot程序打包成镜像部署到Docker容器上,然后执行run命令启动容器: springboot-test:1.0是我的镜像 出现报错: 我排查出来问题就在pom.xml文件中我画红线的这一句 改为下

    2024年02月03日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包