一、pytest单元测试框架介绍
针对软件最小单位 函数、方法 进行正确性的检查测试(针对用例进行测试)
干什么用的?
测试发现:从多个文件找到测试用例
测试执行:按照一定顺序和规则去执行,生成结果
测试判断:通过断言判断预期结果和实际结果的差异
测试报告:冲击测试进度、耗时、通过率、生成测试报告
二、单元测试框架和自动化测试框架有什么关系?
(1)自动化测试框架
提高测试效率较低维护成本,是封装的框架,基本不动了,就像回归用例。而且不懂代码也可以用
(2)单元测试框架
只是自动化测试框架组成部分之一
pom设计模式:只是自动化测试框架组成部分之一
数据驱动
关键字驱动
全局配置文件的封装
日志监控
断言
报告邮件
更多…
三、pytest简介
1.成熟框架、灵活、容易上手
2.可以和selenium、requests、applum结合实现web自动化,接口自动化、app自动化
3.可以实现失败用例重试,比如UI定位不准确,某一个元素加载不完全
4、可以和allure生成美观测试报告
5、可以和jenkind持续集成
6、有强大插件,可以实现生成使用的操作
pytest
pytest-html生成htnl自动化测试报告)
pytest-xdist 测试用例分布执行,多cpu多发,同时多个进程跑用例
pytset-ordering 改变测试用例执行顺序,按照我们的顺序去执行
pytest-rerunfailures 用例失败后重新跑
allure-pytest 用于生成美观的测试报告
7、PC使用:pytest下载成功后,需要在setting中对对应项目进行配置,在运行该项目下测试用例的时候需要选择使用对应的python版本
四、使用pytest默认的测试用例的规则和基础应用
1.模块名必须以test_开头或者以_test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试方法以test开头
五、pytest运行方式
1.主函数
(1)运行所有用例:pytest.main()
test session starts测试开始 test_login.py .执行的 test_login.py文件,后面的.代表通过
如果我有多个用例,我需要每一个都要写一个main方法吗?
不用,单独写一个文件,把main方法移过去,其他用例里面就可以把main方法去除
all.py
test_produce.py
test_login.py
运行all.py结果:
(2)运行指定(test_login.py)模块用例
(3)运行指定函数
2.命令行模式
(1)pytest运行所有
(2)指定模块
(3)指定用例
指定函数
指定方法
3.读取pytest.ini配置文件运行(常用、方便)
pytest.ini:pytest单元测试框架的核心配置文件
想执行用例分支下面的某个功能某块,就可以根据方法命名规则来区分想要执行的模块,对比标记执行顺序方便,不用一个个去标记,下次执行不一样的也不用大量单个更改
(1)位置:项目根目录
(2)编码格式:ANSI,可以使用notepad++修改编码格式
(3)作用:改变pytest的默认行为
(4)运行的规则:主函数和命令行都会去读取这个文件
运行:
pytest -vs ./testcase
结果却是:
这是因为编码格式的问题
把文件copy出来,用notepad++打开——》中文删除-》编码-》转为ANSI编码格式,再次运行就OK
(5)指定分组执行(冒烟,分模块执行,分接口和web)
比如smoke:冒烟用例,分布在各个模块里面
那就在函数上方加一行
执行某个模块一部分用例和另一某块的一部分用例,那就可以用分组
然后再配置文件pytest.ini中加入
第三步在命令行中执行:
如果我想同时执行冒烟分组和其他分组怎么办?
- 第一步在配置文件当中将标记的分组写进去
- 第二步将想要分类到该分组的用例进行标记,标记语法为@pytest.mark.user
- 执行语句
pytest -vx -m "smoke or user"