Python+requests+pytest+allure封装接口自动化1-项目结构目录创建,requests库封装

这篇具有很好参考价值的文章主要介绍了Python+requests+pytest+allure封装接口自动化1-项目结构目录创建,requests库封装。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、项目结构解析与展示

  1. 项目结构

api: 这是一个package,用来各个接口的类封装,按照你的业务可以将其分为多个package

common: 这是一个package,用来封装底层公共方法,比如requests库封装、文件操作封

装、加解密封装、redis封装、数据库封装、随机数据封装、日志封装

testcases: 这是一个package,用来编写封装我们的测试用例

confifig: 这是一个目录,用来存放基本的配置信息,比如数据库、redis、各个服务域名、各个

环境的配置

data:这是一个目录,用来存放测试用例数据

logs: 这是一个目录,用来存放收集到的日志文件

report: 这是一个目录,用来存放测试结果数据以及生成的测试报告

conftest.py: 用来重写pytest自带的一些钩子函数以及自定义的fifixture

pytest.ini: pytest的基本配置文件

run.py: 框架整体的统一执行入口

2.项目结构展示

python自动化封装目录,自动化测试,python,pytest,自动化,测试工具,Powered by 金山文档

二、Requests库,调用多种接口学习

# 导包
import requests

token = None


# get
def getRequest():
    # GET请求方式
    resq = requests.get(
        'https://www.qidian.com/ajax/Free/getSysTime?_csrfToken=gug6vyoHkNrG2oYkn0z2F7VDf7o2UCCPrDFrpDIT')
    # 返回响应的内容
    print('get接口返回值:', resq.text)
    # 打印返回的状态码
    print('Get打印返回的状态码', resq.status_code)
    # 返回JSON格式的内容
    print('get返回JSON格式的内容', resq.json())
    print('------------------------------------------------------------------------------------')


# json
# json 表示使用application/json方式提交请求。接收方request.body的内容为’{“a”: 1, “b”: 2}'的这种形式; 
def postJsonReqest():
    # Post方式请求json格式,使用Json请求参数
    json = {
        "userName": "admin",
        "password": "123456"
    }
    # 请求JSON类型的接口
    resq = requests.post('http://localhost:8888/community/flogin', json=json)
    print(f'登录接口返回的Json{resq.json()}')
    # 定义全局变量
    global token
    # 提取登录接口返回的token为全局变量,后面接口使用
    token = resq.json()['data']['token']
    print(f'提取登录接口的token值:{token}')
    print('------------------------------------------------------------------------------------')


# files
# 文件上传
def postFilesRequest():
    # 请求上传文件类型的接口,使用files
    # 以二进制的形式,打开读取文件
    f = open('../data/test.jpg', 'rb')
    # 读取文件
    f.read()
    # 定义一个files的字典,便于把读取到的二进制文件传入请求体中
    files = {'file': f}
    # 由于这个接口需要登录的token才能登录,将token放到headers中
    headers = {'token': token}
    # 发起文件请求接口,传入文件参数和请求头中的token参数
    resq = requests.post('http://localhost:8888/community/ImageController', files=files, headers=headers)
    print('文件类型接口返回值', resq.text)
    print('------------------------------------------------------------------------------------')
    f.close()


# form-data 表单类型接口
# 表示使用application/form-urlencode方式提交请求,接收方request.body的内容为a=1&b=2的这种形式;
def postFormDataRequest():
    # Post方式请求json格式,使用Json请求参数
    data = {
        "title": "自动化"
    }
    # 请求JSON类型的接口
    headers = {'token':token}
    resq = requests.post('http://localhost:8666/api/article/queryAllArticle2', data=data,headers=headers)
    print(f'form-data接口返回的值{resq.json()}')
    print('------------------------------------------------------------------------------------')



if __name__ == '__main__':
    # get请求
    getRequest()
    # post josn
    postJsonReqest()
    # post Files
    postFilesRequest()
    # post data
    postFormDataRequest()

打印结果展示

python自动化封装目录,自动化测试,python,pytest,自动化,测试工具,Powered by 金山文档

三、【python】*args和*kwargs用法

  • args :是 arguments 的缩写,表示位置参数;

  • kwargs: 是 keyword arguments 的缩写,表示关键字参数。

  • *和**:是python中两种可变参数的形式,且*args 必须放在 **kwargs 的前面,因为位置参数在关键字参数的前面。

1、*args的用法

*args就是就是传递一个可变参数列表给函数实参,这个参数列表的数目未知;

例如:我们要开发个加法计算器,我们可以输入多个数值进行相加,由于我们不知道会输入多少个,这个时候可以使用*args

# 常规加法计算器
def add_test1(args=None):
    sum = 0
    if args is not None:
        for i in args:
            sum = sum + i
    return sum


# *args加法计算器
def add_test(*args):
    # 打印下args
    print(args)
    # 由此可以见args为元组类型
    print(type(args))
    # 循环便利args,求和
    sum = 0
    for i in args:
        sum = i + sum
    return sum



if __name__ == '__main__':
    sum = add_test(1,2,3,4,5,6,7,8)
    print(f'常规加法计算:{sum}')
    #可传元组或者列表
    sum = add_test1((1, 2, 3, 4, 5, 6, 7, 8))
    print(f'*args加法计算:{sum}')
    # print(sum)

打印结果如图:

python自动化封装目录,自动化测试,python,pytest,自动化,测试工具,Powered by 金山文档

2、**kwargs的用法

**kwargs则是将一个可变的关键字参数的字典传给函数实参,同样参数列表长度可以为0或为其他值。

例如:一个函数,传一个字典,字典的KEY的个数最多是三个,但是字典的KET可以不完全都传,如果某个KEY没传,就把他的Value处理为空;文章来源地址https://www.toymoban.com/news/detail-657481.html

# 定义一个字典用来存储学生的信息
students = [
    dict(userName="小明", age=18, sex="男"),
    dict(userName="小红", age=17)
]




def selectUserInfo(**kwargs):
    # 解包后的是字典的KEY值
    print('解包后的是字典的KEY值:', *kwargs)
    print('前端传入的kwargs:', kwargs)
    print('kwargs的类型:', type(kwargs))
    # 判断kwargs中的传入的参数是否传入,如果未传入,将未传入的值置空
    if 'userName' not in kwargs.keys():
        kwargs['userName'] = ''
    if 'age' not in kwargs.keys():
        kwargs['age'] = ''
    if 'sex' not in kwargs.keys():
        kwargs['sex'] = ''
    print('处理后的kwargs:', kwargs)
    print('-----------------------------------')


if __name__ == '__main__':
    Json1 = {
        "userName": "小明",
        "age": 18
    }
    Json2 = {
        "userName": "小红",
        "age": 17,
        "sex": "男"
    }
    # *作为从传参的时候相当于解包的作用
    selectUserInfo(**Json1)
    # 等价于,传键值对
    selectUserInfo(userName='小明',age = 18)
    selectUserInfo(**Json2)

python自动化封装目录,自动化测试,python,pytest,自动化,测试工具,Powered by 金山文档

四、Requests库封装

import requests


class RequestsClient:
    # 使用类属性来定一个session,他将作为所有接口发起的全局对象
    session = requests.session()

    # 初始化数据,如果参数没传的情况下将参数置为None
    def __init__(self):
        self.session = RequestsClient.session
        self.method = None
        self.url = None
        self.data = None
        self.headers = None
        self.files = None
        self.json = None
        self.params = None
        self.resp = None

    #封装requests请求
    def sendRequest(self, **kwargs):
        # 如果调用方,没有传任何的参数,那么就使用该对象的默认属性参数
        if 'url' not in kwargs.keys():
            kwargs['url'] = self.url
        if 'method' not in kwargs.keys():
            kwargs['method'] = self.method
        if 'headers' not in kwargs.keys():
            kwargs['headers'] = self.headers
        if 'data' not in kwargs.keys():
            kwargs['data'] = self.data
        if 'json' not in kwargs.keys():
            kwargs['json'] = self.json
        if 'files' not in kwargs.keys():
            kwargs['files'] = self.files
        if 'params' not in kwargs.keys():
            kwargs['params'] = self.params
        self.resp = self.session.request(**kwargs)
        #等价于
        # self.resp = self.session.request(url=kwargs['url'],method=kwargs['method'],headers=kwargs['headers'],data=kwargs['data'],json=kwargs['json'],params=kwargs['params'],files=kwargs['files'])
        return self.resp


if __name__ == '__main__':
    json = {
        "userName": "admin",
        "password": "123456"
    }
    request = RequestsClient()
    resp = request.sendRequest(method='post',url='http://localhost:8888/community/flogin', json=json)
    print(resp.json())
python自动化封装目录,自动化测试,python,pytest,自动化,测试工具,Powered by 金山文档

到了这里,关于Python+requests+pytest+allure封装接口自动化1-项目结构目录创建,requests库封装的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 一个简单的接口自动化测试框架: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日
    浏览(73)
  • Python接口自动化测试-篇1(postman+requests+pytest+allure)

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

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

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

    2024年02月13日
    浏览(161)
  • 接口自动化测试-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日
    浏览(62)
  • Python+Requests+Pytest+Excel+Allure 接口自动化测试项目实战【框架之间的对比】

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

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

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

    2024年02月09日
    浏览(151)
  • 接口自动化框架(Pytest+request+Allure)

    接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱。 接口自动化包含2个部分,功能性的接口自动化测试和并发接口自动化测试。 本次文章着重介绍第一种,功能性的接口自动化框架。 环境:Mac、Python 3,Pytest,Allure,

    2024年03月14日
    浏览(86)
  • APP自动化测试-Python+Appium+Pytest+Allure框架实战封装(详细)

    pytest只是单独的一个单元测试框架,要完成app测试自动化需要把pytest和appium进行整合,同时利用allure完成测试报告的产出。 编写常规的线性脚本具体的步骤如下: 1、设计待测试APP的自动化测试用例 2、新建app测试项目 3、配置conftest.py文件等 4、编写整体app测试用例运行文件

    2024年02月14日
    浏览(63)
  • jenkins实现接口自动化持续集成(python+pytest+ Allure+git)

    在用python做自动化测试时,我们写好代码,然后需要执行才能得到测试报告,这时我们可以通过 Jenkins 来进一步完成自动化工作。借助Jenkins,我们可以结合 Git/SVN 自动拉取代码,通过设置定时构建实现自动触发脚本执行,得到测试报告,最后还可以配置发送邮件等。今天我们

    2024年02月03日
    浏览(59)
  • Python+Pytest+Allure+Git+Jenkins数据驱动接口自动化测试框架

    一、接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,RPC,Webservice,Dubbo,RESTful等类型。 接口测试流程 1、需求评审,熟悉业务和需求 2、开发提供接口文档 3、编写接口测

    2024年02月08日
    浏览(83)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包