精华内容
下载资源
问答
  • Pytest接口自动化测试项目 项目说明 本项目是通过python3+pytest+requests+allure实现的接口自动化测试项目。 业务逻辑封装 1,CommonFunctions包 (1)ApiOperations类,接口请求操作类,requests的get,post请求; ...
  • 软件测试/requests+Pytest接口自动化测试实战(一)___相关视频涉及Python自动化测试、selenium、appium、jmeter、python、robotframework等。
  • 相关视频涉及Python自动化测试、selenium、appium、jmeter、python、robotframework等。
  • 基于pytest自动化测试框架 API:接口层/驱动层,根据接口文档编写对应的维护单接口API,提供给测试用例层调用 common:公共方法层,用于放置一些公共方法,如统一加密方法、时间格式转换等 utils:配置层,用于放置...
  • requests+Pytest接口自动化测试实战(三)___相关视频系列涉及Python自动化测试、selenium、appium、jmeter、python、robotframework等。
  • pytest接口自动化

    2021-03-09 10:05:53
    基于pytest接口自动化,已连接钉钉消息及每日定时任务
  • requests+Pytest接口自动化测试实战(四)___相关视频系列涉及Python自动化测试、selenium、appium、jmeter、python、robotframework等。
  • requests+Pytest接口自动化测试实战(五)___相关视频系列涉及Python自动化测试、selenium、appium、jmeter、python、robotframework等。
  • 这篇文章主要介绍了python使用pytest接口自动化测试的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 简单的设计思路 利用...
    愿你我相遇,皆有所获! 欢迎关注微信公众号:【软件测试pytest】 免费领取任何一切软件测试工程师视频学习教程。免费分享!

     

    这篇文章主要介绍了python使用pytest接口自动化测试的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    简单的设计思路

    • 利用pytest对一个接口进行各种场景测试并且断言验证

    • 配置文件独立开来(conf文件),实现不同环境下只需要改环境配置即可

    • 测试的场景读取excle的测试用例,可支持全量执行或者自定义哪条用例执行(用例内带加密变量);

    • 接口入参还包含了加密的逻辑,所以需加一层加密处理

    用例的样例:

    应用的库包含: 

    
    import pytest
    import time, json
    import base64, hmac
    import hashlib, uuid, re
    import requests
    import pandas as pd

    1. 先定义好conf配置代码

    
    def config_txt(file_name="config.txt"):
        data_head = list()
        data_tail = list()
        for line in open(file_name, encoding='gb18030', errors='ignore'):
            head, sep, tail = line.partition('=')
            data_head.append(head.strip('\n '))
            if tail.find('#') != -1:
                tail, tail_b, tail_c = tail.partition('#')
            data_tail.append(tail.strip('\n  '))
        txt_data = dict(zip(data_head, data_tail))
        heada, sepa, taila = txt_data["GATEWAY_URL"].partition('/test_a')
        txt_data['HTTP_URI'] = "/test_a" + taila
        return txt_data

    conf文件配置样例:
    GATEWAY_URL = https://127.0.0.1:8051/test_a/adk #url链接地址
    zhu_KEY = test_key  #用户信息1
    zhu_SECRET = test_secret #用户2
    zhu_ID = 18825176013    #用户ID
    zhuLY_ID = 588347220  #用户信息3

    2. 简单处理一下加密的处理,给后续持续调用

    def md5(data_md5):
        data_md5 = hashlib.md5(data_md5.encode(encoding='UTF-8')).hexdigest()
        return data_md5
     
    def sha256(data_sha256):
        data_sha256 = hashlib.sha256(data_sha256.encode(encoding='UTF-8')).hexdigest()
        return data_sha256
     
    def hash_hmac(app_secret, msg, sha1):
        hmac_code = hmac.new(app_secret.encode(), msg.encode(), sha1).digest()
        return base64.b64encode(hmac_code).decode()

    3. 处理用例里面的加密变量,例如:请求参数md5(18812345678)先进行数据预处理

    
    def body_encrypt(data_encrypt):
        if data_encrypt.find("sha256(") != -1:
            sha_ss = re.findall(r"sha256[(](.+?)[)]", data_encrypt)
            for i in range(len(sha_ss)):
                data_encrypt = re.compile("sha256[(]" + str(sha_ss[i]) + '[)]').sub(str(sha256(sha_ss[i])), data_encrypt)
        if data_encrypt.find("md5(") != -1:
            md5_ss = re.findall(r"md5[(](.+?)[)]", data_encrypt)
            for i in range(len(md5_ss)):
                data_encrypt = re.compile("md5[(]" + str(md5_ss[i]) + '[)]').sub(str(md5(md5_ss[i])), data_encrypt)
        return data_encrypt

    4. 读取excel文档里面的用例数据做为测试场景

    
    def excel_case(file_name="case_file2.xlsx", case_id="all"):  # 读取excel账号及路由代理信息file_name
        data_excle = pd.read_excel(file_name, sheet_name=0, engine="openpyxl")
        df = pd.DataFrame(data_excle)
        if case_id != "all":
            df_data = df[(df.case_id == case_id)].to_dict('list')
        else:
            df_data = df.to_dict('list')
        case_id, case_name = df_data['case_id'], df_data['case_name']
        case_body, case_assert = df_data['case_body'], df_data['case_assert']
        case_body1 = body_encrypt(str(case_body))
        txt_data = list(zip(case_id, case_name, eval(case_body1), case_assert))
        return txt_data

    5. 上主菜,pytest的使用

    
    class Test_zhu(object):
        #类初始化,此处在测试执行中,全局只会执行一次(读取配置文件)
        @classmethod
        def setup_class(self):
            self.text_data = config_txt()
       #方法初始化,此处在测试执行中,每条用例都会先执行一遍
        def setup_method(self):
            time.sleep(0.4)
            self.time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
       #request接口请求的逻辑
        def request_id(self, GATEWAY_URL, http_body):
            HTTP_BODY = eval(http_body)
            TIME_STAMP = str(int((time.time() + 5) * 1000))
            zhuCE = uuid.uuid1().hex
            msg = self.text_data['zhuLY_ID'] + "\n" + TIME_STAMP + "\n" + zhuCE + "\n" + self.text_data['zhu_KEY'] + "\n" + \
                  self.text_data["HTTP_URI"] + "\n" + json.dumps(HTTP_BODY)
            HTTP_HEADER = {
                "zhu_ID": self.text_data['zhu_ID'],
                "zhuLY_ID": self.text_data['zhuLY_ID'],
                "zhuCE": zhuCE,
                "zhu_KEY": self.text_data['zhu_KEY'],
                "TIMESTAMP": TIME_STAMP,
                "SIGNATURE": hash_hmac(self.text_data['zhu_SECRET'], msg, hashlib.sha1)}
            print('**请求参数:{}.'.format(HTTP_BODY))
            response_one = requests.post(GATEWAY_URL, json=HTTP_BODY, headers=HTTP_HEADER, verify=True)
            print('**响应结果:{}.'.format(response_one.text))
            return eval(response_one.text)
        #parametrize为数据驱动,此处获取了excle用例里的数据;apitest定个标签,后续冒烟啥的可以选择性的跑(暂时无用);
        #excel_case(case_id="all")说明,all为全部用例执行或者指定用例执行case_0001
        @pytest.mark.parametrize('case_id,case_name, case_body, case_assert', excel_case(case_id="all"))
        @pytest.mark.apitest
        def test_zhu_case(self, case_id, case_name, case_body, case_assert):
            print("**\n执行编号:" + case_id + "\n**用例名称:" + case_name)
            case_assert_a = json.loads(case_assert)
            alertText = self.request_id(self.text_data['GATEWAY_URL'], case_body)
            retcode = case_assert_a.get('code') if case_assert_a.get('retcode') == None else case_assert_a.get('retcode')
            alertText_a = alertText.get('code') if alertText.get('retcode') == None else alertText.get('retcode')
            #此处为断言,判断用例通过还是不通过
            assert alertText_a == retcode
    
    if __name__ == '__main__':
        pytest.main(["-sv", 'zhu_testA.py'])

    6. 利用pytest-html库可以生成html报告

    命令:pytest zhu_testA.py --html=report.html --self-contained-html

    到此这篇关于python使用pytest接口自动化测试的使用的文章就介绍到这了,更多相关python 接口自动化测试内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持"软件测试pytest"!

    愿你我相遇,皆有所获! 欢迎搜索微信小程序:【软件测试工具箱】 免费领取任何一切软件测试工程师视频学习教程。免费分享!

     

    展开全文
  • 一,出接口自动化测试方案。收集整理接口文档。 二,搭建自动化测试demo,优化完善架构目录。 三,框架接入流水线与编写case同时进行。 四,持续维护。 项目目录结构。 实操过程中遇到的问题及解决方案。 1,登录...

    一,出接口自动化测试方案。收集整理接口文档。
    二,搭建自动化测试demo,优化完善架构目录。
    三,框架接入流水线与编写case同时进行。
    四,持续维护。

    项目目录结构。

    实操过程中遇到的问题及解决方案。

    1,登录问题
    正常登录流程,先get请求login的url获取,csrf_token,及其他的所需要的信息,用于前端加密,前端加密算法,是用csrf_token, 盐,输入的密码等算出来一个值,去post请求登录接口。
    解决方案:
    使用python的第三方包《pyduktape》,来直接操作js文件,将所需要的参数,传递给js进行加密后将结果返回来,然后模拟登录。
    在这里插入图片描述

    2,设置全局登录cookies

    需求:设置一个已登录client,能够全局使用,每条用例可直接去请求。
    解决方案:
    使用conftest.py@pytest.fixture(scope="session")
    在这里插入图片描述
    3,关于参数化的思考
    解决方案:
    1,单接口参数:@pytest.mark.parametrize
    2,接口之间参数传递:@pytest.fixture(scope="function")
    3,接口之间的依赖:@pytest.mark.dependency() 处理的场景是,b接口依赖于a接口的成功,此方法实现的是,a接口失败,b接口自动跳过,不去执行。
    4,可以操作数据库,来获取b接口依赖a接口的值。
    5,如果登录的cookies是全局的,可以将a获取到的值存到cookies对象中去,用@pytest.mark.run(order=1)来控制顺序,或者使用@pytest.mark.dependency()失败后自动跳过,b接口可以从cookies的对象中取出a的返回值,进行使用后,将属性删除。
    在这里插入图片描述
    发现的问题
    1,dependency与parametrize不能一起用 否则dependency依赖的接口会跳过

    展开全文
  • pytest接口自动化测试

    2020-09-20 20:52:03
    import pytest import requests # def test_001():#函数 ----------------方法 # #断言 # print('test_001开始')#要想输出信息,加一个-s # assert 1+2 == 3 # print('test_001结束') # # #封装测试类 # class Test_...
    import pytest
    import requests
    # def test_001():#函数 ----------------方法
    #     #断言
    #     print('test_001开始')#要想输出信息,加一个-s
    #     assert 1+2 == 3
    #     print('test_001结束')
    #
    # #封装测试类
    # class Test_login:#---------------------类
    #     def test_003(self):
    #         assert 1+2==4
    #--------自带的装饰器--mark
    # @pytest.mark.parametrize('inData',[10,20])#---------参数化-----inData是参数化的文件,[10,20]是参数化的数据,把要参数化的函数写进去,如下
    # def test_001(inData):-----------------一个参数inData
    #     assert inData==3
    
    # @pytest.mark.parametrize('inData,outData',[(10,20),(30,40)])#-------------两个参数这样定义
    # def test_001(inData,outData):
    #     assert inData+outData==3
    
    #--------接口实战
    def test_get_token():
        token_url='http://www.xxx'#url
        header_token={'Cotent-Type':'application/jason'}#请求头
        payload={'userName':'12336728126','password':'8888863'}#请求体
    #--------发送请求
        reps=requests.post(token_url,jason=payload)
       # return reps.json()['token']#----------返回字典格式
    #----------------断言
        assert reps.json()['msg']=='成功'
    
    
    #---------------参数化
    token_data=[{'userName':'12336728126','password':'8888863'},{'userName':'1233','password':'56373'}]#-----假设第一组是正确的,第二组是错的
    #-----实际工作中的数据是读取excel
    @pytest.mark.parametrize('inData')
    def test_get_token(inData):
        token_url='http://www.xxx'#url
        header_token={'Cotent-Type':'application/jason'}#请求头
        payload=inData#请求体
    #--------发送请求
        reps=requests.post(token_url,jason=payload)
    #----------------断言
        assert reps.json()['msg']=='成功'
    
    #-----生成报告,在下面加一个'--html=../test_report/xt.html'
    if __name__ == '__main__':
        pytest.main(['test_func.py','-s','--html=../test_report/ceshi.html'])#在这里加-s
    
    
    展开全文
  • Interface_pytest pytest + allure + request + yaml进行接口自动化测试
  • pytest接口自动化-源码

    千次阅读 2020-04-29 15:11:30
    ** 框架结构 ** base :封装请求方式比如:get post...data:data.xls存放测试用例数据,requestData.json,从Excel取接口参数放这里 好修改 logs :方日志 page:参数操作 report:放测试报告 都是集成jenkins的a...

    “”"
    加我微信:hz223336,领取神级接口自动化框架讲解视频和pytest单元测试框架实战
    框架介绍
    采用最新pytest单元测试、框架功能最强大、框架行业最新最火(gitee搜索第一)、框架通用95%的公司、企业直接落地,万年老道深入讲解等等,带你走向接口自动化王者巅峰之路
    框架结构:Python+requests+pytest+log+allure+yaml+mysql+git+jenkins+钉钉群发送报告

    解决痛点:
    单接口、多接口封装合并出来
    yaml处理多接口动态传参
    多种格式请求体封装
    一键环境切换
    登录token和session全局调用处理
    多角色api灵活切换
    token和session超时失效处理
    数据清理(接口或SQL)
    框架通用95%的公司
    企业直接落地使用

    最重要的:只需封装一次api,其他的工作交给功能测试或不懂代码的人来做

    我们的目标:
    就是功能越强大,让脚本越简单越好,不然别人没法投入
    在企业核心人员维护框架和应用,业务人员可以写脚本,扩大脚本业务数量
    1000人的群里有全国各处的测试经理,测试主管,帮忙互相内推,在群里解答问题"""

    展开全文
  • 最全最新pytest接口自动化框架

    千次阅读 2021-05-25 16:46:13
    pytest接口自动化框架介绍: Python+pytest+allure+log+yaml(默认数据和动态传参)+数据驱动+关键字驱动+pymysql(数据清理尽量接口清理)+一键切换环境+多角色随意切换(admin后台,SaaS后台,APP卖家,APP买家)+...
  • 目标:最终完成一个用jenkins集成或用django,达到一个自由灵活可复用的接口自动化测试框架 一、设计思路-整体框架: 接口自动化测试之框架搭建步骤——思路整理 1.先搭建框架主干 config:存放配置文件,如ini文件...
  • file) 2、重构配置文件 BASE: #log等级 log_level: "debug" #扩展名 log_extension: ".log" test: url: "http://211.103.136.242:8064" case_file: "testdata.xlsx" case_sheet: "美多商城接口测试" ...
  • requests+Pytest接口自动化测试实战(二)___相关视频涉及Python自动化测试、selenium、appium、jmeter、python、robotframework等。
  • python+pytest接口自动化框架搭建

    千次阅读 多人点赞 2020-10-24 14:08:03
    2.在工程的根目录下新建一个conftest.py(测试用例的一些fixture配置)和pytest.ini(改变pytest的运行方式) 3.在工程下创建以下package包和文件夹 common:这个包放一些公共的方法,如:读取excel文件方法,读取...
  • Python+Requests+Pytest 接口自动化测试脚本总结

    万次阅读 多人点赞 2020-04-07 14:28:05
    1. 封装post和get方法:方便在使用requests模块发送请求时,仅调用一个方法即可 备注:文件名均在脚本中的顶部,用”fileName“标识 #!/usr/bin/env python # -*- coding:utf-8 -*- # fileName: run_method.py ...
  • pytest接口自动化测试框架+项目实例

    万次阅读 2019-06-19 15:26:16
    python pytest (或许以后加上django) 一、基础框架:测试用例;测试数据;测试报告------------实现逻辑和数据分离,后期可以增加日志、公用配置、封装完善 1、  项目背景:http 接口、pycharm、py...
  • Pytest接口自动化测试框架搭建模板

    千次阅读 2021-01-21 16:47:54
    测试框架: Pytest、测试报告: Allure 项目源码Git地址 项目目录结构 api – 模仿PO模式, 抽象出页面类, 页面类内包含页面所包含所有接口, 并封装成方法可供其他模块直接调用 config – 配置文件目录 data – 测试...
  • pytest接口自动化–操作Excel表格 #读取excel用例数据 import xlrd#要安装的第三库 pip install xlrd import json #json字符串转化成字典:json.loads() #字典转换成json字符串:json.dumps() def get_excelData...
  • 1.首先安装pytestpip install pytest2.编写单测用例在pytest框架中,有如下约束:所有的单测文件名都需要满足test_*.py...此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。...
  • conf_y = ConfigYaml() url_path = conf_y .get_conf_url() # 2、参数执行测试用例 @pytest.mark.parametrize("login",data_list) def test_yaml(login): # 初始数据url、data url = url_path+login['url'] data...
  • 支持参数,能够支持简单的单元测试和复杂的功能测试 具有很多第三方插件,并且可以自定义扩展 可以很好的和Jenkins工具结合 安装>pip install pytest 入门案例 # -*- coding: utf-8 -*- # ...
  • Python3+Pytest接口自动化测试,可以说,每个想要晋升的测试工程师都必须掌握的技能。为了满足大多数学生的学习需求,中培教育开设了相关的专业课程,也就是Python3+Pytest接口自动化测试全方案设计与开发课程。那么...
  • 第一部分: 项目介绍及框架规划接口测试框架流程image.png接口测试代码结构image.png第二部分:接口自动化框架编写1. Requests 的封装import requestsfrom utils.LogUtil import my_log#1、创建封装get方法def ...
  • 断言是自动化最终的目的,一个用例没有断言,就失去了自动化测试的意义 断言用到的是assert关键字 预期的结果是实际结果做对比

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,124
精华内容 2,049
关键字:

pytest接口自动化

友情链接: ipaPNG.zip