首页 新闻 会员 周边

pytest中生成测试结果,显示TypeError: Object of type Worksheet is not JSON serializable

0
[待解决问题]

import json
import allure
import pytest
from util.ParseExcel import *
from util.OutputLog import *
from config.config import *
from util.HttpClient import *

"""
先获取每张表的所有数据
"""
pe = ParseExcel()
wb = pe.loadWorkBook(excelPathAndName=TestData_Files)
login_sheet = pe.getSheetByIndex(index=Logging_datas)
login_sheet_values = pe.get_some_values(sheet=login_sheet)

创建一个日志模块

"""
将日志模块放在外边能解决控制台重复打印的问题
"""
logger = CreateLogger('登录')
console_log = logger.CreateConsoleHandler(level='DEBUG')
file_log = logger.CreateFileHandler(filename='登录模块.log')
logger.AddHandler(file_handler=file_log, console_handler=console_log)
@allure.feature(login_sheet)
class TestLogin():
@allure.story("登录")
@pytest.mark.parametrize('title_id,module,url,method,header,datas,result',login_sheet_values)
def test_login(self,title_id,module,url,method,header,datas,result):
""" 这里定义这些目的为了消除false,true,null 没有被定义的问题"""
false = False
true = True
null = None
# 将result 结果处理一下,从excel 中的的字符串有 换行符"\n"
result = eval(result.strip().replace('', '').replace("\n", ""))
# header = json.loads(header)
with allure.step("正在发送"):
logger.Debug_Str(f"正在请求{url}")
r = requests.post(url=url,headers=eval(header),data=json.dumps(eval(datas),ensure_ascii=False))
r = json.loads(r.content.decode())
with allure.step("接受响应数据"):
logger.Debug_Str(f"获得的实际结果:{r}")
with allure.step("请求实际结果和预期结果比较"):
"""
只需要直接比较code值就行,相同的就是通过,不相同的就是不通过
"""
if r['code'] == result['code']:
# 这里需要进行判断 token 是否为空,因为当为空时,后面的操作会报错
if r['data'] != None:
token = "Bearer " + r['data']
logger.logger.debug("正在将获取的token写入到token.txt文件中.......")
with open(Token_Files,'w') as f:
f.write(token)
logger.logger.debug("token写入完成.......")
logger.Debug_Str("正在向表格写入结果")
pe.writeCell(sheet=login_sheet,content='YES',
rowNo=pe.get_index_by_value(sheet=login_sheet,value=title_id),
colNo=pe.getTotalCols(sheet=login_sheet))
assert r['code'] == result['code']
else:
# 用例失败的结果
logger.Debug_Str("正在向表格写入结果")
pe.writeCell(sheet=login_sheet, content='NO',
rowNo=pe.get_index_by_value(sheet=login_sheet, value=title_id),
colNo=pe.getTotalCols(sheet=login_sheet))
assert r['code'] == result['code']

=====================================================================
以上是代码,运行pytest test_login_script.py -s -q --alluredir=../result --clean-alluredir
以下是结果:

一条咸鱼罢了的主页 一条咸鱼罢了 | 菜鸟二级 | 园豆:202
提问于:2022-03-26 19:20
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册