Example #1
0
    def test_audit(self, case):
        # 第一步:准备用例数据
        # 替换动态化的参数
        url = myconf.get('url', 'url') + case.url
        case.data = data_replace(case.data)
        # 判断是否有有*loan_id*的参数要替换
        if "*loan_id*" in case.data:
            max_id = self.db.fetchone("SELECT max(id) FROM loan")[0]
            loan_id = max_id + 1
            case.data = case.data.replace("*loan_id*", str(loan_id))

        # 第二步:读取配置文件,发送请求,将请求内容输出日志到指定目录,获取请求结果
        my_log.info("请求地址:{},请求接口{},请求内容:{}".format(url, case.interface,
                                                    eval(case.data)))
        response = self.http.request(method=case.method,
                                     url=url,
                                     data=eval(case.data))
        res = response.json()

        # 判断是否在执行加标的测试用例
        if case.interface == '加标':
            loan_id = self.db.fetchone(
                'select id from loan where MemberID = "{}" order by id desc'.
                format(myconf.get('data', 'memberId')))
            # 将添加的标id,保存为临时变量
            setattr(ConText, 'loan_id', loan_id[0])
Example #2
0
 def __init__(self):
     # 建立连接
     self.conn = pymysql.connect(
         host=myconf.get('mysql', 'host'),  # 数据库地址
         port=myconf.getint('mysql', 'port'),  # 端口
         user=myconf.get('mysql', 'user'),  # 账号
         password=myconf.get('mysql', 'password'),  # 密码
         database=myconf.get('mysql', 'database'),  # 数据库名
         charset='utf8'  # 指定编码格式
     )
     # 创建一个游标
     self.cur = self.conn.cursor()
Example #3
0
class WithdrawTestCase(unittest.TestCase):
    '''取现接口的测试用例类'''
    excel = ReadExcel(data_file_path,'withdraw')
    cases = excel.read_cases_obj()
    http = HTTPSession()
    db = ReadSQL()
    @data(*cases)
    def test_withdraw(self,case):
        # 第一步:准备用例数据
        # 替换动态化的参数
        data = data_replace(case.data)
        # 获取取现之前的账户余额
        if case.check_sql:
            # 将需要格式化的字符串提取出来,替换为格式化的参数
            case.check_sql = case.check_sql.replace('#phone#', myconf.get('data', 'phone'))
            start_money = self.db.fetchone(case.check_sql)[0]
            print('提现前用户账户余额:{}'.format(start_money))

        # 第二步:读取配置文件,发送请求,将请求内容输出日志到指定目录,获取请求结果
        my_log.info("请求地址:{},请求接口{},请求内容:{}".format(myconf.get('url','url')+case.url,case.interface,eval(data)))
        response = self.http.request(method=case.method,url=myconf.get('url','url')+case.url,data=eval(data))
        res = response.json()
        # 第三步:对比实际和预期结果
        try:
            self.assertEqual(str(case.excepted_code),res['code'])
            if case.check_sql:
                # 将需要格式化的字符串提取出来,替换为格式化的参数
                case.check_sql = case.check_sql.replace('#phone#',myconf.get('data','phone'))
                # 获取取现用例之后的余额
                end_money = self.db.fetchone(case.check_sql)[0]
                print('取现后用户账户余额:{}'.format(end_money))
                # 获取本次取现余额
                money = eval(case.data)['amount']
                # decimal.Decimal(str(money))
                # 获取数据库变化的金额
                change_money = start_money-end_money
                # 对比提现金额和数据库变化金额
                self.assertEqual(money,float(change_money))
        except AssertionError as error:
            print('测试用例不通过')
            print('预期响应状态码为:{}'.format(case.excepted_code))
            print('实际响应状态码为:{}'.format(res['code']))
            self.excel.write_data(row=case.case_id+1,column=8,value='failed')
            my_log.info('用例{}执行未通过'.format(case.title))
            my_log.exception(error)
            raise error
        else:
            print('测试用例通过')
            print('预期响应状态码为:{}'.format(case.excepted_code))
            print('实际响应状态码为:{}'.format(res['code']))
            self.excel.write_data(row=case.case_id + 1, column=8, value='passed')
            my_log.info('用例{}执行通过'.format(case.title))
Example #4
0
 def test_case_register(self, case):
     '''注册模块的用例执行逻辑'''
     # 第一步:准备测试用例数据
     # 随机生成手机号码
     phone = self.random_phone()
     # 替换动态化的参数random_phone
     re_data = case.data.replace('*random_phone*', phone)
     # 判断替换后的数据是否还有要替换的参数,如果有就调取函数,将参数替换为配置文件中的数据内容
     data = data_replace(re_data)
     # 第二步:读取配置文件,准备发送请求,将请求内容输出到日志文件,并获取响应结果
     my_log.info('请求地址{},请求接口{},请求内容:{}'.format(
         case.method,
         myconf.get('url', 'url') + case.url, case.interface, eval(data)))
     response = self.http.request(case.method,
                                  myconf.get('url', 'url') + case.url,
                                  eval(data))
     res = response.json()
     # 第三步:对比预期和实际结果
     try:
         self.assertEqual(eval(case.excepted), res)
         # 判断是否要进行sql校验
         if case.check_sql:
             # 将需要格式化的字符串提取出来,替换为格式化的参数
             case.check_sql = case.check_sql.replace(
                 '*random_phone*', phone)
             # 获取实际数据库查询结果
             db_res = self.db.find_count(case.check_sql)
             # 对比预期和实际结果
             self.assertEqual(1, db_res)
     except AssertionError as error:
         # 在测试报告中打印实际和预期结果
         print('用例测试不通过')
         print('实际结果为:{}'.format(res))
         print('预期结果为:{}'.format(case.excepted))
         # 将测试结果写入测试数据中
         self.excel.write_data(case.case_id + 1, 8, 'failed')
         # 输出日志到日志文件
         my_log.debug('用例:{}测试不通过'.format(case.title))
         raise error
     else:
         # 在测试报告中打印实际和预期结果
         print('用例测试通过')
         print('实际结果为:{}'.format(res))
         print('预期结果为:{}'.format(case.excepted))
         # 将测试结果写入测试数据中
         self.excel.write_data(case.case_id + 1, 8, 'passed')
         # 输出日志到日志文件
         my_log.debug('用例:{}测试通过'.format(case.title))
Example #5
0
 def test_withdraw(self,case):
     # 第一步:准备用例数据
     # 替换动态化的参数
     data = data_replace(case.data)
     # 获取取现之前的账户余额
     if case.check_sql:
         # 将需要格式化的字符串提取出来,替换为格式化的参数
         case.check_sql = case.check_sql.replace('#phone#', myconf.get('data', 'phone'))
         start_money = self.db.fetchone(case.check_sql)[0]
         print('提现前用户账户余额:{}'.format(start_money))
Example #6
0
def data_replace(data):
    '''动态替换用例数据'''
    while re.search(r'#(.+?)#', data):
        res = re.search(r'#(.+?)#', data)
        # 提取要替换的内容
        re_data = res.group()
        # 提取要替换的字段
        key = res.group(1)
        try:
            # 去配置文件中读取字段对应的数据内容
            value = myconf.get('data', key)
        except:
            value = getattr(ConText, key)
        # 进行替换
        data = re.sub(re_data, str(value), data)
        # # 替换
        # data = re.sub(re_data,value,data)
    return data
Example #7
0
 def test_case_login(self,case):
     '''登录接口用例执行逻辑'''
     # 第一步:准备测试用例数据
     url = myconf.get('url','url')+case.url
     method = case.method
     excepted = eval(case.excepted)
     # 替换要格式化的用例参数
     data = data_replace(case.data)
     # print(data,type(data))
     # 第二步:读取配置文件,发送请求,将请求内容输出日志到指定目录,获取请求结果
     my_log.info('请求地址{},请求接口{},请求内容:{}'.format(url,case.interface,data))
     response = self.http.request(method=method,url=url,data=eval(data))
     res = response.json()
     # 第三步:对比实际和预期结果,断言是否测试通过
     try:
         self.assertEqual(excepted,res)
         # if case.check_sql:
         #     case.check_sql=case.check_sql.replace('#phone#',myconf.get('data','phone'))
         #     db_res = self.db.find_count(case.check_sql)
         #     self.assertEqual(1,db_res)
     except AssertionError as error:
         print('测试用例不通过')
         print('预期结果为:{}'.format(excepted))
         print('实际结果为:{}'.format(res))
         # 将断言结果写入测试数据中
         self.excel.write_data(case.case_id+1,8,'failed')
         # 将执行的测试用例title输出到日志
         my_log.debug('{}用例执行未通过'.format(case.title))
         raise error
     else:
         print('测试用例通过')
         print('预期结果为:{}'.format(excepted))
         print('实际结果为:{}'.format(res))
         # 将断言结果写入测试数据中
         self.excel.write_data(case.case_id+1,8,'passed')
         # 将执行的测试用例title输出到日志
         my_log.debug('{}用例执行通过'.format(case.title))
Example #8
0
import time
import unittest
from interface_object03.common.read_config import  myconf
from HTMLTestRunnerNew import HTMLTestRunner
from interface_object03.common.mylog import my_log
from interface_object03.common.constant import CASE_DIR,REPORT_DIR
# 项目开始时输出日志
my_log.info("------开始执行测试运行程序------")

# 第一步:创建测试套件
suite = unittest.TestSuite()

# 第二步:将用例添加到测试套件
loader = unittest.TestLoader()
suite.addTest(loader.discover(CASE_DIR))
# 第三步:执行用例,生成测试报告
# 从配置文件中读取测试报告的名称,并和路径拼接生成一个指定路径指定名称的测试报告
file_name = myconf.get('report','file_name')
report = os.path.join(REPORT_DIR,file_name)
with open(report,'wb') as new:
    runner = HTMLTestRunner(
                            stream=new,
                            verbosity=2,
                            title='report01',
                            description='接口测试报告',
                            tester='可乐'
                            )
    runner.run(suite)

# 用例执行结束输入日志
my_log.info('------用例执行结束------')
Example #9
0
"""
===============
author:Administrator
time:16:06
E-mail:[email protected]
===============
"""
import os
import logging
from interface_object03.common.read_config import myconf
from interface_object03.common.constant import LOG_DIR

# 读取配置文件中log区域的配置内容
log_level = myconf.get('log', 'log_level')
fh_level = myconf.get('log', 'fh_level')
sh_level = myconf.get('log', 'sh_level')
filename = myconf.get('log', 'filename')

# 拼接日志文件路径
file_path = os.path.join(LOG_DIR, filename)


class MyLog(object):
    def __new__(cls, *args, **kwargs):
        '''创建对象'''
        # 第一步:创建日志收集器,根据配置文件获取收集器设置的收集日志的等级
        my_log = logging.getLogger('my_log')
        my_log.setLevel(log_level)
        # 第二步:创建日志输出渠道,根据配置文件获取渠道设置的收集日志的等级,输出到控制台
        sh = logging.StreamHandler()
        sh.setLevel(sh_level)
Example #10
0
===============
"""
'''
封装一个替换数据的方法:
封装的需求:
1、替换用例中的参数
2、简化替换的流程

实现思路:
1、获取用例数据
2、判断该用例数据是否有需要替换的参数
3、对数据进行替换
'''
import re
from interface_object03.common.read_config import myconf
s = "{'mobilephone':'#phone#','pwd':'#pwd#','regname':'LL'}"
# 第一步:通过search进行匹配
# 第二步:判断是否匹配到数据
while re.search(r'#(.+?)#', s):
    res = re.search(r'#(.+?)#', s)
    # 获取匹配内容
    rdata = res.group()
    # 提取要替换的字段
    key = res.group(1)
    # 通过提取的字段,去配置文件中读取对应的数据内容
    phone = myconf.get('data', key)
    # 进行替换
    # print(rdata,phone)
    s = re.sub(rdata, phone, s)
print(s)
Example #11
0
        if '*memberId*' in case.data:
            # 获取数据库用户表当前最大的会员id
            max_id = self.db.fetchone("select max(id) from member")[0]
            # 将要加标的新会员id
            memberId = max_id+1
            # 替换用例数据中的会员id
            case.data = case.data.replace('*memberId*',str(memberId))

        # 判断是否需要sql校验
        if case.check_sql:
            case.check_sql = data_replace(case.check_sql)
            # 获取当前用户加标前的标数量
            start_count = self.db.find_count(case.check_sql)

        # 第二步:读取配置文件,发送请求,将请求内容输出日志到指定目录,获取请求结果
        my_log.info("请求地址:{},请求接口{},请求内容:{}".format(myconf.get('url','url')+case.url,case.interface,eval(case.data)))
        response = self.http.request(method=case.method,url=myconf.get('url','url')+case.url,data=eval(case.data))
        res = response.json()
        # 第三步:对比实际和预期结果
        try:
            self.assertEqual(str(case.excepted_code),res['code'])
            if case.check_sql:
                # 获取加标之后的当前用户的标数量
                end_count = self.db.find_count(case.check_sql)
                self.assertEqual(1,end_count - start_count)

        except AssertionError as error:
            print('测试用例不通过')
            print('实际响应状态码为:{}'.format(res['code']))
            print('预期响应状态码为:{}'.format(case.excepted_code))
            self.excel.write_data(row=case.case_id+1,column=8,value='failed')