刚刚做完一个项目,由于这是一个方案项目,而不是产品,所以各种准备很不充分,很多公司的能力不能复用,整个团队又都是新员工,而且有部分实习生,匆忙上马,今天对我的自动化框架做一个回溯

自动化测试框架的选择上,我选择pytest框架,下面是我的示例文件,不是我真正的自动化用例,主要为了给刚入门的小伙伴指引

一、测试项目目录设计

lib目录:存放我的公共的方法

log目录:存放我的测试案例的日志路径

report目录:存放的pytest的执行报告

test_case目录:存放真正要执行的案例

testfile目录:存放我的测试文件

conftest.py文件:pytest的文件,具体可以看我的前一篇博客:https://www.cnblogs.com/bainianminguo/p/14338222.html

python.ini文件:pytest的配置文件,具体可以看我的前一篇博客:https://www.cnblogs.com/bainianminguo/p/13773717.html

run_case.py文件:是执行自动化案例的入口文件

二、pytest的案例如何设计

1、入口函数:run_case.py

  1. # -*- coding: utf-8 -*-
  2. import pytest
  3.  
  4. import os
  5.  
  6. if __name__ == '__main__':
  7. pytest.main(["-v","-s","--html=./report/report.html" ])

  

2、pytest的配置文件:pytest.ini

  1. [pytest]
  2. ;addopts=-s --html=report.html --reruns 3 --reruns-delay 2
  3. ;--html=./report/report.html
  4. addopts=-s
  5. testpaths = test_case
  6. python_files = test_*.py
  7. python_classes = Test_*
  8. python_functions = test_*
  9. markers =
  10. level1
  11. level2
  12. level3
  13. bvt

  

3、全局共享配置文件:conftest.py文件

  1. # -*- coding:utf-8 -*-
  2. import pytest
  3. from lib import basefunc
  4.  
  5. @pytest.fixture(scope="function",autouse=True)
  6. def setup_function():
  7. print("执行conftest文件")
  8. basefunc.delfile()
  9. yield
  10. print("执行conftest文件")
  11. basefunc.delfile()

  

我的conftest文件中的scope=“function”,autouse=True,所以是每个测试函数都会执行这个函数

yield前面的代码是函数执行前执行的,yield后面的代码是是函数执行后需要执行的代码

4、lib目录下,存储我的公共的方法,包括一些日志模块等

logobj.py

  1. # Auther Bob
  2. # --*--coding:utf-8--*--
  3. import logging
  4. import os
  5.  
  6. # z注册一个全局的日志对象
  7. class GetLogObj(object):
  8. basepath = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),"log")
  9. def __init__(self,filename):
  10. self.path = os.path.join(GetLogObj.basepath,filename+".txt")
  11.  
  12. def log(self):
  13. log_obj = logging.getLogger("administrator")
  14. log_obj.setLevel(logging.DEBUG)
  15.  
  16. # 注册一个打印到文件的日志对象
  17. fh = logging.FileHandler(self.path)
  18. fh.setLevel(logging.DEBUG)
  19.  
  20. # 设定日志打印的格式
  21. log_format = logging.Formatter("%(name)s %(message)s %(levelno)s %(thread)d %(process)d %(asctime)s",
  22. datefmt='%m/%d/%Y:%H:%M:%S %p')
  23.  
  24. # 在打印到文件的日志对象中应用日志格式
  25. fh.setFormatter(log_format)
  26.  
  27. # 将打印到屏幕和日志的对象注册到全局的日志对象中
  28. log_obj.addHandler(fh)
  29.  
  30. return log_obj

  

basefunc.py

  1. # -*- coding:utf-8 -*-
  2. import os
  3. import time
  4.  
  5. def addfile(filename):
  6. file = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'testfile',filename + "_" + str(time.time()))
  7. with open(file,mode="a") as f:
  8. for i in range(1,200):
  9. f.write(str(i))
  10. f.write("\n")
  11.  
  12. def getfile():
  13. file = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'testfile')
  14. filelist = []
  15. for file in os.listdir(file):
  16. filelist.append(file)
  17. if "__init__.py" in filelist:
  18. filelist.remove("__init__.py")
  19. return filelist
  20.  
  21. def delfile():
  22. basefile = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'testfile')
  23. for file in os.listdir(basefile):
  24. abspath = os.path.join(basefile,file)
  25. os.remove(abspath)

 

5、test_case目录:这里是我的核心的测试代码

 

6、pytest的知识点1:给案例打标签

在真正的实战中,这里主要是区分案例执行的优先级

7、pytest知识点2:断言

在真正的实战中,断言是必不可缺少的,没有断言的测试案例不是一个真正的测试案例,是没有灵魂的

7、pytest知识点3:函数的前置条件和后置条件

  1. def setup(self):
  2. print("测试文件1:添加资产::函数级别::前置条件")
  3.  
  4. def teardown(self):
  5. print("测试文件1:添加资产::函数级别::后置条件")

  

这个只对当前的测试文件生效,setup是执行测试函数前执行,teardown在执行测试函数后执行

8、pytest知识点4:类的前置条件和后置条件

  1. def setup_class(self):
  2. print("测试文件1:添加资产::类::前置条件")
  3.  
  4. def teardown_class(self):
  5. print("测试文件1:添加资产::类::后置条件")

  

这个只对当前的测试文件生效,setup_class是执行这个类前执行,tear_down是执行类后执行

9、pytest知识点5:序列化参数

  1. @pytest.mark.level2
  2. @pytest.mark.parametrize("filename", ["cui1", "cui2", "cui3", "cui4"])
  3. def test_add_asset_002(self,filename):
  4. time.sleep(2)
  5. flag = False
  6. basefunc.addfile(filename)
  7. for i in basefunc.getfile():
  8. if filename in i:
  9. flag = True
  10. l_obj.log().info("给{filename}文件中添加文件成功".format(filename = filename))
  11. if not flag:
  12. l_obj.log().error("给{filename}文件中添加文件失败".format(filename = filename))
  13.  
  14. filelist = basefunc.getfile()
  15. assert len(filelist) == 1

  

这里通过@pytest.mark.parametrize去传参数给测试函数,这里传了4个参数,相当于是4个测试案例

三、jenkins结合pytest框架执行测试案例

1、设置执行周期

2、设置执行任务入口

3、查看jenkins配置生效

四、jenkins的邮件配置

1、需要安装一个插件:Email Extension Plugin

2、jenkins全局配置

这里要配置Jenkins的发件人的邮箱地址

这里的密码可不是登陆的密码,而是是在这里,大家千万要注意

3、项目内配置,大家主要圈红的地方

五、测试

1、点击build now

2、查看控制台输出日志

3、检查已经收到具体的邮件

pytest测试框架+jenkins结合pytest+jenkins邮件通知配置的更多相关文章

  1. 『德不孤』Pytest框架 — 1、Pytest测试框架介绍

    目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...

  2. pytest测试框架 -- 简介

    一.pytest测试框架简介: (1)pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效. (2)pytest框架可以兼容unittest用 ...

  3. Pytest测试框架(五):pytest + allure生成测试报告

    Allure 是一款轻量级.支持多语言的开源自动化测试报告生成框架,由Java语言开发,可以集成到 Jenkins. pytest 测试框架支持Allure 报告生成. pytest也可以生成juni ...

  4. Pytest测试框架(一):pytest安装及用例执行

    PyTest是基于Python的开源测试框架,语法简单易用,有大量的插件,功能非常多.自动检测测试用例,支持参数化,跳过特定用例,失败重试等功能. 安装 pip install -U pytest  ...

  5. Pytest测试框架(二):pytest 的setup/teardown方法

    PyTest支持xUnit style 结构, setup() 和 teardown() 方法用于初始化和清理测试环境,可以保证测试用例的独立性.pytest的setup/teardown方法包括:模 ...

  6. Pytest测试框架(三):pytest fixture 用法

    xUnit style 结构的 fixture用于初始化测试函数, pytest fixture是对传统的 xUnit 架构的setup/teardown功能的改进.pytest fixture为测试 ...

  7. Jenkins系列之四——设置邮件通知

    Jenkins持续集成,当我们自动打包部署完,我们可以发送一封邮件给相关的负责人.现介绍一下如何在Jenkins中配置实现邮件通知. 在Jenkins中配置实现邮件通知,Jenkins提供了两种方式的 ...

  8. 高可用服务之Keepalived邮件通知配置

    上一篇博客我们了解了keepalived的架构以及安装.VIP的配置和高可用相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13634755.html: ...

  9. paip.数据库发邮件通知配置

    paip.数据库发邮件通知配置 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/attilax ...

随机推荐

  1. spark-streaming获取kafka数据的两种方式

    简单理解为:Receiver方式是通过zookeeper来连接kafka队列,Direct方式是直接连接到kafka的节点上获取数据 一.Receiver方式: 使用kafka的高层次Consumer ...

  2. 单细胞分析实录(8): 展示marker基因的4种图形(一)

    今天的内容讲讲单细胞文章中经常出现的展示细胞marker的图:tsne/umap图.热图.堆叠小提琴图.气泡图,每个图我都会用两种方法绘制. 使用的数据来自文献:Single-cell transcr ...

  3. ThinkPHP的url简化

    TP的url请求简化 下面是apache的配置过程,可以参考: 1.       httpd.conf 配置文件中加载了mod_rewrite.so模块 2.       AllowOverride ...

  4. ASP.NET Core 上传文件到共享文件夹

    参考资料:ASP.NET 上传文件到共享文件夹 创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html 一.配置上传文件相关参数并读取 ...

  5. 基于腾讯云存储网关 CSG 实现视频在线转码分发

    一.背景 随着越来越多的传统业务云化和云端业务发展,数据上云和云端数据处理领域的需求爆发式增长.腾讯云存储网关CSG提供一键部署开箱即用的便捷模式,深度结合COS对象存储生态,为用户提供方便快捷的数据 ...

  6. PHP MySQLi extension is not loaded

    PHP MySQLi extension is not loaded 如何解决呢?  yum -y install mysqli.so  huozhe yum -y install php-mysql

  7. 【ORACLE错误】SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled

    执行set autotrace traceonly的时候,报错 SQL> set autotrace traceonly SP2-0618: Cannot find the Session Id ...

  8. 【Oracle】B-tree和函数索引

    转自:https://www.cnblogs.com/yumiko/p/5957613.html 函数索引 1.1 概述 在实际应用中,当条件列使用函数运算进行数据匹配时,即使该列建立了索引,索引也不 ...

  9. VB基础总结

    前段时间用VB写了一个简单窗口小应用,久了不碰VB,都忘了,下面用思维导图简单总结了一些基础的东西,方便以后快速查阅.

  10. kioptrixVM3

    简介 Vulnhub是一个提供各种漏洞环境的靶场平台. 个人学习目的:1,方便学习更多类型漏洞.2,为OSCP做打基础. 下载链接 https://www.vulnhub.com/entry/kiop ...