1. 程式人生 > >python - 介面自動化測試 - TestRegister - 註冊介面測試用例

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