pytest基础介绍

pytest 测试框架基础介绍

pytest是python测试框架,

常用测试框架还有unittest,robot framework(rf)

robot framework 使用的是关键字驱动的形式,包括:1.数据关键字;2.业务关键字

pytest安装

cmd中使用命令:pip install pytest

在这里插入图片描述

pytest命名规则

  1. 以test或test_开头编写模块,类,函数

  2. 以test或test_开头编写类,函数,

    以test或_test结尾编写模块

执行测试用例

新建一个模块专门用来执行用例

在这里插入图片描述

所有的用例都放在该模块来执行

执行用例方法

  • pytest.main([])

    pytest的main方法有2种参数,

    第一种参数为要执行测试的模块,多个模块以逗号隔开

    第二种参数为生成的测试报告类型,如:html报告,xml报告,allure报告,多个报告以逗号隔开

    在这里插入图片描述

    只有一种参数的main

    在这里插入图片描述

    执行结果:

    在这里插入图片描述

    这里只显示失败的用例,如上图

    在这里插入图片描述

  • 当使用pytest.main()时,会执行指定模块的所有用例,包括类中的用例,执行顺序是从上至下(不管你是类还是函数)

  • 类中测试方法名字可以和测试函数名相同,不影响(它们属于不同命名空间)

生成测试报告

生成测试报告需要安装相应插件

pip install -U pytest-html

pip install -U allure-pytest

(xml测试报告不需要安装插件,pytest默认自带的)

生成html测试报告(有两种参数的main)

一种是用例路径,一种是报告路径

在这里插入图片描述

html格式的报告

在这里插入图片描述

生成allure测试报告

生成allure报告要麻烦点,

    • 使用pytest.main([‘xxx.py’,’–alluredir=原始文件存放的目录’]),生成allure原始文件

      在这里插入图片描述

    • 用命令行也可以完成上述操作(html同样也可以用命令行执行)

      pytest -v 测试用例路径 --allure=原始文件存放的目录

      在这里插入图片描述

  1. 下载allure command tool工具并安装,

    下载地址:https://github.com/allure-framework/allure2/releases

    注意配置环境变量(方便使用命令),将allure的bin目录复制到环境变量中

    使用命令allure --version,出现版本号说明安装成功

    在这里插入图片描述

    使用命令allure generate 原始文件路径 -o 生成的报告路径 --clean,利用原始文件生成报告

    在这里插入图片描述

allure报告生成不同于html,xml,它需要这固定的两步,

查看allure测试报告:

在这里插入图片描述

数据驱动

使用装饰器@pytest.mark.parametrize()

在这里插入图片描述

注意:

  • 该装饰器的第一个参数就是测试用例的参数,要一摸一样,第二个参数就是要传入的数据,

  • 加了@pytest.mark.parametrize()装饰器的用例,会将数据依次传入用例执行,如上图有3个数据,那么测试用例会执行三次

  • @pytest.mark.parametrize()装饰器放在类上,表示类中所有用例都适用

  • 传入的数据可以是列表,元组列表,字典列表

skip装饰器

@pytest.mark.skip(),()可写可不写

  • 跳过装饰器,带有该装饰器的用例会被跳过不执行

用法:

在这里插入图片描述

  • (多个装饰器可同时用在一个用例上,顺序无所谓,如上图)

  • skip装饰器还有一个参数reason(可以不写),表示跳过之后会输出reason的内容

在这里插入图片描述

  • 当skip装饰器作用在整个类上,那么类中所有用例会被跳过

  • skip装饰器还可以赋值给一个变量,之后可以用该变量代替skip装饰器

    在这里插入图片描述

  • 动态跳过

    在函数或方法内使用pytest.skip()方法,可以使函数或方法直到遇到调用pytest.skip方法的时候被跳出

    pytest.skip()可带参数也可不带,

    带参数的时候里面可以写字符串,会在执行时输出

    在这里插入图片描述

    可以看到,你好{}被打印出来了,

    说明pytest.skip()之前的过程都会执行,直到pytest.skip()用例才会被跳出

    pytest.skip()方法有点像continue

  • skipif装饰器

    条件跳过,两个参数

    第一个参数是跳过的条件

    第二个参数是当被跳过时输出的内容(只有被跳过时才会输出)

    在这里插入图片描述

    在这里插入图片描述

    注意:

    ==表示当不满足条件时,会被跳过

    !=表示当满足条件时,会被跳过

    • skipif装饰器同skip,也可以赋值给一个变量

前置方法,后置方法

def setup_module():
    pass
def teardown_module():
    pass

整个模块运行前,后会执行一次

def setup_function():
    pass
def teardown_function():
    pass

每个函数(测试用例)被执行前,后都会执行一次

下面所有方法需写在类中

def setup_class():
	pass
def teardown_class():
    pass

表示整个测试类执行前,后会被运行一次

def setup_method():
    pass
def teardown_method():
	pass

表示类中的所有测试用例执行前,后都会被执行一次

def setup():
	pass
def teardown():
    pass

表示类中的所有测试用例执行前,后都会被执行一次,

如果同时存在setup_method方法,那么优先执行setup_method,再执行setup

如果同时存在teardown_method方法,那么优先执行teardown,再执行teardown_method

插入知识点(动静态方法)

@staticmethod是类的静态方法的装饰器,静态方法的括号里不要填写self

动态方法和静态方法的区别:

  1. 动态方法在使用时需要先创建实例才能调用实例方法

  2. 静态方法不需要创建实例,直接使用即可

固件函数

使用@pytest.fixture装饰的函数或方法,是更加灵活的setup,teardown

@pytest.fixture(),小括号可写可不写

其实固件函数说白了就是一个函数指针

用法:

1.直接作为其他函数参数

使用了@pytest.fixture装饰的函数就是一个固件函数,

固件函数可以作为另外一个用例的参数,当另外那个用例执行时,会先执行固件函数的内容,然后再执行自己的内容

在这里插入图片描述

观察发现上图,其实只有一个用例被执行,说明固件函数本身不会被执行,只是当被其他用例调用时才会执行

注意:

固件函数不要添加数据驱动,因为它本身是不执行的,是要靠其他用例调用才会执行

2.使用@pytest.mark.usefixtures

在这里插入图片描述

使用@pytest.mark.usefixtures装饰器的好处不言而喻,

它使其他用例可以自定义参数,如上图

3.改写默认参数autouse

改写固件函数的默认参数autouse=True,

改写之后表示该模块下所有用例会自动调用该固件函数,

@pytest.fixture(autouse=True)的优先级大于@pytest.fixture(),(@pytest.fixture()的参数autouse默认为False)

在这里插入图片描述

pytest标签

使用@pytest.mark.high,@pytest.mark.medium,@pytest.mark.low这3个装饰器,用在用例上,

相当与给用例加上不同的标签,

当我们执行用例时,可以选择性的执行

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如上图,只执行了我们选择的high和low

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值