def get_options(task_id):  # 获取pytest运行参数、记录报告入库、报告复制到templates用于报告访问
    # 报告参数声明
    sp = ScriptPara(task_id)
    project_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))
    report_file = 'report_task%s.html' % task_id  # 报告名称
    report = os.path.join(project_path, 'report', report_file)  # 报告路径

    # 记录入库
    import time
    report_json = {
        "report_name": report_file,
        "task_id": str(task_id),
        "create_date": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
        "file_path": report
    }
    from api.controller import report_new_record  # 当存在task_id相同记录,则更新;否则插入记录
    report_new_record(task_id, report_json)

    # pytest运行参数(含默认指定html报告参数)
    if sp.data_type() == 'json':
        folder = 'json_script'
    else:
        folder = 'protobuf_script'
    test_dir = os.path.join(project_path, 'script', folder)
    options = [
        '--html=%s' % report, '--self-contained-html',
        '--rootdir=%s' % test_dir
    ]  # 生成报告位置,脚本的存放目录

    # 将报告html复制到templates
    return options + sp.pytest_option  # 附加配置的参数
Ejemplo n.º 2
0
def start(task_id):
	script_para = ScriptPara(task_id) # 脚本参数
	script_name = 'case_' + script_para.case_id[0] + '.py'  # 脚本名称
	script_file = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'proto_script',
							   script_name)  # 脚本文件
	locust_option = script_para.locust_option()  # 运行参数
	ls_command = ["locust", "-f"]
	ls_command.append(script_file)
	ls_command += locust_option.split()  # 因为这边得到字符串,如"--host=127.0.0.1 --web-host=192.168.1.56 --web-port=8188",为subprocess的列表取值方式用split进行切割
	lo_process = subprocess.Popen(ls_command, stdout=subprocess.PIPE)
	print(lo_process.stdout.readlines())
Ejemplo n.º 3
0
def pytest_option(task_id):
	"""	pytest的运行参数 """
	from script.run_parameters import ScriptPara
	sp = ScriptPara(task_id)
	if sp.data_type() == 'json':
		folder = 'json_script'
	else:
		folder = 'protobuf_script'
	test_dir = os.path.join(project_path, 'script', folder)
	report = os.path.join(project_path, 'report', 'report_task%s.html' % task_id)
	options = ['--html=%s' % report, '--self-contained-html', '--rootdir=%s' % test_dir] # 默认参数:html报告生成、指明脚本运行目录
	return options + sp.pytest_option
 def data_type(self):  # 判断body的数据类型
     content_type = ScriptPara(
         self.task_id).para[0]['header']['content-type']
     if 'octet-stream' in content_type:
         return 'protobuf'
     else:
         return 'json'
Ejemplo n.º 5
0
	def __init__(self, task_id):
		self.task_id = task_id
		self.data_type = self.data_type()
		self.sp = ScriptPara(task_id)
		self.classname = 'case_' + self.sp.case_id[0]  # 脚本的类名
		self.funcname = [i['url'].split('/')[-1].lower() for i in self.sp.para]  # script 函数名
		self.weight = [int(i['weight']) for i in self.sp.weight]  # 执行权重
		self.method = [i['method'].upper() for i in self.sp.para]  # http方法
		self.url = [i + j['url'] for i, j in zip(self.sp.host, self.sp.para)]  # api的请求地址
		self.token = self.sp.token  # 获取token
		for i in self.sp.para:  # 根据是否需要token,将token加入headers
			if i['has_token']:
				i['header']['Authorization'] = self.token
		self.headers = [i['header'] for i in self.sp.para] # 请求头信息
		self.body = [i['body'] for i in self.sp.para] # 请求主体
		self.title = [i['api_name']for i in self.sp.para]  # api测试名称
		self.values = [i['values'] for i in self.sp.para] # 当http为get方法时的值
		self.min = self.sp.min_wait  # locust等待最小值
		self.max = self.sp.max_wait  # locust等待最大值
		
		self.project_path = os.path.dirname(os.path.abspath(os.path.dirname(__file__)))  # 工程根目录
 def __init__(self, task_id):
     """定义脚本生成需要用到的参数"""
     self.task_id = task_id
     self.script_para = ScriptPara(task_id)  # 脚本参数源
     self.api_url = [
         i + j['url']
         for i, j in zip(self.script_para.host, self.script_para.para)
     ]
     self.api_method = [i['method'].upper() for i in self.script_para.para]
     self.api_token = self.script_para.token
     for i in self.script_para.para:  # 根据是否需要token,将token加入headers
         if i['has_token']:
             i['header']['Authorization'] = self.api_token
     self.api_headers = [
         self.dictvalue2str(i['header']) for i in self.script_para.para
     ]
     self.api_data = [i['body'] for i in self.script_para.para]
     self.api_values = [i['values']
                        for i in self.script_para.para]  # 当http为get方法时的值
     self.verify_expection = [
         i['expection'] for i in self.script_para.api_expection
     ]  # 期望结果,用于检验接口正确性json格式
     # if not self.verify_expection:
     self.script_funcname = [
         'test_' + i['url'].split('/')[-1].lower()
         for i in self.script_para.para
     ]  # script 函数名
     self.script_funcname = list(
         self.rename_duplicates(self.script_funcname))
     self.script_file = [
         'test_case_' + case_id for case_id in self.script_para.case_id
     ]  # 根据case_id命名脚本名字
     self.project_path = os.path.dirname(
         os.path.abspath(os.path.dirname(__file__)))  # 工程根目录
     self.generate_time = time.strftime('%Y-%m-%d %H:%M:%S',
                                        time.localtime(time.time()))
     self.options = self.script_para.pytest_option  # pytest运行参数
    def __init__(self, task_id):  # 声明生成脚本需要的数据
        self.task_id = task_id
        self.data_type = self.data_type()
        self.sp = ScriptPara(task_id)

        self.script_classname = 'case_' + self.sp.case_id[0]  # 脚本的类名
        self.script_funcname = [
            i['url'].split('/')[-1].lower() for i in self.sp.para
        ]  # script 函数名
        self.script_funcname = list(
            self.rename_duplicates(self.script_funcname))

        self.api_method = [i['method'].upper() for i in self.sp.para]  # http方法
        self.api_url = [
            i + j['url'] for i, j in zip(self.sp.host, self.sp.para)
        ]  # api的请求地址
        self.api_token = self.sp.token  # 获取token
        for i in self.sp.para:  # 根据是否需要token,将token加入headers
            if i['has_token']:
                i['header']['Authorization'] = self.api_token
        self.api_headers = [
            self.dictvalue2str(i['header']) for i in self.sp.para
        ]  # 请求头信息
        self.api_body = [i['body'] for i in self.sp.para]  # 请求主体
        self.api_values = [i['values'] for i in self.sp.para]  # 当http为get方法时的值

        self.locust_title = [i['api_name'] for i in self.sp.para]  # api测试名称
        self.locust_min = self.sp.min_wait  # locust等待最小值
        self.locust_max = self.sp.max_wait  # locust等待最大值
        self.locust_weight = [int(i['weight']) for i in self.sp.weight]  # 执行权重

        self.proto_path = os.path.join(
            os.path.abspath(os.path.dirname(__file__)), 'proto_script')
        self.json_path = os.path.join(
            os.path.abspath(os.path.dirname(__file__)), 'json_script')
        self.project_path = os.path.dirname(
            os.path.abspath(os.path.dirname(__file__)))  # 工程根目录