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

自动化测试框架的选择上,我选择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

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

  

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

[pytest]
;addopts=-s --html=report.html --reruns 3 --reruns-delay 2
;--html=./report/report.html
addopts=-s
testpaths = test_case
python_files = test_*.py
python_classes = Test_*
python_functions = test_*
markers =
level1
level2
level3
bvt

  

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

# -*- coding:utf-8 -*-
import pytest
from lib import basefunc @pytest.fixture(scope="function",autouse=True)
def setup_function():
print("执行conftest文件")
basefunc.delfile()
yield
print("执行conftest文件")
basefunc.delfile()

  

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

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

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

logobj.py

# Auther Bob
# --*--coding:utf-8--*--
import logging
import os # z注册一个全局的日志对象
class GetLogObj(object):
basepath = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),"log")
def __init__(self,filename):
self.path = os.path.join(GetLogObj.basepath,filename+".txt") def log(self):
log_obj = logging.getLogger("administrator")
log_obj.setLevel(logging.DEBUG) # 注册一个打印到文件的日志对象
fh = logging.FileHandler(self.path)
fh.setLevel(logging.DEBUG) # 设定日志打印的格式
log_format = logging.Formatter("%(name)s %(message)s %(levelno)s %(thread)d %(process)d %(asctime)s",
datefmt='%m/%d/%Y:%H:%M:%S %p') # 在打印到文件的日志对象中应用日志格式
fh.setFormatter(log_format) # 将打印到屏幕和日志的对象注册到全局的日志对象中
log_obj.addHandler(fh) return log_obj

  

basefunc.py

# -*- coding:utf-8 -*-
import os
import time def addfile(filename):
file = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'testfile',filename + "_" + str(time.time()))
with open(file,mode="a") as f:
for i in range(1,200):
f.write(str(i))
f.write("\n") def getfile():
file = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'testfile')
filelist = []
for file in os.listdir(file):
filelist.append(file)
if "__init__.py" in filelist:
filelist.remove("__init__.py")
return filelist def delfile():
basefile = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'testfile')
for file in os.listdir(basefile):
abspath = os.path.join(basefile,file)
os.remove(abspath)

 

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

 

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

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

7、pytest知识点2:断言

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

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

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

  

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

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

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

  

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

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

    @pytest.mark.level2
@pytest.mark.parametrize("filename", ["cui1", "cui2", "cui3", "cui4"])
def test_add_asset_002(self,filename):
time.sleep(2)
flag = False
basefunc.addfile(filename)
for i in basefunc.getfile():
if filename in i:
flag = True
l_obj.log().info("给{filename}文件中添加文件成功".format(filename = filename))
if not flag:
l_obj.log().error("给{filename}文件中添加文件失败".format(filename = filename)) filelist = basefunc.getfile()
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. android stdio 打包

    1.Build -> Generate Signed APK...,打开如下窗口 2.假设这里没有打过apk包,点击Create new,窗口如下 这里只要输入几个必要项 Key store p ...

  2. 大数据可视化呈现工具LightningChart的用法

    LightningChart (LightningChart Ultimate) 软件开发工具包是微软VisualStudio 的一个插件,专攻大数据可视化呈现问题,用于WPF(WindowsPres ...

  3. LeetCode24 两两交换链表中的节点

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能使用常数的 ...

  4. 如何实现CentOS服务器的扩容??

    Linux的硬盘识别: 一般使用"fdisk -l"命令可以列出系统中当前连接的硬盘 设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息. 1.关闭服务器加上新硬盘 2.启动 ...

  5. rename命令和批量重命名

    本文为转载文章,转发自 https://blog.csdn.net/GGxiaobai/article/details/53507454 早期版本的rename是C语言版本,如今新的Ubuntu中采用 ...

  6. BINARY SEARCH 的一点说明

    在sap 之abap语言中,有‍BINARY SEARCH这个查找条件.使用read table 来读取内表时,使用‍BINARY SEARCH可以大大的提高查找的效率,为什么呢?学过数据库的人会知道 ...

  7. apijson简单使用

    apijson简单使用 介绍 APIJSON 是一种专为 API 而生的 JSON 网络传输协议 以及 基于这套协议实现的 ORM 库.为简单的增删改查.复杂的查询.简单的事务操作 提供了完全自动化的 ...

  8. Linux内核分析_课程学习总结报告

    请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的.自洽的,并举例某一两个具体例子(比如读写文件.分配内存.使用I/O ...

  9. 微服务网关1-Spring Cloud Gateway简介

    一.网关基本概念 1.API网关介绍 ​ API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各 ...

  10. 阿里云RDS物理备份恢复到本地

    一:业务场景 验证阿里云备份文件可用性 二:恢复到本地过程中遇到的问题 1.修改密码报错 2.自定义函数不可用 三:恢复步骤 1.xtrabackup安装使用 请参考:https://www.cnbl ...