一、目录结构:
二、看代码
2.1、先看./____main___.py
2.2、打开./cli,查看main()
可以看到命令行的参数:
'-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)
--prettify测试:
--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路径的话)的信息
检查的具体方法是根据def load_cases(path, dot_env_path=None)的返回值,若正常格式则返回dict,其他则异常
load_cases函数返回值格式:
普通文件:
.env文件:
--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)的实现,主要生成了几个默认文件,创建了几个文件
测试--startproject:
--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)