全网火爆,pytest自动化测试框架从0-1精通实战,你的进阶之路...

news2024/11/26 22:45:57

目录:导读

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


前言

1、运行方式

命令行模式:

pytest -s login.py

主函数模式:

if __name__ == '__main__':
	pytest.main(["-s", "login.py"])

pytest.ini运行:
在 pytest.ini 文件中配置 pytest 的运行参数。
注意点:
位置:配置文件一般会放在项目的根目录下;
编码:必须是ANSI,可以使用文本编辑工具修改编码格式;
规则:无论是哪种运行方式,都会读取配置文件,是最高级的;
文件开头第一行除了注释,一定为 [pytest] ,这是固定格式,文件名 pytest.ini 也是固定的,不能自己重命名;

常用参数:
addopts 命令行的参数,用空格分隔;
testpaths 测试用例的路径;
markers 标记参数,赋值方式为 key:value;
python_files 模块的命名规则 xx.py;
python_classes 类名的命名规则 Xxx;
python_functions 方法的命名规则 **
required_plugins 插件的使用;
xfail_strict = true 禁用xpass;

2、断言

pytest 单元测试框架并没有提供专门的断言方法,而是直接使用Python 的 assert 进行断言。

import pytest

# 功能:用于计算 a 与 b 相加的和
def add(a, b):
    return a + b

# 功能:用于判断素数
def is_prime(n):
    if n <= 1:
        return False
    for i in range(2, n):
        if n % i == 0:
            return False
        return True

# 测试相等
def test_add_1():
    assert add(3, 4) == 7

# 测试不相等
def test_add_2():
    assert add(17, 22) != 50

# 测试大于或等于
def test_add_3():
    assert add(17, 22) <= 50

# 测试小于或等于
def test_add_4():
    assert add(17, 22) >= 38

# 测试包含
def test_in():
    a = "hello"
    b = "he"
    assert b in a

# 测试不包含
def test_not_in():
    a = "hello"
    b = "hi"
    assert b not in a

# 判断是否为 True
def test_true_1():
    assert is_prime(13)

# 判断是否为 True
def test_true_2():
    assert is_prime(7) is True

# 判断是否不为 True
def test_true_3():
    assert not is_prime(4)

# 判断是否不为 True
def test_true_4():
    assert is_prime(6) is not True

# 判断是否为 False
def test_false_1():
    assert is_prime(8) is False


if __name__ == '__main__':
    pytest.main(["-s", "0701.py"])

3、Fixture

Fixture 通常用来对测试方法、测试函数、测试类和整个测试文件进行初始化或还原测试环境。

setup_module/teardown_module:在当前文件中,在所有测试用例执行之前与之后执行。

setup_function/teardown_function:在每个测试函数之前与之后执行。

setup/teardown:在每个测试函数之前与之后执行。这两个方法同样可以作用于类方法。

4、参数化

# argnames:参数名 
# argvalues:参数对应值,类型必须为可迭代类型,一般使用list 
@pytest.mark.parametrize(argnames, argvalues, indirect=False,ids=None, scope=None)

示例:

import pytest

class TestLogin:
    @pytest.mark.parametrize(("username", "password"), [("zhangsan", "zhangsan123"), (" xiaoming", "xiaoming123")])
    def test_a(self, username, password):
        print(username)
        print(password)
        assert 1

5、运行测试

pytest 提供了丰富的参数运行测试用例,通过“pytest --help”可以查看帮助。

运行名称中包含某字符串的测试用例:
例如:通过“-k”来指定在名称中包含“add”的测试用例

pytest -k add test.py
if __name__ == '__main__':
	pytest.main(["-k", "add", "test.py"])

D1

减少测试的运行冗长:
运行日志少了很多信息,“-q”用来减少测试运行的冗长;也可以使用“–quiet”代替。

pytest -q test.py
if __name__ == '__main__':
	pytest.main(["-q", "test.py"])

D2

如果出现一条测试用例失败,则退出测试:
这在测试用例的调试阶段是有用的,当出现一条失败的测试用例时,应该先通过调试让这条测试用例运行通过,而不是继续执行后面的测试用例。

pytest -x test.py
if __name__ == '__main__':
	pytest.main(["-x", "test.py"])

D3

运行测试目录:
测试目录既可以指定相对路径(如 ./test_dir ) , 也可以指定绝对路径(如D:\pytest_sample\test_dir)。

pytest ./test_dir

指定特定类或方法执行:
这里指定运行 test_fixtures_02.py 文件中 TestMultiply 类下的 test_numbers_5_6()方法,文件名、类名和方法名之间用“::”符号分隔。

pytest test_fixtures_02.py::TestMultiply::test_numbers_5_6

6、跳过测试

使用方式:在需要跳过的测试脚本之上加上装饰器 @pytest.mark.skipif(condition, reason=“xxx”)

# condition:跳过的条件,必传参数 
# reason:标注原因,必传参数 
@pytest.mark.skipif(condition, reason=None)

7、生成测试报告

生成 JUnit XML 文件:

pytest ./test_dir --junit-xml=./report/log.xml

生成在线测试报告:

pytest ./test_dir --pastebin=all

上述代码可生成一个 session-log 链接,复制链接,通过浏览器打开,会得到一张 HTML格式的测试报告。

8、pytest 插件

pytest-html:
pytest-html 可以生成 HTML 格式的测试报告。
首先,通过 pip 命令安装 pytest-html 扩展。

pip install pytest-html

其次,运行测试用例,并生成测试报告.

pytest ./ --html=./report/result.html

pytest-rerunfailures:
pytest-rerunfailures 可以在测试用例失败时进行重试。

pip install pytest-rerunfailures

通过“–reruns”参数设置测试用例运行失败后的重试次数。

pytest -v test.py --reruns 3

pytest-parallel:
pytest-parallel 扩展可以实现测试用例的并行运行。

pip install pytest-parallel

参数“–tests-per-worker”用来指定线程数,“auto”表示自动分配。

pytest -q test.py --tests-per-worker auto

示例:

from time import sleep

def test_01():
    sleep(3)

def test_02():
    sleep(5)

def test_03():
    sleep(6)

不使用线程运行测试用例花费14.05s,使用后被缩短到 6.02s。

pytest-ordering:
控制函数执行顺序。

pip3 install pytest-ordering

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

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

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

只有付出汗水和努力,才能收获辉煌的成就;只有拼搏奋斗,才能创造属于自己的精彩人生。坚持不懈,追逐梦想,你将会成为无人可及的强者!

只有坚持不懈的努力,才能成就辉煌;只有勇往直前的决心,才能逐梦成功;不要畏惧困难,勇敢面对挑战,你一定能书写属于自己的壮丽篇章!

只有拼尽全力,才能绽放辉煌;只有坚持不懈,才能创造奇迹;只有勇往直前,才能实现梦想。相信自己,脚踏实地,努力奋斗,未来必将属于你!

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

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

相关文章

(68Ga)Nota-prgd2,1345968-02-6,通过镓标记的NOTA衍生物

文章编辑来自于&#xff1a;陕西新研博美生物科技有限公司MISS.wu​ (68Ga)Nota-prgd2| CAS&#xff1a;1345968-02-6| 纯度&#xff1a;95% PART1-----(68Ga)Nota-prgd2结构式 PART2-----试剂参数信息 CAS&#xff1a;1345968-02-6 外观&#xff08;Appearance&#xff09;…

网络安全(黑客)学习笔记

0基础学网安或者提升巩固网安技术的小伙伴有福了&#xff01; 本篇整合了网络安全全知识点&#xff0c;零基础也适用&#xff01; 本篇涵盖内容及其全面&#xff0c;强烈推荐收藏&#xff01; 一、学习网络安全会遇到什么问题呢&#xff1f; 1、学习基础内容多时间长 2、难…

周报(1)

文章预览&#xff1a; 本周内容&#xff1a;Python语言的学习和pytorch安装配置1 Python基础知识1.1 交互式解释器1.2 数和表达式1.3 变量1.4 获取用户输入1.5 函数1.6 模块1.7 字符串1.7.1 单引号字符串以及对引号转义1.7.2 拼接字符串1.7.3 字符串表示str 和repr Pytorch 的安…

vue 限制表情输入

在main.js中加入下列代码 import emoji from ./util/emojiVue.directive(emoji,emoji) 在util文件夹中加入emoji.js 下列代码 const findEle (parent, type) > { return parent.tagName.toLowerCase() type ? parent : parent.querySelector(type)}const emoji {bi…

vite vue3进行多环境打包配置

需求&#xff1a; 对此vite创建的vu3项目进行构建&#xff0c;项目分为四个环境&#xff1a;本地、测试、预发、生产 1.在项目根目录创建四个文件夹 .env.development .env.test .env.pre .env.production 2.配置不同环境的 地址和打包文件名 具体例子如下&#xff1a; …

手机验证码登录 -- 手把手教你做ssm+springboot入门后端项目黑马程序员瑞吉外卖(七)

文章目录 前言一、短信发送1. 短信服务介绍2. 阿里云短信服务3. 代码开发 二、手机验证码登录1. 需求分析2. 数据模型3. 代码开发4. 功能测试 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客&#xff0c;方便日后回顾。当然&#xff0c;如果…

项目名称:网络聊天室

目录 一&#xff0c;简述 二&#xff0c;项目要求 三&#xff0c;程序流程图 服务器端&#xff1a; 客户端&#xff1a; 四&#xff0c;相关知识点 通信流程&#xff1a; 函数接口&#xff1a; 五&#xff0c;代码实现 客户端&#xff1a; 服务器&#xff1a; 主程序…

Android性能优化——启动优化

App 的启动速度是用户的第一体验&#xff0c;互联网中有一个八秒定律&#xff0c;如果用户等待八秒App 还没打开&#xff0c;70%的用户都会停止等待 一、启动分类 官方 App startup time 冷启动 耗时最多&#xff0c;衡量标准 热启动 最快。 后台&#xff5e;前台 温启动…

Git 新建本地仓库,推送到远程仓库

1、在项目的根目录右键 Git Bash Here 打开目录下的 git 命令 2、输入 git init 回车&#xff0c;初始化项目&#xff0c;把这个项目变成一个Git可以管理的仓库 项目根目录出现 .git 隐藏文件夹。这个目录是Git来跟踪管理版本库的&#xff0c;没事千万不要手动修改这个目录里面…

MateBook E Go Wi-Fi性能版(GK-W76)工厂模式win11原厂系统,含F10智能恢复功能

HUAWEI华为MateBook E平板笔记本电脑(GK-W76)原装出厂Windows11系统包&#xff0c;带F10一键智能还原 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华为电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文件格式&#xff1a;zip 文件大小&#xff1a;1…

Linux基础(三)端口、进程及主机状态管理、环境变量、文件管理

目录 端口 nmap netstat 进程管理 查看进程 关闭进程 主机状态监控 系统资源top命令 磁盘信息监控 网络状态监控 环境变量 $符号 自己设置环境变量 自定义环境变量PATH Linux的文件和下载 压缩和解压 tar命令 zip和unzip命令 端口 每个电脑有一个ip地址&#xff…

自动化测试(一):网页结构分析与Google翻译2023.7.18爬虫实例

目录 1. 网页分析1.1 静态网页1.2 静态网页的爬取案例1.3 动态网页1.4 Google翻译2023.7.18爬虫实例1.4.1 基于网页分析的Google翻译2023.7.18爬虫实例1.4.2 基于Selenium的Google翻译2023.7.18爬虫实例 1. 网页分析 网页分析即通过检查元素&#xff0c;确定想提取的内容的区域…

pyright 的配置方法

珍惜发量,拥抱python&#x1f602; 可以很快的构建一个平台管理程序,嵌入式设备,芯片厂商&#xff0c;都是python 的示例代码了 Lua 真的很棒&#xff0c;值得嵌入式领域的推广 实时性要求不高的&#xff0c;嵌入式设备,可以考虑lua python PC 的程序 ,python/Rust/C &#xf…

波奇学Linux:冯诺依曼和进程

现代计算机大多是冯诺依曼体系结构&#xff0c;这是一种硬件结构&#xff0c;规定了设备组成和设备类型。 存储器:内存&#xff0c;磁盘/U盘是外存是输入输出设备。 输入设备&#xff1a;键盘/磁盘/摄像头/话筒/网卡 输出设备&#xff1a;显示器&#xff0c;播放器硬件&#…

Spring6 初始

Spring6 初始 文章目录 Spring6 初始每博一文案:1. 初始 Spring61.1 OCP开闭原则1.2 依赖倒置原则DIP1.3 控制反转IoC 2. Spring 初始2.1 Spring特点2.2 Spring6 的下载&#xff1a;2.3 Spring的jar文件 3. 第一个Spring 程序的编写4. 第一个Spring程序详细剖析4.1 bean标签的i…

SQL28 计算用户8月每天的练题数量

select day(date) as day,count(question_id) from question_practice_detail where month(date)8 and year(date)2021 group by date

C语言如何计算结构体大小(结构体的内存对齐)

前言&#xff1a; 结构体的内存对齐是有关结构体内容的很重要一个知识点&#xff0c;主要考察方式是计算结构体的字节大小。 引言&#xff1a; 当我们对计算结构体一无所知&#xff0c;我们不妨自己思索如何计算&#xff0c;是不是直接计算结构体成员变量占用内存的大小呢&a…

共享与协作:时下最热门的企业共享网盘推荐!

现代企业面临着越来越大的数据存储和共享压力。为了提高公司的生产力和效率&#xff0c;许多企业开始寻找共享网盘解决方案。这些共享网盘平台可以帮助企业集中管理文件和数据&#xff0c;并方便快速地与同事、客户或供应商共享。以下是几款好用的企业共享网盘。 Zoho Workdriv…

Android BlueToothBLE入门(三)——数据的分包发送和接收(源码已更新)

学更好的别人&#xff0c; 做更好的自己。 ——《微卡智享》 本文长度为3675字&#xff0c;预计阅读12分钟 前言 接上篇《Android BlueToothBLE入门&#xff08;二&#xff09;——设备的连接和通讯&#xff08;附Demo源码地址&#xff09;》最后提到过蓝牙BLE通讯每次默认发送…

qt 32位编译 内存溢出 无法 运行在win7 32位

项目在 编译32位系统 内存溢出 设置成了x64 但是 最后在xp32位系统运行提示 在下载了n个dll之后发现这种状况无穷无尽&#xff0c;后来在查阅资料时发现可以直接打开qt安装目录下的“vcredist”文件夹&#xff0c;将对应位数的程序拷到win7电脑上&#xff0c;直接运行&…