测开新手:pytest+requests+allure自动化测试接入Jenkins学习

这篇具有很好参考价值的文章主要介绍了测开新手:pytest+requests+allure自动化测试接入Jenkins学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板)

最近在这整理知识,发现在pytest的知识文档缺少系统性,这里整理一下,方便后续回忆。

在python中,大家比较熟悉的两个框架是unittest和pytest:

Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。

Pytest是Python的另一个第三方单元测试库。它的目的是让单元测试变得更容易,并且也能扩展到支持应用层面复杂的功能测试。

两者之间的区别如下:

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

这里试用的pytest框架,加上request来实现接口自动化的测试,整个框架考虑到使用数据驱动的方式,将数据维护在Excel文档中。

1、下载安装allure

下载地址:

https://github.com/allure-framework/allure2/releases

https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/

选择需要的版本下载,这里我下载的是2.13.2版本

下载好后,解压到你需要存放的路目录,并配置环境变量

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

检查是否配置成功,执行cmd,输入命令 allure,出现如下图,则表示安装成功

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

2、下载安装python

下载地址https://www.python.org/

下载好后,安装并配置环境变量,具体流程可以网络查找

3、python安装依赖包

cmd命令执行,也可以通过项目中的requirements.txt来安装,安装步骤后面再说

pip3 install allure-pytest
pip3 install pytest
pip3 install pytest_html
pip3 install request

4、下载并安装pycharm工具

查看网络教程

5、在pycharm,新建项目及编码

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

项目目录如图:

base:存放一些最底层的方法封装,协议,请求发送等。

common:存放一些公共方法。

config:存放配置文件。

testData:存放测试数据。

log:存放日志。

report:存放报告。

testCase:存放用例。

utils:存放公共类。

readme:用于说明文档。

requirements.txt: 用于记录所有依赖包极其版本号,便于环境部署,可以通过pip命令自动生成和安装

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

这里采用数据驱动的方式,数据通过读取excel文件来执行测试,所以这里需要封装读取excel的方法,使用xlrd来操作读取

# operationExcel.py
import json

from common.contentsManage import filePath
import xlrd, xlwt
class OperationExcel:
    # 获取shell表
    def getSheet(self, index=0):
        book = xlrd.open_workbook(filePath())
        return book.sheet_by_index(index) #根据索引获取到sheet表

    # 以列表形式读取出所有数据
    def getExcelData(self, index=0):
        data = []
        sheet = self.getSheet(index=index)
        title = sheet.row_values(0) # (0)获取第一行也就是表头
        for row in range(1, sheet.nrows): # 从第二行开始获取
            row_value = sheet.row_values(row)
            data.append(dict(zip(title, row_value))) # 将读取出第一条用例作为一个字典存放近列表

        return data

# 对excel表头进行全局变量定义
class ExcelVarles:
    case_Id = "用例ID"
    case_module="用例模块"
    case_name="用例名称"
    case_server="用例地址"
    case_url="请求地址"
    case_method="请求方法"
    case_type="请求类型"
    case_data="请求参数"
    case_headers="请求头"
    case_preposition="前置条件"
    case_isRun = "是否执行"
    case_code = "状态码"
    case_result = "期望结果"

if __name__ == "__main__":
    opExcel = OperationExcel()
    # opExcel.getSheet()
    # print(opExcel.getExcelData())
    opExcel.writeExcelData(1, 7, f"test{2}")

excel 文件内容如图

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

封装用例

# test_api_all.py
# 参数化运用所有用例
import json
import pytest

from utils.operationExcel import OperationExcel, ExcelVarles
from base.method import ApiRequest
from common.log import logger

opExcel = OperationExcel()
apiRequest = ApiRequest()

@pytest.mark.parametrize('data', opExcel.getExcelData()) # 装饰器进行封装用例
def test_api(data, login_token=None):
    if data[ExcelVarles.case_isRun] == "N" :
        logger.info("跳过执行用例")
        return

    # 请求头作为空处理并添加token
    headers = data[ExcelVarles.case_headers]
    if len(str(headers).split()) == 0:
        pass
    elif len(str(headers).split()) >= 0:
        headers = json.loads(headers) # 转换为字典
    #     headers['Authorization'] = login_token # 获取登录返回的token并添加到读取出来的headers里面
        headers = headers

    # 对请求参数做为空处理
    params = data[ExcelVarles.case_data]
    if len(str(params).split()) == 0:
        pass
    elif len(str(params).split()) == 0:
        params = params

    url = data[ExcelVarles.case_server] + data[ExcelVarles.case_url] + "?" + params
    r = apiRequest.all_method( data[ExcelVarles.case_method] ,url, headers=headers)
    logger.info(f"响应结果{r}")
    responseResult = json.loads(r)

    case_result_assert(data[ExcelVarles.case_code], responseResult['code'])

# 断言封装
def case_result_assert(expectedResult, actualReuls) :
    '''
    断言封装
    :param expectedResult: 预期结果
    :param actualReuls: 实际结果
    :return:
    '''
    assert expectedResult == actualReuls # 状态码

封装日志文件

# log.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import logging
import time
import os

from common.contentsManage import logDir

# BASE_PATH = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
# # 定义日志文件路径
# LOG_PATH = os.path.join(BASE_PATH, "log")
# if not os.path.exists(LOG_PATH):
#     os.mkdir(LOG_PATH)

# 方法1
# 封装自己的logging
class MyLogger:
    def __init__(self):
        self._logName = os.path.join(logDir(), "{}.log".format(time.strftime("%Y%m%d")))
        self._logger = logging.getLogger("logger")
        self._logger.setLevel(logging.DEBUG)
        self._formatter = logging.Formatter('[%(asctime)s][%(filename)s %(lineno)d][%(levelname)s]:%(message)s')
        self._streamHandler = logging.StreamHandler()
        self._fileHandler = logging.FileHandler(self._logName, mode='a', encoding="utf-8")
        self._streamHandler.setFormatter(self._formatter)
        self._fileHandler.setFormatter(self._formatter)
        self._logger.addHandler(self._streamHandler)
        self._logger.addHandler(self._fileHandler)

    # 获取logger日志记录器
    def get_logger(self):
        return self._logger

logger = MyLogger().get_logger()

封装请求方法

# method.py
import json
import requests
from common.log import logger
from utils.commonUtils import isJson

class ApiRequest(object):
    # ---- 第一种请求方式封装requests库,调用可根据实际情况传参 ----
    # def send_requests(self, method, url, data=None, params=None, headers=None,
    #                   cookies=None,json=None,files=None,auth=None,timeout=None,
    #                   proxies=None,verify=None,cert=None):
    #     self.res = requestes.request(method=method, url= url, headers=headers,data=data,
    #                                params=params, cookies=cookies,json = json,files=files,
    #                                auth=auth, timeout= timeout, proxies=proxies,verify=verify,
    #                                cert=cert)
    #     return self.res

    # 第二种封装方法
    def get(self, url, data=None, headers=None, payload=None):
        if headers is not None:
            res = requests.get(url=url, data=data,headers=headers)
        else:
            res = requests.get(url=url, data=data)

        return res

    def post(self, url, data, headers, payload:dict, files=None):
        if headers is not None:
            res = requests.post(url=url, data=data, headers=headers)
        else :
            res = requests.post(url=url, data=data)

        if str(res) == "<Response [200]>" :
            return res.json()
        else :
            return res.text

    def put(self,url,data,headers, payload:dict, files=None):
        if headers is not None :
            res = requests.put(url=url,data=data,headers=headers)
        else:
            res = requests.put(url=url,data=data)
        return res

    def delete(self,url,data,headers, payload:dict):
        if headers is not None :
            res = requests.delete(url=url,data=data,headers=headers)
        else:
            res = requests.delete(url=url,data=data)

        return res

    def all_method(self, method, url, data=None, headers=None, payload=None, files=None):
        logger.info(f"请求方法是{method}, 请求地址{url}")
        if headers == None:
            headers = {}

        if method.upper()=='GET':
            res = self.get(url,data,headers, payload)
        elif method.upper()=='POST':
            res = self.post(url, data, headers, payload, files)
        elif method.upper() == 'PUT':
            res = self.put(url, data, headers, payload, files)
        elif method.upper() == 'DELETE':
            res = self.delete(url, data, headers, payload)
        else :
            res = f'请求{method}方式不支持,或者不正确'

        return json.dumps(res, ensure_ascii=False, indent=4, sort_keys=True, separators=(',',':'))

运行

# run.py
import shutil
import pytest
import os

from common.log import logger
import subprocess # 通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序
from common.contentsManage import htmlDir, resultDir

if __name__ == '__main__':
    htmlPath = htmlDir()
    resultPath = resultDir()
    if os.path.exists(resultPath) and os.path.isdir(resultPath):
        logger.info("清理上一次执行的结果")
        shutil.rmtree(resultPath, True)

    logger.info("开始测试")
    pytest.main(["-s", "-v", "--alluredir", resultPath]) #运行输出并在resport/result目录下生成json文件
    logger.info("结束测试")

    # 如果是代码单独执行,需要立马看到报告,可以执行下面语句,如果配合Jenkins使用,则可以不需要执行,Jenkins自带的插件allure会操作
    # logger.info("生成报告")
    # subprocess.call('allure generate ' + resultPath + ' -o '+ htmlPath +' --clean', shell=True) # 读取json文件并生成html报告,--clean诺目录存在则先清楚
    # logger.info("查看报告")
    # subprocess.call('allure open -h 127.0.0.1 -p 9999 '+htmlPath+'', shell=True) #生成一个本地的服务并自动打开html报告

依赖包安装,可以执行命令 pip3 install -r requirements.txt,来安装

# requirements.txt
pytest==7.4.3
pytest-html==4.1.1
pytest-xdist==3.5.0
pytest-ordering==0.6
pytest-rerunfailures==13.0
allure-pytest==2.13.2
xlrd==1.2.0
requests==2.31.0

至此,项目的代码框架就基本结束了

6、安装并配置Jenkins

Jenkins的安装,看你需要在Windows还是Linux下安装,具体教程可以网络查找

Jenkins安装allure插件

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

Jenkins安装并登录后,可以创建任务

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

添加构建步骤,根据你安装环境的不同,选择不同的构建

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

添加构建后操作,选择 allure Report

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

配置代码执行的结果地址

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

运行测试后,可以在任务中查看allure生成的报告

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

至此,jenkins+python+pytest+requests+allure的接口自动化测试就记录到这里,刚兴趣的可以去看看pytest的官方文档,了解更多知识。

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

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试
测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试测开新手:pytest+requests+allure自动化测试接入Jenkins学习,职场经验,软件测试,IT,pytest,jenkins,学习,自动化测试,软件测试,requests,allure自动化测试文章来源地址https://www.toymoban.com/news/detail-790312.html

到了这里,关于测开新手:pytest+requests+allure自动化测试接入Jenkins学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python+request+pytest+allure接口自动化使用说明书

    接口自动化使用与流程设计: 一、设计思路 1、一个好的框架,必须要可读性强,所以目录规划尤为重要; 2、公共的方法提取出来,提高复用性; 3、可变的环境等参数,提取出来放到配置文件中,这样,每次只需要更改配置文件中的值; 4、为了追踪错误,需要必要的日志

    2024年02月09日
    浏览(44)
  • 一个简单的接口自动化测试框架:Python+Requests+Pytest+Allure

    project:api_test ——api_keyword ————api_key.py:接口驱动类 ——case ————test_cases.py:测试套件和测试用例 ——report_allure( 无需创建 ):allure报告 ——result( 无需创建 ):测试用例运行结果 ——VAR ————VAR.py:常量类 conftest.py:项目级别fixture main.py:主函数

    2024年02月03日
    浏览(42)
  • Python接口自动化测试-篇1(postman+requests+pytest+allure)

    Python接口自动化测试是一种使用Python编程语言来编写脚本以自动执行针对应用程序接口(APIs)的测试过程。这种测试方法专注于检查系统的不同组件或服务之间的交互,确保它们按照预期规范进行通信,而不涉及用户界面(UI)的验证。 目录 一、接口测试基础 二、工具实现

    2024年04月17日
    浏览(40)
  • Python+requests+pytest+allure封装接口自动化1-项目结构目录创建,requests库封装

    api: 这是一个package,用来各个接口的类封装,按照你的业务可以将其分为多个package common: 这是一个package,用来封装底层公共方法,比如requests库封装、文件操作封 装、加解密封装、redis封装、数据库封装、随机数据封装、日志封装 testcases: 这是一个package,用来编写封装我们

    2024年02月12日
    浏览(36)
  • (Python)Requests+Pytest+Allure接口自动化测试框架从0到1搭建

    前面,已经学习了如何用SpringBoot写接口以及与Mysql数据库进行交互,具体可查阅下面的这篇博客,今天学习一下基于Python的接口自动化测试框架的搭建,主要包括以下内容:利用request库发送请求,请求数据参数化处理,还涉及到数据库(Mysql+MongDB)方面的交互,包括如何取数

    2024年02月13日
    浏览(46)
  • 接口自动化测试-Python+Requests+Pytest+YAML+Allure配套撸码(详细)

    接口自动化框架:Python+Requests+Pytest+YAML+Allure 通过 Python+Requests 来发送和处理HTTP协议的请求接口,使用 Pytest 作为测试执行器,使用 YAML 来管理测试数据,使用 Allure 来生成测试报告。 框架结构 api ==== 接口封装层,如封装HTTP接口为Python接口 common ==== 各种工具类 core ==== reques

    2024年02月15日
    浏览(40)
  • Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

            --------UnitTest框架和PyTest框架的简单认识对比与项目实战-------- 定义: Unittest是Python标准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框架一样,Unittest则是Python语言的标准单元测试框架。 Pytest是Python的另一个第三方单元测

    2024年02月09日
    浏览(31)
  • pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化

    目录 接口自动化测试框架(用例自动生成) 项目说明 技术栈 环境部署 框架流程图与目录结构图及相关说明 1、框架流程图如下 2、代码目录结构图如下 关联详解 函数助手详解 代码设计与功能说明 1、定义运行配置文件 runConfig.yml 2、接口配置文件 apiConfig.ini 3、测试用例的设

    2024年02月09日
    浏览(45)
  • Pytest自动化测试框架之Allure报告

    Allure Framework是一种灵活的、轻量级、多语言测试报告工具。 不仅可以以简洁的网络报告形式非常简洁地显示已测试的内容, 而且还允许参与开发过程的每个人从日常执行中提取最大程度的有用信息和测试。 从开发/测试的角度来看: Allure报告可以快速查看到缺陷点,可以将

    2024年02月06日
    浏览(40)
  • 自动化测试笔记(selenium+pytest+Allure)

    自动化测试:所有采用程序或代码来替代或辅助人工测试的行为称为自动化测试。 自动化测试好处:提升工作效率 主要应用环节:回归测试、兼容性测试、冒烟测试 适合自动化测试的项目特点: 1、项目需求稳定 2、项目周期较长 3、脚本可以重复使用 selenium:是由thoughtwo

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包