【完结】【没毛病】jenkins+python+allure+pytest自动化持续集成

1 pytest+allure自动化测试框架

1.1 pytest安装

1.2 allure安装

下载allure后扔到D盘,并且配置环境变量path,如下:
在这里插入图片描述

1.2 框架编写

目录结构如下:
在这里插入图片描述

  1. data 存放测试用例(xls)、测试文件数据(上传的文件)、测试结果文件(xls)、下载的文件
  2. log 日志保存路径
  3. report allure报告保存路径
  4. result allure测试结果保存路径
  5. testcase 测试用例类
  6. util 工具类
  7. run.py 入口文件

1.2.1 框架设计思路

在这里插入图片描述

  1. 测试用例xls中保存测试用例编号、用例名称、请求方式(post、get)、url、header、param、body、检查点、用例类型、关联
  2. 通过工具类的readXlsUtil获取单个sheet中的数据组成一个list
  3. 通过@pytest.mark.parametrize('data', caseData, ids=caseNames)注解实现数据驱动
  4. 通过工具类的JsonPah来获取响应中的值保存起来,以备关联使用
  5. 通过工具类的Replace来替换请求url、header、param、body中的参数
  6. 通过工具类的baseApi.sendRequest实现http请求
  7. 通过工具类的baseApi.writeResult实现结果xls保存

1.2.2 项目源码

见github:https://github.com/suheping/pytest_auto_plat

1.2.3 核心代码

我们的接口测试类无特殊情况只需要用着一个就够了,不需要一个功能写一个类
test_api.py

# -*- encoding: utf-8 -*-
'''
@File    :   test_api.py
@Time    :   2020/12/18 11:55:48
@Author  :   peace_su
@Version :   1.0
@Contact :   peace_su@163.com
@WebSite :   https://me.csdn.net/u010098760
'''

# here put the import lib
import pytest
import allure
import requests
from util import readXlsUtil, logUtil
from util.baseApi import sendRequest, writeResult
from util.jsonPah import JsonPah
from util.replace import Replace
from util.copyXls import copyXls
from util.genSign import GenSign

# 用例路径
# caseXls = 'E:\pyworkspace\pytest_demo\data\case1.xlsx'
caseXls = 'data\case1.xlsx'
rxls = readXlsUtil.readXlsUtil(caseXls, 'Sheet1')
# 获取type为1的测试用例
caseData = rxls.dict_data(1)
# 获取用例名称
caseNames = rxls.dict_name(caseData)
# 测试结果文件
# reportXls = 'E:\pyworkspace\pytest_demo\data\case1_report.xlsx'
reportXls = 'data\case1_report.xlsx'
copyXls(caseXls, reportXls)


@allure.feature('测试某个功能')
class Test_api(object):

    def setup_class(self):
        self.logger = logUtil.Log('test_api').getlogger()
        self.tmp = {}
        self.session = requests.session()

    # @allure.story('查询企业信息')
    @pytest.mark.parametrize('data', caseData, ids=caseNames)
    def testApi(self, data):  # test method names begin with 'test'
        self.logger.info(
            '----用例[ %s ]------begin-------------' % data['caseId'])
        if self.tmp != {}:
            # 如果有关联参数,替换body、params、url、headers
            data['body'] = Replace(data['body'], self.tmp).replace()
            # 计算sign
            sign = GenSign('vtysJXstynJpIlEudO').genSign(data['body'])
            self.tmp['sign'] = sign
            data['params'] = Replace(data['params'], self.tmp).replace()
            data['url'] = Replace(data['url'], self.tmp).replace()
            data['headers'] = Replace(data['headers'], self.tmp).replace()
        # 发送请求
        result = sendRequest(self.session, data)
        # 如果存在re,就去响应中查找,找到后存到tmp中
        if data['re']:
            t = JsonPah(result['text'])
            param = t.jsonFind(data['re'])
            for j in param:
                self.tmp[j] = param[j]
        self.logger.info('保存的关联参数为:%s' % self.tmp)
        # 写结果
        writeResult(result, reportXls)
        # 开始断言
        assert result['result'] == 'pass'
        self.logger.info('----用例[ %s ]------end-------------' % data['caseId'])


if __name__ == '__main__':
    pytest.main(["--reruns", "1", "--reruns-delay",
                 "2", "--alluredir", "result"])

1.2.4 关联数据保存

关联数据的读取是个比较关键的点,比如返回的json中有多层,而且有重复的key值,怎么办?
举例说明:
返回的json如下:

{
    "return_code": "1000",
    "return_message": "success",
    "result_code": "0",
    "result_message": "处理成功",
    "access_token": 123,
    "data": [{
        "access_token": "456",
        "scope": "token",
        "token_type": "bearer",
        "expires_in": 69272
    },
    {
        "access_token": "789",
        "scope": "token",
        "token_type": "bearer",
        "expires_in": 69272
    }]
}

我们要取到值为“789”的accesss_token,我们xls中re字段怎么写呢?
如下:(下标是从0开始的)

{"token":"access_token[2]"}

这个意思就是将返回的 access_token保存到token变量中

1.2.5 关联数据替换

上一步中我们把响应中的数据保存下来了,怎么应用到之后的请求中呢?
我们只需要在xls用例的url、param、body、header中使用如下方式即可:
我们要在header中传入token,只需要把token的值改为${token}即可

{"Content-Type":"application/json","sign":"${sign}","token":"${token}"}

2 jenkins持续集成

jenkins搭建在windows环境下
注:十分重要
在jenkins中执行python run.py会报各种各样的错误,但是在cmd中正常,这是因为jenkins启动用户权限的问题,在服务中找到jenkins,右键属性-登录tab,填写cmd中可正常执行的用户,如下:

在这里插入图片描述

2.1 jenkins搭建

官网下载windows的安装包,一直下一步即可

2.2 jenkins工作目录更改

默认jenkins的工作目录在c盘windows。。。。一个很深的目录下,我们需要把他挪出来,步骤如下:

  1. 找到jenkins安装目录下的jenkins.xml文件,打开
  2. 找到 <env name="JENKINS_HOME" value="xxxx,修改value的值为你自己要放的位置
  3. 重启jenkins,服务中重启或者在安装目录下执行jenkins.exe stop jenkins.exe start
  4. 启动后重新配置jenkins

2.3 jenkins安装allure插件

  1. jenkins的插件管理中搜索 allure,安装
  2. jenkins的 Global Tool Configuration中最下方配置Allure Commandline,如下:
    在这里插入图片描述

3 创建job

  1. 先新建一个job,自由风格即可

  2. 源码管理中选择git,拉取源码,如下:
    在这里插入图片描述

  3. 构建中选择cmd,如下:
    在这里插入图片描述

  4. 构建后操作 中选择allure report,如下:
    在这里插入图片描述
    注:path必须是result,因为我们run.py代码里写的结果保存路径就是result

  5. 点击高级,添加如下配置:(report path可以随意填写)
    在这里插入图片描述

  6. 应用、保存

4 构建job

  1. 点击build now,开始构建
  2. 构建完成后,我们点击 allure report即可跳到保存页面
    在这里插入图片描述
  3. 报告如下:
    在这里插入图片描述

齐活

5 锦上添花

5.1 配置个钉钉通知

  1. 找个钉钉群,加个钉钉机器人
  2. jenkins中安装插件DingTalk
  3. jenkins的 configure system中配置钉钉机器人的webhook、关键字或者加密
  4. 进入job中勾选上刚刚添加的机器人
  5. 构建一下,钉钉群收到通知

在这里插入图片描述

6 重要更新(jenkins构建时上传测试用例)

一个测试平台,代码跟测试用例肯定是分开的,我们可以通过jenkins构建时上传测试用例文件来实现这一个功能,接下来说一下怎么实现:

6.1 修改入口文件run.py

修改run.py为接收命令行入参,参数有两个(测试用例路径、测试结果文件路径),如下:

import sys
import pytest
from util import glb

def main(argv):
    glb.xls_path = argv[1]
    glb.xls_report_path = argv[2]
    pytest.main(["--reruns", "1", "--reruns-delay",
                 "2", "--alluredir", "result"])


if __name__ == '__main__':
    main(sys.argv)

6.2 修改glb.py和test_api.py

修改glb.py,传递两个参数(测试用例路径、测试结果文件路径)

# 要执行的用例文件路径,eg: data\case1.xlsx
xls_path = ''
# 要保持的结果文件的路径,eg: data\case1_report.xls
xls_report_path = ''

修改test_api.py,接收两个参数(测试用例路径、测试结果文件路径)

# 用例路径
# caseXls = 'data\case1.xlsx'
# caseXls = 'data\\case1.xlsx'
caseXls = glb.xls_path

# 测试结果文件
# reportXls = 'data\case1_report.xlsx'
# reportXls = 'data\\case1_report.xlsx'
reportXls = glb.xls_report_path

6.3 修改jenkins的job

设置构建时上传文件,如下:
在这里插入图片描述
修改构建脚本,如下:
在这里插入图片描述
第一个参数需要与构建参数中的文件路径相同
第二个参数是保存的结果文件

6.4 构建下看效果

构建界面,如下:
在这里插入图片描述
选择测试用例文件后,点击“开始构建”,查看构建日志,如下:
在这里插入图片描述
完成!


快来联系我吧
在这里插入图片描述

  • 8
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常抱歉,但是我无法为您提供实际的代码或详细步骤。我可以给您一个大致的指导方向,帮助您开始搭建这样的环境。请注意,这只是一个简单的概述,具体的步骤可能会因您的具体需求而有所不同。在开始之前,请确保您已经安装了Docker并且具备一定的Linux基础知识。 1. 安装Docker:根据您的Linux发行版,安装Docker并确保其正确运行。 2. 创建Jenkins容器:使用Docker命令创建一个Jenkins容器,并指定端口映射以及其他配置参数。例如: ``` docker run -d -p 8080:8080 -p 50000:50000 --name jenkins jenkins/jenkins:lts ``` 这将在本地主机上启动一个Jenkins容器,并将Jenkins的Web界面映射到主机的8080端口。 3. 安装Allure:在Jenkins容器中安装Allure插件。打开Jenkins的Web界面,在“管理插件”中搜索并安装Allure插件。 4. 安装JDK:在Jenkins容器中安装JDK。您可以使用Dockerfile来自定义Jenkins容器,并在其中安装JDK。例如: ``` FROM jenkins/jenkins:lts USER root RUN apt-get update && apt-get install -y openjdk-11-jdk USER jenkins ``` 然后使用Docker命令构建并运行该容器。 5. 安装PythonPytest:在Jenkins容器中安装PythonPytest。您可以使用Jenkins的插件管理界面来安装相关的插件,例如Python插件和Pytest插件。 6. 配置Gitee集成:在Jenkins的Web界面中,配置Gitee集成。您可以使用Gitee插件来实现与Gitee的集成,例如拉取代码、触发构建等。 这只是一个大致的指导方向,具体的步骤和配置可能会因您的具体需求而有所不同。请参考相关文档和教程以获取更详细的信息。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值