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

 

转载于:https://www.cnblogs.com/gotesting/p/10196126.html

首先,需要安装 `ddt` 和 `requests` 模块。可以使用以下命令进行安装: ``` pip install ddt requests ``` 接下来,我们可以编写测试用例脚本。假设我们要测试接口为 `http://localhost:8080/12306/register`,其中需要提供用户名和密码。判重接口返回的数据格式如下: ``` { "code": 0, "msg": "success", "data": { "is_registered": true } } ``` 我们可以编写如下的测试用例脚本: ```python import unittest import ddt import requests @ddt.ddt class TestRegister(unittest.TestCase): @ddt.data(("user1", "password1"), ("user2", "password2"), ("user3", "password3")) @ddt.unpack def test_register(self, username, password): # 构造请求参数 data = { "username": username, "password": password } # 发送请求 response = requests.post("http://localhost:8080/12306/register", data=data) # 解析响应 json_data = response.json() # 断言判重接口返回的数据是否正确 self.assertEqual(json_data["code"], 0) self.assertEqual(json_data["msg"], "success") self.assertIn("is_registered", json_data["data"]) ``` 这个测试用例脚本使用了 `ddt` 模块的 `@ddt.data` 装饰器来传递多个测试参数。在 `test_register` 函数中,我们构造请求参数并发送请求,然后解析响应并断言响应数据是否正确。 注意,在使用 `unpack` 参数时,需要保证测试参数的个数与函数参数的个数一致。 以上就是一个简单的12306注册用户判重接口测试用例脚本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值