一、目錄結(jié)構(gòu):
二但狭、看代碼
2.1披诗、先看./____main___.py
2.2撬即、打開(kāi)./cli,查看main()
可以看到命令行的參數(shù):
'-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文件
說(shuō)明:
cli.py的main()中的if args.prettify——>utils.py中的prettify_json_file(file_list)
--prettify測(cè)試:
--validate:檢測(cè)json或yml格式
說(shuō)明:
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)呈队,這個(gè)方法主要是床兩個(gè)參數(shù)剥槐,一個(gè)是檢測(cè)的目錄或文件路徑,另一個(gè)參數(shù)是.env文件路徑宪摧,默認(rèn)None粒竖,這個(gè)方法返回值是個(gè)dict里面是檢測(cè)目錄或文件的信息以及.env文件(若傳.env路徑的話(huà))的信息
檢查的具體方法是根據(jù)def load_cases(path, dot_env_path=None)的返回值,若正常格式則返回dict几于,其他則異常
load_cases函數(shù)返回值格式:
普通文件:
.env文件:
--startproject:生成一個(gè)項(xiàng)目
說(shuō)明:
cli.py的main()中的project_name = args.startproject——>utils.py中的create_scaffold(project_name)蕊苗,執(zhí)行這個(gè)命令會(huì)生成一個(gè)指定名稱(chēng)的項(xiàng)目
project_name = args.startproject
if project_name:
create_scaffold(project_name)
sys.exit(0)
utils.py中create_scaffold(project_name)的實(shí)現(xiàn),主要生成了幾個(gè)默認(rèn)文件沿彭,創(chuàng)建了幾個(gè)文件
測(cè)試--startproject:
--failfast朽砰,--save_tests,--log_level喉刘,--log_file
這4個(gè)參數(shù)來(lái)實(shí)例化runner對(duì)象
runner = HttpRunner(
failfast=args.failfast,
save_tests=args.save_tests,
log_level=args.log_level,
log_file=args.log_file
)
查看HttpRunner類(lèi)(./api.py文件)瞧柔,可以看到實(shí)例化時(shí)其實(shí)是設(shè)置日志等級(jí),默認(rèn)INFO饱搏,及文件默認(rèn)None(使用./logger.py)非剃,并且調(diào)用了unittest中的TextTestRunner
HttpRunner的構(gòu)造方法如下:
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) #后續(xù)研究unittest置逻,在這里了解一下大概作用
self.test_loader = unittest.TestLoader() #后續(xù)研究unittest
self.save_tests = save_tests
self._summary = None
self.project_working_directory = None
testfile_paths推沸、--report-template、--report-dir券坞、--report-file
這4個(gè)參數(shù)在運(yùn)行case或api文件時(shí)用上
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)