一、pytest单元测试框架

1)什么是单元测试框架

单元测试是指在开发当中,针对软件的最小单位(函数、方法)进行正确的检查测试。

2)单元测试框架

java:junit和testng

Python:unittest和pytest

3)单元测试框架主要做什么?

1.测试发现:从多个文件里面找到我们测试用例

2.测试执行:按照一定的顺序和规则去执行。并生成结果

3.测试判断:通过断言判断预期结果和实际结果的差异

4.测试报告:统计测试进度,耗时,通过率,生成测试报告

二、单元测试框架和自动化测试框架有什么关系?

1)什么是自动化测试框架

2)作用

1.提高测试效率,降低维护成本

2.减少人工干预,提高测试的准确性,增加代码的重要性,

3.核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试。

3)pytest单元测试框架和自动化测试框架的关系

单元测试框架:只是自动化测试框架中的组成部分之一。

pom设计模式:只是自动化测试框架中的组成部分之一。

数据驱动…

关键驱动

全局配置文件的封装

日志监控

selenium、requests二次封装

断言

报告邮件

更多…

三、pytest简介

1.pytest是一个非常成熟的Python的单元框架,比unittest更灵活,容易上手。

2.pytest可以和selenium,requests,appium结合实现web自动化,接口自动化,APP自动化。

3.pytest可以实现测试用例的跳过以及reruns失败用例重试。

4.pytest可以和allure生成非常美观的测试报告。

5.pytest可以和jenkins持续集成

6.pytest有很多非常强大的插件,并且这些插件能够实现很多实用的操作。


**pytest**

pytest-xdist(测试用例分布式执行。多CPU分发)

pytest-ordering(用于改变测试用例的执行顺序)

pytest-rerunfailures(用例失败后重跑)

pytest-html(生成html格式的自动化测试报告)

allure-pytest(用于生成美观的测试报告)

pytest-base-url(管理)

放到一个文件里面,通过pip install -r  文件名 安装

验证是否安装成功:pytest --version

四、使用pytest,默认的测试用例的规则以及基础应用

1.模块名必须以test_开头或者__test结尾

2.测试类必须以Test开头,并且不能有init方法

3.测试方法必须以test开头

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

1.主函数模式

1)运行所有用例:pytest.main()

2)指定模块名字运行:pytest.main([‘-s’,‘文件名.py’])

2.命令行模式

1) 运行所有 pytest

2)指定模块名字运行:pytest -vs 文件名.py

3)指定目录去执行:pytest.main([‘-s’,‘./目录名字’])

4) 指定目录去执行:pytest.main([‘-vs’,‘./testcase’,‘-n=2’])

参数详解:

-s:表示输出调试信息,包括print打印的信息

-v:显示更详细的信息

-vs:这两个参数可以一起使用

-n:支持多线程或者分布式运行测试用例。

如:pytest -vs ./目录名字/文件名字 -n 2

--retuns NUM:表示失败用例重跑

-x:表示只要有一个用例报错,那么测试停止。

--maxfail=2:表示出现两个用例失败就停止

-k:表示根据测试用例的部分字符串指定测试用例

如:pytest -vs ./目录名字 -k “ao” # “ao”表示包含字符串的才会执行。

--html ./report/xxx.html:生成html测试报告

3.通过读取pytest.ini配置文件运行

pytest.ini 这个文件pytest单元测试框架的核心文件。

1)位置一般放在项目的根目录

2)编码格式:必须是ANSI,可以使用notpad++修改编码格式

3)作用:改变pytest默认的行为

4)运行的规则:不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件。

5)pytest.ini 文件参数

[pytest]
		# 命令行参数,用空格分隔
		addopts = -vs --html=./reports.html -m"执行标记用例smoke"
		# 测试用例文件夹路径,可自己配置
		testpaths = ./testcase
		# 配置测试搜索的模块文件名称  模块名的规则
      python_files = test_*py
    # 配置测试搜索的测试类名
      python_classes = Test*
    # 配置测试搜索的测试函数名
      python_functions = test_*
    # 标记用例,在多个文件里面分组执行
      markers =
          smoke:冒烟用例
          usermanage:用户管理模块
          productmanage:商品管理模块
       @pytest.mark.soke

六、pytest执行测试用例的顺序是怎样的呢?

unittest:ascll的大小来绝对的执行的顺序

pytest:默认从上到下执行

改变默认的执行顺序:使用mark标记

@pytest.mark.run(order=2)

七、如何分组执行(冒烟,分模块执行,分接口和web执行)

smoke:冒烟用例,分布在各个模块里面

执行方法:1)pytest -vs -m “smoke”

可以加或者or:2)pytest -vs -m “smoke or usermanage”

八、pytest跳过测试用例

1)无条件跳过 定义装饰器

@pytest.mark.skip(reason=‘可以定义原因’) # 跳过,不执行

2)有条件跳过 定义装饰器

@pytest.mark.skipif(age>=18,reason=‘年龄大于18成年了’) # 有条件跳过,age==条件

固件装饰器:
@pytest.fixtrue(scope=“class”,autouse=True)
def exete_db_connection():
print(“执行数据库连接”)
yield “生成器返回值”
print(“关闭数据库连接”)

@pytest.fixtrue(scope,params,autouse,ids,name)
scope:fixtrue固件的作用域
	function
params数据驱动
autouse自动执行
	False
ids数据驱动时参数的别名
name:fixture固件的别名

conftest.py文件:
作用:专门用于管理fixtrue固件。方便所有的用例都可以自动调用
使用固件的时候,可以直接调用函数名字

九,扩展

1.生成allure报告以及报告的定制
2.pytest.mark.parameterize()
3.hooks