职场经验: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怎么配置,怎么修改啊,怎么又乱码不显示完整,又英文啥杂七杂八的而烦恼!!

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

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值