首页 > 其他分享 >request+pytest根据yaml文件发送请求

request+pytest根据yaml文件发送请求

时间:2024-05-31 21:32:19浏览次数:22  
标签:__ name 用例 request yaml token pytest parentid

request怎么跟pytest结合起来,然后根据yaml文件去发一个基本的请求呢?
下面是一个简单的示例。
1、先新建一个名为“demo.yaml”的yaml文件,用来存放测试数据的。
-
  name: G广州研发中心
  parentid: 1   #第一次用例的数据正常
  expect: 60008     #对请求结果进行断言
- name: ""
  parentid: 1   #第二次用例的数据name为空
  expect: 40058     #对请求结果进行断言
- name: F广州研发中心
  parentid:     #第三次用例的数据parentid为空
  expect: 60004     #对请求结果进行断言

这里存放的我们执行部门创建用例的三个测试用例。 

其中expect为这个用例执行的返回结果errcode做了一个断言,第一个用例是正常的数据,但是它已经在我们的部门列表中存在存在了,所以我们通过后来的用例执行可以知道60008表示该部门已存在,用例二是40058是部门名字为空,用例三是parentid为空错误码是60004;因为name跟parentid是必填字段不能为空。

2、读取数据的工具包,创建utils.py文件,用来存放读demo.yaml的代码,在utils中去写一个方法:
import yaml


def read_yaml(path):
    with open(path, "r", encoding="utf-8") as f:
        data = yaml.safe_load(f)
        return data

这个文件就是来读demo.yaml测试数据文件的。

3、然后新建一个名为“test_demo.py”的测试文件,测试文件一般都以test开头或者结尾。
写一个测试用例:
import pytest
import requests
from utils import read_yaml
import yaml


class TestDemo:
 #创建部门时要先获取一个token
    def setup_class(self):
        ID = "ww71bb4160935cc48d"#企业ID
        SECRET = "Px17uiWMpszjPNjVMD-zMG14PRnK1ng2LrfbwL--JAg"#企业密钥
        url = f" https://qyapi.weixin.qq.com/cgi-bin/gettoken"#获取token的接口地址
        #把参数维护在字典中
        param = {
             "corpid": ID,
             "corpsecret": SECRET
        }
        # 请求方式和请求地址
        r = requests.request("get", url, params=param)#用过param参数把维护在字典中的请求参数传到里面
        self.token = r.json()["access_token"]

    #测试用例
    #通过读取yaml文件来获取测试数据
    #用数据驱动来获取测试数据from utils import read_yaml
    @pytest.mark.parametrize("case", read_yaml("demo.yaml"))
    def test_01(self, case):
        #创建部门为例
        url = "https://qyapi.weixin.qq.com/cgi-bin/department/create"
        #access_token维护到字典中
        param = {
            "access_token": self.token
        }
        data = {
            "name": case["name"],
            "parentid": case["parentid"]
        }
        r = requests.request("post", url, params=param,json=data)
        assert r.json()["errcode"] == case["expect"]

if __name__ == '__main__':
    pytest.main()
部门创建的基础是获取token,所以我们首先要进行的是对token的获取:
 #创建部门时要先获取一个token
    def setup_class(self):
        ID = "ww71bb4160935cc48d"#企业ID
        SECRET = "Px17uiWMpszjPNjVMD-zMG14PRnK1ng2LrfbwL--JAg"#企业密钥
        url = f" https://qyapi.weixin.qq.com/cgi-bin/gettoken"#获取token的接口地址
        #把参数维护在字典中
        param = {
             "corpid": ID,
             "corpsecret": SECRET
        }
        # 请求方式和请求地址
        r = requests.request("get", url, params=param)#用过param参数把维护在字典中的请求参数传到里面
        self.token = r.json()["access_token"]
拿到了token我们才能去执行部门创建的用例:
 #测试用例
    #通过读取yaml文件来获取测试数据
    #用数据驱动来获取测试数据from utils import read_yaml
    @pytest.mark.parametrize("case", read_yaml("demo.yaml"))
    def test_01(self, case):
        #创建部门为例
        url = "https://qyapi.weixin.qq.com/cgi-bin/department/create"
        #access_token维护到字典中
        param = {
            "access_token": self.token
        }
        data = {
            "name": case["name"],
            "parentid": case["parentid"]
        }
        r = requests.request("post", url, params=param,json=data)
        assert r.json()["errcode"] == case["expect"]
然后最后加一个执行的代码,从这执行测试用例:这样可以保证文件中的主程序能够执行,main函数被调用:

if __name__ == '__main__':
    pytest.main()
或者直接把这个写到main.py中去执行:
import pytest

if __name__ == '__main__':
    pytest.main()
4、用例执行结果:

可以看到,只有第一个正常的用例执行成功了。
6、我们再修改一下后来两个的测试数据,让它们也可以执行成功:
-
  name: G广州研发中心
  parentid: 1   #第一次用例的数据正常
  expect: 60008     #对请求结果进行断言
- name: 12345
  parentid: 1   #第二次用例的数据name为空
  expect: 40058     #对请求结果进行断言
- name: F广州研发中心
  parentid:  1   #第三次用例的数据parentid为空
  expect: 60004     #对请求结果进行断言
执行结果:

我们可以看到虽然成功添加了部门,但是断言是失败的,因为我们执行成功的返回码应该是0,但是我们断言的是40058和60004,所以pycharm中断言失败:

标签:__,name,用例,request,yaml,token,pytest,parentid
From: https://blog.csdn.net/m0_74227125/article/details/139297021

相关文章

  • Nginx:a client request body is buffered to a temporary file
    https://www.cnblogs.com/iAmSoScArEd/p/18225191Nginxwarn:2024/05/3119:28:37[warn]8467#0:*9505669aclientrequestbodyisbufferedtoatemporaryfile/usr/local/openresty/nginx/client_body_temp/0002098837,client:10.xx.xx.xx,server:xxx.xx.com,r......
  • pytest + yaml 框架 - 70.Pycharm 设置 yaml 格式用例模板,高效写用例
    前言初学者对yaml格式不太熟悉,自己写yaml用例的时候,总是格式对不齐,或者有些关键字会忘记。于是我们可以在pycharm上设置用例模块,通过快捷方式调用出对应的模块,达到高效写用例的目的。pycharm设置用例模板File-SettingsLiveTemplates-python点+号选择LiveTempl......
  • 如何通过管道使用 yaml 将 Azure 库变量传递给 Cypress?
    我希望将Azure库中的变量传递给cypress,这样我就可以拥有多个阶段(暂存&生产)我尝试了以下方法:通过一个名为environment.json的文件使用固定装置,该文件看起来像这样:{WEB_APP_BASE_URL":"https://blight-town.com"//像我这样的迷失者的"默认"URL}在Azure中,我有一个包......
  • Windows驱动开发涉及到许多重要的概念和技术,包括调试、进程管理、文件操作、注册表访
    Windows驱动开发涉及到许多重要的概念和技术,包括调试、进程管理、文件操作、注册表访问、系统调用、IRP(I/ORequestPacket)和锁原理。以下是对每个主题的简要介绍:调试Windows驱动程序的调试通常涉及使用调试器(如WinDbg)来分析驱动程序的运行时行为,包括查看内存、寄存器状态、......
  • (附nuclei yaml文件)泛微E-office 10 atuh-filephar反序列化命令执行漏洞复现(QVD-2024-1
    (附nucleiyaml文件)泛微E-office10atuh-filephar反序列化命令执行漏洞复现(QVD-2024-11354)声明本文仅用于技术交流,请勿用于非法用途由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。1、漏洞简介泛......
  • YAML示例:创建daemonset
    apiVersion:apps/v1kind:DaemonSetmetadata:name:test-ds-1namespace:sjlabels:k8s-app:arksec-ds-1spec:selector:matchLabels:name:arksec-ds-1template:metadata:labels:name:arksec-ds-1spec:nodeSelector:#只让它在指定hostname的节点上创建,注意,......
  • request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has
    换华为的,否则会出问题:cnpmconfgsetregistryhttps://mirrors.huaweicloud.com/repository/npm/npmERR!codeCERT_HAS_EXPIREDnpmERR!errnoCERT_HAS_EXPIREDnpmERR!requesttohttps://registry.npm.taobao.org/cnpmfailed,reason:certificatehasexpirednpmER......
  • 【原创】YAML-CPP使用记录
    官方源码:https://github.com/jbeder/yaml-cpp环境:Win10,VS2019打开DeveloperPowerShellforVS2019进入yaml-cpp源码目录新建build目录并进入执行:cmake-GNinja-DCMAKE_BUILD_TYPE=Release-DYAML_BUILD_SHARED_LIBS=on..执行:ninjabuild目录生成了文件yaml-cpp.dll,......
  • XV-Python-requests_html
    目录        1.requests_html        1.1.什么是requests_html        1.2.安装与配置        1.3.快速入门        1.4.图片下载        2.思维导图1.requests_html1.1.什么是requests_htmlrequests_html是一个P......
  • OpenQA.Selenium.WebDriverException The HTTP request to the remote WebDriver serv
    OpenQA.Selenium.WebDriverException:“TheHTTPrequesttotheremoteWebDriverserverforURLhttp://localhost:xxxx/sessiontimedoutafter60seconds.”1.在谷歌浏览器上加上中括号中的内容[--remote-debugging-port=9222]2.使用管理员模式打开谷歌浏览器3.重新生成......