Ejemplo n.º 1
0
 def test_loan_add(self, item):
     rep = replace_data(TestAudit, item["params"])
     print(rep)
     params = eval(rep)
     expected = eval(item["expected"])
     url = conf.get("api", "baseUrl") + item["url"]
     headers = eval(conf.get("api", "headers"))
     headers["Authorization"] = self.token_result
     response = requests.patch(url=url, json=params, headers=headers)
     res = response.json()
     print("预期结果为{}".format(expected))
     print("实际结果为{}".format(res))
     try:
         self.assertEqual(res["code"], expected["code"])
         self.assertEqual(res["msg"], expected["msg"])
         # if item["check_sql"]:
         #     loan_id = jsonpath.jsonpath(res, "$..id")[0]
         #     sql = db.find_data(item["check_sql"].format(loan_id))
         #     self.assertTrue(sql)
         if item["check_sql"]:
             sql = db.find_data(item["check_sql"].format(self.loan_id))[0]
             self.assertEqual(2, sql["status"])
     except AssertionError as e:
         log.error("{}用例执行失败".format(item["title"]))
         sh.write_excel(item["case_id"] + 1, 8, "执行不通过")
         raise e
     else:
         log.info("{}用例执行通过".format(item["title"]))
         sh.write_excel(item["case_id"] + 1, 8, "执行通过")
Ejemplo n.º 2
0
    def testLogin(self, case):
        logger.info("*****************开始执行登录接口用例**************************")
        # 替换需要替换的未注册的手机号
        case = replace_case_with_re(case)
        # 替换需要替换的--系统中已存在的手机号--从配置文件读取
        if case["request_data"].find("*phone*") != -1:
            phone = conf.get("user", "user")
            case["request_data"] = case["request_data"].replace(
                "*phone*", phone)
            # 替换需要替换的--系统中已存在的手机号--从配置文件读取
        if case["request_data"].find("*pwd*") != -1:
            pwd = conf.get("user", "pwd")
            case["request_data"] = case["request_data"].replace("*pwd*", pwd)

        logger.info("当前测试用例为:\n {}".format(case))
        # 发起请求
        res = self.hr.send_requests(case["method"], case["url"],
                                    case["request_data"])

        if case["expected"]:
            try:
                # 实际结果
                actual = res.json()
                logger.info("实际结果为:{}".format(actual))
                expected = eval(case["expected"])
                logger.info("预期结果为:{}".format(case["expected"]))
                assert actual["code"] == expected["code"]
                assert actual["msg"] == expected["msg"]
            except AssertionError:
                logger.exception("断言失败")
                raise
            except Exception:
                logger.exception("除断言以外的报错")
                raise
Ejemplo n.º 3
0
 def setUpClass(cls):
     #管理员账户登录并新增项目
     url = conf.get("api", "baseUrl") + "/member/login"
     params = {
         "mobile_phone": conf.get("testdata", "admin_mobile"),
         "pwd": conf.get("testdata", "admin_pwd")
     }
     headers = eval(conf.get("api", "headers"))
     response = requests.post(url=url, json=params, headers=headers)
     res = response.text
     token = jsonpath.jsonpath(eval(res), "$..token")[0]
     cls.token_result = "Bearer" + " " + token
     cls.invest_member_id = jsonpath.jsonpath(eval(res), "$..id")[0]
     add_loan_url = conf.get("api", "baseUrl") + "/loan/add"
     params = {
         "member_id": cls.invest_member_id,
         "title": "按月借贷项目",
         "amount": 1100000,
         "loan_rate": 16.5,
         "loan_term": 10,
         "loan_date_type": 1,
         "bidding_days": 8
     }
     headers["Authorization"] = cls.token_result
     response = requests.post(url=add_loan_url,
                              json=params,
                              headers=headers)
     cls.loan_id = jsonpath.jsonpath(response.json(), "$..id")[0]
     cls.pass_loan_id = cls.loan_id
Ejemplo n.º 4
0
class TestLogin(unittest.TestCase):
    excel = ExcelHandle(os.path.join(DATA_DIR, 'apicases.xlsx'), 'login')
    cases = excel.read_data()
    base_url = conf.get('env', 'base_url')
    headers = eval(conf.get('env', 'headers'))

    @list_data(cases)
    def test_login(self, item):
        url = self.base_url + item['url']
        item['data'] = replace_data(item['data'], TestLogin)
        params = eval(item['data'])
        method = item['method'].lower()
        expected = eval(item['expected'])
        response = requests.request(method,
                                    url,
                                    json=params,
                                    headers=self.headers)
        res = response.json()
        try:
            # self.assertEqual(expected['code'], res['code'])
            # self.assertEqual(expected['msg'], res['msg'])
            self.assertDictIn(expected, res)
        except AssertionError as e:
            my_log.error('用例---【{}】---执行失败'.format(item['title']))
            # my_log.exception(e)
            raise e
        else:
            my_log.info('用例---【{}】---执行通过'.format(item['title']))

    def assertDictIn(self, expected, res):
        for k, v in expected.items():
            if res.get(k) == v:
                pass
            else:
                raise AssertionError('{}[k,v] not in{}'.format(expected, res))
Ejemplo n.º 5
0
def login():
        #第二步登录并充值
        login_url=conf.get("api","baseUrl")+"/member/login"
        login_params={
            "mobile_phone":conf.get("testdata","mobile_phone"),
            "pwd":conf.get("testdata","pwd")
        }
        response=requests.post(url=login_url,json=login_params,headers=headers)
        if response.json()["code"]==0:
            print("登录初始成功")
            token=jsonpath.jsonpath(response.json(),"$..token")[0]
            member_id=jsonpath.jsonpath(response.json(),"$..id")[0]
            #充值500000
            recharge_url=conf.get("api","baseUrl")+"/member/recharge"
            headers["Authorization"]=token
            recharge_params={
                "member_id":member_id,
                "amount":500000
            }
            response=requests.post(url=recharge_url,params=recharge_params,headers=headers)
            if response.json()["code"]==0:
                print("==================充值500000成功==================")
                sql = "SELECT * FROM futureloan.member WHERE id={}"
                leave_amount = db.find_data(sql.format(member_id))[0]["leave_amount"]
                print("用户当前余额为{}".format(leave_amount))
            else:
                raise ValueError("普通用户初始化充值失败")
        else:
            raise ValueError("普通账号初始化登录异常")
Ejemplo n.º 6
0
    def test_register(self, item):
        if "#mobile_phone#" in item["params"]:
            self.mobile_id = self.random_phone()
            item["params"] = item["params"].replace("#mobile_phone#",
                                                    str(self.mobile_id))
        params = eval(item["params"])
        url = conf.get("api", "baseUrl") + item["url"]
        expected = eval(item["expected"])
        headers = eval(conf.get("api", "headers"))
        resp = requests.post(url=url, json=params, headers=headers)
        res1 = json.loads(resp.text)
        print(type(res1))
        print("预期结果为{}".format(expected))
        print("实际结果为{}".format(res1))
        try:
            self.assertEqual(res1["code"], expected["code"])
            self.assertEqual(res1["msg"], expected["msg"])
        except AssertionError as e:
            log.error("{}用例不通过".format(item["title"]))
            sh.write_excel(item["case_id"] + 1, 8, "执行不通过")

            raise e
        else:
            log.info("{}用例通过".format(item["title"]))
            sh.write_excel(item["case_id"] + 1, 8, "执行通过")
Ejemplo n.º 7
0
def create_logger():
    """创建日志收集器"""
    # 1、创建一个收集器
    log = logging.getLogger("lemon")
    log.setLevel(conf.get("logging", 'level'))  # 设置收集日志的等级----------
    # log.setLevel("DEBUG")

    # 2、创建一个输出到文件的输出渠道(按时间轮转),
    fh = TimedRotatingFileHandler(file_path,
                                  when='d',
                                  interval=1,
                                  backupCount=7,
                                  encoding="utf-8")
    fh.setLevel(conf.get("logging", 'fh_level'))  # 设置输出等级----------
    # fh.setLevel("DEBUG")
    log.addHandler(fh)  # 添加到收集器中

    # 3、创建一个输出到控制台的输出渠道
    sh = logging.StreamHandler()
    sh.setLevel(conf.get('logging', 'sh_level'))  # 设置输出等级----------
    # sh.setLevel("DEBUG")
    log.addHandler(sh)  # 添加到收集器中

    # 4、设置日志输出格式
    formatter = "%(asctime)s - [%(filename)s-->line:%(lineno)d] - %(levelname)s: %(message)s"
    mate = logging.Formatter(formatter)

    fh.setFormatter(mate)
    sh.setFormatter(mate)

    return log
Ejemplo n.º 8
0
class TestRegister(unittest.TestCase):
    excel = ExcelHandle(os.path.join(DATA_DIR, 'apicases.xlsx'), 'register')
    cases = excel.read_data()
    base_url = conf.get('env', 'base_url')
    print(base_url)
    headers = eval(conf.get('env', 'headers'))
    db = HandleDB()

    @list_data(cases)
    def test_register(self, item):
        # 第一步准备用例数据
        # 接口地址
        url = self.base_url + item['url']
        # phone = self.random_mobile()
        # item['data'] = item['data'].replace('#mobile#', phone)
        #
        # 接口请求参数
        # 判斷是否有手机号需要替换
        if '#mobile#' in item['data']:
            # phone = self.random_mobile()
            setattr(TestRegister,'mobile',self.random_mobile())
        item['data'] = replace_data( item['data'], TestRegister)
        params = eval(item['data'])
        # 请求头
        # 获取请求方法并转换为小写
        method = item['method'].lower()
        # 用例预期结果
        expected = eval(item['expected'])
        # 第二步请求接口,获取实际结果
        # requests.post(url=url,json=params,headers=self.headers)
        response = requests.request(method, url, json=params, headers=self.headers)
        res = response.json()
        # 查询该数据库中该手机号对应的账户数量
        sql = 'select * FROM futureloan.member WHERE mobile_phone="{}"'.format(params.get('mobile_phone', ""))
        count = self.db.find_count(sql)
        # 第三步 断言
        print('预期结果', expected)
        print('实际结果', res)
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            if item['check_sql']:
                print('数据库中查询的数量为:', count)
                self.assertEqual(1, count)

        except AssertionError as e:
            my_log.error('用例---【{}】---执行失败'.format(item['title']))
            my_log.exception(e)
            # my_log.error(e)
            # 回写结果到Excel
            raise e
        else:
            my_log.info('用例---【{}】---执行通过'.format(item['title']))

    def random_mobile(self):
        """随机生成手机号"""

        phone = str(random.randint(18800000000, 18899999999))
        return phone
Ejemplo n.º 9
0
 def __init__(self):
     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
                                )
Ejemplo n.º 10
0
 def setUpClass(cls):
     url = conf.get("api", "baseUrl") + "/member/login"
     params = {
         "mobile_phone": conf.get("testdata", "mobile_phone"),
         "pwd": conf.get("testdata", "pwd")
     }
     headers = eval(conf.get("api", "headers"))
     response = requests.post(url=url, json=params, headers=headers)
     res = response.text
     token = jsonpath.jsonpath(eval(res), "$..token")[0]
     cls.token_result = "Bearer" + " " + token
     cls.member_id = jsonpath.jsonpath(eval(res), "$..id")[0]
Ejemplo n.º 11
0
 def setUpClass(cls) -> None:
     #1、准备登录数据
     url=conf.get("env","base_url")+"/auth/login"
     params={"username":conf.get("test_data","username"),
             "password":conf.get("test_data","password")}
     #2、请求登录接口
     response=requests.post(url=url,json=params)
     res=response.json()
     #3、提取token,放到请求头中,给后面的用例使用
     token=jsonpath(res,"$..token")[0]
     headers={"token":""}
     headers['token']=token
     cls.token=headers
Ejemplo n.º 12
0
 def setUpClass(cls) -> None:
     url = conf.get('env', 'base_url') + '/member/login'
     params = {
         'mobile_phone': conf.get('test_data', '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()
     token = jsonpath(res, '$..token')[0]
     headers['Authorization'] = 'Bearer ' + token
     cls.headers = headers
     cls.member_id = jsonpath(res, '$..id')
Ejemplo n.º 13
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', 'admin_pwd')
     }
     headers = eval(conf.get('env', 'headers'))
     response = requests.post(url=url, json=params, headers=headers)
     res = response.json()
     admin_token = jsonpath(res, '$..token')[0]
     headers['Authorization'] = 'Bearer ' + admin_token
     cls.admin_headers = headers
     # 提取用户ID
     cls.admin_member_id = jsonpath(res, '$..id')[0]
Ejemplo n.º 14
0
    def test_audit(self, item):
        url = conf.get('env', 'base_url') + item['url']
        item['data'] = replace_data(item['data'], TestAudit)
        params = eval(item['data'])
        method = item['method']
        expected = eval(item['expected'])
        response = requests.request(method=method,
                                    url=url,
                                    json=params,
                                    headers=self.admin_headers)
        res = response.json()
        # 判断是否审核通过的用例,且审核成功,如果是则保存项目ID为审核通过的项目ID
        # if res['msg']=='OK' and params['approved_or_not']=='True':
        if res['msg'] == 'OK' and item['title'] == '审核通过':
            TestAudit.pass_loan_id = params['loan_id']
        # 第三步:断言
        print("预期结果:", expected)
        print("实际结果:", res)
        try:
            # 断言code和msg字段是否一致
            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:
            # 记录日志
            my_log.error("用例--【{}】---执行失败".format(item['title']))
            my_log.exception(e)
            raise e
        else:
            my_log.info("用例--【{}】---执行通过".format(item['title']))
Ejemplo n.º 15
0
    def test_add(self, item):
        # 准备数据
        url = conf.get('env', 'base_url') + item['url']
        item['data'] = replace_data(item['data'], TestAdd)
        params = eval(item['data'])
        expected = eval(item['expected'])
        method = item['method']
        sql = 'select * from futureloan.loan where member_id={}'.format(
            self.member_id)
        start_count = self.db.find_count(sql)
        print('调用之前项目个数', start_count)
        response = requests.request(method=method,
                                    url=url,
                                    json=params,
                                    headers=self.headers)
        res = response.json()
        end_count = self.db.find_count(sql)
        print('调用之后项目个数', end_count)
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            #根据添加项目是否成功,来对数据库进行分别校验
            if res['msg'] == 'OK':
                self.assertEqual(end_count - start_count, 1)
            else:
                self.assertEqual(end_count - start_count, 0)

        except AssertionError as e:
            my_log.error('用例--【{}】---执行失败'.format(item['title']))
            my_log.exception(e)
            raise e
        else:
            my_log.info('用例--【{}】---执行成功'.format(item['title']))
Ejemplo n.º 16
0
    def test_login(self, item):
        # 1. 准备测试数据
        url = conf.get("env", "base_url") + item["url"]
        method = item["method"]
        params = eval(item["data"])
        expected = eval(item["expected"])

        # 2. 请求接口,获取实际结果
        res = requests.request(method, url, json=params).json()

        print("-------当前执行的用例是:{}----------".format(item["title"]))
        print("请求参数:", params)
        print("预期结果:", expected)
        print("实际结果:", res)
        print("===============执行结束===============\n")

        # 3. 断言

        try:
            assert_dict_item(expected, res)
        except AssertionError as e:
            log.exception(e)
            log.error("--测试用例:{}--执行失败".format(item["title"]))
            raise e
        else:
            log.info("--测试用例:{}--执行通过".format(item["title"]))
Ejemplo n.º 17
0
    def __init__(self):
        try:
            self.conn = pymysql.connect(host=conf.get('mysql', 'host'),
                                        user=conf.get('mysql', 'user'),
                                        password=conf.get('mysql', 'password'),
                                        database=conf.get('mysql', 'db'),
                                        port=conf.getint('mysql', 'port'),
                                        charset='utf8',
                                        cursorclass=pymysql.cursors.DictCursor)

            # 建立游标
            self.cur = self.conn.cursor()

        except:
            print("连接数据库失败!")
            raise
Ejemplo n.º 18
0
 def __deal_url(self, url):
     if url.startswith("http://") or url.startswith("https://"):
         self.url = url
     else:
         # 从配置文件读取url地址,excel中以/结尾
         base_url = conf.get("server", "baseurl")
         self.url = base_url + url
     logger.info("请求url为:\n {}".format(self.url))
Ejemplo n.º 19
0
    def test_withdraw(self, item):
        # 第一步准备数据
        url = conf.get('env', 'base_url') + item['url']
        # *******************************动态替换参数***************************************
        # 动态处理需要替换的参数
        # item['data'] = item['data'].replace('#menber_id#', str(self.member_id))
        # print(item['data'])
        item['data'] = replace_data(item['data'], TestWithdraw)
        params = eval(item['data'])
        # *******************************************************************************

        expected = eval(item['expected'])
        method = item['method'].lower()

        # &&&&&&&&&&&&&&取现接口之前查询用户的余额&&&&&&&&&&&&&&&&&&&&

        sql = 'select leave_amount FROM futureloan.member WHERE mobile_phone="{}"'.format(
            conf.get('test_data', 'mobile'))
        start_amount = self.db.find_one(sql)[0]
        print('用例执行前的余额', start_amount)
        # 第二步发送请求,获取接口的实际返回结果
        response = requests.request(method=method,
                                    url=url,
                                    json=params,
                                    headers=self.headers)
        res = response.json()
        print("预期结果:", expected)
        print("实际结果:", res)
        # &&&&&&&&&&&&&&取现之后查询用户的余额&&&&&&&&&&&&&&
        end_amount = self.db.find_one(sql)[0]
        print('用例执行后的余额', end_amount)

        # 第三步断言
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            if item['check_sql']:
                self.assertEqual(params['amount'],
                                 float(start_amount - end_amount))
        except AssertionError as e:
            my_log.error('用例--【{}】--失败'.format('title'))
            my_log.exception(e)
            raise e
        else:
            my_log.info('用例--【{}】--成功'.format('title'))
Ejemplo n.º 20
0
    def test_recharge(self, item):
        # 第一步准备数据
        url = conf.get('env', 'base_url') + item['url']
        # *******************************动态替换参数***************************************
        # 动态处理需要替换的参数
        # item['data'] = item['data'].replace('#member_id#', str(self.member_id))
        # print(item['data'])
        item['data'] = replace_data(item['data'], TestRecharge)
        params = eval(item['data'])
        # *******************************************************************************

        expected = eval(item['expected'])
        method = item['method'].lower()
        # 第二步发送请求,获取接口的实际返回结果
        # &&&&&&&&&&&&&&请求接口之前查询用户的余额&&&&&&&&&&&&&&&&&&&&

        sql = 'select leave_amount FROM futureloan.member WHERE mobile_phone="{}"'.format(
            conf.get('test_data', 'mobile'))
        start_amount = self.db.find_one(sql)[0]
        print('用例执行前的余额', start_amount)
        response = requests.request(method=method, url=url, json=params, headers=self.headers)
        res = response.json()
        print('预期结果', expected)
        print('实际结果', res)
        # &&&&&&&&&&&&&&请求接口之后查询用户的余额&&&&&&&&&&&&&&
        end_amount = self.db.find_one(sql)[0]
        print('用例执行后的余额', end_amount)

        # 第三步断言
        try:
            self.assertEqual(expected['code'], res['code'])
            self.assertEqual(expected['msg'], res['msg'])
            # &&&&&&&&&&&&&&校验数据库中用户金额的变化是否等于充值金额&&&&&&&&&&&&&&#
            if res['msg'] == 'OK':
                # 充值成功,用户余额的变化为充值金额
                self.assertEqual(float(end_amount - start_amount), params['amount'])
            else:
                # 充值失败用户余额变化为0
                self.assertEqual(float(end_amount - start_amount), 0)
        except AssertionError as e:
            my_log.error('用例--【{}】--失败'.format('title'))
            my_log.exception(e)
            raise e
        else:
            my_log.info('用例--【{}】--成功'.format('title'))
Ejemplo n.º 21
0
 def test_login(self, item):
     url = conf.get("api", "baseUrl") + item["url"]
     params = eval(item["params"])
     expected = eval(item["expected"])
     headers = eval(conf.get("api", "headers"))
     response = requests.post(url=url, json=params, headers=headers)
     res = json.loads(response.text)
     print("预期结果为{}".format(expected))
     print("实际结果为{}".format(res))
     try:
         self.assertEqual(res["code"], expected["code"])
         self.assertEqual(res["msg"], expected["msg"])
     except AssertionError as e:
         log.error("{}用例执行失败".format(item["title"]))
         sh.write_excel(item["case_id"] + 1, 8, "执行不通过")
         raise e
     else:
         log.info("{}用例执行通过".format(item["title"]))
         sh.write_excel(item["case_id"] + 1, 8, "执行通过")
Ejemplo n.º 22
0
    def test_recharge(self, item):
        if "#member_id#" in item["params"]:
            item["params"] = item["params"].replace("#member_id#",
                                                    str(self.member_id))
        params = eval(item["params"])
        expected = eval(item["expected"])
        # if "#member_id#" in item["check_sql"]:
        #     item["check_sql"]=item["check_sql"].replace("#member_id#",str(self.mobile_id))
        url = conf.get("api", "baseUrl") + item["url"]
        headers = eval(conf.get("api", "headers"))
        headers["Authorization"] = self.token_result
        check_sql = item["check_sql"]
        if check_sql:
            check_sql_before = db.find_data(check_sql.format(self.member_id))
            print(check_sql_before, type(check_sql_before),
                  check_sql_before[0])
            leave_amount_before = check_sql_before[0]["leave_amount"]
        response = requests.post(url=url, json=params, headers=headers)
        res = response.json()
        if check_sql:
            check_sql_after = db.find_data(check_sql.format(self.member_id))
            leave_amount_after = check_sql_after[0]["leave_amount"]
        # print(leave_amount_before,leave_amount_after,type(leave_amount_before),type(leave_amount_after))
        res2 = {}
        res2["code"] = res["code"]
        res2["msg"] = res["msg"]
        print("预期结果为{}".format(expected))
        print("实际结果为{}".format(res2))
        try:
            self.assertEqual(res2, expected)
            if item["check_sql"]:
                self.assertEqual(
                    float(leave_amount_after - leave_amount_before),
                    float(params["amount"]))

        except AssertionError as e:
            log.error("{}用例执行失败".format(item["title"]))
            sh.write_excel(item["case_id"] + 1, 8, "执行不通过")
            raise e
        else:
            log.info("{}用例执行通过".format(item["title"]))
            sh.write_excel(item["case_id"] + 1, 8, "执行通过")
Ejemplo n.º 23
0
    def test_register(self, case):
        logger.info(
            "*************************** 开始执行注册接口测试用例 ***************************"
        )
        # 替换手机号
        case = replace_case_with_re(case)
        # 替换需要替换的--系统中已存在的手机号--从配置文件读取
        if case["request_data"].find("*phone*") != -1:
            phone = conf.get("user", "user")
            case["request_data"] = case["request_data"].replace(
                "*phone*", phone)
            # 替换需要替换的--系统中已存在的手机号--从配置文件读取
        if case["request_data"].find("*pwd*") != -1:
            pwd = conf.get("user", "pwd")
            case["request_data"] = case["request_data"].replace("*pwd*", pwd)

        # 发起请求
        resp = self.hr.send_requests(case["method"], case["url"],
                                     case["request_data"])
        logger.info("当前测试用例为:\n {}".format(case))
        if case["expected"]:
            # 响应结果
            actual = resp.json()
            logger.info("用例实际执行结果:\n {}".format(actual))
            expected = eval(case["expected"])
            logger.info("用例预期结果:\n {}".format(expected))

            # 断言
            try:
                assert actual["code"] == expected["code"]
                assert actual["msg"] == expected["msg"]
            except AssertionError:
                logger.exception("断言失败!")
                raise  # 把异常抛给unittest框架
            except Exception:
                logger.exception("除断言以外的异常报错!")
                raise

        if case["check_sql"]:
            sleep(0.5)  # 等待服务器数据与数据库交互完成
            ha = HandleAssert()
            ha.assert_sql(case["check_sql"])
Ejemplo n.º 24
0
    def __init__(self):
        super().__init__(conf.get('log', 'name'))
        self.setLevel(conf.get('log', 'level'))

        # 设置日志输出格式
        fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s [第%(lineno)d行] %(message)s"
        formatter = logging.Formatter(fmt)

        # 设置日志输出格式-控制台
        handle1 = logging.StreamHandler()
        handle1.setFormatter(formatter)

        # 设置日志输出格式-文件
        log_path = os.path.join(log_dir, conf.get('log', 'file'))
        handle2 = logging.FileHandler(log_path, encoding="utf-8")
        handle2.setFormatter(formatter)

        # 添加渠道到日志收集器中
        self.addHandler(handle1)
        self.addHandler(handle2)
Ejemplo n.º 25
0
def setup_login(cls):
    """登录"""
    # 测试数据
    url = conf.get("env", "base_url") + "/user/login/"
    method = "POST"
    params = {"username": "******", "password": "******"}

    # 请求接口
    res = requests.request(method, url, json=params).json()

    # 提取返回的token,设置为类属性
    cls.token = res["token"]
Ejemplo n.º 26
0
    def __init__(self):
        super().__init__(conf.get("log", "name"))  # 日志收集器名字
        self.setLevel(conf.get("log", "level"))  # 日志收集器级别

        # 3、设置日志输出格式
        fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s [第%(lineno)d行] %(message)s"
        formatter = logging.Formatter(fmt)

        # 4、创建一个输出渠道到终端
        handle1 = logging.StreamHandler()
        handle1.setFormatter(formatter)

        # 4、创建一个输出渠道到文件
        log_time = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())
        log_name = conf.get("log", "file") + f" {log_time}.log"
        handle2 = logging.FileHandler(os.path.join(logdir, log_name),
                                      encoding="utf-8")
        handle2.setFormatter(formatter)

        # 5、把输出渠道添加到日志收集器对象中
        self.addHandler(handle1)
        self.addHandler(handle2)
Ejemplo n.º 27
0
def register(user_conf,pwd_conf,type):
    """

    :param user_conf:保存到配置文件的配置项的用户名称
    :param pwd_conf:保存到配置文件的配置项的密码名称
    :param type:注册用户的类型,0:管理员  默认1:普通用户
    :return:
    """
    #第一步,普通账号注册账户
    register_url=conf.get("api","baseUrl")+"/member/register"
    headers=conf.get("api","headers")
    params={
        "mobile_phone":random_phone(),
        "pwd":11111111,
        "type":type
    }
    response=requests.post(url=register_url,json=params,headers=headers)
    res=response.json()
    if res["code"]==0:
        print("==============初始化注册成功===============")
        conf.write(section="testdata",option=user_conf,value=params["mobile_phone"])
        conf.write(section="testdata",option=pwd_conf,value=pwd_conf)
Ejemplo n.º 28
0
def replace_data(data, cls):
    """替换用例参数"""
    while re.search("#(.+?)#", data):
        item = re.search("#(.+?)#", data)
        # 需要替换的数据
        rep_data = item.group()
        # 要替换的属性
        key = item.group(1)
        try:
            value = conf.get("test_data", key)
        except:
            value = getattr(cls, key)
        data = data.replace(rep_data, str(value))
    return data
Ejemplo n.º 29
0
    def test_invest(self, item):
        url = conf.get('env', 'base_url') + item['url']
        item['data'] = replace_data(item['data'], TestInvest)
        params = eval(item['data'])
        expected = eval(item['expected'])
        method = item['method']
        # ----------------投资前查询数据库----------------------------
        #查用户表的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(method=method,
                                    url=url,
                                    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.assertIn(expected['msg'], res['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:
            my_log.error("用例--【{}】---执行失败".format(item['title']))
            my_log.exception(e)
            raise e
        else:
            my_log.info("用例--【{}】---执行通过".format(item['title']))
Ejemplo n.º 30
0
 def add_project(cls):
     url = conf.get('env', 'base_url') + '/loan/add'
     params = {
         "member_id": cls.member_id,
         "title": "借钱实现财富自由",
         "amount": 2000,
         "loan_term": 3,
         "loan_rate": 12.0,
         "loan_date_type": 1,
         "bidding_days": 5
     }
     response = requests.post(url=url, json=params, headers=cls.headers)
     res = response.json()
     print(res)
     # 提取项目ID保存为类属性
     cls.loan_id = jsonpath(res, '$..id')[0]