2023-08-18 17:53阅读: 722评论: 0推荐: 0

精美可视化:Python自动化生成漂亮的测试报告

运用Python的Unittest、数据驱动测试(DDT)、Excel、Jinja2和HTML技术,构建一个能够自动生成精美可视化测试报告的自动化测试框架


思路流程

  1. 封装读取数据,让所有数据都能够再excel中填写,不再填写任何一行逻辑代码

  2. 通过unittest框架的discover()找到匹配的测试用例,由HTMLTestRunner的run()方法执行测试用例并生成最新的测试报告。

  3. 集成TestResult,增加一些获取数据逻辑,将数据封存输出,结合jinja2模板引擎,生成报告

  4. 将报告路径及收集的结果参数传给发送邮件,钉钉通知,企业微信通知的方法,再run用例结束后,自动发送数据到所需的位置

  5. 这里不展开对具体每一步得详细介绍,直接结果导向开始讲解。

1. 数据驱动测试(DDT):以数据为驱动的智慧
为了匹配框架使用,重新写了类似ddt的装饰器,结合用例名称生成测试函数名称,这样就兼容了unittest的框架特性。核心代码:

def list_data(datas):
"""
:param datas: Test data
:return:
"""
def wrapper(func):
setattr(func, "PARAMS", datas)
return func
return wrapper
def yaml_data(file_path):
"""
:param file_path:YAML file path
:return:
"""
def wrapper(func):
try:
with open(file_path, "r", encoding="utf-8") as f:
datas = yaml.load(f, Loader=yaml.FullLoader)
except:
with open(file_path, "r", encoding="gbk") as f:
datas = yaml.load(f, Loader=yaml.FullLoader)
setattr(func, "PARAMS", datas)
return func
return wrapper

2.unittest框架妙用:高度封装精简脚本代码

将上述的装饰器装饰测试方法,通过多集成,、封装及反射捣鼓一波,最终的执行脚本代码,只有么关键是十来行了:

test_file = Config.TEST_CASE # 获取 excel 文件路径
excel = DoExcel(test_file)
test_case, databases, initialize_data, host = excel.get_excel_init_and_cases()
@ddt
class TestProjectApi(unittest.TestCase):
maxDiff = None
action = Action(initialize_data, databases)
@classmethod
def setUpClass(cls) -> None:
cls.action.load_modules_from_folder(extensions)
def setUp(self) -> None:
pass
@list_data(test_case)
def test_api(self, item):
sheet, iid, condition, st, name, desc, method, expected = self.action.base_info(item)
if self.action.is_run(condition):
self.skipTest("这个测试用例听说泡面比较好吃,所以放弃执行了!!")
regex, keys, deps, jp_dict, ex_request_data = self.action.extractor_info(item)
self.action.pause_execution(st)
self.action.exc_sql(item)
if self.action.is_only_sql(method):
self.skipTest("这条测试用例被 SQL 吃了,所以放弃执行了!!")
# prepost_script = f"prepost_script_{sheet}_{iid}.py"
# item = self.action.load_and_execute_script(Config.SCRIPTS_DIR, prepost_script, "setup", item)
self.action.send_request(host, method, ex_request_data)
self.action.analysis_response(sheet, iid, name, desc, regex, keys, deps, jp_dict)
self.action.execute_validation(excel, sheet, iid, name, desc, expected)
@classmethod
def tearDownClass(cls) -> None:
excel.close_excel()

3.Excel王者:用例编写快速简单易过滤筛选
所有测试数据,填写在excel中,需要评审的时候,直接将excel丢给开发,一劳永逸,excel的强大,可不是三言两语能够解释清楚的,用例如下编写

"""封装读取excel“""
...
sheets = eval(self.get_excel_init().get(FieldNames.SHEETS))
for sheet_name in sheets:
sheet = self.wb[sheet_name]
max_row = self.get_max_row(sheet)
max_column = self.get_max_column(sheet)
first_header = []
for i in range(1, max_column + 1):
first_header.append(sheet.cell(1, i).value)
for i in range(2, max_row + 1):
sub_data = {}
for k in range(1, max_column + 1):
sub_data[first_header[k - 1]] = sheet.cell(i, k).value
sub_data[FieldNames.SHEET] = sheet_name
yield sub_data
...

**4.记录日志:整洁的日志记录
**

用例在运行过程中,日志信息的输出也是非常重要的一个环节,我们来看看日志的展示:

4. 生成美观的HTML报告:多种样式报告任君选择

重写优化了unittestReport的核心代码,测试结果不再是枯燥的一串文字,而是以漂亮的HTML展示。报告中的每个测试用例都得到了详尽的展示,包括输入数据、预期输出和实际结果,使得整个测试过程一目了然。
4.1 样式一

4.2 样式二

如上的报告,是不是很过瘾,KPI考核又得一分

4.3 Excel中测试用例结果回显记录

5. 集成通知机制:钉钉、企业微信、邮件

生成美观的测试报告,及时分享给团队也是很有逼格的。通过SMTP库、钉钉和企业微信等渠道,可以自动发送测试报告,还能够确保团队成员即时了解测试进展和结果,想发就发,想@就@。

邮件通知

钉钉通知

企业微信通知

闲话说一说:测试人只做测试专业的事就好(点点点.....),不要整天为配置`jenkins`掉头发了,也不要一天到晚搜allure怎么配置,怎么修改啊,怎么又乱码不显示完整,又英文啥杂七杂八的而烦恼!!

彩蛋:对框架感兴趣的小伙伴,加勇哥进群,群公告自取~

总结

以上就是勇哥今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注我:公众号\博客\CSDN\B站:测试玩家勇哥;我会不定期地分享更多的精彩内容。感谢你的阅读和支持!


题外话,勇哥打算把新建的技术交流群,打造成一个活跃的高质量技术群。工作中遇到的技术问题,都可以在里面咨询大家,还有工作内推的机会。有兴趣的小伙伴,欢迎加我(记得备注是进群还是报名学习)

长按上方二维码2秒,关注我


勇哥,10年落魄测试老司机,技术栈偏python,目前在一家超大型房产公司担任自动化测试主管,日常工作比较繁杂,主要负责自动化测试,性能测试、软件质量管理及人员管理。工作之余专注于为粉丝进行简历修改、面试辅导、模拟面试、资料分享、一对一自动化测试教学辅导等副业发展。目前已服务十多位小伙伴,取得高薪offer。

关注公众号,测试干货及时送达

posted @   测试玩家勇哥  阅读(722)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 DAN DAN 心魅かれてく(Cinema Version) FIELD OF VIEW
  2. 2 ロマンティックあげるよ 橋本潮
  3. 3 INNOCENT PRIMEVAL BREAKER GAME VERSION REOL
  4. 4 METAMORPHOSIS INTERWORLD
ロマンティックあげるよ - 橋本潮
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 吉田健美

作曲 : 池毅

おいでファンタジー

好きさミステリー

君の若さ隠さないで

不思議したくて冒険したくて

誰もみんなウズウズしてる

大人のフリしてあきらめちゃ

奇跡の謎など解けないよ

もっとワイルドに

もっとたくましく生きてごらん

ロマンチックあげるよ

ロマンチックあげるよ

ホントの勇気みせてくれたら

ロマンチックあげるよ

ロマンチックあげるよ

トキメク胸に

キラキラ光った夢をあげるよ

いつかワンダフル

きっとビューティフル

人のジャングル迷いこんで

スリルしたくて幸せしたくて

何故かみんなソワソワしてる

思ったとおりに叫ばなきゃ

願いは空まで届かない

もっとセクシーに

もっと美しく生きてごらん

ロマンチックあげるよ

ロマンチックあげるよ

ホントの涙見せてくれたら

ロマンチックあげるよ

ロマンチックあげるよ

淋しい心やさしく包んで

愛をあげるよ

ロマンチックあげるよ

ロマンチックあげるよ

ホントの勇気みせてくれたら

ロマンチックあげるよ

ロマンチックあげるよ

トキメク胸に

キラキラ光った夢をあげるよ