运用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
...

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

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

**4.记载日志:整齐的日志记载
**

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

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

4. 生成美观的HTML陈述:多种款式陈述任君挑选

重写优化了unittestReport的中心代码,测验成果不再是枯燥的一串文字,而是以漂亮的HTML展示。陈述中的每个测验用例都得到了翔实的展示,包括输入数据、预期输出和实际成果,使得整个测验进程一目了然。
4.1 款式一

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

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

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

如上的陈述,是不是很过瘾,KPI查核又得一分

4.3 Excel中测验用例成果回显记载

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

5. 集成告诉机制:钉钉、企业微信、邮件

生成美观的测验陈述,及时共享给团队也是很有逼格的。经过SMTP库、钉钉和企业微信等渠道,能够主动发送测验陈述,还能够确保团队成员即时了解测验进展和成果,想发就发,想@就@。

邮件告诉

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

钉钉告诉

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

企业微信告诉

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

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

彩蛋:对结构感爱好的小伙伴,加勇哥进群,群公告自取~

总结

以上便是勇哥今天为各位小伙伴预备的内容,假如你想了解更多关于Python主动化测验的知识和技巧,欢迎重视我:大众号\博客\CSDN\B站:测验玩家勇哥;我会不定期地共享更多的精彩内容。感谢你的阅读和支撑!


题外话,勇哥计划把新建的技能交流群,打造成一个活跃的高质量技能群。作业中遇到的技能问题,都能够在里面咨询大家,还有作业内推的时机。有爱好的小伙伴,欢迎加我(记得备注是进群还是报名学习)

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

重视大众号,测验干货及时送达

往期精选文章:
接口主动化测验项目2.0,让你像Postman相同编写测验用例,支撑多环境切换、多事务依赖、数据库断言等
揭秘抓包利器:Python和Mitmproxy让您轻松完成接口恳求抓取与剖析!
构建高效的接口主动化测验结构思路
Pytest 快速入门
接口主动化之测验数据动态生成并替换
requests模块该怎么封装?
接口主动化怎么封装mysql操作
一文看懂python怎么履行cmd指令
最通俗易懂python操作数据库
python-Threading多线程之线程锁
python正则一篇搞掂
功能测验之必备知识

功能剖析思路

Python + ChatGPT来完成一个智能对话的钉钉机器人
一文看懂python怎么履行cmd指令