基础知识学习完毕,接下来我们开始学习测试框架啦!!!

首先来回顾一下python自带的Unittest框架:

Python基础学习016__UnitTest-CSDN博客文章浏览阅读97次。Testcase:测试用例:这个测试用例是UnitTest的组成部分,不是手工和自动化中所说的用例(Test Case)# Fixture:测试夹具:书写在TestCase中的,是一种代码结构,在每个方法执行前后都会执行的内容.# 为什么使用:能够组织多个用例去执行.提供了丰富的断言方法,能够生成测试报告。# TestSuite:测试套件,用来管理,组装(打包)多个TestCase。# TestRunner:测试执行:用来执行TestSuite。# 可以将用例的前置后置条件放在这里。https://blog.csdn.net/Chrisliuluo/article/details/134271984?spm=1001.2014.3001.5501

Python基础学习017__断言-CSDN博客文章浏览阅读26次。【代码】Python基础学习017__断言。https://blog.csdn.net/Chrisliuluo/article/details/134296766?spm=1001.2014.3001.5501

Python基础学习018____参数化-CSDN博客文章浏览阅读16次。【代码】Python基础学习018____参数化。https://blog.csdn.net/Chrisliuluo/article/details/134302520?spm=1001.2014.3001.5501Python基础学习019--跳过-CSDN博客文章浏览阅读145次。【代码】Python基础学习019--跳过。https://blog.csdn.net/Chrisliuluo/article/details/134538737?spm=1001.2014.3001.5501Python基础学习__测试报告-CSDN博客文章浏览阅读162次。stream = sys.stdout,必填,测试报告的文件对象(open一个文件就可以得到一个文件对象)即测试报告名称,注意,必须使用wb(二进制写入)打开。# runner = HTMLTestRunner(f,2,'测试报告名称','Python3.11') # 运行对象。# 即将报告模板放在代码目录下,导包,添加用例,使用第三方的Runner代替Python自带的TextTestRunner来执行用例实例。# title = None ,可选,是测试报告的标题。https://blog.csdn.net/Chrisliuluo/article/details/134538760?spm=1001.2014.3001.5501接下来,我们来学习一个新的框架:pythet

1.与Unittest框架相比,优缺点:

优点:功能更加强大,代码更简单,可以调用执行Unittest代码

缺点:需要安装才能使用

2.安装

直接安装:        pip install pytest

指定版本安装:        pip install pytest==版本号

查看安装结果:        pip list 或        pytest --version

3.使用

(1)定义

与Unittest不同,不需要装饰器,也不需要指定类继承,不需要将类名或函数名固定以Test开头。

类直接定义,继承基类object类即可。命名不需要特定以test开头,但是要注意类名开头统一,方便执行(不需要必须以Test开头,但是开头也要一致)

特殊函数:

①函数级别:开始函数 setup(self)、结束函数 teardown(self)

②类级别:开始函数setup_class(self)、结束函数 teardown_class(self),不需要装饰器指定为类方法。

(2)执行:

①使用主函数形式执行:在测试用例文件末尾添加如下代码:

if __name__ == '__main__':

"""

语法: pytest,main(['-s','文件名.py'])

"""

pytest.main(['-s', 'Pytest001_主函数形式执行.py'])

②使用配置文件+pytest命令执行:

注意:配置文件命名,可以为pytest.ini|tox.ini|setup.cfg|pyproject.toml,任选其一即可,通常用pytest.ini。不可以随便自定义

pytes.ini文件中不可以有注释,搬运的时候记得把下边代码的注释全部去掉

一个工程通常只有一个配置文件,放在根目录

写好配置文件,想要批量执行用例,只需要在Terminal命令行输入pytest命令即可。

[pytest]

# 测试用例代码的路径

testpaths =./scripts/

?

# 测试用例代码文件前缀,此处以test为例,可以是项目缩写或任意字符,

# 批量执行在testpaths指定的路径下,以test开头的测试文件

# 只要开头统一能使用通配符*匹配到,就可以批量执行以指定字符串开头的测试文件

python_files = test*.py

# 测试类指定开头,可以是任意字符,此处以Test为例

python_classes = Test*

# 测试方法指定开头,可以是任意字符,此处以Test为例

python_functions = test*

# 执行用例时,使用pytest命令,添加什么字段

# -s表示执行文件

# --html=./report/testreport1.html表示生成html文件形式的测试报告,保存在./report/testreport1.html路径

# --self-contained-html表示生成的html报告要将CSS文件整合在一起,保留页面布局

# --reruns 0表示用例的失败重执行次数。

addopts = -s

--html=./report/testreport1.html --self-contained-html

--reruns 0

# 生成日志的格式

log_format = %(asctime)s %(levelname)s [%(name)s] [%(filename)s:%(funcName)s:%(lineno)d)] - %(message)s

# 生成日志的时间格式

log_date_format = %Y-%m-%d %H:%M:%S

#是否生成日志文件

log_cli = true

# 生成日志的级别

log_cli_level=INFO

# 日志文件保存路径

log_file = ./log/test1.log

③控制执行顺序 在方法的上方添加@pytest.mark.run(order=X),X可以为正数、负数也可以正负数同时存在。1.order同为正数或同为负数时,值越小优先级越高.正负数同时存在时正数优先,同类数越小优先级越高

2.对方法有效,对测试类同样有效

扩展:Unittest是通过ascII码决定执行顺序的

(3)跳过

pytest与Unittest有相似的跳过功能,不过实现方式不同。同样是添加装饰器。

@pytest.mark.skipif(version <= 20, reason='版本低于20不支持该功能')

注意reason=不可以缺。

适用于函数,也适用于类

(4)断言

pytest没有封装断言方法,可以直接使用python自带的断言:

assert 表达式

表达式结果为True即断言成功,表达式结果为False则抛出断言错误异常。

例如:assert 1==0,则抛出异常,assert 'h' in 'hello' ,则断言成功

(5)参数化

①单个参数:

@pytest.mark.parametrize('name', ['张飒', "李思思"])

②多个参数:将多个参数名使用一个字符串用逗号隔开,或将多个参数名放在一个元组里

@pytest.mark.parametrize('name,passwd,msg', test_data)

@pytest.mark.parametrize(('name','passwd','msg'), test_data)

③通过函数引入测试数据

@pytest.mark.parametrize(('name','passwd','msg'), test_data())

添加一个PO模式封装实战——在线计算器

代码:

https://download.csdn.net/download/Chrisliuluo/88588738?spm=1001.2014.3001.5503

相关阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: