基于Pytest接口自动化的requests模块项目实战以及接口关联方法详解

news2024/11/25 23:00:51

1、基于pytest单元测试框架的规则

1.1 模块名(即文件名)必须以test_开头或者_test结尾

1.2 类名必须以Test开头且不能有init方法

1.3 用例名(测试方法)必须以test开头

同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

软件测试视频教程观看处:

字节大佬教你逼自己如何在15天内掌握自动化测试(接口自动化/APP自动化/Web自动化/性能测试),内含项目实战

2、项目实战

import pytest as pytest
import requests
 
 
# 此案例测试用例之间无法关联cookie信息
class TestApi:
    # 类变量也叫全局变量
    access_token = ""
 
    # 获取鉴权码
    def test_get_token(self):
        url = "https://api.weiixn.com/token"
        datas = {
            "grant_type": "client_credential",
            "appid": "wx32497320974",
            "secret": "dh2983yr4fh9734."
        }
        res = requests.get(url=url, params=datas)
        result = res.json()
        TestApi.access_token = result["access_token"]
        # jsonpath提取实现接口关联
        # lis = jsonpath.jsonpath(res.json(), "$.access_token")
        # print(lis[0])
        # re正则表达式提取
        # token = re.search('name="hduwqidh" value="(.*?)"', res.text).group(1)
 
    # 编辑标签接口
    def test_edit_flag(self):
        url = "https://api.weiixn.com/update?access_token=" + TestApi.access_token
        headers = {}
        # json是字典的字符串格式,两者可以相互转换
        json = {}
        # 键值对
        data = None
        res = requests.post(url=url, json=json, headers=headers)
 
    # 文件上传
    def test_file_upload(self):
        url = "https://api.weiixn.com/update?access_token=" + TestApi.access_token
        datas = {
            # 文件路径也可以写为open("D:\\snipaste")
            "media": open(r"D:\snipaste", mode="rb")
        }
        res = requests.post(url=url, files=datas)
 
 
if __name__ == '__main__':  # 入口
    pytest.main('-vs')

3、pytest的main使用

3.1 pytest.main() 运行模式时,main()不添加任何参数,表示运行当前目录下的所有的测试文件

3.2 main()添加参数如下:

  •    pytest.main(['-s', '-v', '-q', '-x','-k "print"'])
  •    -s   对于代码里print语句会将输出至控制台
  •    -v   用于增加测试用例的冗长
  •    -q   用于减少测试用例的执行结果的冗长
  •    -x   出现一条用例执行失败就退出测试,调试阶段常用
  •    -k "print"  运行包含某个字符串的用例,如pytest -k add XX.py 表示运行XX.py中包含add的测试用例等等   

3.3 执行测试用例的过滤

执行某个测试类或测试方法用 :: 隔开,常用-vs参数

pytest.main(["-vs","模块.py::类或方法"])   

命令行为:pytest 文件名.py::测试类或测试方法

pytest.main(["-vs","模块.py::类::方法"])   

命令行为:pytest 文件名.py::测试类::测试方法

如果是在main目录入口执行测试用例文件:

import pytest

if __name__ == '__main__':

    pytest.main(["-vs","--html=../../report_hdc/20211011_hdc_02.html","--self-contained-html"])

3.4 如果使用pytest.main()生效,再pycharm中必须设置Tools>Python Integrated Tools>Default test runner=Unittests;如果设置为pytest则是无效的。

3.5 在pytest中,测试函数可能返回多种结果,不只是通过或失败。如下:

PASSED(.):测试通过

FAILED(F):测试失败

SKIPED(s):测试未被执行,指定测试跳过执行

xfail (x):预期测试失败,并且确实失败

XPASS (X):预期测试失败,但实际上运行通过,不符合预期

ERROR (E):测试用例之外的代码触发的异常

3.6 pytest.main(["-m", "run_first"])

使用-m 对用例进行标记,用例需注释@pytest.mark.xxx,将xxx作为参数传入

使用-m "mark1 and mark2"可以同时选中带有这两个标记的所有测试用例。

使用-m "mark1 and not mark2"选中带有与mark1的测试用例,而过滤掉带有mark2的测试用例

使用-m "mark1 or mark2"则选中带有mark1或者mark2的所有测试用例 

4、接口关联

4.1 三个层次

4.1.1 通过类变量保存中间变量实现接口关联

4.1.2 通过单独的文件保存中间变量实现接口关联

4.1.3 极限封装成零代码的方式实现接口关联

4.2 两种方式

4.2.1 正则提取实现接口关联

re.search() #通过正则匹配一个值,通过下标[1]取值,没有匹配到返回none

re.findall() #通过正则匹配多个值,返回List,通过下标取值,没有匹配到返回none

4.2.2 jsonpath提取实现接口关联

jsonpath.jsonpath() #返回一个列表,通过下标取值,没有找到返回none

5、总结 

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1093087.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【算法-动态规划】零钱兑换 II-力扣 518

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

Smartforms 打印出现的问题

上半年ECC做了升级 程序代码从ECC迁移到S4 有用户反馈 打印不能用了 经过调试发现在打印程序中 竟然返回2,但是 smartforms ZRPT_CO_YFLL_DY又是存在的 。 然后去激活 并与 ECC对比发现问题 S4的页大小竟然这么小 找到对应的页格式 对比ECC和S4 果然是这个…

2023年中国商用服务机器人行业发展概况分析:国产机器人厂商向海外进军[图]

商用服务机器人指在非制造业的商用服务场景中,用来替代或辅助人类进行服务性质工作的机器人;常见的商用场景中,商用服务机器人主要分为终端配送类机器人,商用清洁类机器人,引导讲解类机器人等,被广泛应用在…

7+线粒体相关基因预后模型+肿瘤微环境+免疫细胞浸润+实验验证

今天给同学们分享一篇线粒体预后模型实验的生信文章“Constructing a novel mitochondrial-related gene signature for evaluating the tumor immune microenvironment and predicting survival in stomach adenocarcinoma”,这篇文章于2023年3月13日发表在J Trans…

Spring Boot 生成二维码

效果图 1.maven依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId>

力扣 095. 最长公共子序列(C语言+动态规划)

1. 题目 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#xff1a;它是由原字符串在不改变字符的相对顺序的情况下删除某些字符&#xff08…

强化学习

文章目录 强化学习概念Model-FreeValue-based learningDQN State-based learning蒙特卡洛近似 Actor-Critic LearningModel-BasedMonte Carlo TreeSearch(MCTS)-AlphaGo 强化学习概念 Terminologies&#xff08;术语&#xff09; State s&#xff1a;环境的一个状态Agent &…

程 控 电 源1761程控模块电源

程 控 电 源 1761程控模块电源 1761程控模块电源是在自动测试环境中提供偏置功率和对部件或最终产品提供激励的理想设备&#xff0c;是测试系统必备的测试仪器。适用于研发、设计、生产制造等自动测试领域。 1761程控模块电源为用户选配电源提供了灵活性&#xff0c;根据需要…

27岁,准备转行做网络安全渗透,完全零基础,有前途吗?

你该不该转行的问题一样&#xff0c;都是你自己的人生选择&#xff0c;怎能听人一面之词&#xff1f; 所以转行一定要想清楚&#xff0c;对自身的实力做好清晰的估算&#xff0c;换个赛道重新开始、从头再来的话&#xff0c;那么我建议你考虑“网络安全”&#xff0c;前景好薪…

CSS 轮廓(outline)

轮廓&#xff08;outline&#xff09;是绘制于元素周围的一条线&#xff0c;位于边框边缘的外围&#xff0c;可起到突出元素的作用。 轮廓&#xff08;outline&#xff09;属性指定元素轮廓的样式、颜色和宽度。 CSS 轮廓&#xff08;outline&#xff09; 轮廓&#xff08;ou…

关于网络协议的若干问题(五)

1、DH 算法会因为传输随机数被破解吗&#xff1f; 答&#xff1a;DH 算法的交换材料要分公钥部分和私钥部分&#xff0c;公钥部分和其他非对称加密一样&#xff0c;都是可以传输的&#xff0c;所以对于安全性是没有影响的&#xff0c;而且传输材料远比传输原始的公钥更加安全。…

Vue和React高级特性之传送

一、Vue中的Teleport 是一个内置组件&#xff0c;它可以将一个组件内部的一部分模板“传送”到该组件的 DOM 结构外层的位置去 试想下面这样的 HTML 结构&#xff1a; <div class"outer"><h3>Tooltips with Vue 3 Teleport</h3><div><M…

Zabbix 使用同一ODBC监控不同版本MySQL

一、ODBC介绍 ODBC是Open Database Connect 即开发数据库互连的简称&#xff0c;它是一个用于访问数据库的统一界面标准。ODBC引入一个公共接口以解决不同数据库潜在的不一致性&#xff0c;从而很好的保证了基于数据库系统的应用程序的相对独立性。ODBC 概念由 Microsoft 开发&…

【AI视野·今日Robot 机器人论文速览 第五十三期】Thu, 12 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Thu, 12 Oct 2023 Totally 25 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Robotics Papers Pixel State Value Network for Combined Prediction and Planning in Interactive Environments Authors Sascha Rosbach, St…

Python学习记录——이십이 Bytes和字符集编码

文章目录 根据ANSI标准&#xff0c;各国对于各国的文字有自己的编写方法&#xff0c;中国发展的就是gbk编码&#xff0c;国际上有个unicode码&#xff0c;适用于所有语言&#xff0c;依据这个标准出来utf-8标准。像ascii&#xff0c;我们见到的就是8个bit位&#xff0c;总共存放…

SOP8封装 NV400F的语音芯片在电动车充电桩的应用

充电桩作为电动汽车的配套设施&#xff0c;为其提供充电服务&#xff0c;功能类似加油站里的加油机。一般安装在公共建筑和居民小区内供电动车车主使用。随着国家对节能减排和保护环境越来也重视。在城市中&#xff0c;新能源的电动车得到了空前的发展&#xff0c;电动汽车零污…

二十二、【形状工具组】

文章目录 基础图形多边形直线工具自定义形状工具 形状工具组画的图形是矢量图形&#xff0c;在放大和缩小后像素不变看起来不会模糊&#xff0c;位图和矢量图形的存储方式不一样&#xff0c;位图的存储方式是按各个像素的数据来进行存储的&#xff0c;而矢量图形是根据算法来进…

蓝桥杯——递增序列和货物摆放

文章目录 前言一、递增序列二、货物摆放总结 前言 多多练习 一、递增序列 解题思路&#xff1a; 代码实现&#xff1a; 当然我的这个代码也不是很正确 发这道题就是向大家集思广益&#xff0c;我的就只作为一个参考啦~ #include <stdio.h> #include <stdlib.h>…

【数据结构】排序--插入排序(希尔排序)

目录 一 基本思想 二 直接插入排序 三 希尔排序 一 基本思想 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止&#xff0c;得到一个新的有序序列 。 实际中我们玩扑克牌时&#xff0c;就用了插入排序的思想 二…

前端 js导出excel

一、导出效果 二、导出代码 download() {let data [{name: aaaa,age: 10,address: 广东,phone: 1,wechart: 1},{name: bbbb,age: 11,address: 广西,phone: 2,wechart: 2},{name: cccc,age: 12,address: 山东,phone: 3,wechart: 3}]if (!data.length) {this.$Message.warnin…