我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python使用pytest接口自动化测试的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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 接口自动化测试内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python使用pytest接口自动化测试的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Pytest自动化测试框架的使用

本文主要介绍了Pytest自动化测试框架的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-19

Python+Requests+PyTest+Excel+Allure 接口自动化测试实战

本文主要介绍了Python+Requests+PyTest+Excel+Allure 接口自动化测试实战,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-02-23

Pytest自动化测试框架如何使用

这篇文章主要讲解了“Pytest自动化测试框架如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Pytest自动化测试框架如何使用”吧!Pytest和Unittest测试框架的区别?如何
2023-07-05

Python+Requests+PyTest+Excel+Allure接口自动化测试怎么实现

本篇内容主要讲解“Python+Requests+PyTest+Excel+Allure接口自动化测试怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python+Requests+PyT
2023-07-05

怎么使用postman进行接口自动化测试

这篇“怎么使用postman进行接口自动化测试”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用postman进行接口自
2023-06-30

pytest自动化测试数据驱动yaml/excel/csv/json怎么使用

这篇“pytest自动化测试数据驱动yaml/excel/csv/json怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这
2023-07-02

自动化性能测试在PHP接口优化中的应用(PHP接口优化中自动化性能测试的运用)

自动化性能测试在PHP接口优化中发挥着至关重要的作用,有助于识别和解决性能瓶颈,提升接口性能和用户体验。通过性能基准测试、负载测试、压力测试、性能分析、持续集成、性能优化、用户体验监控和维护更新等应用,自动化性能测试成为PHP接口优化不可或缺的工具,确保接口在不断变化的环境中保持最佳性能。
自动化性能测试在PHP接口优化中的应用(PHP接口优化中自动化性能测试的运用)
2024-04-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录