1 # -*- coding: utf-8 -*- 2 #!/usr/bin/env python 3 import os 4 import json 5 import requests 6 import common.conf as conf 7 import common.excelaction as excelaction 8 from common.sendemail import sendreport 9 from common.signture import sign 10 import common.userinfo as userinfo 11 import common.logger as logger 12 import sys 13 import time 14 15 #data_path = os.path.dirname(__file__) + '\\test_data\\' # 测试用例数据文件所在目录 16 data_path = conf.testdata_path 17 18 test_reports = [] # 添加一个数组用来存储测试结果 19 for file in os.listdir(data_path): # 循环读取目录下的文件 20 child = os.path.join('%s%s'%(data_path,file)) # 将文件名和路径拼接好 21 logger.info("当前打开的文件:"+child) 22 fl = open(child) # 打开文件 23 try: 24 cases = json.load(fl) 25 for key in cases: # 循环读取文件中的测试用例(case) 26 start_time = time.clock() 27 case = cases[key] 28 url = conf.get_conf('module',case['module']) + case['url'] 29 data = case['data'] 30 data['Platform'] = conf.get_conf('params','Platform') 31 data['Terminal'] = conf.get_conf('params','Terminal') 32 data['UserIP'] = conf.get_conf('params','UserIP') 33 data['Version'] = conf.get_conf('params','Version') 34 if "UserToken" in data and data['UserToken'] == '': 35 data['UserToken'] = userinfo.get_token() 36 hope_result = case['assert'] 37 method = case['method'] 38 test_report = { 39 "case_id":case['id'], 40 "t_name":case['name'], 41 "method":method, 42 "url":url, 43 "params":data, 44 "hope_result":hope_result, 45 "actual_result":[], 46 "test_result":"" 47 } 48 try: 49 if method == 'post': 50 addsign_data = sign(data,conf.get_conf('sign','api_key')) 51 r = requests.post(url,data=json.dumps(addsign_data),headers=conf.header) 52 response = r.json() 53 s = True 54 for k in hope_result: 55 ar = str(k) + ":" + str(response[k]) 56 test_report["actual_result"].append(ar) 57 if type(hope_result[k]) == type(''): 58 if hope_result[k] in response[k]: 59 s = s&True 60 else: 61 s = s&False 62 else: 63 if hope_result[k] == response[k]: 64 s = s&True 65 else: 66 s = s&False 67 if s: 68 test_report["test_result"] = "PASS" 69 else: 70 test_report["test_result"] = "Fail" 71 72 elif method == 'get': 73 addsign_data = sign(data,conf.get_conf('sign','api_key')) 74 r = requests.get(url,params=addsign_data,headers=conf.header) 75 response = r.json() 76 s = True 77 for k in hope_result: 78 ar = str(k) + ":" + str(response[k]) 79 test_report["actual_result"].append(ar) 80 if type(hope_result[k]) == type(''): 81 if hope_result[k] in response[k]: 82 s = s&True 83 else: 84 s = s&False 85 else: 86 if hope_result[k] == response[k]: 87 s = s&True 88 else: 89 s = s&False 90 if s: 91 test_report["test_result"] = "PASS" 92 else: 93 test_report["test_result"] = "Fail" 94 95 else: 96 print(u'暂不支持该请求方式') 97 test_reports.append(test_report) 98 end_time = time.clock() 99 str_time = '当前执行的用例:' + key + '_'*4 + '用例执行所用时间:' + str(end_time- start_time) + 's' 100 logger.info(str_time) 101 except: 102 error_msg = sys.exc_info() 103 logger.error(error_msg) 104 continue 105 except: 106 error_msg = sys.exc_info() 107 logger.error(error_msg) 108 continue 109 110 excelaction.creat_report(test_reports) #生成测试报告 111 sendreport() #发送测试报告
"case1":{ "name":"登陆接口_测试正常登陆", -- 接口名称(或者接口简介) "module":"passport", -- 接口所属模块 "url":"/api/Passport/Login", -- 接口地址(完整地址由模块对应域名+该地址拼接) "method":"post", -- 接口请求方式 "id":"1-001", -- 用例ID "data":{ -- 接口请求参数(请求时由该参数加公共参数) "UserName":"XXX", -- 接口请求参数(根据具体接口补充,若是接口须要token则须要加token关键字(值为空就行),接口请求时会自动根据参数生成Sign,若是想本身定义则须要加Sign关键字(值填写本身定义的)) }, "assert":{ -- 该条测试用例的断言条件 "Status":200, -- 具体的断言条件,须要返回状态为200 "Message":"登陆成功" -- 具体的断言条件 } }