真心建议测试工程师学完Pytest框架实战,跳槽必备,学完能涨薪5k

news2024/11/20 14:39:19

【文章末尾给大家留下了大量的福利】

应用场景:

pytest 框架可以解决我们多个测试脚本一起执行的问题。

它提供了测试用例的详细失败信息,使得开发者可以快速准确地改正问题。它兼容最新版本的 Python。它还兼容 unittest、doctest 和 nose,开箱即用。接下来我们详细了解下pytest框架。

01

安装和介绍

概念:

pytest 是 python 的一种单元测试框架,同自带的 Unittest 测试框架类似,相比于 Unittest 框架使用起来更简洁,效率更高

官网: https://docs.pytest.org/en/latest/
中文文档地址: https://www.osgeo.cn/pytest/

01

特点和书写规则

特点:

  • 非常容易上手,入门简单,文档丰富,文档中有很多实例可以参考
  • 支持简单的单元测试和复杂的功能测试
  • 支持参数化
  • 执行测试过程中可以将某些测试跳过,或者对某些预期失败的 Case 标记成失败 支持重复执行失败的 Case
  • 支持运行由 Nose, Unittest 编写的测试 Case
  • 具有很多第三方插件,并且可以自定义扩展
  • 方便的和持续集成工具集成

安装:

通过pip命令安装指定版本

pip3 install pytest==5.4.3

pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效。

 自动化测试相关教程推荐:

2023最新自动化测试自学教程新手小白26天入门最详细教程,目前已有300多人通过学习这套教程入职大厂!!_哔哩哔哩_bilibili

2023最新合集Python自动化测试开发框架【全栈/实战/教程】合集精华,学完年薪40W+_哔哩哔哩_bilibili

测试开发相关教程推荐

2023全网最牛,字节测试开发大佬现场教学,从零开始教你成为年薪百万的测试开发工程师_哔哩哔哩_bilibili

postman/jmeter/fiddler测试工具类教程推荐

讲的最详细JMeter接口测试/接口自动化测试项目实战合集教程,学jmeter接口测试一套教程就够了!!_哔哩哔哩_bilibili

2023自学fiddler抓包,请一定要看完【如何1天学会fiddler抓包】的全网最详细视频教程!!_哔哩哔哩_bilibili

2023全网封神,B站讲的最详细的Postman接口测试实战教学,小白都能学会_哔哩哔哩_bilibili

使用 pytest编写用例,必须遵守以下规则:

  • 测试文件名必须以“test”开头或者"test"结尾(如:test_ab.py)
  • 测试方法必须以“test”开头。test*.py 或 *test.py
  • 测试类命名以“Test”开头。用例识别:包含所有test_*的方法(测试类不能带有— init—方法)
  • 断言使用基本的assert即可

使用 pytest 需要更改 pycharm 集成设置

Pytest 可以执行 uinttest 写的用例和方法

02

运行方式

运行方式分为两种

  • 命令行模式【建议】
  • 主函数模式

命令行模式【建议】

命令行中执行 pytest -s test_demo01.py

主函数模式

import pytest

class Test:

def test_case01(self):

print(1)

def test_case02(self):

print(2)

# 主函数执行

if __name__ == '__main__':

pytest.main(['-s','test_demo01.py'])

在 test_demo01.py文件中增加主函数

-s 表示支持控制台打印,如果不加,print 不会出现任何内容

运行结果

  • . 表示成功
  • F 表示失败
小结:建议使用命令行的形式运行,对比主函数模式更加方便

03

setup 和 teardown

pytest 在运行自动化脚本的前后会执行两个特殊的方法,分别是 setup 和 teardown 在执行脚本之前会执行 setup方法,在执行脚本之后会执行 teardown 方法,我们可以在 setup 中进行获取驱动对象的操作,在teardown 中进行关闭驱动对象的操作

应用场景:

函数级别方法

运行于测试方法的始末,运行一次测试函数会运行一次 setup 和teardown。

示例代码

import pytest

class Test:

def setup(self):

print('test--->setup')

def teardown(self):

print('test--->teardown')

def test_case01(self):

print('test--->1')

def test_case02(self):

print('test--->2')

# 主函数执行

if __name__ == '__main__':

pytest.main(['-s','test_demo01.py'])

执行结果

示例代码

import pytest

class Test:

def setup_class(cls):

print('test--->setupcls')

def teardown_class(cls):

print('test--->teardowncls')

def test_case01(self):

print('test--->1')

def test_case02(self):

print('test--->2')

# 主函数执行

if __name__ == '__main__':

pytest.main(['-s','test_demo01.py'])

执行结果

02

Pytest-常用插件

插件列表网址: https://plugincompat.herokuapp.com包含很多插件包,大家可依据工作的需求选择 使用。

01

Pytest-html测试报告

应用场景

自动化测试脚本最终执行是通过还是不通过,需要通过测试报告进行体现

使用命令进行安装 指定版本

pip install pytest-html=2.1.1

执行命令

pytest test_login.py --html=report.html

查看报告

报告展示:

02

控制函数执行顺序

应用场景:

现实生活中,如果想下订单,必须先登录,我们可以通过插件的形式来控制函数执行的顺序 安装

使用命令 pip3 install pytest-ordering

  • 标记于被测试函数,@pytest.mark.run(order=x)
  • 根据order传入的参数来解决运行顺序
  • order值全为正数或全为负数时,运行顺序:值越小,优先级越高
  • 正数和负数同时存在:正数优先级高

示例代码

import pytest



class Test:



def test_case01(self):

print('test--->001')



@pytest.mark.run(order=2)

def test_case02(self):

print('test--->002')



@pytest.mark.run(order=1)

def test_case03(self):

print('test--->003')

执行结果

03

失败重试

应用场景:

由于网络的原因造成自动化脚本报错,我们可以使用失败重试的插件,当失败后尝试再次运行,一般情况最终成功可以视为成功,但最好进行进行排查时候是脚本问题

使用命令pip3install pytest-rerunfailures 进行安装使用

在配置文件中的命令行参数中增加 -- reruns n

pytest -s test_demo2.py --reruns 3

示例代码

class Test:

def test_a(self):

assert 1,1 # 断言成功

def test_b(self):

print('失败')

assert 0,1 # 断言失败

运行结果

R 表示重试

注意重试时,如果脚本通过,那么后续不再重试

03

pytest高级用法

01

跳过测试函数

应用场景:

同一个软件在不同的设备上可能会有不同的效果,比如,iOS 的 3d touch 操作是需要 6s 以上设备支持 的,6 和 6s 都可以安装同一款应用,如果设备不支持,那么根本没有必要去测试这个功能。此时,我们可以 让这种函数进行跳过

使用方式:

在需要跳过的测试脚本之上加上装饰器 @pytest.mark.skipif(condition, reason="xxx")
condition

reason
跳过的条件,必传参数

标注原因,必传参数

示例代码:

class Test:

def test_a(self):

assert 1,1 # 断言成功

@pytest.mark.skipif(condition=True,reason='x')

def test_b(self):

print('失败')

assert 0,1 # 断言失败

执行结果

02

预期失败

应用场景:

举例,测试手机号码输入框长度为11位数字,如果我们传入一个 12 位数字,此时可以使用预期失败

@pytest.mark.xfail(condition=None, reason=None, raises=None, run=True, strict=False)

  • condition 跳过条件,必填参数
  • reason 标注原因,必填参数
  • 使用方式:

在需要标记预期失败的测试脚本之上加上装饰器示例

示例代码:

class Test:

def test_a(self):

print('-----testa')

assert 1,1 # 断言成功

@pytest.mark.xfail(condition=True,reason='x')

def test_b(self):

print('-----testb')

assert 0,1 # 断言失败

@pytest.mark.xfail(condition=True, reason='x')

def test_c(self):

print('-----testc')

assert 0, 2 # 断言失败

执行结果:

x 表示预期失败结果失败 不算是bug,X 表示预期失败结果成功 算是bug

03

数据参数化

应用场景:

登录功能都是输入用户名,输入密码,点击登录。但登录的用户名和密码如果想测试多个值是没有办法 用普通的操作 实现的。数据参数化可以帮我实现这样的效果。

方法名:

@pytest.mark.parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)

  • argnames 参数名
  • argvalues 参数对应值,类型必须为可迭代类型,一般使用list

一个参数使用方式

  • argnames 为字符串类型,根据需求决定何时的参数名
  • argvalues 为列表类型,根据需求决定列表元素中的内容
  • 在测试脚本中,参数,名字与 argnames 保持一致
  • 在测试脚本中正常使用

argvalues 列表有多少个内容,这个脚本就会运行几次

示例代码:

class Test:

@pytest.mark.parametrize('age',[18,19,23,21])

def test_01(self,age):

print(age)

执行结果:

多个参数:

class Test:

@pytest.mark.parametrize(('name','age'),[('zhangsan',18),('lisi',19)])

def test_01(self,name,age):

print(name,age)

执行结果:

04

Pytest-fixture

应用场景:

fixture 修饰器来标记固定的工厂函数,在其他函数,类调用它时会被激活并优先执行,通常会被用于完成预置处理和重复操作

使用方式:

  • 通过函数引用

示例代码:

class Testlogin:

@pytest.fixture()

def test_login(self):

print('登录操作')

uname = 'lily'

return uname

def test_a(self,test_login):

print(f'test_a {test_login}')

def test_b(self):

print('不需要登录操作')

运行结果:

  从软件测试到测试开发全套视频+文档+项目+简历模板+面试宝典资料包

需要的小伙伴可以点击小编主页

,验证消息填写000即可获取喔

 一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战

四、App自动化项目实战

五、一线大厂简历

六、测试开发DevOps体系

七、常用自动化测试工具

八、JMeter性能测试

九, 银行业务测试

十,大数据测试和业务分析

 

 十一:项目实战

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

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

相关文章

【03】Istio Gateway示例配置

3.1 开放kiali至集群外部 首先将istio-inressateway暴露集群外部; 在node02的ens33网卡上面有多余的ip地址,将该地址绑定在igressgateway的svc 上面。 kubectl edit svc istio-ingressgateway -n istio-system定义kiali的ingress gateway的资源配置清单 apiVersion:…

JavaEE进阶学习:Spring核心和设计思想

Spring 是什么 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因。Spring 支持广泛的应用场景,它可以让 Java 企业级…

Centos8上部署Zabbix5.0

1.关闭Selinux及防火墙,避免Web页面无法访问。 setenforce 0 vim /etc/selinux/config 修改“SELINUX”等号后的内容为disabled SELINUXdisabled\\关闭并关闭开机自启 systemctl stop firewalld systemctl disable firewalld 2.配置Centos8本地yum源。 mkdir /mn…

Element-Ui el-table 动态添加行

一、在项目需要使用 这个需求主要是在项目中需要用到 1.点击新增按钮,可以实现新增行。 2.在每个列里面可以进行输入。 3.可以删除新增的行,包括数据。 二、HTML代码 1.主要是循环每一个列,而且这些列都是动态,根据父组件传过来…

MAC在Linux上上传本地文件压缩包(tomcat)解决方法(炒鸡详细)

要将文件压缩包上传到Linux云服务器,并在服务器上解压打开,你可以使用以下步骤: 在本地的Mac上,将要上传的文件或文件夹压缩成一个压缩包(如zip或tar.gz格式)。 使用SSH连接到Linux云服务器。你可以使用Te…

如何制作一个有吸引力的电商小程序

随着互联网的快速发展,电商行业也在不断壮大,越来越多的商家开始进入电商领域。在这个竞争激烈的市场中,一个有吸引力的电商小程序能够为商家带来巨大的优势。那么,如何制作一个有吸引力的电商小程序呢?下面我们将以乔…

YOLO目标检测——海洋目标检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:海洋监管、海洋资源开发、海洋科学研究数据集说明:海洋目标检测数据集,真实场景的高质量图片数据,数据场景丰富,含有“金属”、“未知”、“橡胶”、“平台”、“塑料”、“木材”、“布”、“纸张”、“…

JavaScript_动态表格,实现全选,全不选,反选功能,点击第一个复选框,获取所有的checkbox,给所有tr绑定鼠标移到元素之上和移出元素事件。

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>表格全选、全不选&#xff0c;反选</title><style>table{border: 1px solid;width: 500px;margin-left: 30%;}td,th{text-align: center;b…

基于Python美化图片亮度和噪点

支持添加噪点类型包括&#xff1a;添加高斯噪点、添加椒盐噪点、添加波动噪点、添加泊松噪点、添加周期性噪点、添加斑点噪点、添加相位噪点&#xff0c;还提供清除噪点的功能。 我们先看一下实测效果&#xff1a;&#xff08;test.jpg为原图&#xff0c;new.jpg为添加后的图片…

Oracle 11g安装教程

下载并安装Oracle数据库 首先&#xff0c;需要到Oracle官方网站下载Oracle数据库&#xff0c;在这里我们将下载Oracle 11g第2版的Microsoft Windows(x64)版本。由于安装文件过大&#xff0c;可以分两个文件下载或一次性下载&#xff0c;如下图所示 下载完成后&#xff0c;将下…

找工作在哪个app找比较真实可靠

吉鹿力招聘网是一款找工作比较真实靠谱的app。吉鹿力招聘网是一个新兴的人脉社交招聘平台&#xff0c;靠谱而且需求明确&#xff0c;可以依靠自己或者身边朋友推荐。在吉鹿力招聘网上可以有很多前辈的职场分享和行业八卦&#xff0c;对于刚毕业的大学生而言&#xff0c;很有参考…

Nginx的安装

Nginx的安装 Windows下Nginx的安装 1、下载nginx 下载稳定版本: http://nginx.org/en/download.html 直接下载 nginx-1.20.0.zip : http://nginx.org/download/nginx-1.20.0.zip 下载后解压&#xff0c;解压后如下&#xff1a; 2、启动Nginx 有很多种方法启动nginx (…

Python实现WOA智能鲸鱼优化算法优化卷积神经网络回归模型(CNN回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

网络运维Day12

文章目录 yum概述部署阿里镜像源yum基本使用 NFS网络文件系统NFS共享概述部署NFS服务端部署NFS客户端 Tomcat服务实验拓扑安装Tomcat启动服务客户端&#xff08;真机&#xff09;浏览访问页面测试 Tomcat虚拟主机NGINX服务web服务器对比NGINX简介实验拓扑虚拟机A源码编译安装NG…

【08】DestinationRule 高级配置功能

6.2 loadbalancer 定义demoapp v1.0和demoapp v1.1版本和subset的dr规则。参考weight中定义&#xff1b; 定义loadbalance在DestinationRule上定义规则 apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata:name: demoapp spec:host: demoapptrafficPoli…

堆排序(小根堆模板)

输入一个长度为 n 的整数数列&#xff0c;从小到大输出前 m 小的数。 输入格式 第一行包含整数 n 和 m。 第二行包含 n 个整数&#xff0c;表示整数数列。 输出格式 共一行&#xff0c;包含 m 个整数&#xff0c;表示整数数列中前 m 小的数。 数据范围 1≤m≤n≤10^5&am…

找工作什么平台最可靠

吉鹿力招聘网是最可靠的找工作平台。可以直接和HR沟通岗位情况&#xff0c;方便快捷。同时&#xff0c;吉鹿力招聘网还有一些其他功能&#xff0c;比如可以找到更精准的人才&#xff0c;以及专业的招聘网站&#xff0c;可以帮助求职者找到合适的职位。吉鹿力招聘网还有一个特点…

项目应用多数据源动态切换(动态切换数据库连接)

文章目录 前言准备阶段具体配置功能展示注解方式切换数据源代码方式切换数据源优化方式 动态添加删除数据源事务问题参考文章 前言 最近公司的权限项目要实现多租户的功能&#xff0c;于是就要做数据隔离以确保每个租户的数据的安全性&#xff0c;但是项目中也要动态的提供能够…

Unity性能优化分析篇

性能优化是游戏项目开发中一个重要环节。游戏帧率过低&#xff0c;手机发烫&#xff0c; 包体太大&#xff0c;低端机上跑不起来等, 这些都需要来做优化&#xff0c;不管过去&#xff0c;现在&#xff0c;未来&#xff0c;性能优化都是永恒的话题。 而性能优化首先要掌握的是性…

对话金山云高级副总裁刘涛 | 做大模型公司的助力者

“ AIGC的应用化阶段将很快到来&#xff1b;AGI&#xff0c;已步入助手阶段。” 口述 | 刘涛 整理 | 梦婕&云舒 出品&#xff5c;极新 在10月的最后一天&#xff0c;极新有幸采访到了金山云高级副总裁刘涛。我们深入探讨了“云计算逐鹿 AIGC”的话题。作为中国公有云互…