赞
踩
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[pytest];固定写法;变量名不能错addopts=-vv -s ;多个参数中间空格testpaths=…/HC/huace ;多个目录中间空格python_files=test*.py ;python文件前缀,可自定义python_classes=huace ;指定类名python_functions=test* ;指定方法名,可自定义
跳过测试函数
· 跳过测试函数: 根据特定的条件,不执行标识的测试函数
Pytest之fixture
· unittest和nose都支持fixture的,但是fixture在pytest里使用更灵活。也算是pytest的一个闪光点吧
· 可以理解为一个跟setup和teardown这种前后置类似的东西。但是比它们要强大、灵活很多
fixtur当做参数传入
运行结果
· 只有tes_01调用了login
· 遗留问题来了,如果我这里有10个方法或更多?是不是都需调用login方法?继续看下面的fixture参数
testcase.py::test_01 登录系统测试用例一PASSEDtestcase.py::test_02 测试用例2PASSEDtestcase.py::test03 测试用例3PASSED
fixture语法
参数说明
· scope:即作用域,function"
(默认),“class”,“module”,"session"四个
· params:可选参数列表,它将导致多个参数调用fixture函数和所有测试使用它。
· autouse:默认:False,需要用例手动调用该fixture;如果是True,所有作用域内的测试用例都会自动调用该fixture
· ids:params测试ID的一部分。如果没有将从params自动生成.
· name:默认:装饰器的名称,同一模块的fixture相互调用建议写个不同的name。
· session的作用域:是整个测试会话,即开始执行pytest到结束测试scope参数作用范围控制fixture的作用范围:session>module>class>function
autouse
· 参数置默认为False,则需要手动去调用装饰器
调用方式1
调用方式2
function
· function:作用域为函数
· 所有的方法都调用了login
运行结果
· 符合用例名设计的都会调用装饰器
· login不符合所以不会调用
testcase.py::test_01 登录系统测试用例一PASSEDtestcase.py::test_02 登录系统测试用例2PASSEDtestcase.py::test03 登录系统测试用例3PASSED
class
· class:作用域为类
· 所以TestCase1和TestCase2这两个类都会执行login
运行结果
· 类里面的方法只会调用一次
· pytest机制,因为方法是以test开头,所以也会调用
testcase.py::test_01 登录系统这个是类外面的用例PASSEDtestcase.py::TestCase1::test_02 登录系统测试用例2PASSEDtestcase.py::TestCase1::test03 测试用例3PASSEDtestcase.py::TestCase2::test_04 登录系统测试用例4PASSEDtestcase.py::TestCase2::test05 测试用例5PASSED
module
· module:在当前.py脚本里面所有用例开始前只执行一次
· 只要符合用例的设计要求,不管是类里和外边的都会调用
运行结果
· 当前文件里的用例都调用了装饰器
· 如果类名不是为Test开头你试试看是否还会调用装饰器?
testcase.py::test_s1 打开浏览器,并且打开百度首页用例1:搜索python-1PASSEDtestcase.py::TestCase::test_s2 打开浏览器,并且打开百度首页用例2:搜索python-2PASSEDtestcase.py::TestCase::test_s3 用例3:搜索python-3PASSED
session
· fixture为session级别是可以跨.py模块调用的
· 当我们有多个.py文件的用例时候,如果多个用例只需调用一次fixture,那就可以设置为scope=“session”,并写到conftest.py文件里
· conftest.py文件名称是固定的,pytest会自动识别该文件。放到工程的根目录下,就可以全局调用了
· 如果放到某个package包下,那就只在该package内有效
两个用例文件
运行结果
· 两个文件只有testcase文件的用例调了conftest里的方法
testcase.py::test1 调用conftest文件的里的方法test1里的用例PASSEDtestcase.py::test2 test2里的用例PASSEDtestcase1.py::test3 test3里的用例PASSEDtestcase1.py::test4 test4里的用例PASSED
pytest-allure生成测试报告
· 安装模块:pip install allure-pytest
# 第一步:生成xml数据pytest --alluredir=./report/xml testcase.py
# 第二步:生成html文件allure generate --clean ./report/xml -o ./result/html
将截图加入到报告里
· allure.attach(f, ‘图片名’, allure.attachment_type.JPG)
pytest中yield和return的区别和相同点
共同点
· return和yield都可以返回值
区别
· yield返回值后,后面的代码还会继续运行
· return返回值后,后面的代码不会继续运行
运行结果
· 证明yield后面的代码仍执行了
testcase.py::test01 打开浏览器# 返回值返回浏览器PASSED关闭浏览器
usefixtures与传fixture区别
· fixture有返回值,那么usefixture就无法获取到返回值,这个是装饰器usefixture与用例直接传fixture参数的区别。
· 当fixture需要用到return出来的参数时,只能讲参数名称直接当参数传入,不需要用到return出来的参数时,两种方式都可以
· @pytest.mark.usefixtures(“装饰器名”)
Pytest常用的插件
· pytest-selenium 集成 selenium
· pip install allure-pytest 生成漂亮的allure测试报告
· pip install pytest-sugar 优化运行效果
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
-ll1UQSZD-1715489330956)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。