Пример #1
0
def test_login(info):
    all_data = json.dumps(info)
    # 替换
    info = Handler.replace_data(all_data)
    print(info)
    # 转化成字典
    info = json.loads(info)
    Handler.new_phone = Handler.generate_new_phone()

    if '*phone*' in info['json']:
        mobile_phone = Handler().generate_new_phone()
        info['json'] = info['json'].replace('*phone*', mobile_phone)

    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'],
                           headers=json.loads(info['headers']),
                           json=json.loads(info['json']))
    res_body = res.json()

    try:
        assert res_body['code'] == info['expected']
    except AssertionError as e:
        Handler.logger.error("用例失败:{}".format(e))
        raise e
    finally:
        #excel = ExcelHandler(excel_file)
        excel = Handler.excel
        excel.write('login',
                    str(res_body),
                    row=int(info['case_id'] + 1),
                    column=9)
        if res_body['code'] == info['expected']:
            excel.write('login', True, row=int(info['case_id'] + 1), column=8)
        else:
            excel.write('login', False, row=int(info['case_id'] + 1), column=8)
    def test_login(self, case_info, driver):
        login_page = PageLogin(driver)

        if 1 <= case_info['case_id'] <= 11:
            after_login = login_page.login_fail(
                eval(case_info['data'])['mobile_phone'],
                eval(case_info['data'])['pwd'])
        elif case_info['case_id'] == 12:
            after_login = login_page.login_success(
                eval(case_info['data'])['mobile_phone'],
                eval(case_info['data'])['pwd'])

        try:
            if 1 <= case_info['case_id'] <= 7:
                assert after_login.get_msg_incorrect_phone(
                ) == case_info['expected_resp']
            elif case_info['case_id'] == 8:
                assert after_login.get_msg_none_phone(
                ) == case_info['expected_resp']
            elif case_info['case_id'] in (9, 10):
                assert after_login.get_msg_error(
                ) == case_info['expected_resp']
            elif case_info['case_id'] == 11:
                assert after_login.get_msg_none_pwd(
                ) == case_info['expected_resp']
            elif case_info['case_id'] == 12:
                assert after_login.get_msg_account(
                ) == case_info['expected_resp']
            Handler.success_case('login', len(case_info), case_info['case_id'],
                                 __name__)
        except:
            Handler.fail_case('login', len(case_info), case_info['case_id'],
                              __name__)
            raise
Пример #3
0
def test_login(datas):

    if '#new_phone#' in datas["data"]:
        phone = Handler.generate_new_phone()
        datas["data"] = datas["data"].replace('#new_phone#', phone)

    if '*phone*' in datas['data']:
        new_phone = Handler.generate_new_phone()
        datas['data'] = datas['data'].replace('*phone*', new_phone)

    datas = json.dumps(datas)
    # 替换
    datas = Handler.replace_data(datas)
    # 转化成字典
    datas = json.loads(datas)

    resp = requests.request(method=datas['method'],
                            url=Handler.env_config["envurl"] + datas['path'],
                            headers=json.loads(datas['headers']),
                            json=json.loads(datas['data']))
    try:
        assert resp.json()['msg'] == datas['expected']
    except AssertionError as e:
        logger.info("msg不正确,{}测试失败{}".format(datas["title"], e))
        raise e

# 设置Handler对应的属性。
    if datas['extractor']:
        extrators = json.loads(datas['extractor'])
        for prop, jsonpath_exp in extrators.items():
            # value = 'token'
            value = jsonpath(resp.json(), jsonpath_exp)[0]
            # setastr(Handler, "loan_token", "yfowepfpwefwoefowf"
            setattr(Handler, prop, value)
Пример #4
0
def test_condition(info):
    if "#register_name#" in info['url']:
        register_name = Handler.user_config['user']['register_name']
        info['url'] = info['url'].replace('#register_name#', register_name)
    if "#unregister_name#" in info['url']:
        unregister_name = Handler.generate_random_str(6)
        info['url'] = info['url'].replace('#unregister_name#', unregister_name)
    if "#register_email#" in info['url']:
        sql = 'select email from auth_user limit 1'
        result = Handler.db.query(sql)['email']
        info['url'] = info['url'].replace('#register_email#', result)
    if "#unregister_email#" in info['url']:
        unregister_email = Handler.generate_random_str(9)
        unregister_email = unregister_email + "@qq.com"
        info['url'] = info['url'].replace('#unregister_email#', unregister_email)
    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'])
    res_body = json.dumps(res.text)
    #assert json.loads(res.text)['count'] == info['expected']
    try:
        assert json.loads(res.text)['count'] == info['expected']
    except AssertionError as e:
        Handler.logger.error("用例失败:{}".format(e))
        raise e
    finally:
        # excel = ExcelHandler(excel_file)
        excel = Handler.excel
        excel.write('condition', str(res.text), row=int(info['case_id'] + 1), column=8)
        if json.loads(res.text)['count'] == info['expected']:
            excel.write('condition', True, row=int(info['case_id'] + 1), column=7)
        else:
            excel.write('condition', False, row=int(info['case_id'] + 1), column=7)
 def setUp(self):
     # 每条用例执行之前,向投资账户预充值 10000
     Handler.recharge_investor(10000)
     # 每条用例执行之前,先获取投资账户投资前的余额
     self.leaveamount_before = MysqlHandlerMid().query(self.sql_leaveamount)['leave_amount']
     # 每条用例执行之前,先查询投资账户投资/流水/回款记录条数
     self.invest_count_before = MysqlHandlerMid().query(self.sql_count_invest)['count(id)']
     self.financelog_count_before = MysqlHandlerMid().query(self.sql_count_financelog)['count(id)']
     self.repayment_count_before = MysqlHandlerMid().query(self.sql_count_repayment)['count(r.id)']
     # 每条用例执行之前,先进行加标
     Handler.add()
Пример #6
0
    def test_invest(self, case_info, login):
        actual = login.into_invest_list().invest(
            eval(case_info['data'])['amount']).get_msg_success_invest()

        try:
            assert actual == eval(case_info['expected_resp'])
            Handler.success_case('invest', len(case_info),
                                 case_info['case_id'], __name__)
        except:
            Handler.fail_case('invest', len(case_info), case_info['case_id'],
                              __name__)
            raise
Пример #7
0
    def test_recharge(self, data_item):
        logger.info('正在执行{}用例第{}条>>>'.format(data_item["interface"],
                                             data_item["case_id"]))
        data_item["headers"] = even_data.data_replace(data_item["headers"])

        data_item["data"] = even_data.data_replace(data_item["data"])
        db = Handler.db_class()
        sql = "select leave_amount from futureloan.member where id={};".format(
            even_data.member_id)

        # 访问接口前获取充值前的余额
        before_amount = db.query(sql)["leave_amount"]
        db.close()
        # print(type(before_amount),before_amount)

        # print(type(amount),amount)
        exp_res = json.loads(data_item['expected_result'])
        act_res = Response(url_header + data_item["url"],
                           data_item["method"]).get_response(
                               headers=json.loads(data_item["headers"]),
                               json=json.loads(data_item["data"]))
        # print(act_res)
        try:
            for k, v in exp_res.items():
                self.assertTrue(act_res[k] == v)
            if act_res['code'] == 0:
                logger.info('充值成功!')
                amount = json.loads(data_item['data'])["amount"]
                # 校验响应中的数据和期望数据一致
                self.assertTrue(
                    Decimal(str(jsonpath(act_res, "$..leave_amount")[0])) ==
                    Decimal(str(amount)) + before_amount)
                logger.info('响应数据中余额与期望金额一致。')
                db = Handler.db_class()
                leave_amount = db.query(sql)["leave_amount"]
                db.close()
                # print(type(leave_amount),leave_amount)
                # 校验数据库的数据与期望一致
                self.assertTrue(leave_amount == Decimal(str(amount)) +
                                before_amount)
                logger.info('数据库会员{}余额与期望金额一致'.format(even_data.member_id))
            logger.info('用例{}通过。'.format(data_item["case_id"]))
            # 测试结果回写到excel
            Handler.excel.data_write('recharge', data_item["case_id"] + 1, 9,
                                     "pass")
        except AssertionError as e:
            logger.error('用例{}不通过!!'.format(data_item["case_id"]))
            Handler.excel.data_write('recharge', data_item["case_id"] + 1, 9,
                                     "fail")
            raise e
    def test_add(self, case_info):
        method = case_info['method']
        url = host + case_info['url']

        headers = Handler().replace_data(case_info['headers'])
        headers = eval(headers)

        data = Handler().replace_data(case_info['data'])
        data = eval(data)

        expected_resp = eval(case_info['expected_resp'])
        actual_resp = visit_api(method, url, headers, json=data)

        bid_after = MysqlHandlerMid().query(self.sql)['count(*)']

        try:
            for k, v in expected_resp.items():
                self.assertEqual(actual_resp[k], v)

            if actual_resp['code'] == 0:
                self.assertTrue(bid_after == self.bid_before + 1)

                bid_info = MysqlHandlerMid().query(
                    'select * from futureloan.loan where member_id = {} order by create_time desc;'
                    .format(Handler.borrower_id))
                self.assertTrue(bid_info['member_id'], Handler.borrower_id)
                self.assertEqual(bid_info['title'], data['title'])
                self.assertEqual(bid_info['amount'],
                                 Decimal(str(data['amount'])))
                self.assertEqual(bid_info['loan_rate'],
                                 Decimal(str(data['loan_rate'])))
                self.assertEqual(bid_info['loan_term'], data['loan_term'])
                self.assertEqual(bid_info['loan_date_type'],
                                 data['loan_date_type'])
                # self.assertEqual(bid_info['bidding_days'], data['bidding_days'])
                self.assertTrue(
                    int(str(datetime.now()).split(':')[1]) -
                    int(str(bid_info['create_time']).split(':')[1]) <= 1)
                self.assertFalse(bid_info['bidding_start_time'])
                self.assertFalse(bid_info['full_time'])
                self.assertTrue(bid_info['status'] == 1)
            else:
                self.assertEqual(self.bid_before, bid_after)
            excel.write_data('add', case_info['case_id'] + 1, 8, '通过')
            logger.info('第 {} 条用例通过'.format(case_info['case_id']))
        except (AssertionError, KeyError) as e:
            excel.write_data('add', case_info['case_id'] + 1, 8, '不通过')
            logger.error('第 {} 条用例不通过'.format(case_info['case_id']))
            raise e
Пример #9
0
    def test_recharge(self, case_info):
        method = case_info['method']
        url = host + case_info['url']

        headers = Handler().replace_data(case_info['headers'])
        headers = eval(headers)

        data = Handler().replace_data(case_info['data'])
        data = eval(data)

        expected_resp = eval(case_info['expected_resp'])
        actual_resp = visit_api(method, url, headers, json=data)

        leaveamount_after = MysqlHandlerMid().query(self.sql)['leave_amount']

        try:
            for k, v in expected_resp.items():
                self.assertEqual(actual_resp[k], v)

            if actual_resp['code'] == 0:
                self.assertTrue(
                    self.leaveamount_before +
                    Decimal(str(data['amount'])) == leaveamount_after)
                self.assertTrue(self.leaveamount_before +
                                Decimal(str(data['amount'])) == Decimal(
                                    str(actual_resp['data']['leave_amount'])))
                query_data = MysqlHandlerMid().query(
                    'select * from futureloan.financelog where income_member_id = {} order by create_time desc;'
                    .format(Handler.investor_id))
                self.assertTrue(query_data)
                self.assertEqual(query_data['income_member_id'],
                                 Handler.investor_id)
                self.assertEqual(query_data['amount'],
                                 Decimal(str(data['amount'])))
                self.assertTrue(self.leaveamount_before +
                                Decimal(str(data['amount'])) ==
                                query_data['income_member_money'])
                self.assertTrue(query_data['status'] == 1)
                self.assertTrue(
                    int(str(datetime.now()).split(':')[1]) -
                    int(str(query_data['create_time']).split(':')[1]) <= 1)
            else:  # 异常用例,需查库验证,测试账户充值前后余额保持不变
                self.assertEqual(self.leaveamount_before, leaveamount_after)
            excel.write_data('recharge', case_info['case_id'] + 1, 8, '通过')
            logger.info('第 {} 条用例通过'.format(case_info['case_id']))
        except (AssertionError, KeyError) as e:
            excel.write_data('recharge', case_info['case_id'] + 1, 8, '不通过')
            logger.error('第 {} 条用例不通过'.format(case_info['case_id']))
            raise e
Пример #10
0
def add_cases(add_interface):
    headers = {"Authorization": login["token"]}
    data = {
        "name": "#case_name#",
        "interface": {
            "pid": "#project_id#",
            "iid": "#interface_id#"
        },
        "include": {
            "config": 1,
            "testcases": [1, 2]
        },
        "autor": "可优",
        "request": "请求数据"
    }
    data = str(data)
    if "#case_name#" in data:
        cases_name = Handler.generate_random_str(6)
        data = data.replace('#case_name#', cases_name)
    if "#project_id#" in data:
        project_id = add_projects['project_id']
        data = data.replace('#project_id#', project_id)
    if '#interface_id#' in data:
        interface_id = add_interface['interface_id']
        data = data.replace('#interface_id#', interface_id)
    res = requests.request(method='POST',
                           url=Handler.yaml_config['host'] + "/testcases/",
                           headers=headers,
                           json=eval(data))
    res_body = json.loads(res.text)
    project_id = jsonpath(res_body, '$..id')[0]
    return project_id
Пример #11
0
def test_withdraw(datas):

    datas = json.dumps(datas)
    # 替换
    datas = Handler.replace_data(datas)
    # 转化成字典
    datas = json.loads(datas)

    if json.loads(datas['expected'])['code'] == 1002:
        datas['data'] = datas['data'].replace(
            str(json.loads(datas['data'])['amount']),
            str(json.loads(datas['data'])['amount'] + 1))

    money_before = Decimal(0)
    if json.loads(datas['expected'])['code'] in (
            0, 1002) and 'member_id' in datas['data']:
        sql = 'select leave_amount from member where id={}'.format(
            json.loads(datas['data'])['member_id'])
        result = Handler.db_class.query(sql, one=True)
        money_before = Decimal(result['leave_amount'])
        logger.info("充值前账号金额:{}".format(money_before))

    resp = requests.request(method=datas['method'],
                            url=Handler.env_config["envurl"] + datas['path'],
                            headers=json.loads(datas['headers']),
                            json=json.loads(datas['data']))

    # 断言code是否正确
    try:
        assert resp.json()['code'] == json.loads(datas['expected'])['code']
    except AssertionError as e:
        logger.info("code不正确,{}测试失败{}".format(datas["title"], e))
        raise e

    # 接口返回值断言提现前后账户金额是否正确
    # try:
    #     if resp.json()['code'] == 0 and 'member_id' in datas['data']:
    #         assert json.loads(datas['data'])['amount'] - json.loads(datas['data'])['amount'] == resp.json()['data']['leave_amount']    # 账户提现前金额 - 提现金额= 账户提现后金额
    #         logger.info("提现前金额{} - 提现金额{} == 提现后金额{}".format(datas['extractor']['money'],datas['data']['amount'],resp.json()['data']['leave_amount']))
    # except AssertionError as err:
    #     logger.info("提现前后账户金额不正确,{}测试失败{}".format(datas["title"],err))
    #     raise err

    # 数据库查询断言提现前后账户金额是否正确
    if resp.json()['code'] == 0 and 'member_id' in datas['data']:
        sql = 'select leave_amount from member where id={}'.format(
            json.loads(datas['data'])['member_id'])
        result = Handler.db_class.query(sql, one=True)
        money_after = result['leave_amount']
        money = Decimal(json.loads(datas['data'])['amount'])
        assert money_before - money == money_after
        logger.info("提现前账号金额{},提现金额{},提现后账户总金额{}".format(
            money_before, money, money_after))

    # 设置Handler对应的属性。
    if datas['extractor']:
        extrators = json.loads(datas['extractor'])
        for prop, jsonpath_exp in extrators.items():
            value = jsonpath(resp.json(), jsonpath_exp)[0]
            setattr(Handler, prop, value)
Пример #12
0
def test_add_projects(info, login):
    if "#token#" in info['headers']:
        info['headers'] = info['headers'].replace('#token#', login['token'])
    if "#project_name#" in info['json']:
        project_name = Handler.generate_random_str(6)
        info['json'] = info['json'].replace('#project_name#', project_name)
    if "*project_name*" in info['json']:
        project_name = Handler.user_config['user']['project_name']
        info['json'] = info['json'].replace('*project_name*', project_name)
    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'],
                           headers=json.loads(info['headers']),
                           json=json.loads(info['json']))
    #assert res.status_code == info['expected']

    try:
        assert res.status_code == info['expected']
    except AssertionError as e:
        Handler.logger.error("用例失败:{}".format(e))
        raise e
    finally:
        # excel = ExcelHandler(excel_file)
        excel = Handler.excel
        excel.write('add',
                    str(res.text),
                    row=int(info['case_id'] + 1),
                    column=9)
        if res.status_code == info['expected']:
            excel.write('add', True, row=int(info['case_id'] + 1), column=8)
        else:
            excel.write('add', False, row=int(info['case_id'] + 1), column=8)
Пример #13
0
def test_login(info):
    if "*username*" in info['json']:
        username = Handler.generate_random_str(6)
        info['json'] = info['json'].replace('*username*', username)
    if "#username#" in info['json']:
        username = Handler.user_config['user']['login_user']
        info['json'] = info['json'].replace('#username#', username)
    if "#pwd#" in info['json']:
        pwd = Handler.user_config['user']['password']
        info['json'] = info['json'].replace('#pwd#', pwd)
    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'],
                           json=json.loads(info['json']))
    #assert res.status_code == info['expected']

    try:
        assert res.status_code == info['expected']
    except AssertionError as e:
        Handler.logger.error("用例失败:{}".format(e))
        raise e
    finally:
        # excel = ExcelHandler(excel_file)
        excel = Handler.excel
        excel.write('login',
                    str(res.text),
                    row=int(info['case_id'] + 1),
                    column=8)
        if res.status_code == info['expected']:
            excel.write('login', True, row=int(info['case_id'] + 1), column=7)
        else:
            excel.write('login', False, row=int(info['case_id'] + 1), column=7)
Пример #14
0
    def random_phone(self):
        """随机生成一个动态的手机号码。
        注册成功的用例当中,需要一个没有被注册过的手机号。需要查询数据库。
        """
        # 第一步,随机生成手机号
        # 前面 2 位  13
        import random
        while True:
            phone = "13"
            for i in range(9):
                num = random.randint(0, 9)
                phone += str(num)
            print(phone)

            # 查询数据库,如果数据库当中有这个手机号,再次生成,while,
            # from middleware.handler import MysqlHandlerMid
            # db = MysqlHandlerMid()
            db = Handler.db_mysql_class()

            sql_code = "SELECT * FROM futureloan.member WHERE mobile_phone={};".format(
                phone)
            phone_record = db.query(sql_code)

            if not phone_record:
                db.close()
                return phone
            db.close()
Пример #15
0
def test_loan_list(data):
    #获取Excel中的数据,并将数据转成json格式的字符串
    data = json.dumps(data)
    #将Excel中的#str#调用方法替换
    data = Handler.replace_data(string=data)
    #再将data格式的字符串转为字典格式
    data = json.loads(data)
    headers = json.loads(data['headers'])
    expected = json.loads(data['expected'])
    json_data = json.loads(data['json'])
    reponse = requests.request(method=data['method'],
                               url=Handler.config_yaml['host'] + data['url'],
                               headers=headers,
                               json=json_data)
    result = reponse.json()
    try:
        for key, value in expected.items():
            #key=code,value=0
            assert jsonpath(result, key)[0] == value
            if data['extractor']:
                extractors = json.loads(data['extractor'])
                for handle_pro, jsonpath_value in extractors.items():
                    values = jsonpath(result, jsonpath_value)[0]
                    setattr(Handler, handle_pro, values)
            Handler.logger.info("用例执行成功,请求头为{},请求体为{},响应为{}".format(
                headers, json_data, result))
    except AssertionError as err:
        Handler.logger.error("用例执行失败{},请求头为{},请求体为{},响应为{}".format(
            err, headers, json_data, result))
        raise err
    finally:
        Handler.excel.write_excel(sheet_name='loanlist',
                                  colnum=9,
                                  row=int(data['case_id']) + 1,
                                  data=str(result))
Пример #16
0
def send_requests(datas):
    method = datas["method"]
    url = Handler.env_config["envurl"] + datas["path"]
    headers = datas["headers"]  # 将字符串转换为字典
    data = datas["body"]
    if '#new_phone#' in data:
        phone = Handler.generate_new_phone()
        data = data.replace('#new_phone#', phone)

    logger.info(data)
    resp = {}  # 接收返回数据
    res = ""
    try:
        res = requests.request(method,
                               url,
                               headers=eval(headers),
                               json=eval(data),
                               verify=False)
        resp = res.json()
        resp["StatusCode"] = str(res.status_code)  # 状态码转成str
        resp["time"] = str(res.elapsed.total_seconds())  # 接口请求时间转str
        if resp["StatusCode"] != "200":
            resp["error"] = resp["text"]
            resp["return_code"] = str(res.status_code)
        else:
            resp["error"] = ""
    except Exception as msg:
        resp["msg"] = str(msg)
        resp["text"] = res.content.decode("utf-8")  # 打印错误返回信息以文本形式输出
        resp["return_code"] = "error"
    resp["rowNum"] = datas["rowNum"]
    logger.info("resp{}".format(resp))
    return resp
Пример #17
0
def test_withdraw(datas):
    datas = json.dumps(datas)
    # 替换
    datas = Handler.replace_data(datas)
    # 转化成字典
    datas = json.loads(datas)

    resp = requests.request(method=datas['method'],
                            url=Handler.env_config["envurl"] + datas['path'],
                            headers=json.loads(datas['headers']),
                            json=json.loads(datas['data']))

    # 断言code是否正确
    try:
        assert resp.json()['code'] == datas['expected']
    except AssertionError as e:
        logger.info("code不正确,{}测试失败{}".format(datas["title"], e))
        raise e

    # 设置Handler对应的属性。
    if datas['extractor']:
        extrators = json.loads(datas['extractor'])
        for prop, jsonpath_exp in extrators.items():
            value = jsonpath(resp.json(), jsonpath_exp)[0]
            setattr(Handler, prop, value)
Пример #18
0
def test_invest(info):
    """投资接口"""
    # 保证替换成功,excel当中的 #invest_phone# 必须和属性名保持一致
    # json_data = info['json']
    # json_data = Handler.replace_data(json_data)
    # print(json_data)
    # info转化成json字符串
    all_data = json.dumps(info)
    # 替换
    info = Handler.replace_data(all_data)
    print(info)
    # 转化成字典
    info = json.loads(info)
    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'],
                           headers=json.loads(info['headers']),
                           json=json.loads(info['json']))
    print(res.json())
    assert res.json()['code'] == info['expected']

    # 设置Handler对应的属性
    if info['extractor']:
        extrators = json.loads(info['extractor'])
        for prop, jsonpath_exp in extrators.items():
            # value = 'token'
            value = jsonpath(res.json(), jsonpath_exp)[0]
            # setattr(Handler,"laon_token","sadsadsfdgt")
            setattr(Handler, prop, value)
Пример #19
0
def test_register_01(test_info):
    Handler.new_phone = Handler.generate_new_phone()
    # 字典取值
    actual_url = test_info['url']
    actual_method = test_info['method']
    actual_json = test_info['json']
    actual_headers = test_info['headers']
    expected = test_info['expected']
    # 读取 test_info['json'],
    # 如果存在 # new_phone,
    if '#new_phone#' in actual_json:
        # 生成手机号码 13789456789 generate_new_phone
        mobile_phone = Handler.generate_new_phone()
        # 替换为new_phone
        actual_json = actual_json.replace('#new_phone#', mobile_phone)
    # 通过这种方法,密码不一定知道,最好写入白名单
    if '#exist_phone#' in actual_json:
        pass
    # 传入都是字符串
    res = requests.request(method=actual_method,
                           url=Handler.yaml_config['host'] + actual_url,
                           headers=eval(actual_headers),
                           json=eval(actual_json))
    res_body = res.json()
    print(res_body)
    try:
        assert res_body['code'] == expected
    except AssertionError as e:
        Handler.logger.error("用例失败:{}".format(e))
        raise e
    finally:
        # excel = ExcelHandler(excel_file)
        excel = Handler.excel
        excel.write('register',
                    str(res_body),
                    row=int(test_info['case_id']) + 1,
                    column=9)
        if res_body['code'] == expected:
            excel.write('register',
                        'True',
                        row=int(test_info['case_id']) + 1,
                        column=8)
        else:
            excel.write('register',
                        'False',
                        row=int(test_info['case_id']) + 1,
                        column=8)
Пример #20
0
def send_mail(report_path, project_name):
    '''发送邮件'''

    with open(report_path, 'rb') as f:
        # 读取测试报告正文,作为邮件正文
        mail_body = f.read()

    now = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')

    # 获取邮箱服务地址

    hd = Handler()
    smtp_server = hd.yaml['email']['smtp_server']

    try:
        # 启动163邮箱服务
        smtp = smtplib.SMTP(smtp_server, 25)
        # 获取发件人信息
        sender = hd.yaml['email']['smtp_sender']
        # 发件人邮箱授权码
        password = hd.yaml['email']['smtp_sender_password']
        # 接收人邮箱
        receiver = hd.yaml['email']['smtp_receiver']
        # 登陆
        smtp.login(sender, password)

        msg = MIMEMultipart()
        # 编写html类型的邮件正文,MIMEtext() 用于定义邮件正文
        # 发送
        text = MIMEText(mail_body, 'html', 'utf-8')

        # 定义邮件正文标题
        text['Subject'] = Header(project_name + '接口测试报告', 'utf-8')
        msg.attach(text)

        # 发送附件
        # Header 用于定义邮件主题,主题加上时间,防止主题重复导致发送失败

        msg['Subject'] = Header('【测试用例执行结果】:' + project_name + '测试报告' + now,
                                'utf-8')
        msg_file = MIMEText(mail_body, 'html', 'utf-8')

        # 构造MIMEBase对象做为文件附件内容并附加到根容器
        msg_file['Content-Type'] = 'application/octet-stream'
        msg_file['Content-Disposition'] = 'attachment; file_name="测试报告.html"'
        msg.attach(msg_file)

        # 定义发件人
        msg['From'] = sender
        # 定义收件人
        msg['To'] = receiver

        smtp.sendmail(msg['From'], msg['To'].split(';'), msg.as_string())
        smtp.quit()
        return True
    except smtplib.SMTPException as e:
        print(str(e))
        return False
Пример #21
0
    def test_add(self, data_item):
        logger.info('正在执行{}用例第{}条>>>'.format(data_item["interface"],
                                             data_item["case_id"]))
        data_item['headers'] = even_data.data_replace(data_item['headers'])
        data_item['data'] = even_data.data_replace(data_item['data'])

        sql = "SELECT * FROM futureloan.loan WHERE member_id={};".format(
            even_data.member_id)

        # 访问接口前获取loan的记录条数
        db = Handler.db_class()
        before_loan_num = len(db.query(sql, one=False))
        db.close()
        # print(type(before_amount),before_amount)

        # print(type(amount),amount)
        exp_res = json.loads(data_item['expected_result'])
        act_res = Response(url_header + data_item["url"],
                           data_item["method"]).get_response(
                               headers=json.loads(data_item["headers"]),
                               json=json.loads(data_item["data"]))
        # print(act_res)
        try:
            for k, v in exp_res.items():
                self.assertTrue(act_res[k] == v)
            if act_res['code'] == 0:
                logger.info('项目添加成功!')
                # 访问接口后获取loan的记录条数
                db = Handler.db_class()
                after_loan_num = len(db.query(sql, one=False))
                db.close()
                # print(type(leave_amount),leave_amount)
                # 校验数据库的数据与期望一致
                self.assertTrue(after_loan_num == before_loan_num + 1)
                logger.info('数据库新增一条记录')
            logger.info('用例{}通过。'.format(data_item["case_id"]))
            # 测试结果回写到excel
            Handler.excel.data_write('add', data_item["case_id"] + 1, 9,
                                     "pass")
        except AssertionError as e:
            logger.error('用例{}不通过!!'.format(data_item["case_id"]))
            # print(act_res, exp_res)
            Handler.excel.data_write('add', data_item["case_id"] + 1, 9,
                                     "fail")
            raise e
Пример #22
0
def test_register_01(test_info):
    # actual_url = 'http://api.lemonban.com/futureloan/member/register'
    # actual_method = 'POST'
    # actual_json = {"mobile_phone":"","pwd":""}
    # actual_headers = {"X-Lemonban-Media-Type":"lemonban.v2"}
    # expected = 2
    # 元组要控制索引
    # actual_url = test_info[3]
    # actual_method = test_info[6]
    # actual_json = test_info[4]
    # actual_headers = test_info[5]
    # expected = test_info[7]
    # 字典取值
    actual_url = test_info['url']
    actual_method = test_info['method']
    actual_json = test_info['json']
    actual_headers = test_info['headers']
    expected = test_info['expected']
    # 读取 test_info['json'],
    # 如果存在 # new_phone,
    if '#new_phone#' in actual_json:
        # 生成手机号码 13789456789 generate_new_phone
        mobile_phone = Handler().generate_new_phone()
        # 替换为new_phone
        actual_json = actual_json.replace('#new_phone#', mobile_phone)
    # 通过这种方法,密码不一定知道,最好写入白名单
    if '#exist_phone#' in actual_json:
        pass
    # 传入都是字符串
    res = requests.request(method=actual_method,
                           url=Handler.yaml_config['host'] + actual_url,
                           headers=eval(actual_headers),
                           json=eval(actual_json))
    res_body = res.json()
    print(res_body)
    try:
        assert res_body['code'] == expected
    except AssertionError as e:
        Handler.logger.error("用例失败:{}".format(e))
        raise e
    finally:
        # excel = ExcelHandler(excel_file)
        excel = Handler.excel
        excel.write('register',
                    str(res_body),
                    row=int(test_info['case_id']) + 1,
                    column=9)
        if res_body['code'] == expected:
            excel.write('register',
                        'True',
                        row=int(test_info['case_id']) + 1,
                        column=8)
        else:
            excel.write('register',
                        'False',
                        row=int(test_info['case_id']) + 1,
                        column=8)
Пример #23
0
def test_register_01(info):
    if "#new_username#" in info['json']:
        username = Handler.generate_random_str(6)
        info['json'] = info['json'].replace('#new_username#', username)
    if "#old_username#" in info['json']:
        username = Handler.user_config['user']['login_user']
        info['json'] = info['json'].replace('#old_username#', username)
    if "#email#" in info['json']:
        email = Handler.generate_random_str(9)
        email = email + "@qq.com"
        info['json'] = info['json'].replace('#email#', email)
    if "*email*" in info['json']:
        sql = 'select email from auth_user limit 1'
        email = Handler.db.query(sql)['email']
        #email = email + "@qq.com"
        #info['url'] = info['url'].replace('#register_email#', result)
        info['json'] = info['json'].replace('*email*', email)

    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'],
                           json=json.loads(info['json']))
    #assert res.status_code ==info['expected']
    try:
        assert res.status_code == info['expected']
    except AssertionError as e:
        Handler.logger.error("用例失败:{}".format(e))
        raise e
    finally:
        # excel = ExcelHandler(excel_file)
        excel = Handler.excel
        excel.write('register',
                    str(res.text),
                    row=int(info['case_id'] + 1),
                    column=8)
        if res.status_code == info['expected']:
            excel.write('register',
                        True,
                        row=int(info['case_id'] + 1),
                        column=7)
        else:
            excel.write('register',
                        False,
                        row=int(info['case_id'] + 1),
                        column=7)
Пример #24
0
def test_condition(info):
    if "#register_name#" in info['url']:
        register_name = Handler.user_config['user']['register_name']
        info['url'] = info['url'].replace('#register_name#', register_name)
    if "#unregister_name#" in info['url']:
        unregister_name = Handler.generate_random_str(6)
        info['url'] = info['url'].replace('#unregister_name#', unregister_name)
    if "#register_email#" in info['url']:
        register_email = Handler.user_config['user']['register_email']
        info['url'] = info['url'].replace('#register_email#', register_email)
    if "#unregister_email#" in info['url']:
        unregister_email = Handler.generate_random_str(9)
        unregister_email = unregister_email + "@qq.com"
        info['url'] = info['url'].replace('#unregister_email#',
                                          unregister_email)
    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'])
    res_body = json.dumps(res.text)
    assert json.loads(res.text)['count'] == info['expected']
Пример #25
0
def test_register_01(info):
    if "#new_username#" in info['json']:
        username = Handler.generate_random_str(6)
        info['json'] = info['json'].replace('#new_username#', username)
    if "#old_username#" in info['json']:
        username = Handler.user_config['user']['login_user']
        info['json'] = info['json'].replace('#old_username#', username)
    if "#email#" in info['json']:
        email = Handler.generate_random_str(9)
        email = email + "@qq.com"
        info['json'] = info['json'].replace('#email#', email)
    if "*email*" in info['json']:
        email = Handler.user_config['user']['register_email']
        email = email + "@qq.com"
        info['json'] = info['json'].replace('*email*', email)
    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'],
                           json=json.loads(info['json']))
    assert res.status_code == info['expected']
    def test_audit(self, case_info):
        method = case_info['method']
        url = host + case_info['url']

        headers = Handler().replace_data(case_info['headers'])
        headers = eval(headers)

        data = Handler().replace_data(case_info['data'])
        data = eval(data)

        sql = 'select `status` from futureloan.loan where id = {};'.format(
            data['loan_id'])

        if '*' not in case_info['title']:
            bid_info_before = MysqlHandlerMid().query(sql)

        expected_resp = eval(case_info['expected_resp'])
        actual_resp = visit_api(method, url, headers, json=data)

        try:
            for k, v in expected_resp.items():
                self.assertEqual(actual_resp[k], v)

            if actual_resp['code'] == 0:
                bid_info = MysqlHandlerMid().query(sql)
                if data['approved_or_not'] is True:
                    self.assertTrue(bid_info['status'] == 2)
                elif data['approved_or_not'] is False:
                    self.assertTrue(bid_info['status'] == 5)
            else:
                if case_info['case_id'] in (5, 6, 7, 8, 9, 10):
                    bid_info_after = MysqlHandlerMid().query(sql)
                    self.assertEqual(bid_info_after['status'],
                                     bid_info_before['status'])
            excel.write_data('audit', case_info['case_id'] + 1, 8, '通过')
            logger.info('第{}条用例通过'.format(case_info['case_id']))
        except (AssertionError, KeyError) as e:
            excel.write_data('audit', case_info['case_id'] + 1, 8, '不通过')
            logger.error('第{}条用例不通过'.format(case_info['case_id']))
            raise e
Пример #27
0
    def test_register(self, case_info):
        method = case_info['method']
        url = host + case_info['url']
        headers = eval(case_info['headers'])

        data = Handler().replace_data(case_info['data'])
        data = eval(data)

        expected_resp = eval(case_info['expected_resp'])
        actual_resp = visit_api(method, url, headers, json=data)

        try:
            for k, v in expected_resp.items():
                self.assertEqual(actual_resp[k], v)
            if actual_resp['code'] == 0:
                # 使用封装默认的 fetchall 查询,查询到则结果为列表套字典,查询不到则结果为空元组
                query_normal = MysqlHandlerMid().query(
                    'select * from futureloan.member where mobile_phone = "{}";'
                    .format(data['mobile_phone']), False)
                self.assertTrue(
                    query_normal)  # 此条断言通过表示:查询到了手机号为 XXX 的记录,但是否仅有一条不能确定
                self.assertTrue(
                    len(query_normal) == 1)  # 通过列表长度为 1,确认手机号为 XXX 的记录仅有一条
                self.assertTrue(query_normal[0]['leave_amount'] == 0)
                self.assertTrue(
                    int(str(datetime.now()).split(':')[1]) -
                    int(str(query_normal[0]['reg_time']).split(':')[1]) <=
                    1)  # 注册时间验证
                if '*' in case_info['title']:  # 用例 3 额外标记,进行不同断言
                    self.assertTrue(
                        query_normal[0]['type'] == 1)  # 不传 type,是否为普通会员
                    self.assertTrue(query_normal[0]['reg_name'] ==
                                    '小柠檬')  # 不传 reg_name,是否注册名为小柠檬
                else:
                    self.assertEqual(query_normal[0]['type'],
                                     data['type'])  # 用例 1、2
                    self.assertEqual(query_normal[0]['reg_name'],
                                     data['reg_name'])  # 用例 1、2
            else:  # 异常用例
                if '$' not in case_info[
                        'title']:  # 除重复注册、手机号为空外的异常用例,需查库验证会不会异常插入到数据库
                    query_exceptional = MysqlHandlerMid().query(
                        'SELECT * from futureloan.member WHERE mobile_phone = "{}";'
                        .format(data['mobile_phone']), False)
                    self.assertFalse(query_exceptional)
            excel.write_data('register', case_info['case_id'] + 1, 8, '通过')
            logger.info('第 {} 条用例通过'.format(case_info['case_id']))
        # 添加 KeyError 异常处理:当接口返回缺少应有字段,也代表用例不能通过
        except (AssertionError, KeyError) as e:
            excel.write_data('register', case_info['case_id'] + 1, 8, '不通过')
            logger.error('第 {} 条用例不通过'.format(case_info['case_id']))
            raise e
Пример #28
0
 def get_random_phone():
     while True:
         phone = '1' + random.choice(['3', '8'])
         for i in range(0, 9):
             phone += str(random.randint(0, 9))
         db = Handler.db_class()
         sql = "SELECT * FROM futureloan.member WHERE mobile_phone={};".format(
             phone)
         sql_res = db.query(sql)
         if not sql_res:
             db.close()
             return phone
         db.close()
Пример #29
0
def add_projects(login):
    headers = {"Authorization":login["token"]}
    data = {"name":"#project_name#","leader":"yuze","tester":"zc","programmer":"keyou","publish_app":"huawei","desc":"desc"}
    data = str(data)
    if "#project_name#" in data:
        project_name = Handler.generate_random_str(6)
        data = data.replace('#project_name#',project_name)
    res = requests.request(method='POST',
                           url=Handler.yaml_config['host'] + "/projects/",
                           headers=headers,
                           json=eval(data))
    res_body = json.loads(res.text)
    project_id = jsonpath(res_body,'$..id')[0]
    return {"project_id":project_id}
Пример #30
0
def test_login(info):
    if "*username*" in info['json']:
        username = Handler.generate_random_str(6)
        info['json'] = info['json'].replace('*username*', username)
    if "#username#" in info['json']:
        username = Handler.user_config['user']['login_user']
        info['json'] = info['json'].replace('#username#', username)
    if "#pwd#" in info['json']:
        pwd = Handler.user_config['user']['password']
        info['json'] = info['json'].replace('#pwd#', pwd)
    res = requests.request(method=info['method'],
                           url=Handler.yaml_config['host'] + info['url'],
                           json=json.loads(info['json']))
    assert res.status_code == info['expected']