python - 接口自动化测试 - TestRegister - 注册接口测试用例
# -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: test_register.py @ide: PyCharm Community Edition @time: 2018-12-28 15:50 @blog: https://www.cnblogs.com/gotesting/ ''' import unittest import os from ddt import ddt,data from Common.http_request import HttpRequest from Common.read_excel import ReadExcel from Common.read_config import ReadConfig from Common.mysql_util import MysqlUtil from Common.get_logger import GetLog from Common.basic_data import DoRegex,Context from Common.contants import * import json import re # 读取配置文件,获取当前URL前缀,用于灵活更换测试服务器地址 read_config = ReadConfig() url_pre = read_config.get_config_str('api','url_pre') # 读取excel,获取login测试数据 data_dir = os.path.join(data_dir,'test_data.xlsx') read_excel = ReadExcel(data_dir) register_cases = read_excel.get_cases('register') get_log = GetLog() @ddt class TestRegister(unittest.TestCase): @classmethod def setUpClass(cls): global max_mobilephone mysql = MysqlUtil() sql = 'SELECT MobilePhone FROM future.member WHERE MobilePhone != "" ORDER BY MobilePhone DESC LIMIT 1;' sql_resp = mysql.fetch_one(sql) if sql_resp is not None: max_mobilephone = sql_resp['MobilePhone'] get_log.log_info(' the max_mobilephone from mysql is {0}'.format(max_mobilephone)) else: max_mobilephone = 15964506666 get_log.log_info(' the max_mobilephone from mysql is None , we use {0}'.format(max_mobilephone)) @classmethod def tearDownClass(cls): pass @data(*register_cases) def test_resister(self,case): url = url_pre + case.url # 使用正则表达式 匹配 读取的case.data中的mobilephone,匹配成功后,将查询数据库获取的最大mobilephone+1 赋值给 case.data中的mobilephone,以防注册手机号重复 data = json.loads(case.data) register_user = int(max_mobilephone) + 1 if re.findall(pattern='\$\{(.*?)\}',string=data['mobilephone']): data['mobilephone'] = register_user # 记录当前测试case信息 get_log.log_info('''Test Case Info: case_id : {0} title : {1} method : {2} url : {3} data : {4} expected: {5} '''.format(case.case_id,case.title,case.method,url,data,case.expected)) # 注册接口请求,获取响应 response = HttpRequest(method=case.method,url=url,data=data) actual = response.get_json()['msg'] # 记录当前测试case 接口响应信息 get_log.log_info('''Test Case Request Response Result: response : {0} actual : {1} '''.format(response.get_json(),actual)) # 接口请求实际结果与期望结果做校验 try: self.assertEquals(case.expected,actual) read_excel.write_result('register',case.case_id,actual,'Pass') get_log.log_info('Test Result is Passed ! case_id is {0},title is {1} '.format(case.case_id,case.title)) except Exception as e: read_excel.write_result('register',case.case_id,actual,'Fail') get_log.log_info('Test Result is Failed ! case_id is {0},title is {1} '.format(case.case_id,case.title)) get_log.log_error('Error msg :{0}'.format(e)) raise e # 数据库校验 if actual == '注册成功' or actual == '手机号码已被注册': sql_verify = 'SELECT MobilePhone FROM future.member WHERE MobilePhone = {0};'.format(data['mobilephone']) sql_result = MysqlUtil().fetch_one(sql_verify) if sql_result is not None: self.assertEquals(str(data['mobilephone']),sql_result['MobilePhone']) get_log.log_info('Test Result is Passed ! case_id is {0},title is {1} '.format(case.case_id,case.title)) else: get_log.log_info('Test Result is Failed ! case_id is {0},title is {1} '.format(case.case_id,case.title)) get_log.log_error('Error msg :{0}'.format(AssertionError)) raise AssertionError else: sql_verify = 'SELECT MobilePhone FROM future.member WHERE MobilePhone = {0};'.format(data['mobilephone']) sql_result = MysqlUtil().fetch_one(sql_verify) print(sql_result) try: self.assertEquals(None,sql_result) get_log.log_info('Test Result is Passed ! case_id is {0},title is {1} '.format(case.case_id,case.title)) except Exception as e: get_log.log_info('Test Result is Failed ! case_id is {0},title is {1} '.format(case.case_id,case.title)) get_log.log_error('Error msg :{0}'.format(e)) raise e