def _parse_parameters(parameters: list) -> tuple: """解析parameters中的变量和数据""" line = parameters[0] keys, data = tuple(line.items())[0] if isinstance(data, str): matched = re.match(CSV_REGEX, data) if not matched: raise ValueError(f'参数化不支持: {data} 形式') csv_file = matched.group('csv') data = file.load(csv_file) data = data[1:] # 舍弃标题行 keys = keys.split('-') return keys, data
keywords = data.get('Keywords') handle_keywords(keywords) tests = data.get('TestCases') [ setattr(TestRobot, f'test_{index+1}', build_case(index, test)) for index, test in enumerate(tests) ] suite = unittest.defaultTestLoader.loadTestsFromTestCase(TestRobot) return suite def run(suite): runner = unittest.TextTestRunner(verbosity=2) runner.run(suite) # def test_is_expr(): # assert is_expr('status_code == 200') # assert is_expr('status_code is True') # assert not is_expr('content.url') if __name__ == '__main__': text = 'log hello,world' # do_step(text) data = file.load( '/Users/apple/Documents/Projects/Self/PyPi/runnerz/robots/tests.yaml') suite = build(data) run(suite)
import os from filez import file BASEDIR = os.path.dirname(os.path.dirname(__file__)) data1 = file.load(os.path.join(BASEDIR, 'tests', 'data', 'runnerz_01.yaml')) from runnerz import models from runnerz.runner import Runner, UnittestRunner def test_models(): suite = models.Suite(data1) print(suite) print(suite._config) print(suite._cases) print(suite._cases[0]._steps) print(suite._cases[0]._steps[0]._target) print(suite._cases[0]._steps[0]._extract) print(suite._cases[0]._steps[0]._validate) def test_runner(): suite = models.Suite(data1) case = suite._cases[0] step = case._steps[0] runner = Runner() runner.run_suite(suite) def test_unittest_runner(): suite = models.Suite(data1)
import os import unittest from filez import file from tmp.base import StepGroup from tmp.function import request BASEDIR = os.path.dirname(os.path.dirname(__file__)) DATADIR = os.path.join(BASEDIR, 'tests') data_file = os.path.join(DATADIR, 'tests.yml') data = file.load(data_file) TestTemplete = type('TestTemplate', (unittest.TestCase, ), {'__doc__': data.get('name')}) context = {} context['functions'] = {'request': request} step_group = StepGroup(data) for index, step in enumerate(step_group.sub_steps): case = lambda self: StepGroup(step, context)() setattr(TestTemplete, f'test_method_{index+1}', case) if __name__ == '__main__': unittest.main(verbosity=2)
# print(suite) summary = {} start_at = time.time() results = [run_suite(suite) for suite in suites] summary['time'] = dict(start_at=start_at, duration=time.time() - start_at) summary['success'] = all( [result.summary.get('success') for result in results]) summary['stat'] = dict( testsRun=sum_stat(results, 'testsRun'), successes=sum_stat(results, 'successes'), skipped=sum_stat(results, 'skipped'), errors=sum_stat(results, 'errors'), failures=sum_stat(results, 'failures'), expectedFailures=sum_stat(results, 'expectedFailures'), unexpectedSuccesses=sum_stat(results, 'unexpectedSuccesses'), ) summary['platform'] = dict(httprunner_version='1.5.6', python_version=platform.python_version(), platform=platform.platform()) summary['details'] = [result.summary for result in results] return summary if __name__ == '__main__': data = file.load('/Users/superhin/项目/runnerz/httprunner/tests.yaml') # result = run_suite(tests) result = run_multi([data, data]) from pprint import pprint pprint(result)