美文网首页Python日常学习自动化的一些
httprunner2记录源码——持续更新

httprunner2记录源码——持续更新

作者: LeslieFind | 来源:发表于2020-11-28 00:09 被阅读0次

一、目录结构:

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)函数

相关文章

网友评论

    本文标题:httprunner2记录源码——持续更新

    本文链接:https://www.haomeiwen.com/subject/gijfwktx.html