尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

【day2】Pytest固件、Allure测试报告

【day2】Pytest固件、Allure测试报告 一、固件的概念前后置在用例执行之前、执行之后自动的执行的方法Unittest风格classTest:defsetup_method(self):# 每个用例执行之前自动执行print(用例开始执行,time.time())defteardown_method(self):# 每个用例执行之后自动执行print(用例执行结束,time.time())defsetup_class(self):# 每个测试类执行之前自动执行print(测试类开始执行,time.time())defteardown_class(self):# 每个测试类执行之后自动执行print(测试类结束执行,time.time())deftest_a(self):assert11deftest_b(self):assert11执行结果collecting...collected2items baili_test.py::Test::test_a 测试类开始执行1790680527.5992723用例开始执行1790680527.599369PASSED用例执行结束1790680527.5997894baili_test.py::Test::test_b 用例开始执行1790680527.600304PASSED用例执行结束1790680527.6005554测试类结束执行1790680527.60058332passedin0.02s二、pytest 风格固件pytest的固件风格不仅能够完美的代替unittest风格而且更加简洁、方便、灵活具有python语法特色。pytest的固件风格fixtures创建方式1.是一个函数2.使用装饰器 pytest.fixture3.使用生成器关键字yieldfixture源码deffixture(fixture_function:FixtureFunction|NoneNone,*,scope:ScopeName|Callable[[str,Config],ScopeName]function,params:Iterable[object]|NoneNone,autouse:boolFalse,ids:Sequence[object|None]|Callable[[Any],object|None]|NoneNone,name:str|NoneNone,)-FixtureFunctionMarker|FixtureFunctionDefinition:1.fixture_function被装饰的函数2.scope共享范围​ function函数级别​ class类​ module模块​ package包​ session全局importtimeimportpytestpytest.fixture(scopefunction)defbeifan():# 前置print(用例开始执行,time.time())yield# 后置print(用例结束执行,time.time())pytest.fixture(scopesession)defbeifan_class():# 前置print(测试类开始执行,time.time())yield# 后置print(测试类结束执行,time.time())classTest:deftest_a(self,beifan,beifan_class):assert11deftest_b(self,beifan,beifan_class):assert12执行结果collecting...collected2items test_beifan.py::Test::test_a 测试类开始执行1790682152.8805637用例开始执行1790682152.8806276PASSED用例结束执行1790682152.8809693test_beifan.py::Test::test_b 用例开始执行1790682152.8813846FAILED用例结束执行1790682152.9352837测试类结束执行1790682152.9353153.参数化params谨慎使用fixture参数化因为它让用例被动也进行了参数化importtimeimportpytestpytest.fixture(params[1,2,3])defbeifan():# 前置print(用例开始执行,time.time())yield# 后置print(用例结束执行,time.time())deftest_abc(beifan):print(123)执行结果collecting...collected3items test_abc.py::test_abc[1]用例开始执行1790682574.3593793123PASSED用例结束执行1790682574.3597527test_abc.py::test_abc[2]用例开始执行1790682574.3601997123PASSED用例结束执行1790682574.3604846test_abc.py::test_abc[3]用例开始执行1790682574.3609467123PASSED用例结束执行1790682574.36121564.自动使用​ autouseimporttimeimportpytestpytest.fixture(scopefunction,autouseTrue)defbeifan():# 前置操作print(用例开始执行,time.time())yield# 后置操作print(用例结束执行,time.time())classTest:deftest_a(self):assert11deftest_b(self):assert12执行结果collecting...collected2items test_beifan.py::Test::test_a 用例开始执行1790682994.473762PASSED用例结束执行1790682994.4741251test_beifan.py::Test::test_b 用例开始执行1790682994.4745553FAILED用例结束执行1790682994.52897745.name名称importpytestpytest.fixture(namedb)def_db_connection():print(start,time.time())deftest_x(db):# 用 name 指定的 db不是 _db_connectionassert12三、conftest 统一管理fixture1.conftest.py 文件名是固定的不能修改、不能写错2.conftest.py 中的fixtrue会自动的被pytest加载自动被任意一个用例使用3.conftest.py 可以在每个目录中创建用例按照就近原则来寻找fixture 当前文件、同目录conftest、上级目录conftest、上上级目录conftest…简单起见所有的fixtures 定义在 根目录的conftest.py四、插件的fixturepytest-base-url的插件提供了一个 base_url的fixture内容可以灵活设置用法相关简单和固定deftest_api(base_url):# 使用fixtureprint(base_url)#pytest.inibase_urlwww.qq.com五、Allure测试报告Allure 是一个测试报告框架可以生成精美、企业级、可扩展的HTML测试报告Allure 是一个java程序1.搭建allure的运行环境JDK 17allure下载https://github.com/allure-framework/allure2/releases解压D:\api_250设置环境变量PATH 增加 D:\api_250\bin建议重启验证allure2.生成allure测试报告1.执行用例pytest2.生成allure执行数据allure-pytest[pytest]# 命令行参数addopts-vs ‐‐alluredir./temps ‐‐clean‐alluredir3.生成allrue测试报告 allure#run.pyos.system(allure generate ./temps -o ./reports --clean)# 根据数据 生成报告3.allure的常用命令allure generate# 生成报告allure serve# 展示报告allureopen# 打开已存在的报告allure plugin# 展示插件4.定制本质对执行结果进行标注和分组方式装饰器添加不同的标注内容内容epic史诗项目名称feature特性模块名称story 故事接口名称title标题用例名称importallureallure.epic(项目)allure.feature(模块)allure.story(接口)allure.title(标题)deftest_api():pass
返回列表