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

目录:导读

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


前言

1、pytest前置条件+后置条件的两种写法

使用yield关键字来是实现:
推荐使用这种,因为yield关键字能返回函数的值

import pytest
@pytest.fixture()
def befor_func():print('xxxxxxxxxxxxx测试用例的初始化xxxxxxxxxxxxxxxx')yield 10                            #yield后面跟的是测试用例的后置条件,支持用例执行后就执行yield里的内容print('zzzzzzzzzzzzzzzzzz测试用例的清除zzzzzzzzzzzzzz')def test_001(befor_func):print("测试用例001")res=befor_funcprint(res)if __name__ == '__main__':pytest.main(["test1.py",'-s'])

使用finc()函数来实现:
这种就不能返回返回值了

import pytest
@pytest.fixture()
def befor_func(request):print('xxxxxxxxxxxxx测试用例的初始化xxxxxxxxxxxxxxxx')def fin():                        #尾部这是后置条件,测试用例执行后就会调用这个函数      print('zzzzzzzzzzzz测试用例的清除zzzzzzzzzzz')request.addfinalizer(fin)               #回调,当我整个包运行完了后回调fin这个方法          
def test_001(befor_func):print("测试用例001")if __name__ == '__main__':pytest.main(["test1.py",'-s'])

2、pytest数据驱动(参数化)

pytest数据驱动的意义:
参数化(登录用例4条,每一个账号密码都不同,使用框架把4个用例全部执行完,不需要for循环遍历执行,采用数据驱动方案来做)

pytest内置装饰器@pytest.mark.parametrize可以让测试数据参数化,把测试数据单独管理,类似ddt数据驱动的作用,方便代码和测试数据分离

@pytest.mark.parametrize("a",[1,2,3]):        # 参数化传一组参数  @pytest.mark.parametrize("a,b", [(1,2),(3,4),(5,6)])    #  参数化传多组参数

登录账户密码(name和psw不同的用例组合,一个接口几十个用例怎么做----几十组数据----传的参数不同(什么请求方式和各种都一样)

可以把name和psw分别采取多组数据进行参数化,数据分离,一个接口跑4次,每次用不同的参数)

import pytest#[(1,2),(3,4),(5,6)]   [1,2,3]class Test_login():  def setup_class(self):print("执行测试类之前,我需要执行操作")@pytest.mark.parametrize("a",[1,2,3])            #("变量名",[1,2,3]),数据需要封装成一个列表,多个数据需要封装成列表嵌套元组   ----数据驱动def test_login01(self,a):                  #数据驱动,一定要把变量名a引入引来,不然无法参数化print("---test_login01----")assert 1 + 1 == a@pytest.mark.parametrize("a,b", [(1,2),(3,4),(5,6)])    #数据驱动传多组参数def test_login02(self,a,b):print("---test_login02----")assert a + 1 == bdef teardown_class(self):print("------该测试类的环境清除-----")if __name__ == '__main__':pytest.main(["test_func01.py","-s"])

3、pytest结合allure报告操作

pytest自带的报告框架 pytest-html;
allure环境搭建(allure是报告库不是python专属的,很全面的框架)-allure报告漂亮;

下载allure.zip(压缩包);
解压allure.zip到一个文件目录;
将allure-2.13.3\bin路径添加到环境变量path;
pip install allure-pytest -------allure报告本身不是很漂亮,通过allure-pytest这个库可以定制化报告,让报告变得很漂亮;
验证(cmd输入allure);

allure和pytest联合执行生成报告:运行两条语句

执行pytest单元测试,生成的allure报告需要的数据存在/tmp目录

pytest -sq --alluredir=../report/tmp   #pytest把allure报告的生成的中间文件放到一个临时文件里面(pytets生成报告,需要数据,所以先把数据存起来)

所有的报告需要数据支持的,数据来源pytest框架本身,结果数据存到一个文件,存在…/report/tmp文件夹;
tmp临时文件,一般json格式;

执行命令,生成测试报告

allure generate ../report/tmp -o ../report/report -clean     #allure指令生成对应报告

allure模拟代码

import pytest
import os
class Test_login():  def setup_class(self):print("执行测试类之前,我需要执行操作")@pytest.mark.parametrize("a",[1,2,3])def test_login01(self,a):  print("---test_login01----")assert 1 + 1 == a@pytest.mark.parametrize("a,b", [(1,2),(3,4),(5,6)])def test_login02(self,a,b):print("---test_login02----")assert a + 1 == bdef teardown_class(self):print("------该测试类的环境清除-----")if __name__ == '__main__':#需要打印对应的信息,需要在列表里面加-s#1:--alluredir ---生成临时文件,测试用例的结果数据放到目录   --alluredir   存放目录pytest.main(["test_func01.py","-s","--alluredir","../report/tmp"])  #框架自己调用函数#通过--alluredir把allure需要的数据存到../report/tmp这个路径下面#../--所在路径的父级别目录是test_case的目录隔壁邻居report文件下tmp,专门放alluer报告生成的需要的数据源# 2:临时数据没有报告的,allure generate allure才会生成报告   -----allure生成器生成allure报告--generate allure生成器,cmd指令#需要os模块os.system()调用指令可以在local的cmd里面敲os.system("allure generate ../report/tmp -o ../report/report --clean")#os.system("allure generate 报告需要的数据 -o 报告存放目录 --clean")#-o生成#allure generate生成报告指令,把../report/tmp 的文件-o生成报告out out一下,生成的报告放在../report/report#--clean把上次报告清除一下用--clean                 #allure报告生成的是一个服务,(本地服务)和jinkins结合,放在整个里面去集成,放到公共服务器里面

allure报告的优化

import pytest
import os
import allure       
@allure.feature("登录模块")                                                      #一级标题,大模块标题(类标签)
class Test_login():                                                              def setup_class(self):                                                                  print("执行测试类之前,我需要执行操作")@allure.story("登录login01")                                                  # 二级标签(每个接口的标签)@allure.title("login01")                                                     # 标题,每个用例带个标题(报告体现在每个测试用例)(一个接口有几个用例,title用例的标签)@pytest.mark.parametrize("a",[1,2,3])                                      def test_login01(self,a):                                                      print("---test_login01----")assert 1 + 1 == a@allure.story("登录login02")                                                  # 二级标签,定制allure报告层级@allure.title("login02")                                                     #标题,每个用例带个标题(报告体现在每个测试用例)@pytest.mark.parametrize("a,b", [(1,2),(3,4),(5,6)])                      def test_login02(self,a,b):print("---test_login02----")assert a + 1 == bdef teardown_class(self):                                               print("------该测试类的环境清除-----")@allure.feature("购物模块")
class Test_Shopping():@allure.story("shopping")@allure.title("shopping01")@pytest.mark.parametrize("a,b", [(1, 2), (3, 4), (5, 6)])def test_shopping(self, a, b):print("---test_login02----")assert a + 1 == b
if __name__ == '__main__':pytest.main(["test_func01.py","-s","--alluredir","../report/tmp"])    os.system("allure generate ../report/tmp -o ../report/report --clean")#allure报告生成的是一个服务,(本地服务)和jinkins结合,放在整个里面去集成,放到公共服务器里面

其他知识点:
测试用例一般写在excel表格文件里面,数据分离(维护好excel就行);
pytest–从头到尾到报告执行发邮件;
字典是一种存储类型,json是一种格式(完全不同);

4、pytest参数解析

pytest.main([‘test_boss.py’,‘-s’,‘-k test_modify_psw’,‘–alluredir=tmp/my_allure_results’])

说明:
test_boss.py:指定测试用例文件;
-s:显示print语句;
-k test_modify_psw:指定某个测试用例;
-n:表示用两个进程启动测试脚本

生成报告缓存文件:–alluredir=tmp/my_allure_results
os.system(‘allure serve tmp/my_allure_results’):打开测试报告,命令行需要python 的os模块调用

5、pytest的初始化和清除

import pytest
#假设启动被测app的时候需要去填写配置项信息,每个的端口号不同,多终端需要两个appim server
#这时候setup_module和teardown_module不能传参,搞不定,需要换一种方法做测试用例的初始化和清除,#setup_module以模块为作用域,不写module以测试用例(测试函数)为作用域
# def setup_module():    #测试用例之前执行,原始的setup和teardown有个缺陷,里面不能传参数,
#                      #默认test级别,每个测试用例执行的时候都会执行一次,希望当前某个模块执行的时候只执行一次(不管里面用例执行多少次)
#                      #setup初始化和tear_down升个级,升级成module模块级别的
#     print("启动被测app")
#     print('连接appium服务')
#
# def teardown_module():
#     print('关闭被测app')
#     print('断开appium服务')#定义个函数,名字随便取  使用@pytest.fixture装饰器把这个函数装饰成初始化清除函数
@pytest.fixture(scope='module')    #作用域默认test,初始化,加装饰器,初始化清除函数,autouse=True(自动执行)这种方法不建议使用                               #
def before_test():                   #初始化函数升级作用域到module模块级别print("启动被测app")print('连接appium服务')yield   #后面写清除动作,after_test()#清除函数,清除函数并不会直接被初始化函数使用,我们必须放在初始化函数yiled后面才能回被调用
def after_test():print('关闭被测app')print('断开appium服务')
#目前一共有两个port,需要测试两个手机,两个多终端,before_test需要装饰器标记#测试用例的参数化
@pytest.mark.usefixtures('before_test')                        #这表示调用某个自定义的初始化函数,括号里面的字符串写被调用函数的名字
@pytest.mark.parametrize('psw',['boss123','boss456'])
def test_app(psw):                        #测试用例,可能涉及到其他参数,比如需要一些配置信息,测试用例涉及到参数,                              #多组参数需要使用装饰器pytest.mark.parametrize(数据驱动),psw传参和形参名字对应的print('测试boss app')print(f'登录测试账号{psw}')if __name__ == '__main__':pytest.main(['pytest_ywt.py','-s'])
下面是我整理的2023年最全的软件测试工程师学习知识架构体系图

一、Python编程入门到精通

请添加图片描述

二、接口自动化项目实战

请添加图片描述

三、Web自动化项目实战

请添加图片描述

四、App自动化项目实战

请添加图片描述

五、一线大厂简历

请添加图片描述

六、测试开发DevOps体系

请添加图片描述

七、常用自动化测试工具

请添加图片描述

八、JMeter性能测试

请添加图片描述

九、总结(尾部小惊喜)

千锤百炼方成钢,一腔热血铸辉煌。奋斗是追逐梦想的征程,每一次努力都在为成功铺就坚实的基石。永不放弃,勇往直前,用汗水浇灌希望的花朵,终将开出属于自己的辉煌人生。

生命如一朵盛开的花朵,只有经历风雨的洗礼,才能绽放出光彩夺目的美丽。坚持自己的梦想,勇敢追逐,奋斗不止,你将终获辉煌的成就,因为努力是改变命运的钥匙。

人生如天空之星,只有付出坚持的努力,才能闪耀璀璨的光芒。不畏艰难困境,锲而不舍地追求梦想,奋斗的力量将引领你超越自我,驶向辉煌的彼岸。相信自己,勇往直前,成功必将属于你。

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

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

相关文章

常见面试题之设计模式--责任链模式

1. 概述 在现实生活中,常常会出现这样的事例:一个请求有多个对象可以处理,但每个对象的处理条件或权限不同。例如,公司员工请假,可批假的领导有部门负责人、副总经理、总经理等,但每个领导能批准的天数不同…

【外卖系统】分类管理业务

公共字段自动填充 需求分析 对于之前的开发中,有创建时间、创建人、修改时间、修改人等字段,在其他功能中也会有出现,属于公共字段,对于这些公共字段最好是在某个地方统一处理以简化开发,使用Mybatis Plus提供的公共…

小程序新渲染引擎 Skyline 发布正式版

为了进一步提升小程序的渲染性能和体验,我们推出了一套新渲染引擎 Skyline,现在,跟随着基础库 3.0.0 发布 Skyline 正式版。 我们知道,小程序一直用 WebView 来渲染界面,因其有不错的兼容性和丰富的特性,且…

PM2.5传感器(PMS5003)STM32代码

PM2.5传感器型号:PMS5003 PMS5003简介如下: 详情:PMS5003资料链接 PM2.5传感器代码下载,本人所写,亲测有效,基于STM32F407(其他STM32型号皆可移植,只需修改UART参数即可),UART打印数据

Git的常用命令以及使用场景

文章目录 1.前言2.工作区,暂存区,版本库简介3.Git的常用命令4.版本回退5.撤销修改6.删除文件7.总结 1.前言 在学习Git命令之前,需要先了解工作区,暂存区和版本库这三个概念 2.工作区,暂存区,版本库简介 在使用Git进行版本控制时,有三个重要的概念:工作…

基于Truss+Docker+Kubernetes把开源模型Falcon-7B送上云端(译)

背景 到目前为止,我们已经看到了ChatGPT的能力及其所能提供的强大功能。然而,对于企业应用来说,像ChatGPT这样的封闭源代码模型可能会带来风险,因为企业自身无法控制他们的数据。尽管OpenAI公司声称用户数据不会被存储或用于训练…

【1.1】Java微服务:初识微服务

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 微服务 ✨特色专栏: 知识分享 &#x…

Mycat分片函数详解

Mycat新一代Mysql分布式集群,大数据处理中间件,中国第一开源软件 Checkout项目 可以用eclipse的svn插件来进行项目检出,也可以用Tortoise SVN等工具检出,由于maven(M2)中的buildnumber-maven-plugin 中的SVNkit最高支持1.7的SVN仓库,因此当你用Tortoise SVN 1.8的工具或版…

LinuxC语言-网络通信tcp/ip errno获取错误描述字符串

目录 服务端代码&#xff1a; 获取errno错误码&#xff1a; 客户端代码&#xff1a; 运行结果: 服务端代码&#xff1a; #include <stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<netinet/in.h> #in…

Arcis中三维面转二维面

1、如何查看面是三维面 打开面属性表&#xff0c;查看SHAPE字段&#xff0c;是带“ZM”的就是三维面 不带”ZM“的就是二维面 2、三维面转二维面 在转换的过程中&#xff0c;通过设置环境下的参数&#xff0c;可以转换

ChatGPT 实现前一天

提出需求 个人输入需求&#xff1a; Java实现键盘输入日期 输出前一天&#xff0c;需要考虑润年和非润年&#xff0c;2月是否有29号&#xff0c;大月小月的区分等细节处理&#xff0c;不符合的有对应提示&#xff0c;不使用java包里的封装好的类 ChatGPT4分析出的语义&#xff…

QGIS3.28的二次开发一:编译工程

环境&#xff1a;VS2019OSGeo4WCMake_3.26Cygwin64QGIS_3.28 注意&#xff1a;一定要按照步骤顺序来&#xff01; 一、配置环境 &#xff08;一&#xff09;VS2019 VS2019下载链接https://my.visualstudio.com/Downloads?qvisual%20studio%202019&wt.mc_ido~msft~vsco…

github前端开源json2html

软件介绍 前端低代码工具包&#xff0c;通过 JSON 配置就能生成各种页面。 应用场景 json解析超大数据动态渲染&#xff0c;渲染速度、性能解决问题 包引用列表 vue3 (cdn模式开发)element plusnodehttp-serveraxios 操作步骤 1.环境准备下载node&#xff1a;https://no…

华为OD机试真题 Java 实现【报文回路】【2023 B卷 100分】,俗称“礼尚往来”

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路1、报文回路2、异常情况&#xff1a;3、解题思路 五、Java算法源码六、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&…

C++模拟实现反向迭代器

1.代码实现 1.有了解正向迭代器的应该知道&#xff0c;比如list的正向迭代器其实本质是一个类&#xff0c;而有些人想模拟实现反向迭代器&#xff0c;依旧想再创建一个类&#xff0c;但是库里面想要的是&#xff0c;你给我一个迭代器&#xff0c;我就能给你反馈一个反向迭代器…

word显示书签并给书签添加颜色

CTRg 定位书签 在 Word 的用户界面中&#xff0c;没有直接的选项可以批量为所有书签设置颜色。但你可以使用 VBA 宏或者编写自定义的功能来实现这个需求。这里给出一个简单的 VBA 宏&#xff0c;它可以设置当前文档中所有书签内文本的颜色&#xff1a;vba Sub ColorAllBookmark…

零代码编程:PDF文件名和Excel数据进行比对找不同

F盘“北交所招股说明书”文件夹下有150个文件&#xff1b; F盘”北证A股20230703.xlsx”表格中证券名称有200多个&#xff1b; 现在想找出文件夹下的哪些证券名称不在表格里面。 在ChatGPT中输入提示词&#xff1a; 写一段Python程序&#xff1a; F盘“北交所招股说明书”文…

ElementUI Select选择器如何根据value值显示对应的label

修改前效果如图所示&#xff0c;数据值状态应显示为可用&#xff0c;但实际上仅显示了状态码1&#xff0c;并没有显示其对应的状态信息。在排查了数据类型对应关系问题后&#xff0c;并没有产生实质性影响&#xff0c;只好对代码进行了如下修改。 修改前代码&#xff1a; <…

Python自动化测试----生成测试报告

如何才能让用例自动运行完之后&#xff0c;生成一张直观可看易懂的测试报告呢&#xff1f; 对于自动化测试有兴趣的朋友可以观看这个视频&#xff1a; 【整整200集】超超超详细的Python接口自动化测试进阶教程&#xff0c;真实模拟企业项目实战&#xff01;&#xff01; 小编使…

【暑期每日一练】 day9

目录 选择题 &#xff08;1&#xff09; 解析&#xff1a; &#xff08;2&#xff09; 解析&#xff1a; &#xff08;3&#xff09; 解析&#xff1a; &#xff08;4&#xff09; 解析&#xff1a; &#xff08;5&#xff09; 解析&#xff1a; 编程题 题一 …