2024pytest自动化测试框架学习(一)

pytest是一个使构建简单和可扩展测试变得容易的框架。测试具有表现力和可读性-不需要样板代码。数分钟内即可开始为您的应用程序或库进行小型单元测试或复杂的功能测试。

一、安装

  1. 使用在线安装命令:

    • pip install -U pytest (参数-U代表如果你已经安装了pytest,那么就升级到最新版本)

  2. 验证是否安装成功

    • pytest --version 查看当前安装的版本信息

    • pip list 当然也可以使用该命令查看所有安装的库来确认是否已经安装pytest

二、入门Demo

我们以测试一个add函数为例,完成入门 首先创建test_ demo.py 测试方法以test_ 开头

以函数形式编写测试用例

代码示例

 
  1. #被测方法

  2. def add(x, y):

  3. return x + y

  4. def test_add_1():

  5. assert add(1, 2) == 3

Terminal中执行命令:pytest 或者直接在pycharm中右键 Run 'pytest for test_demo'

图片

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

以类的形式编写测试用例

代码示例

  1. def add(x, y):

  2. return x + y

  3. class TestDemo:

  4. def test_add_1(self):

  5. assert add(1, 5) == 6

  6. def test_add_2(self):

  7. assert add(1, 2) == 3

Terminal中执行命令:pytest 或者直接在pycharm中右键 Run 'pytest for test_demo'

图片

我们使用参数-v 执行一次看下结果:

图片

执行规则总结

收集用例规则:遍历所有目录下格式为test _ .py或 _test.py的文件(以Test开头的测试类,不包含有构造函数的) 执行用例规则:

  • 执行某个包下所有的测试用例:pytest testapp(创建的包名,我们可以在该包下创建一个testdemo_02.py 同时添加测试方法)。此时你发现只是执行了该包下的测试用例。

  • 如果包下有很多测试文件如何运行指定的测试文件?pytest testapp/testdemo_02.py ,这样就只是执行了该文件,其他文件不再执行

  • 我们也可以在当前路径下指定执行的py文件:pytest test_demo.py

  • 如何运行文件中指定的测试方法?pytest testdemo.py::testadd_1

  • 如果是类的形式如何执行指定方法?pytest testdemo.py::TestDemo::testadd_1


总结:通过上面几个问题,我们整理执行规则

  1. 运行执行目录下的测试用例 使用命令 pytest 目录or包/目录or包

  2. 运行指定文件,使用命令 pytest 目录/文件 或者 pytest 文件

  3. 运行指定文件中类的函数,使用命令 pytest 文件::类名::函数

常用执行命名参数详解

  1. -v 参数 pytest -v test_demo.py ,输出更加详细的测试信息,例如测试文件及用例名称

  2. -q 参数 pytest -q test_demo.py ,输出简化信息(与-v参数相反)

  3. -s 参数 pytest -s test_demo.py ,输出调试打印信息,默认没有该参数不输出

  4. -m 参数 pytest -m test_demo.py ,执行打标记的测试时用例(后续我们可以专项打标记学习下,测试分组经常用到)

  5. -k 参数 pytest -k "1" test_dem.py ,执行函数名中带有“1”关键字的用例

断言

pytest中断言结果直接使用assert就可以。assert 后面跟逻辑表达式

  • assert xx 判断xx是否为true

  • assert not xx 判断 xx不为true

  • assert a == b 判断 a是否等于b

  • assert a != b 判断 a不等于b

  • assert a in b 判断b是否包含a

  • assert a not in b 判断b中不包含a

测试结果含义

  • "."表示测试通过

  • "F"表示测试失败

  • "s"表示跳过该用例

  • "X" 预期失败但是用例成功执行了

  • "xfail" 预期失败执行也失败了

三、接口实例

学习了这些基本知识,我们就可以开始实战了。以网上免费获取天气信息接口为例,来具体看下如何使用pytest完成一个测试用例

  • 接口地址:http://t.weather.sojson.com/api/weather/city/city_code

  • 请求类型:get

  • 请求参数:city_code=101030100 (天津)

预期结果:

  1. 验证返回状态码status是否等于200

  2. 验证cityInfo中返回的citykey是否为查询的id

代码示例

  1. import requests

  2. url = "http://t.weather.sojson.com/api/weather/city/"

  3. city_code = "101030100"

  4. class TestDemo:

  5. def test_get_weather(self):

  6. r = requests.get(url + city_code)

  7. result_data = r.json()

  8. print(result_data)

  9. assert result_data["status"] == 200

  10. assert result_data["cityInfo"]["citykey"] == "101030100"


执行命令:pytest -v -s test_demo.py

执行结果: 

图片


从执行结果中我们看到不仅仅打印了执行的文件、类名、方法,同时还打印了接口的返回结果。

暂时分享到这里,后续我们详细学习下pytest中的参数化用来解决批量验证多个城市的返回信息是否正确。

下面是配套资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!

最后: 可以在公众号:自动化测试老司机 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

限制员工上网行为,如何有效管控员工上网行为? 你一定想不到这个方法!

发现员工上班时间刷抖音: 面对这种情况,领导不得火冒三丈??? 对于员工不恰当的上网行为,非常有可能导致工作效率低下、安全风险增加以及企业形象受损。 因此应该采取一些措施来对员工上网行为进行管理。 …

NTP协议介绍

知识改变命运,技术就是要分享,有问题随时联系,免费答疑,欢迎联系! 网络时间协议NTP(Network Time Protocol)是TCP/IP协议族里面的一个应用层协议,用来使客户端和服务器之间进行时…

浅谈碳化硅MOSFET TO-247封装单管引入开尔文管脚必要性

相较于传统的硅MOSFET和硅IGBT 产品,基于宽禁带碳化硅材料设计的碳化硅 MOSFET 具有耐压高、导通电阻低,开关损耗小的特点,可降低器件损耗、减小产品尺寸,从而提升系统效率。而在实际应用中,我们发现:带辅助…

Navicat安装破解教程

蓝奏云下载地址https://wws.lanzoux.com/b01tqirzc或者链接https://pan.baidu.com/s/15cfQAFdQsn8xSg_2LiQZHg 提取码:q3rd链接:https://pan.baidu.com/s/1WwyCC03qcnqnWKGo-m6ZjA 提取码:pg9uNavicat16目前没有破解方法,15可以&a…

Ant Design Vue 修改Model弹框 样式不生效

今天在使用 Ant Design Vue 组件库中又踩了一个坑 其他的样式都可以更改,唯独更改 Model 弹框组件的样式一直不生效 于是研究了好久才找到样式不生效的原因 最后又折腾了好久,参考了不少资料才得出的解决方案:

软件测试卷王面试题分享(超详细)

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 在这把自己整理的软件测试面试题和文档发出来给各位一点帮助,面试题记得收藏好&#…

【GAMES101】Lecture03 Transformation 变换

目录 0 课程内容1 Why Study Transformation1.1 Modeling 模型变换1.2 Viewing 视图变换 2 2D Transformations 二维变换2.1 Scale 缩放变换2.2 Reflection Matrix 反射矩阵2.3 Shear Matrix 切变矩阵2.4 Rotate 旋转2.5 特点:线性变换可以用矩阵表示(Li…

量化投资实战(三)之配对交易策略--协整模型法

点赞、关注,养成良好习惯 Life is short, U need Python 量化投资实战系列,不断更新中 1. 初识配对交易策略 配对交易(Pairing Trading)是指八十年代中期华尔街著名投行Morgan Stanley的数量交易员Nunzio Tartaglia成立的一个数量…

【MQ】消息队列概述

📝个人主页:五敷有你 🔥系列专栏:MQ ⛺️稳中求进,晒太阳 定义 消息队列:一般我们简称为MQ(Message Queue) Message Queue :消息队列中间件,很多初学者认为,MQ通过消息的发送…

C++:string的介绍

C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合面向对象的思想,而且底层空间需要用户自己管理,稍不留…

RocketMQ如何保证消息的顺序性?

和Kafka只支持同一个Partition 内的消息的顺序性一样,RocketMQ中的也提供了基于队列(分区)的顺序消费。即同一个队列内的消息可以做到有序,但是不同队列内的消息是无序的! 当我们作为MQ生产者需要发送顺序消息时,需要在send方法中,传入一个MessageQueueSelector。 Mes…

Media-Download-Helper 完整部署说明

Media-Download-Helper 完整部署说明 前排提示:由于使用到了 Telegram、Google 等服务,所以当前方案不建议国内用户使用! 基于 docker 安装 qbittorrent WebUI 使用 docker 安装 qbittorrent 非常简单,教程也非常非常多&#xff…

安卓7原生相机切到视频崩溃

目录 1、查看日志 2、分析日志、提取重点 3、寻找解决方法 author daisy.skye的博客_CSDN博客-嵌入式,Qt,Linux领域博主 daisy.skye_嵌入式,Linux,Qt-CSDN博客daisy.skye擅长嵌入式,Linux,Qt,等方面的知识https://blog.csdn.net/qq_40715266?typeblog 1、查看日志 由于安…

格行随身WiFiVS华为天际通VS飞猫U8真实测评大PK,随身WiFi哪个牌子最好用?随身WiFi怎么选?

如今随身WiFi界格行、华为、飞猫三足鼎立,被称为随身WiFi界的“三国杀”,今天,我这个江湖百晓生就来给大家揭秘,究竟谁才是随身网络之王?你准备好围观了吗? 先说说华为天际通随身WiFi,这位老大哥…

今日arXiv最热大模型论文:北大发布,通过上下文提示,让大模型学习一门新的语言

在人工智能领域,大语言模型(LLMs)的发展已经取得了显著的进步,它们在处理高资源语言方面表现出色。然而,对于资源较少的语言,尤其是极低资源语言,这些模型的支持却显得力不从心。这些语言往往缺…

【C++庖丁解牛】C++内存管理 | new和delete的使用以及使用原理

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1. C/C内存分布2. C语…

方法中单独使用return关键字

一、return关键字的单独使用 二、示例代码 public class ReturnDemo {public static void main(String[] args) {chu(10,0);chu(10,2);}public static void chu(int a,int b){if (b 0) {System.out.println("除法出错,除数不能为零");return;}System.ou…

无处不在的便捷:D咖无人售卖咖啡机在公共场所的应用探索

在繁忙的现代生活中,无人售卖咖啡机作为一项便捷的服务,正逐渐在公共场所得到广泛应用。本文将探讨D咖无人售卖咖啡机在公共场所的应用场景和优势。 一、无人售卖咖啡机的应用场景 写字楼:写字楼内工作人员需要在繁忙的工作中寻找便捷的饮品解…

【center-loss 中心损失函数】 参数与应用

文章目录 前言简单总结一下参数对比解释参数权重衰减(L2正则化)动量其他参数运行 前言 之前我们已经完全弄明白了中心损失函数里的代码是什么意思,并且怎么用的了,现在我们来运行它。 论文:https://ydwen.github.io/…

【数学+前缀和】第十四届蓝桥杯省赛C++ A组《平方差》(c++)

【问题描述】 给定 L,R,问 L≤x≤R 中有多少个数 x 满足存在整数 y,z 使得 xy的平方−z的平方。 【输入格式】 输入一行包含两个整数 L,R,用一个空格分隔。 【输出格式】 输出一行包含一个整数满足题目给定条件的 x 的数量。 【数据范围】 对于 40% 的…