httprunner2记录源码——持续更新

一、目录结构:

image.png

二、看代码

2.1、先看./____main___.py

image.png

2.2、打开./cli,查看main()

image.png

可以看到命令行的参数:

'-V', '--version'
testfile_paths *
--log-level *
--log-file *
--dot-env-path :.env文件的目录
--report-template *
--report-dir *
--report-file *
--save-tests *
--failfast *
--startproject *
--validate *
--prettify *

--prettify:美化json文件

说明:

cli.py的main()中的if args.prettify——>utils.py中的prettify_json_file(file_list)


image.png

image.png

image.png

--prettify测试:


image.png

--validate:检测json或yml格式

说明:

cli.py的main()中的if args.validate中的load_cases(validate_path, args.dot_env_path)——>./loader/schemas/buildup.py中的def load_cases(path, dot_env_path=None),这个方法主要是床两个参数,一个是检测的目录或文件路径,另一个参数是.env文件路径,默认None,这个方法返回值是个dict里面是检测目录或文件的信息以及.env文件(若传.env路径的话)的信息


image.png

image.png

检查的具体方法是根据def load_cases(path, dot_env_path=None)的返回值,若正常格式则返回dict,其他则异常
load_cases函数返回值格式:
普通文件:


image.png

.env文件:
image.png

--startproject:生成一个项目

说明:

cli.py的main()中的project_name = args.startproject——>utils.py中的create_scaffold(project_name),执行这个命令会生成一个指定名称的项目

    project_name = args.startproject
    if project_name:
        create_scaffold(project_name)
        sys.exit(0)

utils.py中create_scaffold(project_name)的实现,主要生成了几个默认文件,创建了几个文件


image.png

测试--startproject:


image.png

--failfast,--save_tests,--log_level,--log_file

这4个参数来实例化runner对象

    runner = HttpRunner(
        failfast=args.failfast,
        save_tests=args.save_tests,
        log_level=args.log_level,
        log_file=args.log_file
    )

查看HttpRunner类(./api.py文件),可以看到实例化时其实是设置日志等级,默认INFO,及文件默认None(使用./logger.py),并且调用了unittest中的TextTestRunner

HttpRunner的构造方法如下:

    def __init__(self, failfast=False, save_tests=False, log_level="INFO", log_file=None):
        """ initialize HttpRunner.

        Args:
            failfast (bool): stop the test run on the first error or failure.
            save_tests (bool): save loaded/parsed tests to JSON file.
            log_level (str): logging level.
            log_file (str): log file path.

        """
        logger.setup_logger(log_level, log_file)

        self.exception_stage = "initialize HttpRunner()"
        kwargs = {
            "failfast": failfast,
            "resultclass": report.HtmlTestResult
        }
        self.unittest_runner = unittest.TextTestRunner(**kwargs) #后续研究unittest,在这里了解一下大概作用
        self.test_loader = unittest.TestLoader() #后续研究unittest
        self.save_tests = save_tests
        self._summary = None
        self.project_working_directory = None

testfile_paths、--report-template、--report-dir、--report-file

这4个参数在运行case或api文件时用上

        for path in args.testfile_paths:
            summary = runner.run(path, dot_env_path=args.dot_env_path)
            report_dir = args.report_dir or os.path.join(runner.project_working_directory, "reports")
            gen_html_report(
                summary,
                report_template=args.report_template,
                report_dir=report_dir,
                report_file=args.report_file
            )
            err_code |= (0 if summary and summary["success"] else 1)

循环传入的testfile_paths,先用runner对象执行def run(self, path_or_tests, dot_env_path=None, mapping=None),然后生成报告调用./report/html/gen_report.py中的def gen_html_report(summary, report_template=None, report_dir=None, report_file=None)函数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 介绍 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本...
    yertao阅读 12,172评论 0 3
  • HttpRunner 在命令行中启动测试时,通过指定参数,可实现丰富的测试特性控制。hrun -husage: h...
    小娟_bb93阅读 2,444评论 0 0
  • sorted()也是一个高阶函数。用sorted()排序的关键在于实现一个映射函数。 函数作为返回值 高阶函数除了...
    jbb_43b0阅读 2,795评论 0 0
  • 模板标签除了几个常用的,还真心没有仔细了解一下,看到2.0发布后,翻译学习一下。 本文尽量忠实原著,毕竟大神的东西...
    海明_fd17阅读 6,167评论 0 5
  • httprunner3.x详细教程六(httprunner的setup和teardown及hook) httpru...
    成都_阿木木阅读 8,134评论 2 1