pytest单元测试框架

参考:https://www.bilibili.com/video/BV14i4y1c7Jo?from=search&seid=5485646383256203318

1、单元测试框架

在这里插入图片描述

2、单元测试框架和自动化测试框架

在这里插入图片描述
全局配置文件:向后面讲到的pytest.ini就是全局配置文件,用于设置自动化全局默认参数的文件

3、pytest简介

在这里插入图片描述
补充:pytest既可以执行方法,也可以执行函数(即直接用函数定义测试用例)
在这里插入图片描述

3.1 测试插件安装方法(虚拟环境)

一次性安装多个插件
首先建立一个txt文件,在txt文件中编辑需要安装的插件(一个插件一行)
使用命令: pip install -r 建立的txt文件名称
此方式安装是局部的,不是全局的,响应插件仅应用于所属项目
在这里插入图片描述

4、pytest 默认的测试用例的规则及基础应用

在这里插入图片描述

5、pytest测试用例的运行方式

1、主函数模式:
(1)运行所有:pytest.main(), 参数是列表方式pytest.main([-s]),可建立一个all.py模块用来组织所有测试用例
在这里插入图片描述

	(2)指定模块:pytest.main(["-vs", "test_login.py"])
	  (3)  指定目录:pytest.main(["-vs", "./interface_testcase"])

在这里插入图片描述

	  (4) 通过nodeid指定用例运行: nodeid由模块名,分隔符(::双冒号为分割符),类名,方法名,函数名组成
	       pytest.main(["-vs", "./interface_testcase/test_interface.py::test_04_func"])

在这里插入图片描述
pytest.main(["-vs", “./interface_testcase/test_interface.py::TestInterface::Test_03_zhiliao”])
2、命令行模式
(1)运行所有:pytest, 参数是-s形式,例如:pytest -s
(2)指定模块:pytest -vs test_loging.py
(3)指定目录:pytest -vs ./interface_testcase
(4) 通过nodeid指定用例运行: pytest -vs ./interface_testcase/test_interface.py::TestInterface::Test_03_zhiliao

3、通过读取pytest.ini配置文件运行
pytest.init这个文件他是pytest单元测试框架的核心配置文件
1)位置:一般放在项目的跟目录
2)编码格式必须是ANSI,可以使用otepad++修改格式,
在这里插入图片描述

 3)作用:改变pytest默认的行为
 4)运行规则:不管是主函数的模式运行,命令模式运行,都会读取这个配置文件。
 5)pytest.ini格式:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

4、参数详解
-s:表示输出调试信息,包括print打印信息
-v:显示更详细信息,包括模块名,类名,方法名及结果等, 可以将两个参数合并使用,以-vs形式
-n 支持多线程或者分布式运行测试用例, 例如:pytest.main(["-vs", “./interface_testcase”,"-n=2"]), 数字是指定的线程数量 (pytest -vs ./interface_testcase -n 2 )所使用的插件是 pytest-xdist
–reruns 失败测试用例重跑:例如:pytest.main(["-vs", “./interface_testcase”,"–reruns=2"]), 数字是指定重跑次数,(pytest -vs ./interface_testcase --reruns 2),所使用的插件是pytest-rerunfailures

-x:标识只要一个测试用例失败,就停止
--maxfail=number  出现最大测试用例数就停止,如果设置为2,则出现两个失败测试用例后就会停止
-k: 根据测试用例的部分字符串指定测试用例 pytest -vs -k "ao"
--html  ./report/report.html  生成测试报告  ,路径+报告名称

6 pytest执行测试用例的执行顺序

unitest: 按照ASCII码的大小来绝对的执行顺序自行
pytest: 默认按照从上向下的执行顺序
改变默认的执行顺序:使用mark标记, 标记测试用例执行顺序,例如:@pytest.mark.run(order=1),1代表第一个执行,2代表第二个执行,所使用的插件为pytest-ordering
在这里插入图片描述

7、如何分组执行

分组执行:冒烟, 分模块执行,分接口和web执行
smoke:冒烟用例,分布在各个模块里面,怎么挑选出来

1)配置文件中声明标记符号
在这里插入图片描述
1)标记用例:
在这里插入图片描述
2)执行
pytest -vs -m “smok” (-m是参数, “smok”是标记的字符串)
pytest -vs -m “smok or usermange” 同时执行标记为smok或usermange的测试用例

8、跳过测试用例

无条件 跳过测试用例在这里插入图片描述

有条件跳过测试用例
在这里插入图片描述

9、 生成报告

9.1 allure生成报告,

1、安装allure的运行环境
allure生成报告插件需要java的运行环境,即需要安装jdk。
jdk安装参考:Appium自动化测试(二)Android SDK 环境配置
仅参考第一项“一、 首先配置jdk环境”即可。
2、下载allure,解压并只是path路径
官网地址:https://github.com/allure-framework/allure2/releases
3、配置环境变量
下载完成后解压,路径随意但要记住解压的路径,便于环境变量配置。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
4、验证是否安装成功

在这里插入图片描述

在这里插入图片描述
问题: 在dos可以验证成功, 但是pycharm验证失败,怎么办?重启pycharm
5、生成测试报告

  • 生成json格式的临时报告

pytest.main(["-vs", “–alluredir=./temp”])或在全局配置中配置(如下图)
在这里插入图片描述

  • 生成allure报告

    os.system(“allure generate ./temp -o ./report --clean”), #“allure generate” 固定写法,表示产生allure报告,./temp,找到临时json格式报告,-o 输出,./report,将报告输出到路径 --clean是首先清除原来目录./report下的报告
    在这里插入图片描述

10 前后治的处理(前后置又称固件或夹具)

10.1 setup/teardown,setup_class/teardown_class

执行测试前的准备工作,初始化,例如打开浏览器,加载网页,和测试后的处理,例如关闭网页。
setup/teardown在每个测试用例都会执行
setup_class/teardown_class(创建数据库的链接,创建日志对象,创建接口的请求对象)在所有的测试用例之前执行一次(更确切的说是在所有测试类之前执行一次)

与unitest不一样,全是小写

10.2 使用@pytest.fixture()装饰器来实现部分测试用例的前后置

@pytest.fixture()既可以实现所有也可以实现部分用例的前后置
参数:
scope: 表示的是被@pytest.fixture()标记的方法的作用域,function(默认),class,modue, package/sessinon(例如:如果为Function,即标识在响应函数执行前后置,如果为calss则在响应的类执行前后置。等等)

在这里插入图片描述
后置
在这里插入图片描述

params: 参数化,支持列表[],元祖(),字典列表[{},{},{}],字典元祖[(),(),()]形式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注意:@pytest.fixture(scope=“funuction”, params=[“成龙”])其中params是带s的
而request.param, 是不带s的,固定写法

autouse=True:自动执行,默认是False。 当为True 测试用例的方法中不引用,也自动使用前后置
在这里插入图片描述

在这里插入图片描述
return和yield都标识返回,return后面不能有代码,但yield后面可以有代码

ids: 当使用params参数化时,给每一个值设置一个变量。意义不大(当参数化时,执行结果中函数名称后面会有一个附加unicode编码的值,就是参数值,为便于可读,可一个给每个值设置一个变量
在这里插入图片描述
在这里插入图片描述

name:给表示的是被@pytest.fixture()标记的方法取一个别名。当取了别名之后,原来的名称就无法使用了。

在这里插入图片描述

11 通过conftest.py和@pytest.fixture结合使用实现全局前置应用,(比如项目的全局登录,模块的全局处理)

规定

  • conftest.py文件是单独存放的一个夹具配置文件,名称是固定的不能更改的
  • 用处可以在不同的py文件中使用同一个fixture函数
  • 原则上conftest.py需要和运行的用例放到同一层级,并且不需要做任何的import导入的操作

在这里插入图片描述

在这里插入图片描述

总结:
setup/teardown, setup_class/teardown_class 它是作用域所有测试用例或者所有的类
@pytest.fixture() 它的作用是即可以部分也可以全部前后置
conftest.py和@pytest_fixtrue()结合使用,作用域全局的前后置

12 断言 assert

assert 1==2

13 @pytest.mark.parametrize()

作用:参数化
参数:@pytest.mark.parametrize(args_name, args_value)
args_name:参数名
args_value: 参数值(列表,元祖,字典列表,字典元祖)有多少个值用例就会执行多少次

第一种方式:
在这里插入图片描述
第二种方式:与unitest中ddt的@unppack解包是一样的
在这里插入图片描述

14 结合yaml文件详解,实现接口自动化

一般情况下用yaml写接口自动化测试用例,用excel写ui自动化测试用例
yaml文件在接口自动化测试用的作用。
1、用于全局的配置文件一般两种形式ini或yaml、conf
2、用于写测试用例(接口测试用例)

14.1 yaml简介

yaml是一种数据格式,支持注释(#),换行,多行字符串,裸字符串(最小的数据单元就叫裸字符串,例如:整形,字符串,)

14.2语法规则

  • 区分大小写
  • 使用缩进标识层级,不能使用tab键缩进,只能使用空格缩进
  • 缩进没有数量的规定,只要前面是对其的就行
  • 注释是#

14.3数据组成

# 第一种写法,多行写法
student:
   name: darly
   age: 18
# 第二种写法 一行写法
student:{name:darly, age:18}
  • 2、数组(list)用一组横线开头:如:

多行写法

-
  student:
   -name: darly
   -age: 18
-
  teacher:
    -name: felx
    -age: 10

一行写法:

-
  student: [{name: darly}, {age: 18}]
  teacher: [{name: felx}, {age: 12}]

14.4 yaml文件操作

插件安装: pip install pyyaml
在这里插入图片描述

接口实例

在这里插入图片描述
编制yaml文件
在这里插入图片描述
在这里插入图片描述

这个数据驱动太粗糙,还不够
例如:
断言还没有封装
allure报告定制
关键字驱动和数据驱动相结合
python的反射:
正常写法:先初始化对象,再调用方法
反射:通过对象得到类对象,然后通过类对象调用方法
jenkins的持续集成和allure报告集成,并且根据自动化报告的错误率发送电子邮件

其他

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值