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

news/2024/11/30 20:47:38/

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

简单的设计思路

  • 利用pytest对一个接口进行各种场景测试并且断言验证
  • 配置文件独立开来(conf文件),实现不同环境下只需要改环境配置即可
  • 测试的场景读取excle的测试用例,可支持全量执行或者自定义哪条用例执行(用例内带加密变量);
  • 接口入参还包含了加密的逻辑,所以需加一层加密处理

用例的样例:

应用的库包含:

1

2

3

4

5

6

import pytest

import time, json

import base64, hmac

import hashlib, uuid, re

import requests

import pandas as pd

1. 先定义好conf配置代码

1

2

3

4

5

6

7

8

9

10

11

12

13

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

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036【暗号:csdn999】

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

1

2

3

4

5

6

7

8

9

10

11

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)先进行数据预处理

1

2

3

4

5

6

7

8

9

10

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文档里面的用例数据做为测试场景

1

2

3

4

5

6

7

8

9

10

11

12

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的使用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

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

1

2

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接口自动化测试的使用的文章就介绍到这了!

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
 

在这里插入图片描述


http://www.ppmy.cn/news/1205490.html

相关文章

opengauss权限需求

创建角色 "u_rts" 并授予对数据库 "rts_opsdb" 的只读权限: CREATE ROLE u_rts LOGIN PASSWORD Cloud1234; GRANT CONNECT ON DATABASE rts_opsdb TO u_rts; GRANT USAGE ON SCHEMA public TO u_rts; GRANT SELECT ON ALL TABLES IN SCHEMA pub…

【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接

【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接 目录 【Linux基础IO篇】用户缓冲区、文件系统、以及软硬链接深入理解用户缓冲区缓冲区刷新问题缓冲区存在的意义 File模拟实现C语言中文件标准库 文件系统认识磁盘对目录的理解 软硬链接软硬链接的删除文件的三个时间 作者…

一种libuv实现websockets服务的解决方案

方法是libuv用多事件循环来驱动。说起来容易,做起来还是比下面的方法更容易: 上图是某位网友的方法代表子大部分网络资料。此方法对部署不友好,因为软件仓库提供的libwebsockets是不能用了。如何简化部署,利用好现有的软件仓库呢&…

Linux常用指令(九)——软件安装

Linux软件安装 9.1 软件安装9.2 软件升级9.3 软件卸载9.4 软件搜索9.5 使用dbkg本地安装deb软件包9.6 查看已安装软件包的安装目录 更加完整的Linux常用指令 9.1 软件安装 sudo apt update # 更新软件包列表 sudo apt install 软件包名 # 安装软件sudo yum install 软件包名…

详细创建Prism架构wpf项目

方案一&#xff1a; 1.创建一个普通wpf项目 2、安装NuGet包&#xff1a;Prism.DryIoc 3、App.xaml.cs中: 将原本的父类Application改为&#xff1a;PrismApplication&#xff0c;并且实现抽象类 CreateShell方法中写上&#xff1a;”return Container.Resolve<MainWindow>…

scrcpy常用命令

1.说明 scrcpy是一个基于adb调试实现的屏幕共享软件&#xff0c;可以将安卓手机共享到电脑&#xff0c;并且可以在电脑控制手机 特点 对手机无侵入、可以不联网&#xff08;数据线&#xff09;、低延迟、免费开源。 功能 屏幕共享、屏幕录制、声音转发、复制粘贴、画质控制、…

浙江大学漏洞报送证书

获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;主页 | 教育漏洞报告平台 兑换价格&#xff1a;20金币 获取条件&#xff1a;提交浙江大学任意中危或以上级别漏洞

Hive3 on Spark3配置

1、软件环境 1.1 大数据组件环境 大数据组件版本Hive3.1.2Sparkspark-3.0.0-bin-hadoop3.2 1.2 操作系统环境 OS版本MacOSMonterey 12.1Linux - CentOS7.6 2、大数据组件搭建 2.1 Hive环境搭建 1&#xff09;Hive on Spark说明 Hive引擎包括&#xff1a;默认 mr、spark、…