测试老鸟整理,Pytest自动化测试框架的一些关键点,一文贯通...

目录:导读

    • 前言
    • 一、Python编程入门到精通
    • 二、接口自动化项目实战
    • 三、Web自动化项目实战
    • 四、App自动化项目实战
    • 五、一线大厂简历
    • 六、测试开发DevOps体系
    • 七、常用自动化测试工具
    • 八、JMeter性能测试
    • 九、总结(尾部小惊喜)


前言

Pytest自动化框架:https://www.bilibili.com/video/BV18K411m7FH/

1、单元测试,是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。

java:junit、testng
python:unittest,pytest

2、自动化测试框架作用

①提高测试效率,降低维护成本
②减少人工干预,提高测试的准确性,增加代码的重用性
③核心思想是让不懂代码的人能够通过这个框架去实现自动化测试

3、pytest单元测试框架和自动化测试框架的关系:

①单元测试框架是自动化测试框架的组成部分之一;

②pom设计模式、数据驱动、关键字驱动、全局配置文件的封装、日志监控、断言、报告邮件等等

4、pytest简介

①pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,容易上手;
②pytest可以和selenium,requests,appium结合实现web自动化、接口自动化,app自动化;

③pytest可以实现测试用例的跳过以及reruns失败用例重试;
④pytest可以和allure生成非常美观的测试报告;
⑤pytest可以和jenkins持续集成;
⑥支持用简单的assert语句实现丰富的断言;
⑦pytest有很多非常强大的插件,并且这些插件能够实现很多的实用的操作;

插件:

Package功能
pytest-html生成html格式的自动化测试报告
pytest-xdist测试用例分布式执行,多CPU分发
pytest-ordering用于改变测试用例的执行顺序
pytest-rerunfailures用例失败后重跑
allure-pytest用于生成美观的测试报告

8、pytest安装:pip install pytest,验证安装:pytest --version

9、pytest官方文档:https://doc.pytest.org/en/latest/

10、测试用例收集

若未指定任何参数,收集从testpaths(如果已配置,在pytest.ini下定义testpath=xxx)或当前目录及其子目录开始。

11、assert断言

assert ‘xxxx’ == yy [!=, <=, >=, not in, in , 判断是否为true,判断是否不为true]

12、参数化

当一组测试用例有固定的测试数据时,就可以通过参数化的方式简化测试用例的编写。

通过pytest.mark.parametrzie()方法设置参数:

参数名:"user,pw,expected"用来定义参数的名称;
参数值:通过数组定义参数值时,每一个元组都是一条测试用例的数据;
ids参数:默认为none,用来重新定义测试用例的名称;

@pytest.mark.parametrize(
"user,pw,expected",
[("beifan666","123456","beifan666,欢迎来到"),("beifan666","123456","beifan666,欢迎来到")],ids=["case1","case2"])
def test_login(user,pw,expected):driver = webdriver.Chrome()driver.get('http://xxxxx')driver.find_element_by_lind_text("登录").click()driver.find_element_by_xpath("xxxxx").send_keys(user)driver.find_element_by_xpath("yyyyyy").send_keys(pw)driver.find_element_by_xpath("zzzzz").click()welcome = driver.find_element_by_xpath('xxxx').textassert expected == welcome

13、pytest常用参数

参数含义使用方法
-s在终端执行测试时显示打印某些信息,比如print信息pytest -s
-v显示详细信息pytest -v
-k运行函数名称中包含某个字符串的测试用例,或pytest -k “方法名”pytest -k “one”
-q执行测例时简化输出信息,比如…pytest -q
-x如果出现一条测试用例失败,退出测试pytest -x
运行测试目录pytest testpath/
运行指定的类或方法,pytest path/test_xxx.py::函数名或类名pytest test_abc.py::test_a
collect-only查看测例数量pytest --collect-only
–maxfail=num允许pytest失败几次后再停止pytest --maxfail=num
-m使用固定marker来筛选用例
–version查看版本pytest --version
–fixtures显示可用的内置函数参数
–help获取帮助
–maxfail=num在第N个用例失败后,结束测试执行pytest --maxfail=2,出现2个失败就终止测试
pytest-rerunfailures重新运行失败用例pytest --reruns 3 --reruns-delay=5

14、多进程运行用例

安装插件 pytest-xdist:pip install pytest-xdist

运行模式:pytest -n NUMCPUS[调用多个CPU来执行测例]

import pytestdef test_case01():assert 1==1def test_case02():assert 1==2def test_case03():assert 1==1def test_case04():assert 1==4def test_case05():assert 1==1def test_case06():assert 1==5if __name__ == '__main__':#将测试发送到多个CPUpytest.main(["-n", "2", "test_many.py"])#使用与计算机具有的CPU内核一样多的进程来执行测例pytest.main(["-n", "auto", "test_many.py"])

15、通过标记表达式执行用例

pytest -m slow 【这条命令会执行被装饰器@pytest.mark.slow装饰的所有测试用例】

def test_fail01():print("第一次失败")assert 1==2@pytest.mark.slow
def test_fail02():print("第二次失败")assert 2==3
@pytest.markk.slow
def test_hello():print("第三次执行成功")assert 1==1if __name__=='__main__':pytest.main(["-s", "--maxfail=2", "test_fail2.py"])#通过标记表达式执行pytest.main(["-m","slow","test_rail2.py"])#通过标记表达式执行,not slowpytest.main(["-m","not slow","test_rail2.py"])

16、pytest的setup/teardown 【类之外定义含义:】

①第一批次:setup_module/teardown_module:在当前文件中,在所有测试用例执行之前与之后执行

②第二批次:setup_function/teardown_function:在每个测试函数之前与之后执行

③第三批次:setup/teardown:在每个测试函数之前与之后执行,这2个方法同样适用于类方法

【在类里的定义含义:】

第一批次:setup_class/teardown_class: 在当前测试类的开始与结束时执行
第二批次:setup_method/teardown_method:在每个测试方法开始与结束时执行
第三批次:setup/teardown:在每个测试方法开始与结束时执行

17、pytest配置函数 pytest.ini

[pytest]
#01 可添加多个命令行参数,用空格分隔
addopts = -s -v
# 02 搜索文件夹,执行指定文件夹里的用例
testpaths = ./scripts
# 03 配置搜索的文件名称,默认时搜索test开头的文件,改成以auto开通,以.py结尾的所有文件
python_files = auto*.py

18、pytest常用插件

①pytest-HTML插件,生成测试报告,安装方式:pip install pytest-html 使用方法:pytest --html=用户路径/report.html

②查看最慢的10个用例 pytest --durations=10
③关闭插件,比如关闭doctest pytest -p no:doctest

19、pytest之fixture

①定义:在测试中,fixture为测试提供了已定义的,可靠和一致的上下文。这可能包括环境(例如,通过已知的参数配置数据库)或内容(例如数据集)

我们可以通过装饰器@pytest.fixture来告诉pytest某个特定函数时一个fixture

【将方法first_fix作为参数传入到测试用例】

import pytest @pytest.fixture
def first_fix():return ['a']def test_str(first_fix):#测试执行first_fix.append('b')#断言assert first_fix== ["a", "b“】print(first_fix)

20、conftest.py

conftest.py是pytyest特有的本地测试配置文件,既可以用来设置项目级别的fixture,也可以用来导入外部插件。

conftest.py文件名称是固定的,pytest会自动识别该文件,只作用于它所在的目录及子目录。

下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

不论起点如何,只要你迈出坚定的步伐,勇敢面对挑战,每一次奋斗都是向成功迈进的宝贵经验。相信自己的力量,努力拼搏,你的梦想将会绽放辉煌!

成功的路上,有无数辛酸和泪水。要坚持不懈,不怕失败,不畏挫折,才能在人生舞台上创造出属于自己的传奇!

前方或许充满了险阻和挑战,但你只要放手一搏,坚持拼搏,就能披荆斩棘,创造辉煌。相信自己,追逐梦想,努力奋斗,成功将向你招手!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习、深度学习相关的项目集合【自行选择即可】

【基于YOLOv5的瓷砖瑕疵检测系统】 YOLOv5是一种目标检测算法&#xff0c;它是YOLO&#xff08;You Only Look Once&#xff09;系列模型的进化版本。YOLOv5是由Ultralytics开发的&#xff0c;基于一阶段目标检测的概念。其目标是在保持高准确率的同时提高目标检测的速度和效率…

Flink开发环境搭建与提交运行Flink应用程序

Flink开发环境搭建与提交运行Flink应用程序 Flink概述环境 Flink程序开发项目构建添加依赖安装Netcat实现经典的词频统计批处理示例流处理示例 Flink Web UI 命令行提交作业编写Flink程序打包上传Jar提交作业查看任务测试 Web UI提交作业提交作业测试 Flink 概述 Apache Flink…

MinIO的安装与使用

文章目录 1.MINIO是什么&#xff1f;2.MINIO安装3.启动脚本4.打开MINIO页面5.MC命令6.MINIO备份脚本 1.MINIO是什么&#xff1f; MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。 MinIO与…

alsa音频pcm设备之i2c调试

i2cdetect 列举 I2C bus i2cdetect -l ls /dev/i2c* 列出I2C bus i2c-7 上面连接的所有设备,并得到i2c设备地址 i2cdetect -y 7 发现i2c设备的位置显示为UU或表示设备地址的数值,UU表示设备在driver中被使用. I2cdump i2c设备大量register的值 i2cdump -y 7 0x40 I2cset设置…

ICPC 2019-2020 North-Western Russia Regional Contest

A (codeforces.com) 这题在移动不被挡板挡住以及不超过边界的情况下&#xff0c;每次走的越多那么次数就越少 只要两个每次都走b-a步&#xff08;已经是不被挡板挡住走的最多了&#xff09;&#xff0c;就不用考虑被挡板挡住的情况&#xff0c;只用单独考虑了&#xff0c;如果…

微服务09-Sentinel的入门

文章目录 微服务中的雪崩现象解决办法&#xff1a;1. 超时处理2. 舱壁模式3. 熔断降级4.流量控制 Sentinel1.介绍2.使用操作3.限流规则4.实战&#xff1a;流量监控5.高级选项功能的使用1.关联模式2.链路模式3.总结 流控效果1.预热模式2.排队等待模式3.总结4.热点参数限流5.实战…

【业务功能篇 131】23种设计模式介绍

第一章 设计模式概述 1.1 代码质量好坏如何评价? 要想学习设计模式呢 我们就必须搞清楚设计模式到底在我们的编程过程中起到了怎样的作用,在编程世界中它处在一个什么样的位置,它到底是一种抽象的设计思想,还是一套具体的落地方案. 在学习设计模式之前呢 我们需要了解一下 代…

【数据结构C/C++】顺序与链式二叉树创建与前中后、层序遍历

文章目录 顺序存储结构二叉树链式存储结构二叉树刷题推荐408考研各数据结构C/C代码&#xff08;Continually updating&#xff09; 顺序存储结构二叉树 顺序存储结构的二叉树的特点在于&#xff0c;其使用数组存放二叉树中的每一个节点。 我们设定根节点的数组索引下标为n&…

MYSQL的日志管理

MySQL中有几种类型的日志记录&#xff0c;分别用于记录不同的操作和事件。以下是MySQL中常见的日志类型 错误日志 错误日志是 MySQL 中最重要的日志之一&#xff0c;它记录了当 mysqld 启动和停止时&#xff0c;以及服务器在运行过程中发生任何严重错误时的相关信息。当数据…

linux后台运行java项目/ jar包:nohup 命令

1.提出问题 我们把一个 SpringBoot 工程导出为 jar 包&#xff0c;jar 包上传到阿里云 ECS 服务器上&#xff0c;使用 java -jar xxx-xxx.jar 命令启动这个 SpringBoot 程序。此时我们本地的 xshell 客户端必须一直开着&#xff0c;一旦 xshell 客户端关闭&#xff0c;java -j…

Jenkins对应java版本

官网地址&#xff1a;Java Support Policy 运行jenkins时,需要使用下列Java版本:

Jenkins安装多个jdk版本,并在项目中选择对应jdk版本

下载jdk版本&#xff1a;进入oracle官网下载官方jdk Java Downloads | Oracle 例&#xff1a;比如项目需要使用java8.341的版本&#xff0c;而jenkins用的是java11的版本&#xff0c;这里就需要下载多个jdk版本。进入下载网址&#xff0c;Java Archive Downloads - Java SE 8u…

MySQL数据库技术笔记(3)

概述 学习MySQL数据库技术其实只需要安装mysql服务器就可以使用了。只不过对于初学者来说直接操作dos窗口方式比较麻烦&#xff0c;命令不熟悉&#xff0c;导致经常写错。在真实的开发当中直接操作dos窗口效率比较慢&#xff0c;企业中也会经常使用一些mysql数据库支持的可视化…

学习记忆——数学篇——案例——代数——方程——一元二次方程

重点记忆法 a x 2 b x c 0 ax^2bxc0 ax2bxc0 整体可以由&#xff1a; 根&#xff08;多少&#xff0c;正负&#xff0c;区间&#xff09; ⟹ \Longrightarrow ⟹ △ △ △ ⟹ \Longrightarrow ⟹ 求根公式 x 1 , 2 x_{1,2} x1,2​ − b △ 2 a \frac{-b\sqrt{△}}{2a} 2…

Transformer模型 | Python实现TransformerCPI模型(pytorch)

文章目录 效果一览文章概述程序设计参考资料效果一览 文章概述 Python实现TransformerCPI模型(tensorflow) Dependencies: python 3.6 pytorch >= 1.2.0 numpy RDkit = 2019.03.3.0 pandas Gensim >=3.4.0 程序设计 import torch import numpy as np import random …

TensorFlow入门(十九、softmax算法处理分类问题)

softmax是什么? Sigmoid、Tanh、ReLU等激活函数,输出值只有两种(0、1,或-1、1或0、x),而实际现实生活中往往需要对某一问题进行多种分类。例如之前识别图片中模糊手写数字的例子,这个时候就需要使用softmax算法。 softmax的算法逻辑 如果判断输入属于某一个类的概率大于属于其…

线性代数 --- 矩阵的QR分解,A=QR

矩阵的QR分解&#xff0c;格拉姆施密特过程的矩阵表示 首先先简单的回顾一下Gram-Schmidt正交化过程的核心思想&#xff0c;如何把一组线性无关的向量构造成一组标准正交向量&#xff0c;即&#xff0c;如何把矩阵A变成矩阵Q的过程。 给定一组线性无关的向量a,b,c&#xff0c;我…

Hazelcast系列(三):hazelcast集成(服务器/客户端)

系列文章 Hazelcast系列(一)&#xff1a;初识hazelcast Hazelcast系列(二)&#xff1a;hazelcast集成&#xff08;嵌入式&#xff09; Hazelcast系列(三)&#xff1a;hazelcast集成&#xff08;服务器/客户端&#xff09; Hazelcast系列(四)&#xff1a;hazelcast管理中心 …

ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“

现象&#xff1a; ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“ 尝试查找原因&#xff1a;打开从windos直接粘贴c程序到ubuntu的c代码&#xff0c;发现多了 <200b>&#xff1a; 方案&#xff1a;尝试在vim编辑器删除&#xff0c;多出来的字符后编译…

长沙建筑模板生产厂家有哪些?

在湖南长沙地区&#xff0c;建筑施工企业寻找一家可信赖的建筑模板供应商是非常重要的。在长沙地区&#xff0c;有多家建筑模板生产厂家&#xff0c;其中值得一提的是能强优品木业&#xff0c;他们是长沙地区建筑模板生产的领先供应商之一。 能强优品木业位于广西贵港市&#x…