prettytable是Python的一个第三方工具库,用于创建漂亮的ASCII表格。它支持带有列标题的表格,还支持颜色和自定义格式。使用prettytable可以轻松地将数据可视化为表格,方便阅读和理解。
因为是第三方工具库,所以要先安装,安装命令如下
pip install prettytable
使用field_names来添加表头,传参是一个list对象
from prettytable import PrettyTable
#创建Prettytable实例
tb = PrettyTable()
#添加表头
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
print(tb)
>>>
+--------+------+-----+-----+-----+
| userId | name | sex | age | job |
+--------+------+-----+-----+-----+
+--------+------+-----+-----+-----+
使用add_row()方法来添加行数据,传参是一个list对象
from prettytable import PrettyTable
#创建Prettytable实例
tb = PrettyTable()
#添加表头
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
#添加行数据
tb.add_row(['123', '张三', '男', '25', 'softtest'])
print(tb)
使用add_column()方法来添加列数据,add_column()有两个参数:第一个是列标题的名称,类型str;第二个是列对应的value,类型list,如下
from prettytable import PrettyTable
#创建Prettytable实例
tb = PrettyTable()
#添加表头
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
#添加行
tb.add_row(['123', '张三', '男', '25', 'softtest'])
#添加列
tb.add_column('address', ['深圳'])
print(tb)
>>>
+--------+------+-----+-----+----------+---------+
| userId | name | sex | age | job | address |
+--------+------+-----+-----+----------+---------+
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
+--------+------+-----+-----+----------+---------+
使用align来设置对齐方式,默认居中对齐,其中l是向左对齐,c是居中对齐,r是向右对齐,如下
from prettytable import PrettyTable
#创建Prettytable实例
tb = PrettyTable()
#添加表头
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
#添加行
tb.add_row(['123', '张三', '男', '25', 'softtest'])
tb.add_row(['124', '李四', '男', '25', 'Java'])
#添加列
tb.add_column('address', ['深圳', '北京'])
#设置对齐方式align: l,r,c
tb.align = 'l'
print(tb)
>>>
+--------+------+-----+-----+----------+---------+
| userId | name | sex | age | job | address |
+--------+------+-----+-----+----------+---------+
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
+--------+------+-----+-----+----------+---------+
使用set_style()来控制数据表格的样式,set_style()默认参数是DEFAULT,如果需要更换为其它方式,则需要import导入后使用,如下
from prettytable import PrettyTable
from prettytable import MARKDOWN, MSWORD_FRIENDLY
#创建Prettytable实例
tb = PrettyTable()
#添加表头
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
#添加行
tb.add_row(['123', '张三', '男', '25', 'softtest'])
tb.add_row(['124', '李四', '男', '25', 'Java'])
#添加列
tb.add_column('address', ['深圳', '北京'])
#设置对齐方式align: l,r,c
tb.align = 'l'
#设置输出表格的样式
print("DEFAULT表格样式:")
print(tb)
tb.set_style(MSWORD_FRIENDLY)
print("MSWORD_FRIENDLY表格样式:")
print(tb)
tb.set_style(MARKDOWN)
print("MARKDOWN表格样式:")
print(tb)
>>>
DEFAULT表格样式:
+--------+------+-----+-----+----------+---------+
| userId | name | sex | age | job | address |
+--------+------+-----+-----+----------+---------+
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
+--------+------+-----+-----+----------+---------+
MSWORD_FRIENDLY表格样式:
| userId | name | sex | age | job | address |
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
MARKDOWN表格样式:
| userId | name | sex | age | job | address |
|:-------|:-----|:----|:----|:---------|:--------|
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
在prettyble中表格边框由三部分组成:横边框,竖边框和边框连接符,由以下几个属性控制
table.border 控制是否显示边框,默认是True
table.junction_char 控制边框连接符
table.horizontal_char 控制横边框符号
table.vertical_char 控制竖边框符号
from prettytable import PrettyTable
#创建Prettytable实例
tb = PrettyTable()
#添加表头
tb.field_names = ['userId', 'name', 'sex', 'age', 'job']
#添加行
tb.add_row(['123', '张三', '男', '25', 'softtest'])
tb.add_row(['124', '李四', '男', '25', 'Java'])
#添加列
tb.add_column('address', ['深圳', '北京'])
#设置对齐方式align: l,r,c
tb.align = 'l'
#自定义边框样式
print("默认边框:")
print(tb)
tb.horizontal_char = '*' #横边框
tb.vertical_char = '|' #竖边框
tb.junction_char = '|' #边框连接符
print("自定义边框:")
print(tb)
>>>
默认边框:
+--------+------+-----+-----+----------+---------+
| userId | name | sex | age | job | address |
+--------+------+-----+-----+----------+---------+
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
+--------+------+-----+-----+----------+---------+
自定义边框:
|********|******|*****|*****|**********|*********|
| userId | name | sex | age | job | address |
|********|******|*****|*****|**********|*********|
| 123 | 张三 | 男 | 25 | softtest | 深圳 |
| 124 | 李四 | 男 | 25 | Java | 北京 |
|********|******|*****|*****|**********|*********|
prettytable还有很多其它功能,可以参考官网或者这篇文章:python用prettytable输出漂亮的表格
在实际的接口测试过程中,我们都要对返回的接口进行数据校验,包括但不限于返回状态码,单个字段值。为了能够快速知道,以及美化校验结果,我们可以使用prettytable来进行结果校验输出,如下。
返回接口:
{
"HEAD": {
"xTypCod": null,
"xHdrLen": "203",
"xSysCod": null,
"xDskSys": null,
"xWkeCod": "WdcTrfSetBeg",
"xKeyVal": null,
"xIsuCnl": "X86",
"xEncCod": null,
"xDalCod": null,
"xCmmTyp": null,
"xOrgIsu": null,
"xPreIsu": null,
"xEntUsr": "",
"xUsrPwd": null,
"xIsuDat": "0",
"xIsuTim": "0",
"xMacCod": null,
"xRtnLvl": null,
"xRtnCod": "WYZQA76",
"xDevNbr": null,
"xTlrNbr": "100025",
"xRqsNbr": null,
"xCmmRsv": null,
"xDocSiz": null,
"xItvTms": null,
"xMsgFlg": null,
"xAppRsv": null
},
"BODY": {
"$ERRORMSG$": [
{
"xErrMsg": "WYZQA76锁查步骤表记录失败,批次D019860641"
}
]
}
}
校验脚本
from prettytable import PrettyTable
import json
import jsonpath
response_data = """
{
"HEAD": {
"xTypCod": null,
"xHdrLen": "203",
"xSysCod": null,
"xDskSys": null,
"xWkeCod": "WdcTrfSetBeg",
"xKeyVal": null,
"xIsuCnl": "X86",
"xEncCod": null,
"xDalCod": null,
"xCmmTyp": null,
"xOrgIsu": null,
"xPreIsu": null,
"xEntUsr": "",
"xUsrPwd": null,
"xIsuDat": "0",
"xIsuTim": "0",
"xMacCod": null,
"xRtnLvl": null,
"xRtnCod": "WYZQA76",
"xDevNbr": null,
"xTlrNbr": "100025",
"xRqsNbr": null,
"xCmmRsv": null,
"xDocSiz": null,
"xItvTms": null,
"xMsgFlg": null,
"xAppRsv": null
},
"BODY": {
"$ERRORMSG$": [
{
"xErrMsg": "WYZQA76锁查步骤表记录失败,批次D019860641"
}
]
}
}
"""
def validate_data(data: dict, yqz: dict) -> None:
"""
:param data: 要校验的数据
:param yqz: 预期值
:return: None
"""
data = json.loads(data)
tb = PrettyTable()
#添加表头
tb.field_names = ['比较字段', '预期值', '实际值', '是否通过']
for k, v in yqz.items():
#用jsonpath查找预期值字段在返回数据resresponse_data的值
res = jsonpath.jsonpath(data, '$..' + k)[0]
if v == res:
tb.add_row([k, v, res, 'Y'])
else:
tb.add_row([k, v, res, 'N'])
print(tb)
#预期值数据
yqz = {'xRtnCod': 'WYZQA76', 'xErrMsg': 'WYZQA76锁查步骤表记录失败,批次D019860641'}
#结果校验
validate_data(response_data, yqz)
效果
>>>
+----------+------------------------------------------+------------------------------------------+----------+
| 比较字段 | 预期值 | 实际值 | 是否通过 |
+----------+------------------------------------------+------------------------------------------+----------+
| xRtnCod | WYZQA76 | WYZQA76 | Y |
| xErrMsg | WYZQA76锁查步骤表记录失败,批次D019860641 | WYZQA76锁查步骤表记录失败,批次D019860641 | Y |
+----------+------------------------------------------+------------------------------------------+----------+
上面做了一个简单的演示,实际工作中可以结合自身需求封装成组件或者包,使用效果会更佳。