Exemplo n.º 1
0
class TestLogin(unittest.TestCase):
    excel = do_excel(os.path.join(data_path,'api_data.xlsx'),'login')
    data = excel.read_excel()
    base_url = conf.get('env','base_url')
    headers = eval(conf.get('env','headers'))
    @list_data(data)
    def test_login(self,itme):
        url = self.base_url+ itme['url']
        method = itme['method'].lower()
        itme['data'] = replace_data(itme['data'],TestLogin)
        param = eval(itme['data'])
        expected = eval(itme['expected'])
        # 请求接口获取实际结果
        response = requests.request(method,url,json=param,headers=self.headers)
        res = response.json()
        #断言
        try:
            self.assertEqual(expected['code'],res['code'])
            self.assertEqual(expected['msg'],res['msg'])
        except AssertionError as e:
            log.error("用例--【{}】---执行失败".format(itme['title']))
            log.exception(e)
            raise e
        else:
            log.info("用例--【{}】---执行成功".format(itme['title']))
Exemplo n.º 2
0
 def test_withdraw(self, item):
     url = conf.get('env', 'base_url') + item['url']
     method = item['method'].lower()
     item['data'] = replace_data(item['data'], TestWithdraw)
     params = eval(item['data'])
     par_sign = HandleSign.generate_sign(self.token)
     params.update(par_sign)
     expected = eval(item['expected'])
     # --------请求接口前,查看用户余额--------
     sql = "select leave_amount from futureloan.member where mobile_phone='{}'".format(
         conf.get('test_data', 'mobile'))
     start_wd = self.db.find_one(sql)[0]
     print("提现前用户余额为:{}".format(start_wd))
     response = requests.request(method,
                                 url,
                                 json=params,
                                 headers=self.headers)
     res = response.json()
     # --------请求接口后,查看用户余额--------
     end_wd = self.db.find_one(sql)[0]
     print("提现后用户余额为:{}".format(end_wd))
     try:
         self.assertEqual(expected['code'], res['code'])
         self.assertEqual(expected['msg'], res['msg'])
         if item['check_sql']:
             # 提现成功
             self.assertEqual(float(start_wd - end_wd), params['amount'])
         else:
             self.assertEqual(float(start_wd - end_wd), 0)
     except AssertionError as e:
         log.error("用例--【{}】---执行失败".format(item['title']))
         log.exception(e)
         raise e
     else:
         log.info("用例--【{}】---执行成功".format(item['title']))
Exemplo n.º 3
0
 def __init__(self, *args, **kwargs):
     self.con = pymysql.Connect(
         host=conf.get('mysql', 'host'),
         port=conf.getint('mysql', 'port'),
         user=conf.get('mysql', 'user'),
         password=conf.get('mysql', 'password'),
         charset='utf8',
         # cursorclass=pymysql.cursors.DictCursor
         *args,
         **kwargs)
Exemplo n.º 4
0
 def __init__(self):
     # 创建一个连接对象
     self.conn = pymysql.connect(host=conf.get("db", "host"),
                                 port=conf.getint("db", "port"),
                                 user=conf.get("db", "user"),
                                 password=conf.get("db", "pwd"),
                                 charset=conf.get("db", "charset"),
                                 cursorclass=pymysql.cursors.DictCursor
                                 )
     # 创建一个游标
     self.cur = self.conn.cursor()
Exemplo n.º 5
0
 def admin_login(cls):
     url = conf.get('env', 'base_url') + '/member/login'
     # 管理员登陆
     params = {
         'mobile_phone': conf.get('test_data', 'admin_mobile'),
         'pwd': conf.get('test_data', 'pwd')
     }
     headers = eval(conf.get('env', 'headers'))
     response = requests.post(url=url, json=params, headers=headers)
     res = response.json()
     admin_token = 'Bearer ' + jsonpath(res, '$..token')[0]
     headers['Authorization'] = admin_token
     cls.admin_member_id = jsonpath(res, '$..id')[0]
     cls.admin_headers = headers
Exemplo n.º 6
0
 def audit(cls):
     # 审核项目
     url = conf.get('env', 'base_url') + '/loan/audit'
     params = {"loan_id": cls.loan_id, "approved_or_not": True}
     response = requests.patch(url=url,
                               json=params,
                               headers=cls.admin_headers)
    def test_addp(self, item):
        url = conf.get('env', 'base_url') + item['url']
        method = item['method']
        params = eval(replace_data(item['data'], Test_add))
        par_sign = HandleSign.generate_sign(self.token)
        params.update(par_sign)
        expected = eval(item['expected'])
        # 调用接口前查询该用户项目数量
        sql = "SELECT * FROM futureloan.loan WHERE member_id={}".format(
            self.member_id)
        strat_count = self.db.find_count(sql)
        print("调用接口之前的数量", strat_count)
        response = requests.request(url=url,
                                    method=method,
                                    json=params,
                                    headers=self.headers)
        res = response.json()
        end_count = self.db.find_count(sql)
        print("调用接口之后的数量", end_count)

        print("实际结果", res)
        print("预期结果", expected)
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            if res['msg'] == 'OK':
                self.assertEqual(end_count - strat_count, 1)
        except AssertionError as e:
            log.error("用例--【{}】---执行失败".format(item['title']))
            log.exception(e)
            raise e
        else:
            log.info("用例--【{}】---执行成功".format(item['title']))
 def test_audit(self,item):
     url = conf.get('env','base_url')+ item['url']
     item['data'] = replace_data(item['data'],TestAudit)
     params = eval(item['data'])
     par_sign = HandleSign.generate_sign(self.token)
     params.update(par_sign)
     method = item['method'].lower()
     expected = eval(item['expected'])
     response = requests.request(url=url,method=method,json=params,headers=self.admin_headers)
     res = response.json()
     if res['msg'] == 'OK' and item['title'] == '审核通过':
         TestAudit.pass_loan_id = params['loan_id']
     try:
         self.assertEqual(expected['code'],res['code'])
         self.assertEqual(expected['msg'],res['msg'])
         if item['check_sql']:
             sql =  item['check_sql'].format(self.loan_id)
             status = self.db.find_one(sql)[0]
             print("数据库中的状态:",status)
             self.assertEqual(expected['status'],status)
     except AssertionError as e:
         log.error("用例--【{}】---执行失败".format(item['title']))
         log.exception(e)
         raise e
     else:
         log.info("用例--【{}】---执行成功".format(item['title']))
Exemplo n.º 9
0
def replace_data(data, cls):
    while re.search('#(.+?)#', data):
        res = re.search('#(.+?)#', data)
        item = res.group()
        attr = res.group(1)
        try:
            value = getattr(cls, attr)
        except AttributeError:
            value = conf.get('test_data', attr)
        data = data.replace(item, str(value))
    return data
Exemplo n.º 10
0
    def test_invest(self, item):
        # 准备数据
        url = conf.get('env', 'base_url') + item['url']
        item['data'] = replace_data(item['data'], Test_invest)
        params = eval(item['data'])
        par_sign = HandleSign.generate_sign(self.token)
        params.update(par_sign)
        method = item['method'].lower()
        expected = eval(item['expected'])
        # ----------------投资前查询数据库---------------------------------
        # 查用户表的sql
        sql1 = 'SELECT leave_amount FROM futureloan.member WHERE id="{}"'.format(
            self.member_id)
        # 查投资记录的sql
        sql2 = 'SELECT id FROM futureloan.invest WHERE member_id="{}"'.format(
            self.member_id)
        # 查流水记录的sql
        sql3 = 'SELECT id FROM futureloan.financelog WHERE pay_member_id="{}"'.format(
            self.member_id)
        #
        if item['check_sql']:
            s_amount = self.db.find_one(sql1)[0]
            s_invest = self.db.find_count(sql2)
            s_financelog = self.db.find_count(sql3)
        # 发送请求
        response = requests.request(url=url,
                                    method=method,
                                    json=params,
                                    headers=self.headers)
        res = response.json()
        # -------------------投资后查询数据库--------------------------------
        if item['check_sql']:
            e_amount = self.db.find_one(sql1)[0]
            e_invest = self.db.find_count(sql2)
            e_financelog = self.db.find_count(sql3)
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            # 断言实际结果中的msg是否包含 预期结果msg中的内容
            if item['check_sql']:
                # 断言用户余额
                self.assertEqual(params['amount'], float(s_amount - e_amount))
                # 断言投资记录
                self.assertEqual(1, e_invest - s_invest)
                # 断言流水记录
                self.assertEqual(1, e_financelog - s_financelog)

        except AssertionError as e:
            log.error("用例--【{}】---执行失败".format(item['title']))
            log.exception(e)
            raise e
        else:
            log.info("用例--【{}】---执行成功".format(item['title']))
Exemplo n.º 11
0
 def test_register(self,item):
     url = conf.get('env','url')+ item['url']
     method = item['method']
     parms = eval(replace_data(item['data']))
     expected = eval(replace_data(item['expected']))
     res = requests.request(method=method,url=url,json=parms).json()
     try:
         self.ast.ass(expected,res)
     except AssertionError as e:
         log.info('用例--【{}】---执行失败'.format(item['title']))
         raise e
     else:
         log.info('用例--【{}】---执行成功'.format(item['title']))
Exemplo n.º 12
0
 def add_project(cls):
     # 增加项目
     url = conf.get('env', 'base_url') + '/loan/add'
     params = {
         "member_id": cls.member_id,
         "title": "借钱现财富自由",
         "amount": 2000,
         "loan_rate": 12.0,
         "loan_term": 3,
         "loan_date_type": 1,
         "bidding_days": 5
     }
     response = requests.post(url=url, json=params, headers=cls.headers)
     res = response.json()
     cls.loan_id = jsonpath(res, '$..id')[0]
Exemplo n.º 13
0
def replace_data(s):
    r1 = r"#(.+?)#"
    # 根据是否匹配到要替换的数据,来决定要不要进入循环
    while re.search(r1, s):
        # 匹配一个需要替换的内容
        res = re.search(r1, s)
        # 获取待替换的内容
        data = res.group()
        # 获取需要替换的字段
        key = res.group(1)
        try:
            # 根据要替换的字典,去配置文件中找到对应的数据,进行替换
            s = s.replace(data, conf.get("test_data", key))
        except Exception:
            # 如果配置文件中找不到,报错了,则去CaseData的属性中找对应的值进行替换
            s = s.replace(data, str(getattr(CaseDate, key)))
    return s
Exemplo n.º 14
0
 def test_createcase(self, item):
     url = conf.get('env', 'url') + item['url']
     method = item['method']
     parms = eval(replace_data(item['data']))
     headers = {"Authorization": getattr(CaseDate, "token")}
     res = requests.request(method=method,
                            url=url,
                            json=parms,
                            headers=headers).json()
     while jsonpath.jsonpath(res, '$.id'):
         CaseDate.caseid = jsonpath.jsonpath(res, '$.id')[0]
         break
     expected = eval(replace_data(item['expected']))
     try:
         self.ast.ass(expected, res)
     except AssertionError as e:
         log.info('用例--【{}】---执行失败'.format(item['title']))
         raise e
     else:
         log.info('用例--【{}】---执行成功'.format(item['title']))
    def test_recharge(self,item):
        # 第一步准备数据
        url = conf.get('env','base_url') + item['url']
        # 动态处理需要替换得参数
        item['data'] = replace_data(item['data'],TestRecharge)
        params = eval(item['data'])
        par_sign = HandleSign.generate_sign(self.token)
        params.update(par_sign)
        expected = eval(item['expected'])
        method = item['method'].lower()
        # -------------请求之前获取数据库中用户余额--------------
        sql = "select leave_amount from futureloan.member where mobile_phone='{}'".format(conf.get('test_data', 'mobile'))
        #执行查询sql
        start_amount = self.db.find_one(sql)[0]
        print("用例执行前余额:{}".format(start_amount))

        # 第二步发送请求获取实际结果
        response = requests.request(method,url,json=params,headers=self.headers)
        res = response.json()
        # -------------请求接口之后获取数据库中用户余额--------------
        end_amount = self.db.find_one(sql)[0]
        print("用例执行后余额:{}".format(start_amount))
        # assert
        try:
            self.assertEqual(expected['code'],res['code'])
            self.assertEqual(expected['msg'],res['msg'])
            # -------------校验数据库中用户余额的变化是否等于充值金额--------------
            if item['check_sql']:
                # 充值成功,用户余额变化为充值金额
                self.assertEqual(float(end_amount-start_amount),params['amount'])
            else:
                self.assertEqual(float(end_amount-start_amount),0)
        except AssertionError as e:
            log.error("用例--【{}】---执行失败".format(item['title']))
            log.exception(e)
            raise e
        else:
            log.info("用例--【{}】---执行成功".format(item['title']))
Exemplo n.º 16
0
    Terminal_log = logging.StreamHandler()
    Terminal_log.setLevel(Terminal_level)
    log.addHandler(Terminal_log)
    # 2.输出到日志文件
    File_log = logging.FileHandler(filename, encoding='utf-8', mode='w')
    File_log.setLevel(File_level)
    File_log.addFilter(log)
    log.addHandler(File_log)

    # 设置日志输出得格式
    log_formate = logging.Formatter(
        '%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s'
    )
    # 设置输出到控制台日志格式
    Terminal_log.setFormatter(log_formate)

    # 设置输出到文件得日志格式
    File_log.setFormatter(log_formate)

    return log


log = create_log(name=conf.get('logging', 'name'),
                 level=conf.get('logging', 'level'),
                 filename=os.path.join(log_path,
                                       conf.get('logging', 'filename')),
                 Terminal_level=conf.get('logging', 'Terminal_level'),
                 File_level=conf.get('logging', 'File_level'))

log.info('ahsfkdhshf')
Exemplo n.º 17
0
class TestRegister(unittest.TestCase):
    excel = do_excel(os.path.join(data_path, 'api_data.xlsx'), 'register')
    db = HandlerDB()
    # 读取用例数据
    cases = excel.read_excel()
    # 项目地址
    base_url = conf.get('env', 'base_url')
    # 请求头
    headers = eval(conf.get('env', 'headers'))

    @list_data(cases)
    def test_register(self, itme):
        # 第一步:准备用例数据
        # 1.接口地址
        url = self.base_url + itme['url']
        # 2.请求参数
        if '#mobile#' in itme['data']:
            setattr(TestRegister, 'mobile', self.ran_phone())
            itme['data'] = replace_data(itme['data'], TestRegister)
        params = eval(itme['data'])
        print(params)
        # 3.请求头
        # 4.获取请求方法,转换为小写
        method = itme['method'].lower()
        # 5.预期结果
        expected = eval(itme['expected'])

        # --------请求接口前,查看是否注册改手机号--------
        sql = "select * from futureloan.member where mobile_phone ='{}';".format(
            params['mobile_phone'])
        res1 = self.db.find_count(sql)
        print("{}请求接口前注册结果{}".format(params['mobile_phone'], res1))
        # 第二步:请求接口,返回实际结果
        response = requests.request(method,
                                    url,
                                    json=params,
                                    headers=self.headers)
        res = response.json()
        # --------请求接口后,查看是否注册改手机号--------
        res2 = self.db.find_count(sql)
        print("{}请求接口前注册结果{}".format(params['mobile_phone'], res2))
        # 第三步:断言
        try:
            # 断言code和msg是否一致
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            if itme['check_sql']:
                # 注册成功,可以查到一条数据
                self.assertEqual(res2, 1)
        except AssertionError as e:
            # 记录日志
            log.error("用例--【{}】---执行失败".format(itme['title']))
            log.exception(e)
            # 回写结果到excel(根据需求,回写需花费大量时间)
            raise e
        else:
            log.info("用例--【{}】---执行成功".format(itme['title']))

    def ran_phone(self):
        phone = str(random.randint(13300000000, 13399999999))
        return phone