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

猜你喜欢

转载自www.cnblogs.com/gotesting/p/10196126.html
今日推荐