实现各个环境切换,一套脚本只要调通了,基本接口没有变动,可以大大的降低测试成本,主要用的是argparse
�库。
关键代码如下:
#!/usr/bin/python# -*- coding: UTF-8 -*-# @Author :zaygee# @time :2020/12/3 17:17# @file :runtest.pyimport argparseimport shutilimport sysimport timefrom shutil import copyfilefrom allure_env import write_allure_envfrom common import loggerfrom config import *project_path = os.path.dirname(os.path.abspath(__file__))sys.path.append(project_path)def mk_report_dir():# 创建测试报告目录report_path = os.path.join(project_path, 'report')if not os.path.exists(report_path):os.mkdir(report_path)# 每次的测试报告report_dir_path = os.path.abspath('{0}/{1}'.format(report_path, time.strftime("%Y-%m-%d", time.localtime())))if not os.path.exists(report_dir_path):os.mkdir(report_dir_path)# 临时生成的文件xml_tmp_path = os.path.join(report_dir_path, "xml_tmp_dir")if not os.path.exists(xml_tmp_path):os.mkdir(xml_tmp_path)# html报告now_time = time.strftime("%H%M%S", time.localtime())allure_report_path = os.path.join(report_dir_path, "AllureReport{}".format(now_time))if not os.path.exists(allure_report_path):os.mkdir(allure_report_path)return xml_tmp_path, allure_report_path# 生成html报告def mk_allure_report(xml_tmp_path, allure_report_path):# 写入allure报告的执行环境信息write_allure_env()# 复制environment.properties文件到allure根目录copyfile('environment.properties', '{}'.format(os.path.join(xml_tmp_path, 'environment.properties')))os.system("allure generate {0} -o {1} -c".format(xml_tmp_path, allure_report_path))shutil.rmtree(xml_tmp_path)# 生成jsondef create_report_xml(case_path, xml_tmp_path):os.system("python -m pytest {} -v -s --alluredir={}".format(case_path, xml_tmp_path))def pytest_main():"""用例执行主函数"""parser = argparse.ArgumentParser(description='命令行执行用例参数')parser.add_argument('--env', '-e', help="运行环境 test、staging、prod", type=str, default='dev')parser.add_argument('--case_path', '-c', help="执行用例,默认执行全部", type=str, default='kitten_cases')args = parser.parse_args()run_env = args.envcase_path = args.case_pathif run_env is not None:if run_env not in ('dev', 'test', 'staging', 'prod'):raise ValueError('环境请输入:dev、test、staging、prod')os.environ['env'] = run_envlogger.info("当前运行环境为: " + str(run_env))xml_tmp_path, allure_report_path = mk_report_dir()create_report_xml(case_path, xml_tmp_path)if os.listdir(xml_tmp_path):mk_allure_report(xml_tmp_path, allure_report_path)if __name__ == '__main__':pytest_main()"""执行命令: python main.py -e {运行环境} -c {执行用例}eg: python main.py -e prod -c cases """
