进阶高级测试专项,Pytest自动化测试框架总结(一)

news2024/11/15 10:55:11

目录:导读

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


前言

1、框架简介

pytest,rf(学关键字语法,报告漂亮),unitest。
pytest是python的第三方单元测试框架,可以做系统测试,比unitest更简洁和高效,执行多种插件,同时兼容unittest框架,在unittest框架迁移到pytest框架的代码不需要重写代码。

unittest框架迁移到pytest框架的时候不需要重写代码
纯python代码的自动化测试框架

2、Pytest自动化框架

接口测试方案:python

工具类:纯手工测试,用工具来做(postman jemeter soapui)–入门简单,不好扩展(后面很多框架定制化)

代码类:现成的python框架:unitest(单元测试比较多,最原始的解释器自带的,不需要安装,不支持定制化,分布式) pytest(高级,效率高,支持定制化)

rf(报告篇评论,需要学会–封装关键字)
pytest和nose都是unitest扩展的更高级的一个库,框架,基于unitest

测试平台:现成平台,公司自己定制开发的,不对外 (融合jmeter,)综合平台。前端+后端。
执行机制----框架pytest(一般融合了禅道,框架,邮件各种功能)

pytest对比unitest框架的优势:高级,效率高,支持定制化,支持分布式,支持多种丰富插件,还能向下兼容unitest

pytest灵活:
定制化(定制化用例执行,定制化报告)
环境清除也灵活,以及各方面做的都比unittest更加灵活

pytest更加灵活,便捷,效率更高,还支持分布式(分布式是其他框架做不了)
分布式:1000个接口用例怎么跑,一条条跑很费劲,时间长,找几个同时分担执行测试用例(pytets独有的性质)

3、pytest框架环境搭建

pip pytest

安装pytest

pip install pytest-html  

安装原生态报告模板–自带的(有点垃圾)
Required-by: pytest-xdist(分布式测试),pytest-metadata,pytest-html,pytest-forked,allure-pytest

100个接口用例,正常是一个个用例跑,时间很长。
分布式-多个业务用例多条线来跑,提高效率(分布式设计用例—分布式逻辑设计,不要出现耦合,关联性太强的东西,否则会等待的)

4、pytets执行测试用例

设计测试用例时候注意点(必须遵循的规则,否者不识别):
.py测试文件必须以test(test_xxx)开头(或者以_test结尾)
测试类必须以Test开头,并且不能有init方法-----测试类Test开头
测试方法必须以test_开头
断言必须使用assert

5、一般做项目是新建package包的

项目文件
lib库文件(登录接口源代码,其他接口公共的类,封装的库,登录的,订单的)(包)
data文件(参数化数据,excel文件,yaml文件,csv文件—测试文件,用例,文档)(可以是普通文件夹)
test_case文件(放测试用例的 )(包)
test_func01.py(测试用例,写的最好见名知意)
report文件(存放测试报告的普通文件夹)
config(配置文件)

6、pytest函数级别

函数级别的测试用例必须test_开头:如下test_tc01,test_tc02两个测试用例

import pytest
    def test_tc01():    #定义函数类型测试用例  
        assert 1+1==2    #断言
    def test_tc02():
        assert 1+1==3    #断言

    if __name__ == '__main__':
        pytest.main(["test_func01.py"])        #我主动运行我的pytest框架(自动调用所有的test测试函数,按照顺序依次运行,test开头的用例自动识别)

7、pytest类级别(工作一般以类位单元,一个模块一个类,登录类,订单类,购物类)

类级别的测试l类必须以Test开头,并且类李不能有init方法,类里面的函数都是test_开头;

封装好函数和类就行,其他的交给框架,设置好,框架帮你自动组织怎么运行;
封装为了分层,后面更好维护,代码结构整洁;

import pytest

class Test_login():              #登录模块的测试类
  def test_login01(self):
    print("---test_login01----")
    assert 1 + 1 == 2
  def test_login02(self):
    print("---test_login02----")
    assert 1 + 1 == 3
if __name__ == '__main__':
  pytest.main(["test_func01.py","-s"])  #框架自己调用函数  需要打印对应的信息,需要在列表里面加-s

8、自动化测试里面的环境初始化与清除

环境初始化目的:
清空测试环境的垃圾数据,前置条件

需不需要分层:需要
比如:课程模块:课程模块的初始化需要

删除所有的课程   
新增我们的一些课程(这个给修改/查询/删除接口使用)
模块级别的(大的课程模块第一件事就是删除以前的课程)

干掉数据后假如需要删除课程,这个接口需要单独的fixture的初始化,增加课程才能删除,其他的接口不需要这个fixture初始化,)

分层:模块层次的初始化,某个接口也需要初始化----框架的分层
条件初始化要和接口挂钩,接口该怎么就要怎么设计

环境初始化和清除:
一头一尾,两个不同概念,(环境的初始化也可以是清除数据)
一个接口可以多个级别的fixture,可以

分布式:并行执行,分布式

优化运行时间:分布式(搭建环境麻烦)
什么是环境初始化:
做这个用例之前想要做个操作,初始化动作,比如登录,首先需要连上这个项目(要先能ping通),

环境初始化–比如课程新增需要数据全部清空,也是环境初始化
功能测试:保证测试环境数据和跑什么系统的,或者后台有什么进程执行,或者项目里面测试这功能,功能里面有没有垃圾数据要清除做个初始化

unittest:最基础的框架,python自带(环境初始化和数据清除用setup和teardown)
jemeter:也有环境清除和初始化

不管做什么测试比如(功能,自动化,性能)都要对当前测试环境初始化,做完后要垃圾数据进行回收(特别是自动化,不然很多用例明明是对的会失败)

每次做一个场景,模块的时候,看看模块有没有需要前置的或者环境清除的步骤(基本操作流程)

pytest是unittest的升级版,对环境清除操作非常灵活(分层分级);
pytest:fixture操作类进行环境初始化 @fixture这样的一个装饰器;

pytest的fixture操作
环境初始化与清除
pytest提供的fixture实现unitest中的setup/teardown功能,可以在每次执行case之前初始化数据。

不同的是,fixture可以只在执行某几个特定case前运行,只需要在运行case前调用即可,比setup/teardown使用灵活。

pytest的初始化和清除可以类里面写个setup_class方法做,以类为单元,模块,包,方法为单元都可以,也可以用fixture来做。

9、pytest前置和后置条件(环境初始化与清除)

环境初始化:
清除以前的数据
测试的时候不是每个接口都要执行,可以定制化执行,固定执行某些接口,先执行删除用例,

但是数据已经被清除了,无法删除,修改–需要新增一批测试数据,所以这时候需要环境初始化和清除的想法

setup_class:类里面类级别的初始化,teardown

pytest初始化和前置条件,很多接口用例本身需要初始化,初始化分为很多层,可以在整个外面做,也可以在里面做,测试类的初始化可以在类里面定义

import pytest
    class Test_login():            #登录模块的测试类
        #该测试类---有个前置的操作(初始化)
        def setup_class(self):      #类级别的初始化--可选项
            #一个项目,先登录,再购物,登录就是购物类的前置条件,可以放在setup_class里面
            print("执行测试类之前,我需要执行操作")

        def test_login01(self):
            print("---test_login01----")
            assert 1 + 1 == 2
        def test_login02(self):
            print("---test_login02----")
            assert 1 + 1 == 3

        def teardown(self):            #看业务本身需不需要初始化和清除环境,--可选项
            print("------该测试类的环境清除-----")

    if __name__ == '__main__':
        pytest.main(["test_func01.py","-s"])
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

每一次努力都是为了让自己的人生更加辉煌,即使前路荆棘密布,也要坚定前行。信念是你的翅膀,奋斗是你的力量,只有不懈拼搏,才能让梦想绽放光芒。相信自己,勇敢追逐,创造属于自己的壮丽篇章!

执着奋斗的人,心中燃烧着不灭的火焰,无论前路多险峻,都能坚定跨越。唯有拼尽全力,放飞心中梦想,方能创造出属于自己的辉煌奇迹。

奋斗是燃起内心火焰的力量,是拓展未来的钥匙。相信自己的潜力,勇敢面对挑战,只有努力才能让梦想绽放成真。莫停歇脚步,迈向辉煌,用汗水书写不可磨灭的人生华章!

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

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

相关文章

Cesium态势标绘专题-进攻箭头(标绘+编辑)

标绘专题介绍:态势标绘专题介绍_总要学点什么的博客-CSDN博客 入口文件:Cesium态势标绘专题-入口_总要学点什么的博客-CSDN博客 辅助文件:Cesium态势标绘专题-辅助文件_总要学点什么的博客-CSDN博客 本专题没有废话,只有代码,代码中涉及到的引入文件方法,从上面三个链…

01背包、完全背包问题几种变式总结,以及多重背包、组合背包模板

目录 1.求有多少种方法能恰好装满背包 1.1装满背包的方法——按排列计算还是按组合计算? 2.最值问题——最少需要几枚硬币,货物的最大价值 2.1最少需要几枚硬币 2.1.1 memset用法注意 3.二维01背包问题 4.多重背包问题 4.1优化前 4.2二进制优化 1.求有多少…

C++STL库中的list

文章目录 list的介绍及使用 list的常用接口 list的模拟实现 list与vector的对比 一、list的介绍及使用 1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 2. list的底层是双向带头循环链表结构,双向带头循…

数据库对象

二十、数据库对象-视图 二十一、数据库对象-索引 age字段没有索引,查找需要扫描全表: name字段做了唯一索引,查找一次: 二十二、数据库对象-事务 事务的隔离级别和问题:

(链表) 剑指 Offer 52. 两个链表的第一个公共节点 ——【Leetcode每日一题】

❓剑指 Offer 52. 两个链表的第一个公共节点 难度:简单 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal 8, listA [4,1,8,4,5], listB [5,0,1,8…

三星GalaxyWatch放弃iOS:无法给用户一致的体验,还不如“丢掉”

昨晚,三星发布了全新的Galaxy Watch 6系列智能手表。然而,对于苹果手机用户来说,这个消息可能并不那么重要。因为从2021年开始,三星决定转向Wear OS系统,并计划在Galaxy Watch 4及以后的新款智能手表上采用该系统&…

Python基础语法第八章之使用库

目录 一、使用库 二、标准库 2.1认识标准库 2.2使用 import 导入模块 2.3第三方库 2.3.1认识第三方库 2.3.2使用 pip 一、使用库 库 就是是别人已经写好了的代码, 可以让我们直接拿来用. 按照库的来源, 可以大致分成两大类 标准库: Python 自带的库. 只要安装了 Pytho…

JavaEE——SpringMVC中的常用注解

目录 1、RestController (1)、Controller (2)、ResponseBody 2、RequestMappping (1)、定义 (2)、使用 【1】、修饰方法 【2】、修饰类 【3】、指定方法类型 【4】、简化版…

朝花夕拾思维导图怎么画?看看这种绘制方法

朝花夕拾思维导图怎么画?绘制思维导图的好处有很多,首先它可以帮助人们更好地组织和管理知识,提高工作效率和学习效果。其次,绘制思维导图可以帮助人们更好地记忆知识点和理解知识点。总之,绘制思维导图可以帮助人们更…

字符串函数介绍应用

字符串 1.前言 C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串中或者字符数组中。 字符串常量适合于那些对他不做修改的函数。 2.库函数及其模拟实现 2.1 strlen函数 size_t strlen ( const char *…

机器学习深度学习——多层感知机的简洁实现

👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——多层感知机的从零开始实现 📚订阅专栏:机器学习&&深度学习 希望文章对你…

东南大学轴承故障诊断(Python代码,CNN模型,适合复合故障诊断研究)

运行代码要求: 代码运行环境要求:Keras版本>2.4.0,python版本>3.6.0 本次实验主要是在两种不同工况数据下,进行带有复合故障的诊断实验,没有复合故障的诊断实验。 实验结果证明,针对具有复合故障的…

Linux系统MySQL数据库的备份及应用

本节主要学习了MySQL数据库的备份:概念,数据备份的重要性,造成数据丢失的原因,备份的类型,常见的备份方法,实例与应用等。 目录 一、概述 二、数据备份的重要性 三、造成数据丢失的原因 四、备份类型 …

AMEYA360:ROHM罗姆授权代理有哪些?

罗姆(ROHM)株式会社是全球知名的半导体厂商之一,总部所在地设在日本京都市,1958年作为小电子零部件生产商在京都起家的罗姆,于1967年和1969年逐步进入了晶体管、二极管领域和IC等半导体领域。2年后的1971年,罗姆作为第一家进入美国…

K8S故障排查

故障现象:部署pod时,报错没发调度到节点。 排查步骤: 1、查看集群的状态 [rootk8s-master1 nginx]#kubectl get nodes2、查看k8s组件的状态-kubelet,kube-apiservice 3、查看docker的Cgroup driver和k8s的Cgroup driver类型&…

list源码分析,基于c++ 和vs2019,cpp20标准

list源码分析,基于c 和vs2019,cpp20标准。结构确实如图,双向环形链表。

Qt C++实现Excel表格的公式计算

用Qt的QTableViewQStandardItemModelQStyledItemDelegate实现类似Excel表格的界面,在parser 模块中提供解析表格单元格输入的公式。单元格编辑结束后按回车进行计算和更新显示。 效果如下: 支持的公式计算可以深度嵌套,目前parser模块中仅提…

【C语言day08】

int n5; int a[n][n2] 数组定义下角标不能为变量 注:C99标准中支持了使用变量本题考查的是二维数组的元素访问,A选项是 正确的,X[i]就是第i行的数组名,数组名表示首元素的地址,X[i]表示第i行的第一个元素的地址&#…

【开源项目】智慧高铁站~经典开源项目数字孪生智慧高铁站——开源工程及源码

广州南站工程和源码免费赠送,人人都可探索其魅力! 项目介绍 广州南站,中国最大的综合交通枢纽之一,处于广州市珠江新城中轴线上,是广州南沙新区的门户之一。利用数字孪生技术,通过3Dmaxs技术实现数据和场景…

MySQL基础扎实——MySQL中各种数据类型之间的区别

在MySQL中,有各种不同的数据类型可供选择来存储不同类型的数据。下面是一些常见的数据类型以及它们之间的区别: 整数类型: TINYINT:1字节,范围为-128到127或0到255(无符号)。SMALLINT&#xff1…