Ejemplo n.º 1
0
    def test_withdraw(self, case):
        '提现用例'

        if case['check_sql'] is not None and isinstance(
                case['check_sql'], str):
            if re.search("#(.*?)#", case['check_sql']):
                case['check_sql'] = re_replace(case['check_sql'], case['obj'])
                logger.info('第{}条用例执行的sql语句是{}'.format(self.__class__.count,
                                                       case['check_sql']))

                # 提现前的帐户余额
                pre_withdraw_amount = db.select_one_data(
                    eval(case['check_sql'])['sql_01'])
                pre_withdraw_amount = str(
                    Decimal(pre_withdraw_amount['leave_amount']).quantize(
                        Decimal('0.00')))

                # 提现金额
                withdraw_amount = eval(case['param'])['amount']
                logger.info(withdraw_amount)

                if case['id'] == 5:
                    withdraw_amount = round(
                        float(pre_withdraw_amount) + 1000.23, 2)
                    setattr(EnvData, 'max_amount', withdraw_amount)

                # 期望金额
                expect_amount = round(
                    (float(pre_withdraw_amount) * 100 - withdraw_amount * 100)
                    / 100, 2)
                setattr(EnvData, 'expect_amount', expect_amount)
Ejemplo n.º 2
0
 def setUpClass(cls):
     logger.info('========  start ============》开始执行{}类下的用例'.format(cls.__name__))
     clear_Envdata_attr() # 清除上个脚本设置的动态属性
     cls.count = 0
     user,pwd = get_old_phone()
     res = MyRequest('POST','/futureloan/member/login',{"mobile_phone":user,"pwd":pwd}).send_requests()
     cls.user_id = jsonpath.jsonpath(res.json(),'$..id')[0]
     setattr(EnvData,'user_id',cls.user_id)
     cls.token = jsonpath.jsonpath(res.json(),'$..token')[0]
Ejemplo n.º 3
0
 def setUpClass(cls):
     logger.info('========  start ============》开始执行{}类下的用例'.format(
         cls.__name__))
     clear_Envdata_attr()
     cls.count = 0
     user, pwd = get_old_phone()
     res = MyRequest('POST', '/futureloan/member/login', {
         "mobile_phone": user,
         'pwd': pwd
     }).send_requests()
     cls.user_id = jsonpath.jsonpath(res.json(), '$..id')[0]
     cls.token = jsonpath.jsonpath(res.json(), '$..token')[0]
     setattr(EnvData, 'user_id', cls.user_id)
     # 初始化余额
     db.update_data(
         'UPDATE member SET leave_amount=9898.96 WHERE id={}'.format(
             cls.user_id))
Ejemplo n.º 4
0
    def test_loan(self, case):
        test_result = None
        # 前置sql

        if case['check_sql'] is not None and isinstance(
                case['check_sql'], str):
            if re.search(r"(.*?)", case['check_sql']):
                case['check_sql'] = re_replace(case['check_sql'])
                logger.info('打印出sql-=============》{}'.format(
                    eval(case['check_sql'])['sql_01']))
                loan_id = db.select_one_data(
                    eval(case['check_sql'])['sql_01'])['id']
                logger.info("{}".format(loan_id))

                expect_line = db.get_count(eval(case['check_sql'])['sql_02'])

                setattr(EnvData, "loan_id", loan_id)
Ejemplo n.º 5
0
def extract_data_from_excel(extract_exprs,response_dict):
  """
    该方法本项目主要应用在业务流上
    根据jsonpath提取表示式,从响应结果中匹配出来的数据作为EnvData中的类属性,共所有用例使用
  :param extract_exprs:excel中读取出来的提取表达式字符串
  :param response_dict:请求之后的响应结果
  :return:
  """
  extract_dict =json.loads(extract_exprs) # 将从excel中读取出的提取表达式转换为字典
  for key,value in extract_dict.items():
      try:
          res = str(jsonpath.jsonpath(response_dict,value)[0])       #   匹配到数据返回列表 匹配不到返回false
      except Exception as e:
          logger.info("对响应结果的替换出现错误")
          raise e
      else:
          if res :
            setattr(EnvData,key,res)
Ejemplo n.º 6
0
def re_replace(target,obj=EnvData):
    """
    # 通过字符串正则匹配的方式将excel中读取参数化数据进行替换
     真实数据只从2个地方去获取:1个是配置文件当中的DATA区域 。另1个是,EvnData的类属性。
    :param target:字典中每个key对应的value
    :param obj: EnvData类的实例对象
    :return:
    """
    p = "#(.*?)#"
    while re.search(p,target):
        ret=re.search(p,target)
        key = ret.group(1)
        try:
            value= cnf.read_section_to_dict('DATA')[key]
        except:
            try:
                value = getattr(obj,key)
            except Exception:
                logger.info("EnvData类中不存在此【{}】".format(key))
                raise

        target = re.sub(p,str(value),target,count=1)
    return target
Ejemplo n.º 7
0
 def tearDownClass(cls):
     logger.info(
         "------------>结束执行{} 类下的测试用例集     <-----------------".format(
             cls.__name__))
Ejemplo n.º 8
0
 def tearDownClass(cls) -> None:
     logger.info('结束执行获取会话用例')
Ejemplo n.º 9
0
        if case['expect_result'] is not None and isinstance(
                case['expect_result'], str):
            if re.search(r'#(.*?)#', case['expect_result']):
                case['expect_result'] = re_replace(case['expect_result'],
                                                   case['obj'])

        expect_result = json.loads(case['expect_result'])
        res = MyRequest(case['method'], case['url'],
                        case['param']).send_requests(self.__class__.token)

        try:
            self.assertEqual(expect_result['code'], res.json()['code'])
            self.assertEqual(expect_result['msg'], res.json()['msg'])
            test_result = None
            if case['check_sql'] is not None and case['id'] != 5:
                logger.info("第{}条用例期望结果{}".format(self.__class__.count,
                                                  expect_result))
                # 获取结果返回结果
                final_amount = res.json()['data']['leave_amount']
                # 获取提现后数据库中查询的余额
                final_db_amount = db.select_one_data(
                    eval(case['check_sql'])['sql_01'])
                final_db_amount = str(
                    Decimal(final_db_amount['leave_amount']).quantize(
                        Decimal('0.00')))

                # 期望结果与接口返回结果比对
                self.assertEqual(expect_result['data']['leave_amount'],
                                 final_amount)

                # 期望结果与数据库中查询结果比对
                self.assertEqual(float(expect_result['data']['leave_amount']),
Ejemplo n.º 10
0
 def setUp(self) -> None:
     self.__class__.count += 1
     logger.info('当前执行第{}条测试用例'.format(self.__class__.count))
Ejemplo n.º 11
0
 def tearDown(self):
     logger.info("第>》》》   {}    《《《<条执行用例执行完成".format(self.__class__.count))
     logger.info("<" * 50)
     self.t.close_excel()
Ejemplo n.º 12
0
 def setUpClass(cls) -> None:
     logger.info('开始执行获取访客会话用例')
     cls.count = 0
Ejemplo n.º 13
0
 def tearDownClass(cls):
     logger.info('========  END ============》{}类下的用例已经全部执行完成'.format(
         cls.__name__))
Ejemplo n.º 14
0
        if hasattr(EnvData,
                   'admin_member_token') and person_symbol == 0:  # 管理员发起请求
            actual_result = MyRequest(case['method'], case['url'],
                                      case['param']).send_requests(
                                          EnvData.admin_member_token)
        elif hasattr(EnvData, 'token') and person_symbol == 1:  # 普通角色发起请求
            actual_result = MyRequest(case['method'], case['url'],
                                      case['param']).send_requests(
                                          EnvData.token)
        else:
            actual_result = MyRequest(case['method'], case['url'],
                                      case['param']).send_requests()

        if case['extract_data']:  # 响应结果中匹配出来的数据作为EnvData中的类属性,共所有用例使用
            extract_data_from_excel(case['extract_data'], actual_result.json())
            logger.info('==========EnvData环境类目前的类属性========={}'.format(
                EnvData.__dict__))
        if case['type'] == 'case':
            try:
                self.assertEqual(expect_result['code'],
                                 actual_result.json()['code'])
                self.assertEqual(expect_result['msg'],
                                 actual_result.json()['msg'])

                if case['check_sql'] is not None:
                    if len(eval(case['check_sql'])) > 1:
                        self.assertEqual(
                            expect_result['data']['member_id'],
                            actual_result.json()['data']['member_id'])
                        self.assertEqual(
                            expect_result['data']['loan_id'],
                            actual_result.json()['data']['loan_id'])
Ejemplo n.º 15
0
 def setUpClass(cls):
     logger.info(
         "------------>开始执行{} 类下的测试用例集     <-----------------".format(
             cls.__name__))
     cls.count = 0
     clear_Envdata_attr()  # 清理环境类中的类属性
Ejemplo n.º 16
0
                logger.info("{}".format(loan_id))

                expect_line = db.get_count(eval(case['check_sql'])['sql_02'])

                setattr(EnvData, "loan_id", loan_id)

        if case['param'] is not None and isinstance(case['param'], str):
            if re.search(r"(.*?)", case["param"]):
                case["param"] = re_replace(case['param'])

        if case['expect_result'] is not None and isinstance(
                case['expect_result'], str):
            if re.search(r"(.*?)", case['expect_result']):
                case["expect_result"] = re_replace(case["expect_result"])
            expect_result = json.loads(case["expect_result"])
            logger.info("*****************用列的期望结果为{}".format(expect_result))
        if hasattr(EnvData, "admin_member_token"):
            actual_result = MyRequest(case['method'], case['url'],
                                      case['param']).send_requests(
                                          EnvData.admin_member_token)
        else:
            actual_result = MyRequest(case['method'], case['url'],
                                      case['param']).send_requests()

        if case['extract_data']:
            extract_data_from_excel(case['extract_data'], actual_result.json())
        try:
            if case['type'] == 'case':
                self.assertEqual(expect_result['code'],
                                 actual_result.json()['code'])
                self.assertEqual(expect_result['msg'],
Ejemplo n.º 17
0
 def tearDown(self) -> None:
     logger.info('第{}条测试用例执行结束'.format(self.__class__.count))
Ejemplo n.º 18
0
 def setUpClass(cls):
     logger.info('========  start ============》开始执行{}类下的用例'.format(
         cls.__name__))
     clear_Envdata_attr()
     cls.count = 0
Ejemplo n.º 19
0
 def setUp(self):
     self.__class__.count += 1
     logger.info("---------->开始执行第{}条测试用例-----------------".format(
         self.__class__.count))
     self.t = ReadExcel(load_data_path, sheet_name)
Ejemplo n.º 20
0
 def setUp(self):
     logger.info(">" * 50)
     self.__class__.count += 1
     logger.info("开始第>》》》   {}    《《《<条执行用例".format(self.__class__.count))
     self.t = ReadExcel(load_data_path, sheet_name)
Ejemplo n.º 21
0
 def tearDown(self):
     self.t.close_excel()
     logger.info("---------->结束执行第{}条测试用例-----------------".format(
         self.__class__.count))
Ejemplo n.º 22
0
    def send_requests(self,token=None,cookie=None,**kwargs):
        # 获取请求头部信息
        headers = self.__handle_header(token,**kwargs)

        # 对excel中url是否带'/'进行兼容处理
        url = self.__pre_url ()

        # 对excel中接口所传的字符串类型的字典参数进行json化处理
        data=self.__pre_data (token)

        logger.info ("请求头 -> {}".format (headers))
        logger.info ("请求方法 -> {}".format (self.method))
        logger.info ("请求体 -> {}".format (data))
        # 根据方法进行调用
        if self.method.upper() == "POST":
            try:
                res = requests.post(url,json=data,headers=headers,cookies=cookie)
            except Exception:
                e = logger.exception("调用post封装方法,请求{}地址时出错".format(url))
                raise e
        elif self.method.upper() =='PATCH':
            try:
                logger.info("======>>>开始执行patch请求,数据为{} 类型为{}".format(data,type(data)))
                logger.info("======>>>开始执行patch请求,请求投为为{} 类型为{}".format(headers,type(headers)))

                res = requests.patch(url,json=data,headers=headers,cookies=cookie)
            except Exception:
                e=logger.exception("调用patch封装方法,请求{}地址时出错".format(url))
                raise e
        else:
            try:
                res =requests.get(url,params=data,headers=headers,cookies=cookie)

            except Exception:
                e = logger.exception ("调用post封装方法,请求{}地址时出错".format (url))
                raise e
        logger.info ("响应状态码 -> {}".format (res.status_code))
        logger.info("响应头 -> {}".format(res.headers))
        logger.info("请求头为--> {}".format(res.request.headers))
        logger.info ("响应体【实际结果】 -> {}".format (res.json()))
        return res
Ejemplo n.º 23
0
        cls.count = 0

    @classmethod
    def tearDownClass(cls) -> None:
        logger.info('结束执行获取会话用例')

    def setUp(self) -> None:
        self.__class__.count += 1
        logger.info('当前执行第{}条测试用例'.format(self.__class__.count))

    def tearDown(self) -> None:
        logger.info('第{}条测试用例执行结束'.format(self.__class__.count))

    @data(*datas)
    def test_chart_by_session(self, case):
        if case['param'] is not None and isinstance(case['param'], str):
            if re.search(r'#(.*?)#', case['param']):
                case['param'] = re_replace(case['param'])
        expect_result = json.loads(case['expect_result'])
        logger.info('请求参数为{}'.format(case['param']))
        res = HandleYunWenRequest(case['method'], case['url'],
                                  case['param']).send_request()
        try:
            self.assertEqual(res.json()['code'], expect_result['code'])
            self.assertEqual(res.json()['codeDesc'], expect_result['codeDesc'])
        except AssertionError as e:
            logger.exception("第{}条用例执行-->【失败】".format(self.__class__.count))
            raise e
        else:
            logger.info(("第{}条用例执行-->【成功】".format(self.__class__.count)))