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

news2024/11/25 21:20:57

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命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。
现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

 

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这个装饰器中传递一个范围参数,用来说明用例在什么范围中是相互共享的。

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

1.8 POM实现对页面的封装

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

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

资料获取方式 :

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

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

相关文章

7.1.tensorRT高级(2)-使用openvino进行onnx的模型推理过程

目录 前言1. openvino2. 补充知识总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。 本次课程学习 tensorRT 高级-使用 openvino 进行 onnx…

微信小程序云开发快速入门(4/4)

前言 上一章节《微信小程序云开发快速入门(3/4)》 我们在之前的分享中学习到了,云存储和云数据库,接下来我们来学习下云函数。 云函数 云函数相当于服务器接口的概念,它并属于小程序端代码。它是以函数的形式运行后…

新手班主任如何快速完成分班查询系统制作?

作为一个新手班主任,要快速完成分班查询系统的创建工作,可以按照以下步骤进行: 1. 确定需求:首先要明确分班查询系统所需的功能和要求。与学校领导和其他老师进行沟通,了解他们对系统的期望和需求,包括查询…

了解以太网通信中的九阳神功 - SOME/IP协议

智能座舱SOME/IP通信 概述SOME/IP基础协议SOME/IP SD协议通信行为流程开机流程关机行为行为时序总结概述 SOME/IP协议是目前国内座舱SOA化应用比较广泛的一种ECU或车辆网络内设备之间交换数据的网络通信协议。它允许不同车辆组件,如发动机控制单元、信息娱乐系统、车身控制模…

数学类问题(Leetcode)

1.质数数量 nullhttps://leetcode.cn/problems/count-primes/description/解题思路&#xff1a; 遍历大于1 且小于n的每个数的倍数&#xff0c;设置为非质数&#xff0c;剩下的就都是质数了。 代码&#xff1a; class Solution { public:int countPrimes(int n) {if(n<2)…

第一章-JavaScript基础进阶part5:移动端网页特效

文章目录 一、触屏事件-touch1.1 常见touch事件1.2 触屏事件对象&#xff08;TouchEvent&#xff09;1.3 移动端拖动元素 二、移动端常见特效2.1 click延时解决方案 三、移动端常用开发插件3.1 fastclick.js 解决移动端点击事件300ms延迟问题3.2 Swiper插件的使用 一、触屏事件…

网络防御(2)

1. 什么是防火墙&#xff1f; 2. 状态防火墙工作原理&#xff1f; 3. 防火墙如何处理双通道协议&#xff1f; 一、什么是防火墙&#xff1f; 防火墙是一种网络安全设备或软件&#xff0c;用于保护计算机网络免受未经授权的访问&#xff0c;并管理网络流量。它作为一个安全边界…

golang trace view 视图详解

大家好&#xff0c;我是蓝胖子&#xff0c;在golang中可以使用go pprof的工具对golang程序进行性能分析&#xff0c;其中通过go trace 命令生成的trace view视图对于我们分析系统延迟十分有帮助&#xff0c;鉴于当前对trace view视图的介绍还是很少&#xff0c;在粗略的看过tra…

双向带头循环链表+OJ题讲解

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大家三连关注&…

前端渲染数据

在前端对接受后端数据处理后返回的接收值的时候&#xff0c;为了解决数据过于庞大&#xff0c;而对数据进行简化处理例如性别&#xff0c;经常会使用1&#xff0c; 0这俩个来代替文字的男&#xff0c;女。以下就是前端渲染的具体实现。 以下是部分代码 <el-table-columnpr…

维深(Wellsenn):2023中国消费端VR内容开发商调研报告(附下载

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 国内互联网大厂商入局VR&#xff0c;字节跳动、网易表态明确。字节跳动2021年收购国内头部VR硬件厂商PICO后&#xff0c;加速构建VR内容生态&#xff0c;2021年 成立海南创见未来当前已推出VR视频应用…

fabric.js里toDataURL后,画布内容展示不全?

复现场景&#xff1a; 用fabric生成画布后&#xff0c;转成图片&#xff0c;然后直接在浏览器里打开&#xff0c;画布展示内容缺失 画布原图&#xff1a; toDataURL后链接在浏览器打开&#xff1a; 原因解析&#xff1a; base64链接太长&#xff0c;输入浏览器链接被截断&…

HOT79-跳跃游戏 II

leetcode原题链接&#xff1a;跳跃游戏 II 题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j &…

VUE+view table.exportCsv()导出.csv文档时如何防止数据格式为科学计数

当使用table.exportCsv()方法导出数据时&#xff0c;出现科学计数法问题&#xff0c;像电话号码&#xff0c;身份证号码等&#xff0c;当数据大于15位后面的会用0替代。 针对这一问题&#xff0c;解决方法如下&#xff1a;就是再数字前加上制表符“\t”注意双引号&#xff0c;…

设计模式-简单工厂模式(静态工厂模式)java实现

介绍 简单工厂模式根据所提供的参数数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。 意图 提供一个类&#xff0c;负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程 角色及其职责 (1)工厂(Creator…

机械工业信息研究院:2023年中国生物制药行业报告(附下载)

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 医药工业宏观情况分析 2021 年生物制药带动医药工业经 济指标大幅增长。根据统计&#xff0c;2021年规 模以上医药工业增加值同比增长 23.1%&#xff0c;增速较上年同期提升 17.2个百分点&#xff0…

MVSnet点云定量评估指标总结

根据MVSnet论文[1]原文说明&#xff0c;点云评估主要从准确性和完整性两个方面来评估。 针对准确性的评估&#xff0c;采用平均距离指标来度量&#xff0c;具体指标分别为Acc、Comp、overall&#xff0c;准确性指标越低越好&#xff0c;表示R与G之间的距离越小&#xff0c;恢复…

《CodeGeeX2 一个让你编码效率翻倍的扩展,分享几个使用小技巧》学习笔记

《CodeGeeX2 一个让你编码效率翻倍的扩展&#xff0c;分享几个使用小技巧》学习笔记 【Only Key Control】使用按键触发提示 使用注释来提升CodeGeeX生成代码的准确性 在函数的顶部添加对函数的说明然后输入function的关键字再使用【Alt /】来触发自动补全 使用CodeGeeX解释…

构建Docker容器监控系统(Cadvisor +Prometheus+Grafana)

Cadvisor PrometheusGrafana 1.1、Cadvisor产品简介 Cadvisor是Google开源的一款用于展示和分析容器运行状态的可视化工具。通过在主机上运行Cadvisor用户可以轻松的获取到当前主机上容器的运行统计信息&#xff0c;并以图表的形式向用户展示。 1.2、安装docker-ce [rootloc…

LeetCode 热题 100 JavaScript--98. 验证二叉搜索树

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 *** Definition for …