testbase.runner
Package¶
TestRunner负责多个测试用例,目前提供三种方式:
- 单线程执行 TestRunner
- 多线程执行 ThreadingTestRunner
- 多进程执行 MultiProcessTestRunner
整个执行逻辑可以用以下伪代码来理解:
for test in tests:
report.begin_test(test)
result = report.get_testresult_factory().create(test)
report.end_test(test, result)
-
class
testbase.runner.
BaseTestRunner
(report, resmgr_backend=None)¶ 基类:
object
测试执行器基类
-
clean_up
()¶ 执行清理动作
-
classmethod
get_parser
()¶ 获取命令行参数解析器(如果实现)
返回: 解析器对象 返回类型: argparse.ArgumentParser
-
load
(target)¶ 加载测试用例
参数: target (list(TestCase) or list(string) or string or TestCaseSettings) -- 指定要执行的测试用例 返回: 测试用例列表
-
classmethod
parse_args
(args_string, report, resmgr_backend)¶ 通过命令行参数构造对象
返回: 测试报告 返回类型: cls
-
report
¶ 对应的测试报告
返回: ITestReport
-
run
(target)¶ 运行测试
参数: target (list(TestCase) or list(string) or string or TestCaseSettings or TestPlan) -- 指定要执行的测试
-
run_all_tests
(tests)¶ 执行全部的测试用例
参数: tests (list) -- 测试用例对象列表
-
-
class
testbase.runner.
EnumProcessMsgType
¶ 基类:
object
多进程间通信用的消息类型
-
class
testbase.runner.
MultiProcessTestRunner
(report, process_cnt=0, retries=0, resmgr_backend=None)¶ 基类:
testbase.runner.BaseTestRunner
使用多进程并发执行用例
多进程并发时,有两个特殊的问题需要处理:
1、测试执行工作进程需要通知TestReport测试用例的执行情况等, 解决方案是: 为每个工作进程提供一个TestReportProxy,TestReportProxy通过消息机制通知 真正的TestReport
2、TestReport需要访问在工作进程的TestResult对象, 解决方案是: 每个工作进程有一个TestResultStubManager,提供给TestReport的是一个TestResultProxy 对象,TestResultProxy通过消息机制和TestResultStubManager通信,来获取真正的TestResult 的信息
-
clean_up
()¶ 执行清理动作
-
classmethod
get_parser
()¶ 获取命令行参数解析器(如果实现)
返回: 解析器对象 返回类型: argparse.ArgumentParser
-
classmethod
parse_args
(args_string, report, resmgr_backend)¶ 通过命令行参数构造对象
返回: 测试报告 返回类型: cls
-
run_all_tests
(tests)¶ 执行全部的测试用例
参数: test -- 测试用例对象列表
-
-
class
testbase.runner.
TestCaseSettings
(names=None, excluded_names=None, priorities=None, status=None, owners=None, tags=None, excluded_tags=None)¶ 基类:
object
目标测试用例配置
-
class
testbase.runner.
TestReportProxy
(worker_id, ctrl_msg_queue, result_factory, result_manager)¶ 基类:
testbase.report.TestReportBase
测试报告代理
-
begin_report
()¶ 开始测试执行
-
end_report
()¶ 结束测试执行
参数: passed (boolean) -- 测试是否通过
-
get_testresult_factory
()¶ 获取对应的TestResult工厂
返回: ITestResultFactory
-
log_record
(level, tag, msg, record)¶ 增加一个记录
参数: - level (string) -- 日志级别
- tag (string) -- 日志标签
- msg (string) -- 日志消息
- record (dict) -- 日志记录信息
-
-
class
testbase.runner.
TestResultFunctionProxy
(from_worker, obj_id, func_name)¶ 基类:
object
测试结果函数代理
-
class
testbase.runner.
TestResultProxy
(from_worker, obj_id, passed, testcase)¶ 基类:
object
测试结果代理
-
class
testbase.runner.
TestResultStubManager
(rsp_queue)¶ 基类:
object
测试结果桩管理器
-
add_result
(result)¶ 增加一个测试结果
-
call_result_func
(objid, funcname, args, kwargs)¶ 调用一个测试结果的函数
参数: - objid (int) -- 对象ID
- funcname (string) -- 函数名
- args (tuple) -- 参数
- kwargs (dict) -- 参数
-
get_result_attr
(objid, attrname)¶ 获取一个测试结果的属性值
参数: - objid (int) -- 对象ID
- attrname (string) -- 属性名
-
-
class
testbase.runner.
TestRunner
(report, retries=0, resmgr_backend=None)¶ 基类:
testbase.runner.BaseTestRunner
测试执行器
-
classmethod
get_parser
()¶ 获取命令行参数解析器(如果实现)
返回: 解析器对象 返回类型: argparse.ArgumentParser
-
classmethod
parse_args
(args_string, report, resmgr_backend)¶ 通过命令行参数构造对象
返回: 测试报告 返回类型: cls
-
run_all_tests
(tests)¶ 执行全部的测试用例
参数: test -- 测试用例对象列表
-
classmethod
-
class
testbase.runner.
TestWorker
(worker_id, ctrl_msg_queue, result_factory, resmgr)¶ 基类:
object
多进程执行用例时,执行测试的子进程
-
current_testcase
()¶ 当前正在执行的测试用例
返回: TestCase
-
recv_message
(timeout=None)¶ 接收工作者的答复消息
-
restart
()¶ 重新开始执行
-
send_message
(msg)¶ 发送消息到工作者
参数: msg (tuple) -- 消息
-
start
()¶ 开始执行
-
stop
()¶ 结束执行
-
-
class
testbase.runner.
ThreadSafetyReport
(report)¶ 基类:
testbase.report.TestReportBase
TestReport修饰器,保证线程安全
-
begin_report
()¶ 开始测试执行
-
end_report
()¶ 结束测试执行
参数: passed (boolean) -- 测试是否通过
-
get_testresult_factory
()¶ 获取对应的TestResult工厂
返回: ITestResultFactory
-
log_filtered_test
(loader, testcase, reason)¶ 记录一个被过滤的测试用例 :param loader: 用例加载器 :type loader: TestLoader :param testcase: 测试用例 :type testcase: TestCase :param reason: 过滤原因 :type reason: str
-
log_load_error
(loader, name, error)¶ 记录一个加载失败的用例或用例集 :param loader: 用例加载器 :type loader: TestLoader :param name: 名称 :type name: str :param error: 错误信息 :type error: str
-
log_loaded_tests
(loader, testcases)¶ 记录加载成功的用例
参数: - loader (TestLoader) -- 用例加载器
- testcases (list) -- 测试用例列表
-
log_record
(level, tag, msg, record)¶ 增加一个记录
参数: - level (string) -- 日志级别
- msg (string) -- 日志消息
- tag (string) -- 日志标签
- record (dict) -- 日志记录信息
-
-
class
testbase.runner.
ThreadingTestRunner
(report, thread_cnt=0, retries=0, resmgr_backend=None)¶ 基类:
testbase.runner.BaseTestRunner
使用多线程并发执行用例
-
classmethod
get_parser
()¶ 获取命令行参数解析器(如果实现)
返回: 解析器对象 返回类型: argparse.ArgumentParser
-
classmethod
parse_args
(args_string, report, resmgr_backend)¶ 通过命令行参数构造对象
返回: 测试报告 返回类型: cls
-
run_all_tests
(tests)¶ 执行全部的测试用例
参数: test -- 测试用例对象列表
-
classmethod