Python - 封装assert断言类

#coding=utf-8
import unittest
import requests
import warnings
import json
from ddt import ddt,data
from tools.do_excel import DoExcel
from tools.my_log import MyLog
from tools import project_path
from tools.get_data import GetData
from tools.do_regx import DoRegx
import jsonpath
my_logger = MyLog()
res = DoExcel(project_path.excel_path)
test_data = res.get_data()

@ddt    # 装饰测试类
class DoAssert(unittest.TestCase):
    '''与预期进行判断,将报错写回文档及log日志'''

    @classmethod
    def setUpClass(cls):
        warnings.simplefilter('ignore', ResourceWarning)

    @data(*test_data)   # 脱一层外套操作,装饰测试方法,拿到几条数据则执行几条用例
    def test_assert(self,item):
        result = requests.request(method=item['method'],url=item['url'],headers=eval(item['headers']),data=eval(DoRegx.do_regx(item['data'])),cookies=getattr(GetData,'cookies'))
        result_list = []
        # 判断,如果通了,执行下方遍历添加预期
        for keys in eval(item['keys']):
            if jsonpath.jsonpath(result.json()['body'], '$..' + keys) == False:
                res.write_back(item['sheet_name'], item['case_id'] + 1, 9, 'false')
                my_logger.my_log("报警!开发修改返回参数名称了,返回结果:{}".format(json.dumps(result.json(),sort_keys=False,separators=(',',':'),indent=2,ensure_ascii=False)), 'ERROR')
                raise result.json()
            else:
                for result_values in jsonpath.jsonpath(result.json()['body'], '$..' + keys):
                    result_list.append(result_values)
        for i in eval(item['expected']):
            try:
                self.assertIn(i,result_list)
                res.write_back(item['sheet_name'], item['case_id'] + 1, 9, 'pass')
            except AssertionError as e:
                res.write_back(item['sheet_name'], item['case_id'] + 1, 9, 'false')
                my_logger.my_log("校验失败:{0},请求结果:{1}".format(e,json.dumps(result.json(),sort_keys=False,separators=(',',':'),indent=2,ensure_ascii=False)), 'ERROR')
                raise e
            finally:
                if item['sheet_name'] == 'login' and item['case_id'] == 3:
                    setattr(GetData, 'cookies', result.cookies)
                elif item['depend']:
                    for i in eval(item['depend']):
                        setattr(GetData, i[1], jsonpath.jsonpath(result.json()['body'], '$..'+i[0])[-1])
                my_logger.my_log("sheet_name:{0},case_id:{1},测试标题:{2}".format(item['sheet_name'],item['case_id'],item['title']),'DEBUG')
                my_logger.my_log("请求数据:{0},请求结果:{1}".format(item,result.json()), 'INFO')
                my_logger.my_log("请求结果:{}".format(result.json()), 'INFO')
                my_logger.my_log("-"*100, 'INFO')

if __name__ == '__main__':
    unittest.main()

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秦朝胖子得加钱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值