web自动化测试——pytest快速上手

news2024/11/23 17:08:51

目录

1. pytest

1.1 安装

1.2 验证安装

1.3 pytest文档

1.4 创建测试用例

1.5 执行测试用例

1.5.1 使用命令行执行

1.5.2 IDE(PyChram)执行

1.5.3 执行指定文件指定方法

1.5.3.1 命令行编写方式

1.5.3.2 pycharm 编写方式

1.5.4 带参数执行

1.5.4.1 pytest -q简化控制台的输出

1.5.4.2 Pytest -v 输出用例更加详细的执行信息,比如用例所在文件和用例名称

1.5.4.3 pytest -k 执行用例中包含‘关键字’的用例

1.5.4.4 pytest -s 输出用例中的调试信息,比如 print 打印信息,如果不加参数则不输出待执行的用例

1.5.4.5 pytest -m执行‘标记’的内容,执行特定的测试用例,执行有相同标记的测试用例,添加标记的方法如下

1.5.4.6 pytest -x执行失败则停止执行,后面的用例不会被执行

1.5.4.7 pytest --maxfail=n执行失败 n 次之后停止执行,n 是执行失败的次数

1.5.4.8 pytest --count=n 执行用例 n 次,n=2 就是执行两次

1.5.4.9 pytest --lf (last failed)重新运行上次失败的用例,若没有失败的会全部跑

1.5.4.10 pytest --ff (failed first)重新运行所有用例,但首先运行上次失败的用例

1.6 读懂测试结果

1.7 pytest的fixures

1.7.1 创建fixtures

1.7.2 使用fixtures

1.7.3 fixture的范围

🎁更多干货

完整版文档下载方式:


1. pytest

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

  • 简单灵活,容易上手
  • 支持参数化
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
  • 测试用例的skip和xfail处理
  • 可以很好的和jenkins集成
  • report框架----allure 也支持了pytest

1.1 安装

pip install pytest

1.2 验证安装

pytest --version # 会展示当前已安装版本

1.3 pytest文档

官方文档:https://docs.pytest.org/en/latest/contents.html

在pytest框架中,有如下约束:

  • 所有的单测文件名都需要满足test_*.py格式或*_test.py格式。
  • 在单测文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以T开头,不然pytest是不会去运行该class的)
  • 在单测类中,可以包含一个或多个test_开头的函数。
  • 此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。

1.4 创建测试用例

1.创建test_开头的文件,测试文件以 test_xx.py 命名需要以 test_开头(或_test 结尾)

2.若是新建类,测试类需要以 Test_开头,并且不能带有 init 方法(Test开头的类,这个类也叫做测试套件,类下面的是函数才是测试用例)

3.测试用例(方法)需要以 test_开头

import pytest  #导入pytest模块
def test_beifan():  #测试用例
    pass
class TestBaili:  #测试套件
    def test_a(self): #测试用例,第一个测试方法
        pass
    def test_b(self):  #测试用例,第二个测试方法
        pass

4.在用例中使用断言

Pytest 最常用的断言一般有以下五种:

assert xx:判断 xx 为真

assert not xx:判断 xx 不为真

assert a in b:判断 b 包含 a

assert a == b:判断 a 等于 b

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

添加断言在对应的方法里面,做判断测试用例结果是否满足预期,示例如下:

5.优化断言

如果想要在失败的时候看到更详细的信息,可以在断言上添加说明,示例如下:

执行结果如下图,可以看到失败时断言的说明信息:

1.5 执行测试用例

1.5.1 使用命令行执行

cmd 窗口,然后执行 pytest 文件路径/测试文件名例如 pytest ./test_tt.py

如果当前路径已经是放测试用例文件的文件夹下,想要测试文件,则直接可以输入pytest 测试文件名 即可:

如果只输入 pytest,则会默认执行当前文件夹下所有以 test_开头(或_test 结尾)的文件。

1.5.2 IDE(PyChram)执行

写法如截图所示,pytest.main()(参数以列表的形式给出,如截图)

执行当前文件所在路径下的文件,指定文件名则执行指定的文件,若没指定,执行所有 test_开头或者_test 结尾的文件。

也可以新建一个main.py文件

import pytest

if __name__ == '__main__':
    pytest.main()   #程序入口

1.5.3 执行指定文件指定方法

1.5.3.1 命令行编写方式

pytest路径/文件名::类名::方法名例如

1.5.3.2 pycharm 编写方式

如果是用 pycharm 写法如图,与上面的命令行等价:

1.5.4 带参数执行

常用的 pytest 带参数执行:列举几种,其余扩展可以自行百度

1.5.4.1 pytest -q简化控制台的输出

不带参数执行结果:

带参数执行结果:

1.5.4.2 Pytest -v 输出用例更加详细的执行信息,比如用例所在文件和用例名称

1.5.4.3 pytest -k 执行用例中包含‘关键字’的用例

1.5.4.4 pytest -s 输出用例中的调试信息,比如 print 打印信息,如果不加参数则不输出待执行的用例

1.5.4.5 pytest -m执行‘标记’的内容,执行特定的测试用例,执行有相同标记的测试用例,添加标记的方法如下

1.5.4.6 pytest -x执行失败则停止执行,后面的用例不会被执行

1.5.4.7 pytest --maxfail=n执行失败 n 次之后停止执行,n 是执行失败的次数

1.5.4.8 pytest --count=n 执行用例 n 次,n=2 就是执行两次

1.5.4.9 pytest --lf (last failed)重新运行上次失败的用例,若没有失败的会全部跑

1.5.4.10 pytest --ff (failed first)重新运行所有用例,但首先运行上次失败的用例

1.6 读懂测试结果

.代表一个测试用例通过,…代表两个测试用例通过,以此类推;
s,即Skip,代表用例跳过执行;
F,即Failure,一般是断言发生错误;
E,即Error,一般是用例执行过程中报错。

1.7 pytest的fixures

fixtures(夹具)可以在测试用例执行之前,执行之后,自动执行一些代码

在不同用例中,相同的代码进行复用

在不同用例中,实现依赖管理

1.7.1 创建fixtures

pytest的夹具,本质是“函数”,加上fixtures装饰器。

夹具=函数+fixtures装饰器

创建一个conftest.py文件

import pytest
from selenium import webdriver
from selenium.webdriver.common.by import By

@pytest.fixture()
def driver():
    d = webdriver.Chrome()
    d.get("http://101.34.221.219:8010/")  # 控制浏览器,访问百度
    d.quit()
    return d

1.7.2 使用fixtures

在测试用例的参数列表中,加上夹具名称,夹具就会被自动地使用。

通过使用fixtures实现,复用fixture中的代码

 再用例中调用:

import pytest  #导入pytest模块
def test_beifan():  #测试用例
    pass
class TestBaili:  #测试套件
    def test_a(self,driver): #测试用例,第一个测试方法
        pass
    def test_b(self,driver):  #测试用例,第二个测试方法
        pass

这样就会打开自动两次浏览器了。

有个要求:两个测试用例,只启动一次浏览器

100个测试用例,但是只启动1次浏览器

1.7.3 fixture的范围

创建夹具,可以指定夹具的共享范围,在共享范围内的用例,会共享同一个夹具。

pytest的夹具共享范围有5个:

function(默认,最小,自己和自己共享,不和其他用例共享)

class(同一个类中)

module(文件)

package(文件夹)

session(会话,最大,全局)

@pytest.fixture(scope='function')
def driver():
    d = webdriver.Chrome()
    d.get("http://101.34.221.219:8010/")  # 控制浏览器,访问百度
    d.quit()
    return d

在fixture这个装饰器中传递一个范围参数,用来说明用例在什么范围中是相互共享的。

我们解决了多次打开浏览器的问题,那么下一个问题是元素的定位存在重复,下面我们去处理这个问题。

🎁更多干货


 

完整版文档下载方式:

这些资料,对于从事【软件测试】等相关工作的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享。

在评论区和我互动交流或者私❤我【软件测试学习】领取即可,拿走不谢。


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

 

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

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

相关文章

spring Cloud使用Skywalking搭建笔记

skywalking支持dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用GRPC,性能较好,实现方式是java探针,支持告警,支持JVM监控,支持全局调用统计等等,功…

品牌方的brief怎么写,注意事项

我们都知道,对于产品传播来说,达人起着重要的作用。可又是什么影响着达人的传播结果呢?今天给大家分享下,品牌方的brief怎么写的注意事项。 一、什么是brief 可能有的朋友,还不太清楚,到底什么是brief。Brief&#xf…

【openGauss数据库】---设置开机自启动openGauss数据库服务

【openGauss数据库】---设置开机自启动openGauss数据库服务 🔻 一、openGauss 自定义服务的配置文件了解🔻 二、设置openGauss 开机自启动🔻 三、总结—温故知新 👈【上一篇】 💖The Begin💖 点点关注&am…

基于边缘计算AidLux的自动驾驶智能预警应用方案

上传源码至AidLux(具体操作见前面AIGC帖子) 配置环境: cd YOLOP/YOLOP pip install -r requirements.txt pip install torch1.8.1 torchvision0.9.1 -i https://pypi.mirrors.ustc.edu.cn/simple/ pip install onnxruntime -i https://py…

Linux--删除目录:

一、删除空目录:rmdir rmdir是remove director的简写 语法: rmdir 目录名 功能: 删除空目录 示例: 删除空目录:成功 删除非空目录:失败 删除一切:rm 语法: 1.rm 文件名2.rm -r…

Unity wav2Audioclip知识点记录

链接&#xff1a;hanachiru/Wav2AudioClipSample: Sample project to convert Wav files to AudioClip. (github.com) public static class Wav {/// <summary>/// Create AudioClip/// </summary>/// <param name"fileBytes">.wav</param>/…

ajax根据经纬度 获取地址

address 参数格式&#xff0c;经度在前&#xff0c;维度在后&#xff0c;以逗号隔开。 开放地址&#xff0c;有可能失效 var address 30.67,104.06; //经纬度格式一 //var address11620.12’,3912.34’;//经纬度格式二 var url "http://api.map.baidu.com/geocoder/…

什么台灯护眼效果好?注意这些选灯细节!

每个人对一个事物的接受能力跟使用体验是不一样的&#xff0c;但是护眼灯可以说是大部分人使用下来都觉得好用的产品&#xff0c;我自己大学毕业后&#xff0c;面对电脑比较多&#xff0c;我也会买个护眼台灯用&#xff0c;可以舒缓眼部疲劳&#xff0c;给孩子使用也是&#xf…

【【51单片机的DS1302模块-9】】

51单片机的DS1302模块使用 DS1302时钟显示 显示年月日 时钟秒 再可以通过按键调节时间 有种当初买的小手表的感觉 其实我们芯片内部也是可以用计时的&#xff0c;但是过分占用了芯片内部的计时模块&#xff0c;我们不如通过外部的时间模块DS1302来操作 单片机的定时器不能掉电…

Linux教程——Linux用户和用户组(包含两者之间的关系)

Linux 是多用户多任务操作系统&#xff0c;换句话说&#xff0c;Linux 系统支持多个用户在同一时间内登陆&#xff0c;不同用户可以执行不同的任务&#xff0c;并且互不影响。 例如&#xff0c;某台 Linux 服务器上有 4 个用户&#xff0c;分别是 root、www、ftp 和 mysql&…

想知道通行密钥如何取代密码吗?看完这篇文章你就懂了

密码作为一种广泛应用的身份验证方式&#xff0c;已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;随着技术的不断发展和安全威胁的增加&#xff0c;传统的用户名-密码组合逐渐显示出一些弊端。幸运的是&#xff0c;通行密钥作为一种新兴的身份验证方法&#xff0c;正…

Springboot 处理BigDecimal 数据科学计数格式,展示E+8的问题

如图&#xff1a; 处理方式&#xff1a; 我们基于springboot的 JsonSerializer &#xff0c;我们自定义一下 针对BigDecimal类型属性的JsonSerializer处理。 import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import…

vue 3.0 + vite + flv 视频流播放

官方提供的 demo 地址&#xff0c;大家可以用自己的流地址&#xff0c;先试试是否符合需求&#xff1b; http://bilibili.github.io/flv.js/demo/ Flv.js API https://gitee.com/mirrors/flv.js/blob/master/docs/api.md 安装 Flv.js npm install --save flv.js更改 tscon…

CASAIM 与ABB 达成三维数字化测量技术合作,CASAIM 国有专业尺寸检测实验室助力机器人轨道检测

近期&#xff0c;CASAIM与ABB达成三维数字化测量技术合作&#xff0c;CASAIM 国有专业尺寸检测实验室助力ABB完成机器人轨道检测&#xff0c;提高机器人的运动精度和稳定性。 ABB集团位列全球500强企业&#xff0c;是全球领先的工业机器人制造商之一&#xff0c;致力于提供高质…

ModaHub魔搭社区:向量数据库Milvus部署运维问题教程(二)

目录 在 Windows 安装 pymilvus 报错&#xff0c;如何解决&#xff1f; 内网环境&#xff0c;即离线方式&#xff0c;能否部署 Milvus 服务&#xff1f; 在多个 Milvus 节点接入 Pushgateway 的情况下如何进行区分数据来源&#xff1f; 我应该使用 SQLite 还是 MySQL 进行元…

基于群组实现从 Azure AD 到极狐GitLab 的单点登录

目录 配置单点登录 在 Azure AD 中创建企业应用 SAML 基础配置 配置 Azure “Attributes & Claims” 配置用户同步 在极狐GitLab 创建 SCIM Token 配置 Azure Provisioning Azure 手动用户预配 测试单点登录 Azure 自动用户同步 配置群组同步 配置 SAML 群组链…

【算法基础】快速排序(模板)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;【C/C】算法 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有…

力扣题库刷题笔记17--电话号码的字母组合

1、题目如下&#xff1a; 2、个人Python代码实现&#xff1a; 还是先记录一下思路&#xff0c;首先这种类型的题&#xff0c;需要自定义一个字典对应题目中的电话号码和数字。其次&#xff0c;个人的思路是&#xff0c;先读取字符串第一个字符&#xff08;digits[0]&#xff09…

云原生(第二篇)k8s-二进制搭建

准备五台机器&#xff1a; master01&#xff1a;192.168.169.10 node01&#xff1a;192.168.169.40 node02&#xff1a;192.168.169.50 master02&#xff1a;192.168.169.60 负载均衡nginxkeepalive01&#xff08;master&#xff09;&#xff1a;192.168.169.20 负载均衡…

记一次Native memory leak排查过程 | 京东云技术团队

1 问题现象 路由计算服务是路由系统的核心服务&#xff0c;负责运单路由计划的计算以及实操与计划的匹配。在运维过程中&#xff0c;发现在长期不重启的情况下&#xff0c;有TP99缓慢爬坡的现象。此外&#xff0c;在每周例行调度的试算过程中&#xff0c;能明显看到内存的上涨…